Defines two-layer test strategy (unit vs server-integration/deferred), 10-session structure, schema extension adding deferred status, and completion criteria for Phase 7.
5.8 KiB
Phase 7: Porting Verification — Design
Date: 2026-02-26
Scope: Verify all ported code through targeted testing; mark server-integration tests as deferred
Context
After Phase 6 (23 porting sessions + 93 stub completions), the DB state entering Phase 7:
| Item | Count |
|---|---|
| Features complete | 3,596 / 3,673 (77 n_a) |
| Unit tests complete | 319 |
| Unit tests stub | 224 |
| Unit tests not_started | 2,533 |
| Unit tests n_a | 181 |
| Unit tests total | 3,257 |
635 unit tests currently pass. 166 NotImplementedException stubs remain in the server — the .NET server is not yet runnable end-to-end.
Key Design Decision: Two Test Layers
Go test files (jetstream_test.go, monitor_test.go, etc.) all use RunBasicJetStreamServer() / RunServer() — they start a real NATS server over TCP, then connect via NATS client. These are server-integration tests regardless of whether they target a single node or a cluster.
| Layer | Tests | Treatment |
|---|---|---|
| Unit | Pure component logic (no server startup) | Port & verify in Phase 7 |
| Server-integration | Require running NatsServer + NATS client | Status deferred |
Schema Extension
Add deferred to the unit_tests.status CHECK constraint:
-- Migration: add 'deferred' to unit_tests status enum
-- Recreate table with updated constraint or use SQLite trigger workaround
deferred = test blocked on running server or cluster infrastructure. Distinct from n_a (not applicable to this port).
Test Classification
Unit Tests to Port (~631 new tests)
| Go source file | Not-started / Stub | Component |
|---|---|---|
opts_test.go |
77 stubs + remaining | Config parsing / binding |
jwt_test.go |
88 stubs | JWT decode / validate |
auth_test.go |
6 stubs | Auth handler logic |
auth_callout_test.go |
31 stubs | Auth callout types / helpers |
signal_test.go |
16 stubs | Signal handler registration |
log_test.go |
3 stubs | Logger behaviour |
config_check_test.go |
3 stubs | Config validation |
memstore_test.go |
41 not_started | Memory store logic |
store_test.go |
17 not_started | Store interface contract |
filestore_test.go |
249 not_started | File store read/write/purge |
jetstream_errors_test.go |
4 not_started | Error type checks |
jetstream_versioning_test.go |
18 not_started | Version compatibility |
jetstream_batching_test.go |
29 not_started | Batching logic |
dirstore_test.go |
12 not_started | JWT directory store |
accounts_test.go |
31 not_started | Account logic (unit subset) |
thw module |
6 not_started | Time hash wheel |
Server-Integration Tests → deferred (~1,799 tests)
| Go source file | Count | Deferred reason |
|---|---|---|
jetstream_test.go |
320 | Needs running server |
jetstream_consumer_test.go |
161 | Needs running server |
monitor_test.go |
103 | HTTP monitoring endpoints |
reload_test.go |
73 | Live config reload |
routes_test.go |
70 | Multi-server routing |
events_test.go |
52 | Server event bus |
server_test.go |
20 | Server lifecycle |
jetstream_cluster_* (×4) |
456 | Multi-node cluster |
mqtt_test.go + extras |
~162 | MQTT server |
websocket_test.go |
109 | WebSocket server |
raft_test.go |
104 | Raft consensus |
leafnode_test.go + proxy |
120 | Leaf node infrastructure |
gateway_test.go |
88 | Gateway infrastructure |
jetstream_super_cluster_test.go |
47 | Super-cluster |
norace_* tests |
~141 | Race-detector / timing |
| Benchmark tests | ~20 | Performance only |
| Other cluster/misc | ~53 | Cluster infrastructure |
Session Structure (10 sessions)
| Session | Scope | New tests | Source files |
|---|---|---|---|
| P7-01 | Schema migration + small module verification | 0 new (114 existing) | ats, avl, certidp, gsl, pse, stree, thw, tpm |
| P7-02 | Opts & config stubs + remaining opts tests | ~95 | opts_test.go |
| P7-03 | JWT stubs | 88 | jwt_test.go |
| P7-04 | Auth stubs + auth callout stubs | 37 | auth_test.go, auth_callout_test.go, config_check_test.go |
| P7-05 | Signal + log stubs | 19 | signal_test.go, log_test.go |
| P7-06 | Store unit tests — memory + interface | ~58 | memstore_test.go, store_test.go |
| P7-07 | File store unit tests (first half) | ~125 | filestore_test.go lines 1–~4,000 |
| P7-08 | File store unit tests (second half) | ~124 | filestore_test.go remainder |
| P7-09 | JetStream unit tests — errors, versioning, batching, dirstore, accounts | ~94 | jetstream_errors_test.go, jetstream_versioning_test.go, jetstream_batching_test.go, dirstore_test.go, accounts_test.go |
| P7-10 | Mark deferred, integration tests, DB final update, Phase 7 close | — | DB sweep + Gitea milestones 7 & 8 |
Total new tests written: ~640
Verification Flow (per session)
- Write / fill tests → build → run → confirm green
- Mark tests
completein DB (new tests) thenverified - Mark small modules
verifiedin DB (P7-01); server module at P7-10 ./reports/generate-report.sh→ commit
Integration Tests (P7-10)
Replace the placeholder UnitTest1.cs with NatsServerBehaviorTests.cs. Tests run against the Go NATS server (not the .NET server) to establish a behavioral baseline:
- Basic pub/sub
- Wildcard matching (
foo.*,foo.>) - Queue groups
- Connect/disconnect lifecycle
- Protocol error handling
Completion Definition
Phase 7 is complete when:
- All non-
n_a, non-deferredtests areverified dotnet run --project tools/NatsNet.PortTracker -- phase check 7 --db porting.dbpasses- Gitea issues #45–#52 closed
- Gitea milestones 7 and 8 closed
The ~1,799 deferred tests remain for a future phase once the .NET server is end-to-end runnable.