test(batch50): port 118 JetStream cluster 1 integration tests

Ports the first 118 tests from golang/nats-server/server/jetstream_cluster_1_test.go
to C# integration tests in JetStream/JetStreamCluster1Tests.cs. Adds the
Helpers/ scaffold (IntegrationTestBase, TestCluster, NatsTestClient, CheckHelper,
ConfigHelper) and Xunit.SkippableFact package; tests skip automatically unless
NATS_INTEGRATION_TESTS=true is set.
This commit is contained in:
Joseph Doherty
2026-03-01 12:14:55 -05:00
parent 41ea272c8a
commit 8db4fccc95
7 changed files with 1877 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
// Copyright 2020-2025 The NATS Authors
// Licensed under the Apache License, Version 2.0
namespace ZB.MOM.NatsNet.Server.IntegrationTests.Helpers;
/// <summary>
/// Provides polling-based check utilities for integration tests,
/// mirroring the Go <c>checkFor</c> pattern.
/// </summary>
public static class CheckHelper
{
/// <summary>
/// Polls <paramref name="check"/> every <paramref name="interval"/> until it returns
/// <c>null</c> (success) or <paramref name="timeout"/> elapses. Throws on timeout.
/// </summary>
public static void CheckFor(TimeSpan timeout, TimeSpan interval, Func<string?> check)
{
var deadline = DateTime.UtcNow + timeout;
string? lastError = null;
while (DateTime.UtcNow < deadline)
{
lastError = check();
if (lastError is null)
return;
Thread.Sleep(interval);
}
throw new TimeoutException($"CheckFor timed out after {timeout}: {lastError}");
}
/// <summary>
/// Async variant of <see cref="CheckFor"/>.
/// </summary>
public static async Task CheckForAsync(TimeSpan timeout, TimeSpan interval, Func<Task<string?>> check)
{
var deadline = DateTime.UtcNow + timeout;
string? lastError = null;
while (DateTime.UtcNow < deadline)
{
lastError = await check();
if (lastError is null)
return;
await Task.Delay(interval);
}
throw new TimeoutException($"CheckFor timed out after {timeout}: {lastError}");
}
}