using NATS.Client.Core; namespace NATS.E2E.Tests.Infrastructure; public sealed class JetStreamServerFixture : IAsyncLifetime { private NatsServerProcess _server = null!; private string _storeDir = null!; public int Port => _server.Port; public async Task InitializeAsync() { _storeDir = Path.Combine(Path.GetTempPath(), "nats-e2e-js-" + Guid.NewGuid().ToString("N")[..8]); Directory.CreateDirectory(_storeDir); var config = $$""" jetstream { store_dir: "{{_storeDir}}" max_mem_store: 64mb max_file_store: 256mb } """; _server = NatsServerProcess.WithConfig(config); await _server.StartAsync(); } public async Task DisposeAsync() { await _server.DisposeAsync(); if (_storeDir is not null && Directory.Exists(_storeDir)) { try { Directory.Delete(_storeDir, recursive: true); } catch { /* best-effort cleanup */ } } } public NatsConnection CreateClient() => new(new NatsOpts { Url = $"nats://127.0.0.1:{Port}" }); } [CollectionDefinition("E2E-JetStream")] public class JetStreamCollection : ICollectionFixture;