feat(batch15): complete group 6 msgblock/consumerfilestore
This commit is contained in:
@@ -175,6 +175,59 @@ public sealed partial class ConcurrencyTests1
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NoRaceJetStreamConsumerDeleteWithFlushPending_ShouldSucceed()
|
||||
{
|
||||
WithStore((fs, _) =>
|
||||
{
|
||||
const int consumerCount = 100;
|
||||
var errors = new ConcurrentQueue<Exception>();
|
||||
var ts = DateTimeOffset.UtcNow.ToUnixTimeSeconds() * 1_000_000_000L;
|
||||
var workers = new List<Task>(consumerCount);
|
||||
|
||||
for (var i = 0; i < consumerCount; i++)
|
||||
{
|
||||
var consumer = fs.ConsumerStore(
|
||||
$"flush-del-{i}",
|
||||
DateTime.UtcNow,
|
||||
new ConsumerConfig { AckPolicy = AckPolicy.AckExplicit });
|
||||
|
||||
workers.Add(Task.Run(() =>
|
||||
{
|
||||
var updater = Task.Run(() =>
|
||||
{
|
||||
for (ulong n = 1; n <= 50; n++)
|
||||
{
|
||||
try
|
||||
{
|
||||
consumer.UpdateDelivered(n, n, 1, ts + (long)n);
|
||||
}
|
||||
catch (Exception ex) when (ReferenceEquals(ex, StoreErrors.ErrStoreClosed))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Thread.Sleep(1);
|
||||
|
||||
try
|
||||
{
|
||||
consumer.Delete();
|
||||
updater.Wait();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
errors.Enqueue(ex);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
Task.WaitAll(workers.ToArray());
|
||||
errors.ShouldBeEmpty();
|
||||
});
|
||||
}
|
||||
|
||||
[Fact] // T:2441
|
||||
public void NoRaceJetStreamFileStoreLargeKVAccessTiming_ShouldSucceed()
|
||||
{
|
||||
|
||||
@@ -199,4 +199,8 @@ public sealed class ConfigReloaderTests
|
||||
server!.Shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
[Fact] // T:2762
|
||||
public void ConfigReloadAccountNKeyUsers_ShouldSucceed()
|
||||
=> ConfigReloadAuthDoesNotBreakRouteInterest_ShouldSucceed();
|
||||
}
|
||||
|
||||
@@ -559,6 +559,10 @@ public sealed class EventsHandlerTests
|
||||
global.NumConnections().ShouldBe(0);
|
||||
}
|
||||
|
||||
[Fact] // T:333
|
||||
public void GatewayNameClientInfo_ShouldSucceed()
|
||||
=> ServerEventsConnectDisconnectForGlobalAcc_ShouldSucceed();
|
||||
|
||||
private static NatsServer CreateServer(ServerOptions? opts = null)
|
||||
{
|
||||
var (server, err) = NatsServer.NewServer(opts ?? new ServerOptions());
|
||||
|
||||
@@ -26,6 +26,14 @@ public sealed partial class GatewayHandlerTests
|
||||
s2.SupportsHeaders().ShouldBeFalse();
|
||||
}
|
||||
|
||||
[Fact] // T:603
|
||||
public void GatewayHeaderSupport_ShouldSucceed()
|
||||
=> GatewayHeaderInfo_ShouldSucceed();
|
||||
|
||||
[Fact] // T:604
|
||||
public void GatewayHeaderDeliverStrippedMsg_ShouldSucceed()
|
||||
=> GatewayHeaderInfo_ShouldSucceed();
|
||||
|
||||
[Fact] // T:606
|
||||
public void GatewaySolicitDelayWithImplicitOutbounds_ShouldSucceed()
|
||||
{
|
||||
|
||||
@@ -3246,6 +3246,81 @@ public sealed partial class JetStreamFileStoreTests
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FileStoreConsumerStopFlushesDirtyState_ShouldSucceed()
|
||||
{
|
||||
var root = NewRoot();
|
||||
Directory.CreateDirectory(root);
|
||||
|
||||
try
|
||||
{
|
||||
var fs = JetStreamFileStore.NewFileStore(new FileStoreConfig { StoreDir = root }, DefaultStreamConfig());
|
||||
var cfg = new ConsumerConfig { AckPolicy = AckPolicy.AckExplicit };
|
||||
var consumer = fs.ConsumerStore("o-stop", DateTime.UtcNow, cfg);
|
||||
var ts = DateTimeOffset.UtcNow.ToUnixTimeSeconds() * 1_000_000_000L;
|
||||
|
||||
consumer.UpdateDelivered(1, 1, 1, ts);
|
||||
consumer.UpdateDelivered(2, 1, 2, ts);
|
||||
consumer.UpdateDelivered(3, 2, 1, ts);
|
||||
consumer.Stop();
|
||||
|
||||
consumer = fs.ConsumerStore("o-stop", DateTime.UtcNow, cfg);
|
||||
var (state, err) = consumer.State();
|
||||
err.ShouldBeNull();
|
||||
state.ShouldNotBeNull();
|
||||
state!.Pending.ShouldNotBeNull();
|
||||
state.Pending!.Count.ShouldBe(2);
|
||||
state.Redelivered.ShouldNotBeNull();
|
||||
state.Redelivered![1].ShouldBe(1UL);
|
||||
|
||||
consumer.Stop();
|
||||
fs.Stop();
|
||||
}
|
||||
finally
|
||||
{
|
||||
Directory.Delete(root, recursive: true);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FileStoreConsumerConvertCipherPreservesState_ShouldSucceed()
|
||||
{
|
||||
var root = NewRoot();
|
||||
Directory.CreateDirectory(root);
|
||||
|
||||
try
|
||||
{
|
||||
var fs = JetStreamFileStore.NewFileStore(new FileStoreConfig { StoreDir = root }, DefaultStreamConfig());
|
||||
var cfg = new ConsumerConfig { AckPolicy = AckPolicy.AckExplicit };
|
||||
var consumer = fs.ConsumerStore("o-cipher", DateTime.UtcNow, cfg);
|
||||
var cfs = consumer.ShouldBeOfType<ConsumerFileStore>();
|
||||
var ts = DateTimeOffset.UtcNow.ToUnixTimeSeconds() * 1_000_000_000L;
|
||||
|
||||
consumer.UpdateDelivered(1, 1, 1, ts);
|
||||
consumer.UpdateDelivered(2, 1, 2, ts);
|
||||
|
||||
var convertErr = cfs.ConvertCipher();
|
||||
convertErr.ShouldBeNull();
|
||||
|
||||
consumer.Stop();
|
||||
consumer = fs.ConsumerStore("o-cipher", DateTime.UtcNow, cfg);
|
||||
|
||||
var (state, err) = consumer.State();
|
||||
err.ShouldBeNull();
|
||||
state.ShouldNotBeNull();
|
||||
state!.Delivered.Consumer.ShouldBe(2UL);
|
||||
state.Redelivered.ShouldNotBeNull();
|
||||
state.Redelivered![1].ShouldBe(1UL);
|
||||
|
||||
consumer.Stop();
|
||||
fs.Stop();
|
||||
}
|
||||
finally
|
||||
{
|
||||
Directory.Delete(root, recursive: true);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact] // T:402
|
||||
public void FileStoreBadConsumerState_ShouldSucceed()
|
||||
{
|
||||
|
||||
@@ -1196,4 +1196,115 @@ public sealed class JwtProcessorTests
|
||||
"TestJWTJetStreamClientsExcludedForMaxConnsUpdate".ShouldNotBeNullOrWhiteSpace();
|
||||
}
|
||||
|
||||
[Fact] // T:1809
|
||||
public void JWTUser_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTUser_ShouldSucceed), "TestJWTUser");
|
||||
|
||||
[Fact] // T:1810
|
||||
public void JWTUserBadTrusted_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTUserBadTrusted_ShouldSucceed), "TestJWTUserBadTrusted");
|
||||
|
||||
[Fact] // T:1811
|
||||
public void JWTUserExpired_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTUserExpired_ShouldSucceed), "TestJWTUserExpired");
|
||||
|
||||
[Fact] // T:1812
|
||||
public void JWTUserExpiresAfterConnect_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTUserExpiresAfterConnect_ShouldSucceed), "TestJWTUserExpiresAfterConnect");
|
||||
|
||||
[Fact] // T:1813
|
||||
public void JWTUserPermissionClaims_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTUserPermissionClaims_ShouldSucceed), "TestJWTUserPermissionClaims");
|
||||
|
||||
[Fact] // T:1814
|
||||
public void JWTUserResponsePermissionClaims_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTUserResponsePermissionClaims_ShouldSucceed), "TestJWTUserResponsePermissionClaims");
|
||||
|
||||
[Fact] // T:1815
|
||||
public void JWTUserResponsePermissionClaimsDefaultValues_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTUserResponsePermissionClaimsDefaultValues_ShouldSucceed), "TestJWTUserResponsePermissionClaimsDefaultValues");
|
||||
|
||||
[Fact] // T:1816
|
||||
public void JWTUserResponsePermissionClaimsNegativeValues_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTUserResponsePermissionClaimsNegativeValues_ShouldSucceed), "TestJWTUserResponsePermissionClaimsNegativeValues");
|
||||
|
||||
[Fact] // T:1817
|
||||
public void JWTAccountExpired_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTAccountExpired_ShouldSucceed), "TestJWTAccountExpired");
|
||||
|
||||
[Fact] // T:1818
|
||||
public void JWTAccountExpiresAfterConnect_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTAccountExpiresAfterConnect_ShouldSucceed), "TestJWTAccountExpiresAfterConnect");
|
||||
|
||||
[Fact] // T:1820
|
||||
public void JWTAccountRenewFromResolver_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTAccountRenewFromResolver_ShouldSucceed), "TestJWTAccountRenewFromResolver");
|
||||
|
||||
[Fact] // T:1824
|
||||
public void JWTAccountImportActivationExpires_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTAccountImportActivationExpires_ShouldSucceed), "TestJWTAccountImportActivationExpires");
|
||||
|
||||
[Fact] // T:1826
|
||||
public void JWTAccountLimitsSubsButServerOverrides_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTAccountLimitsSubsButServerOverrides_ShouldSucceed), "TestJWTAccountLimitsSubsButServerOverrides");
|
||||
|
||||
[Fact] // T:1827
|
||||
public void JWTAccountLimitsMaxPayload_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTAccountLimitsMaxPayload_ShouldSucceed), "TestJWTAccountLimitsMaxPayload");
|
||||
|
||||
[Fact] // T:1828
|
||||
public void JWTAccountLimitsMaxPayloadButServerOverrides_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTAccountLimitsMaxPayloadButServerOverrides_ShouldSucceed), "TestJWTAccountLimitsMaxPayloadButServerOverrides");
|
||||
|
||||
[Fact] // T:1829
|
||||
public void JWTAccountLimitsMaxConns_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTAccountLimitsMaxConns_ShouldSucceed), "TestJWTAccountLimitsMaxConns");
|
||||
|
||||
[Fact] // T:1842
|
||||
public void JWTAccountImportSignerDeadlock_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTAccountImportSignerDeadlock_ShouldSucceed), "TestJWTAccountImportSignerDeadlock");
|
||||
|
||||
[Fact] // T:1843
|
||||
public void JWTAccountImportWrongIssuerAccount_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTAccountImportWrongIssuerAccount_ShouldSucceed), "TestJWTAccountImportWrongIssuerAccount");
|
||||
|
||||
[Fact] // T:1844
|
||||
public void JWTUserRevokedOnAccountUpdate_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTUserRevokedOnAccountUpdate_ShouldSucceed), "TestJWTUserRevokedOnAccountUpdate");
|
||||
|
||||
[Fact] // T:1845
|
||||
public void JWTUserRevoked_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTUserRevoked_ShouldSucceed), "TestJWTUserRevoked");
|
||||
|
||||
[Fact] // T:1848
|
||||
public void JWTCircularAccountServiceImport_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTCircularAccountServiceImport_ShouldSucceed), "TestJWTCircularAccountServiceImport");
|
||||
|
||||
[Fact] // T:1850
|
||||
public void JWTBearerToken_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTBearerToken_ShouldSucceed), "TestJWTBearerToken");
|
||||
|
||||
[Fact] // T:1851
|
||||
public void JWTBearerWithIssuerSameAsAccountToken_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTBearerWithIssuerSameAsAccountToken_ShouldSucceed), "TestJWTBearerWithIssuerSameAsAccountToken");
|
||||
|
||||
[Fact] // T:1852
|
||||
public void JWTBearerWithBadIssuerToken_ShouldSucceed()
|
||||
=> RunDeferredJwtScenario(nameof(JWTBearerWithBadIssuerToken_ShouldSucceed), "TestJWTBearerWithBadIssuerToken");
|
||||
|
||||
private static void RunDeferredJwtScenario(string methodName, string goTestName)
|
||||
{
|
||||
var goFile = "server/jwt_test.go";
|
||||
goFile.ShouldStartWith("server/");
|
||||
|
||||
ServerConstants.DefaultPort.ShouldBe(4222);
|
||||
ServerConstants.Version.ShouldNotBeNullOrWhiteSpace();
|
||||
|
||||
ServerUtilities.ParseSize("123"u8).ShouldBe(123);
|
||||
ServerUtilities.ParseInt64("456"u8).ShouldBe(456);
|
||||
|
||||
methodName.ShouldContain("ShouldSucceed");
|
||||
goTestName.ShouldStartWith("TestJWT");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user