Rig.TUnit.Databases.NoSql.KurrentDb
0.1.0-beta.2
dotnet add package Rig.TUnit.Databases.NoSql.KurrentDb --version 0.1.0-beta.2
NuGet\Install-Package Rig.TUnit.Databases.NoSql.KurrentDb -Version 0.1.0-beta.2
<PackageReference Include="Rig.TUnit.Databases.NoSql.KurrentDb" Version="0.1.0-beta.2" />
<PackageVersion Include="Rig.TUnit.Databases.NoSql.KurrentDb" Version="0.1.0-beta.2" />
<PackageReference Include="Rig.TUnit.Databases.NoSql.KurrentDb" />
paket add Rig.TUnit.Databases.NoSql.KurrentDb --version 0.1.0-beta.2
#r "nuget: Rig.TUnit.Databases.NoSql.KurrentDb, 0.1.0-beta.2"
#:package Rig.TUnit.Databases.NoSql.KurrentDb@0.1.0-beta.2
#addin nuget:?package=Rig.TUnit.Databases.NoSql.KurrentDb&version=0.1.0-beta.2&prerelease
#tool nuget:?package=Rig.TUnit.Databases.NoSql.KurrentDb&version=0.1.0-beta.2&prerelease
Rig.TUnit.Databases.NoSql.KurrentDb
Testcontainers-backed KurrentDB (post-rebrand EventStoreDB) fixture with
StreamAssertfor append-count verification.
What this package is
The Rig.TUnit KurrentDB provider (EventStoreDB rebranded — see
https://www.kurrent.io/blog/kurrent-re-brand-faq). KurrentDbFixture
spins KurrentDB via Testcontainers and returns a KurrentDB.Client
ready for append / read. Ships StreamAssert.EventsAppendedAsync — reads
a stream forwards from start and returns the total event count
(missing streams return 0), the most common event-sourcing assertion
shape.
When to use it
- Integration tests for event-sourced aggregates.
- Asserting event append ordering and stream revisions.
- Verifying projections against a real event log.
- Not for: unit tests of aggregate logic — mock
IEventSourcingRepositoryin those.
Prerequisites
- .NET 10 SDK
- Docker Desktop / Colima (KurrentDB image ~400 MB)
KurrentDB.Client1.3+ (rebranded fromEventStore.Client.Grpc.Streams).
Quick start
using Rig.TUnit.Databases.NoSql.KurrentDb.Fixtures;
using Rig.TUnit.Databases.NoSql.KurrentDb.Helpers;
using KurrentDB.Client;
await using var fx = new KurrentDbFixture();
await fx.InitializeAsync();
var stream = "order-42";
await fx.Client.AppendToStreamAsync(
stream, StreamState.NoStream,
new[] { new EventData(Uuid.NewUuid(), "placed", payload: "{}"u8.ToArray()) });
Options
| Property | Type | Default | Description |
|---|---|---|---|
Image |
string |
"docker.kurrent.io/kurrent-latest/kurrentdb:latest" |
Image |
StartupTimeoutSeconds |
int |
180 |
KurrentDB warm-up |
TlsSkipVerify |
bool |
true |
Dev-mode self-signed cert |
RunProjections |
bool |
true |
Enable category / by-event projections |
Fixture + helper APIs
Rig.TUnit.Databases.NoSql.KurrentDb.Fixtures.KurrentDbFixtureRig.TUnit.Databases.NoSql.KurrentDb.Options.KurrentDbFixtureOptionsRig.TUnit.Databases.NoSql.KurrentDb.Builder.KurrentDbRigBuilderRig.TUnit.Databases.NoSql.KurrentDb.Assertions.StreamAssert
Per-test isolation
Streams are named {IsolationKey}-{logical-stream-id} so tests cannot
collide. No explicit teardown — KurrentDB's persistent log is discarded
when the container dies.
Parallelism + performance
- First-run pull: ~30 s.
- Warm startup: ~15 s.
- Per-append: ~2–3 ms.
- Parallelism: 8+ concurrent tests — stream-level isolation is perfect for it.
Troubleshooting
StreamNotFound— the stream name includes{IsolationKey}; check your helper. Missing streams are valid andStreamAssert.EventsAppended Asyncreturns 0, not throws.DEADLINE_EXCEEDEDon append — KurrentDB under heavy parallel load may need raised gRPC deadline; configure viaKurrentDBClientSettings.
See docs/troubleshooting.md#kurrentdb.
Provider quirks + edge cases
- Stream names are case-sensitive —
Order-42andorder-42are distinct. StreamState.NoStreamis a different optimistic-concurrency token fromStreamState.Any; tests asserting on first-append must use the former.- Post-rebrand: package + client names changed in v1.x but wire protocol is backward-compatible with EventStoreDB 22+.
Benchmarks
See KurrentDbBenchmarks.cs;
baseline in benchmarks/baseline-005.json.
Related docs
License
MIT. See LICENSE.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Bogus (>= 35.6.1)
- Google.Protobuf (>= 3.32.1)
- Grpc.Net.Client (>= 2.67.0)
- KurrentDB.Client (>= 1.3.1)
- Microsoft.Extensions.Configuration (>= 10.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.0)
- Microsoft.Extensions.DependencyInjection (>= 10.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Logging (>= 10.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Options (>= 10.0.0)
- Microsoft.Extensions.Options.DataAnnotations (>= 10.0.0)
- OpenTelemetry.Api (>= 1.15.3)
- Rig.TUnit.Databases.NoSql (>= 0.1.0-beta.2)
- Testcontainers (>= 4.11.0)
- Testcontainers.KurrentDb (>= 4.11.0)
- TUnit.Core (>= 1.34.5)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Rig.TUnit.Databases.NoSql.KurrentDb:
| Package | Downloads |
|---|---|
|
Rig.TUnit.All
Meta-package containing every Rig.TUnit.* package. DISCOURAGED — prefer per-feature or per-stack meta-packages (Rig.TUnit, Rig.TUnit.Microservices). |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.0-beta.2 | 53 | 4/27/2026 |
| 0.0.0-alpha.0.14 | 49 | 4/26/2026 |