Files
natsdotnet/gaps/misc-uncategorized.md
2026-02-25 15:12:52 -05:00

11 KiB

Misc / Uncategorized — Gap Analysis

This file tracks what has and hasn't been ported from Go to .NET for the Misc / Uncategorized module. See stillmissing.md for the full LOC comparison across all modules.

LLM Instructions: How to Analyze This Category

Step 1: Read the Go Reference Files

Read each Go source file listed below. For every file:

  1. Extract all exported types (structs, interfaces, type aliases)
  2. Extract all exported methods on those types (receiver functions)
  3. Extract all exported standalone functions
  4. Note key constants, enums, and protocol states
  5. Note important unexported helpers that implement core logic (functions >20 lines)
  6. Pay attention to concurrency patterns (goroutines, mutexes, channels) — these map to different .NET patterns

Step 2: Read the .NET Implementation Files

Read all .cs files in the .NET directories listed below. For each Go symbol found in Step 1:

  1. Search for a matching type, method, or function in .NET
  2. If found, compare the behavior: does it handle the same edge cases? Same error paths?
  3. If partially implemented, note what's missing
  4. If not found, note it as MISSING

Step 3: Cross-Reference Tests

Compare Go test functions against .NET test methods:

  1. For each Go Test* function, check if a corresponding .NET [Fact] or [Theory] exists
  2. Note which test scenarios are covered and which are missing
  3. Check the parity DB (docs/test_parity.db) for existing mappings:
    sqlite3 docs/test_parity.db "SELECT go_test, dotnet_test, confidence FROM test_mappings tm JOIN go_tests gt ON tm.go_test_id=gt.rowid JOIN dotnet_tests dt ON tm.dotnet_test_id=dt.rowid WHERE gt.go_file LIKE '%PATTERN%'"
    

Step 4: Classify Each Item

Use these status values:

Status Meaning
PORTED Equivalent exists in .NET with matching behavior
PARTIAL .NET implementation exists but is incomplete (missing edge cases, error handling, or features)
MISSING No .NET equivalent found — needs to be ported
NOT_APPLICABLE Go-specific pattern that doesn't apply to .NET (build tags, platform-specific goroutine tricks, etc.)
DEFERRED Intentionally skipped for now (document why)

Step 5: Fill In the Gap Inventory

Add rows to the Gap Inventory table below. Group by Go source file. Include the Go file and line number so a porting LLM can jump directly to the reference implementation.

Key Porting Notes for Misc / Uncategorized

  • This file captures items that don't cleanly fit elsewhere.
  • norace_*_test.go files (12,009 LOC) contain long-running stress/race tests spanning multiple subsystems — map to Stress/ tests in .NET.
  • benchmark_*.go files contain Go benchmarks — may map to [Fact] tests with timing assertions or BenchmarkDotNet.
  • The Go test/ integration directory (35 files, 29,812 LOC) contains end-to-end tests that may overlap with .NET test subdirectories.
  • As items are identified and categorized, move them to the appropriate category file.

Go Reference Files (Source)

  • Files not fitting into other categories
  • Small Go source files that don't belong to a major subsystem
  • Platform-specific stubs or build-tag-only files

Go Reference Files (Tests)

  • golang/nats-server/server/ping_test.go
  • golang/nats-server/server/closed_conns_test.go
  • golang/nats-server/server/norace_1_test.go
  • golang/nats-server/server/norace_2_test.go
  • golang/nats-server/server/benchmark_publish_test.go
  • golang/nats-server/server/core_benchmarks_test.go
  • Various integration tests in golang/nats-server/test/

.NET Implementation Files (Source)

  • Any .NET source files not covered by other category files

.NET Implementation Files (Tests)

  • tests/NATS.Server.Tests/Stress/
  • tests/NATS.Server.Tests/Parity/
  • Other root-level test files

Gap Inventory

Platform-Specific Source Files

Go Symbol Go File:Line Status .NET Equivalent Notes
diskAvailable golang/nats-server/server/disk_avail.go:1 NOT_APPLICABLE N/A Base function; platform implementations below override it
diskAvailable (openbsd) golang/nats-server/server/disk_avail_openbsd.go:23 PARTIAL NatsServer.cs (JetStream disk checking stub) .NET has minimal disk-space checking; full syscall.Statfs equivalent not implemented
diskAvailable (netbsd) golang/nats-server/server/disk_avail_netbsd.go:19 NOT_APPLICABLE N/A NetBSD stub returning default; .NET runs on Windows/.NET platforms only
diskAvailable (solaris) golang/nats-server/server/disk_avail_solaris.go:23 NOT_APPLICABLE N/A Solaris/illumos stub; not supported platform for .NET
diskAvailable (wasm) golang/nats-server/server/disk_avail_wasm.go:18 NOT_APPLICABLE N/A WASM stub; .NET does not compile to WASM for NATS server
diskAvailable (windows) golang/nats-server/server/disk_avail_windows.go:19 PARTIAL NatsServer.cs (JetStream disk checking stub) .NET has minimal implementation; full Windows disk space API not used
SetServiceName golang/nats-server/server/service_windows.go:34 MISSING N/A .NET host app does not implement Windows service mode
winServiceWrapper.Execute golang/nats-server/server/service_windows.go:64 MISSING N/A .NET uses standard .NET Worker Service abstraction instead
Run (service) golang/nats-server/server/service_windows.go:115 MISSING N/A .NET app startup does not support Windows service wrapper
isWindowsService golang/nats-server/server/service_windows.go:132 MISSING N/A .NET does not expose Windows service detection
handleSignals (wasm) golang/nats-server/server/signal_wasm.go:18 NOT_APPLICABLE N/A WASM stub; .NET does not target WASM
ProcessSignal (wasm) golang/nats-server/server/signal_wasm.go:22 NOT_APPLICABLE N/A WASM stub; .NET does not target WASM
handleSignals (windows) golang/nats-server/server/signal_windows.go:28 PARTIAL NatsServer.cs (event loop shutdown) .NET uses CancellationToken instead of signal channels
ProcessSignal (windows) golang/nats-server/server/signal_windows.go:53 MISSING N/A .NET does not support remote signal commands to Windows services
reopenLogCode, ldmCode golang/nats-server/server/service_windows.go:24-28 PARTIAL Host program configuration .NET logging uses Serilog; log rotation not exposed as service commands

Test Files — Miscellaneous

Go Symbol Go File:Line Status .NET Equivalent Notes
TestPing golang/nats-server/server/ping_test.go:34 PORTED tests/NATS.Server.Tests/ServerTests.cs:PingKeepaliveTests Raw socket PING/PONG protocol test ported
DefaultPingOptions golang/nats-server/server/ping_test.go:26 PORTED tests/NATS.Server.Tests/ServerTests.cs:PingKeepaliveTests Test options reflected in C# test setup
TestClosedConnsAccounting golang/nats-server/server/closed_conns_test.go:46 PARTIAL tests/NATS.Server.Tests/Monitoring/ClosedConnectionRingBufferTests.cs Ring buffer implementation exists; not all closed-conn tracking tests ported
TestClosedConnsSubsAccounting golang/nats-server/server/closed_conns_test.go:102 PARTIAL tests/NATS.Server.Tests/Monitoring/ClosedConnectionRingBufferTests.cs Subscription tracking in closed conns; basic tests exist
TestClosedAuthorizationTimeout golang/nats-server/server/closed_conns_test.go:143 MISSING N/A Auth timeout closure tracking not fully tested
TestClosedAuthorizationViolation golang/nats-server/server/closed_conns_test.go:164 PARTIAL tests/NATS.Server.Tests/Monitoring/MonitorGoParityTests.cs Auth violation tracking partially tested
TestClosedUPAuthorizationViolation golang/nats-server/server/closed_conns_test.go:187 PARTIAL tests/NATS.Server.Tests/Configuration/OptsGoParityTests.cs Username/password auth failure tracking not fully tested
TestClosedMaxPayload golang/nats-server/server/closed_conns_test.go:219 MISSING N/A Max payload violation closure tracking not tested
TestClosedTLSHandshake golang/nats-server/server/closed_conns_test.go:247 MISSING N/A TLS handshake failure closure tracking not tested
NoRace tests (norace_1_test.go) golang/nats-server/server/norace_1_test.go:1 PARTIAL tests/NATS.Server.Tests/Stress/ (2,342 LOC vs 8,497 Go LOC) Long-running race/concurrency tests; ~27% mapped to .NET Stress tests
NoRace tests (norace_2_test.go) golang/nats-server/server/norace_2_test.go:1 PARTIAL tests/NATS.Server.Tests/Stress/ Additional race/concurrency scenarios; ~27% coverage in .NET
BenchmarkPublish golang/nats-server/server/benchmark_publish_test.go:1 DEFERRED N/A Go benchmarks not directly portable; .NET uses different perf tooling (BenchmarkDotNet)
CoreBenchmarks golang/nats-server/server/core_benchmarks_test.go:1 DEFERRED N/A Core server benchmarks; .NET performance profiling uses different approach

Integration Tests (test/ directory)

Go Symbol Go File:Line Status .NET Equivalent Notes
test/ping_test.go golang/nats-server/test/ping_test.go:1 PARTIAL tests/NATS.Server.Tests/ServerTests.cs Integration-level ping tests; basic coverage exists in .NET
test/norace_test.go golang/nats-server/test/norace_test.go:1 PARTIAL tests/NATS.Server.Tests/Stress/ Race-condition integration tests; some mapped to Stress tests
Other test/*.go (35 files total) golang/nats-server/test/:1 PARTIAL tests/NATS.Server.Tests/ (spread across multiple categories) Integration tests distributed across functional categories; not all scenarios covered

Keeping This File Updated

After porting work is completed:

  1. Update status: Change MISSING → PORTED or PARTIAL → PORTED for each item completed
  2. Add .NET path: Fill in the ".NET Equivalent" column with the actual file:line
  3. Re-count LOC: Update the LOC numbers in stillmissing.md:
    # Re-count .NET source LOC for this module
    # Various files — re-count as needed
    # Re-count .NET test LOC for this module
    find tests/NATS.Server.Tests/Stress/ tests/NATS.Server.Tests/Parity/ -name '*.cs' -type f -exec cat {} + | wc -l
    
  4. Add a changelog entry below with date and summary of what was ported
  5. Update the parity DB if new test mappings were created:
    sqlite3 docs/test_parity.db "INSERT INTO test_mappings (go_test_id, dotnet_test_id, confidence, notes) VALUES (?, ?, 'manual', 'ported in YYYY-MM-DD session')"
    

Change Log

Date Change By
2026-02-25 Initial gap inventory analysis: 8 platform-specific source files, 14 test symbols, 35 integration tests claude
2026-02-25 File created with LLM analysis instructions auto