BackWave.Conformance
1.7.0
dotnet add package BackWave.Conformance --version 1.7.0
NuGet\Install-Package BackWave.Conformance -Version 1.7.0
<PackageReference Include="BackWave.Conformance" Version="1.7.0" />
<PackageVersion Include="BackWave.Conformance" Version="1.7.0" />
<PackageReference Include="BackWave.Conformance" />
paket add BackWave.Conformance --version 1.7.0
#r "nuget: BackWave.Conformance, 1.7.0"
#:package BackWave.Conformance@1.7.0
#addin nuget:?package=BackWave.Conformance&version=1.7.0
#tool nuget:?package=BackWave.Conformance&version=1.7.0
BackWave.Conformance
The Storage Contract Conformance Suite for BackWave. If you are writing a storage adapter, this package certifies it against the exact behavior the engine relies on: claims, leases, retries, ordering, Transactional Enqueue, and the concurrency edges. A passing adapter is a correct one.
using BackWave.Conformance;
// Subclass the suite, hand it a factory for your store, and declare the optional capabilities your
// subclass provides. The inherited xUnit facts run the full contract against it.
public sealed class MyAdapterConformanceTests(ITestOutputHelper output) : ConformanceSuite(output)
{
protected override ConformanceCapabilities Capabilities
=> ConformanceCapabilities.NextDue | ConformanceCapabilities.LeaseRelinquish;
protected override ValueTask<IJobStore> CreateStoreAsync(JobHistoryPolicy historyPolicy)
=> new(new MyJobStore(/* fresh, empty test database */, historyPolicy));
}
Run dotnet test and the whole contract executes against your store. This is the same suite the
first-party Postgres, SQL Server, SQLite, and Oracle adapters are certified with.
Declaring capabilities
The contract has a mandatory spine and a set of optional capabilities: a real next-due hint, lease
hand-back, named observer refusals, atomic batch outcomes, and the test-only hooks that let the suite
inject a fault, force an interleaving, hold a row uncommitted, or write a job state out of band.
Capabilities is abstract, so every subclass states which of those it provides, and the clauses that
need one are gated on that declaration:
- Declared, and the hook or store feature is there: the clause runs in full.
- Declared, but the hook still returns its default: the clause fails, naming the hook. A lapsed override can never pass in silence.
- Not declared: the clause returns early and writes
skipped: <capability> not declaredto the test output when the subclass passes xunit'sITestOutputHelperthrough to the base constructor. - Not declared, but the hook produces a value anyway: the clause fails too, so the declaration stays exact in both directions.
Each ConformanceCapabilities flag documents the hook it pairs with and what implementing it proves.
Notes
- Brings xUnit with it, so reference it from a test project.
- The suites are abstract, so
dotnet testwill not try to run them until a concrete subclass supplies a store factory and a capability declaration.
Full documentation and the adapter-author guide: https://backwave.app
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. 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. |
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.7.0 | 77 | 9/21/2026 |
| 1.7.0-preview.3 | 60 | 9/16/2026 |
| 1.7.0-preview.2 | 67 | 8/26/2026 |
| 1.7.0-preview.1 | 66 | 8/19/2026 |
| 1.6.0 | 138 | 8/17/2026 |
| 1.5.0 | 114 | 8/16/2026 |
| 1.4.0 | 130 | 7/18/2026 |
| 1.3.0 | 129 | 7/15/2026 |
| 1.2.0 | 126 | 7/12/2026 |
| 1.1.1 | 115 | 7/10/2026 |
| 1.1.0 | 124 | 7/6/2026 |
| 1.0.0 | 118 | 7/6/2026 |
Release notes and upgrade guidance: https://backwave.app/