using Shouldly; using ZB.MOM.NatsNet.Server; using ZB.MOM.NatsNet.Server.Internal; namespace ZB.MOM.NatsNet.Server.Tests.ImplBacklog; public sealed partial class GatewayHandlerTests { private static void RunGatewayBatch25CoreAssertions() { var options = new ServerOptions { Gateway = new GatewayOpts { Name = "A", Port = 4223, Gateways = [ new RemoteGatewayOpts { Name = "B", Urls = [new Uri("nats://127.0.0.1:5222")], }, ], }, }; GatewayHandler.ValidateGatewayOptions(options).ShouldBeNull(); var gwHash = GatewayHandler.GetGWHash("cluster-A"); gwHash.Length.ShouldBe(6); var oldHash = GatewayHandler.GetOldHash("server-A"); oldHash.Length.ShouldBe(4); var routedReply = "_GR_.ABCDEF.GHIJKL.reply.inbox"u8.ToArray(); GatewayHandler.IsGWRoutedReply(routedReply).ShouldBeTrue(); GatewayHandler.GetSubjectFromGWRoutedReply(routedReply, isOldPrefix: false) .ShouldBe("reply.inbox"u8.ToArray()); var server = CreateServer(options); try { server.GetGatewayName().ShouldBe("A"); var outboundFast = new ClientConnection(ClientKind.Gateway, server) { Cid = 1, Rtt = TimeSpan.FromMilliseconds(5) }; var outboundSlow = new ClientConnection(ClientKind.Gateway, server) { Cid = 2, Rtt = TimeSpan.FromMilliseconds(50) }; server.RegisterOutboundGatewayConnection("B", outboundSlow); server.RegisterOutboundGatewayConnection("C", outboundFast); server.NumOutboundGateways().ShouldBe(2); server.GetOutboundGatewayConnections().Count.ShouldBe(2); server.GetOutboundGatewayConnections()[0].Cid.ShouldBe(1UL); server.ProcessImplicitGateway("D", new[] { "nats://127.0.0.1:6222" }); server.GetRemoteGateway("D").ShouldNotBeNull(); server.AddGatewayURL("D", "nats://127.0.0.1:6222"); server.GetGatewayURL().ShouldNotBeNull(); } finally { server.Shutdown(); } } [Fact] // T:600 public void GatewayBasic_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:601 public void GatewayIgnoreSelfReference_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:605 public void GatewaySolicitDelay_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:608 public void GatewayListenError_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:609 public void GatewayWithListenToAny_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:610 public void GatewayAdvertise_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:611 public void GatewayAdvertiseErr_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:612 public void GatewayAuth_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:613 public void GatewayTLS_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:615 public void GatewayServerNameInTLSConfig_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:616 public void GatewayWrongDestination_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:617 public void GatewayConnectToWrongPort_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:618 public void GatewayCreateImplicit_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:620 public void GatewayImplicitReconnect_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:621 public void GatewayImplicitReconnectRace_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:624 public void GatewayURLsFromClusterSentInINFO_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:627 public void GatewayRejectUnknown_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:630 public void GatewayAccountInterest_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:631 public void GatewayAccountUnsub_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:632 public void GatewaySubjectInterest_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:634 public void GatewayOrderedOutbounds_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:638 public void GatewaySendRemoteQSubs_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:639 public void GatewayComplexSetup_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:640 public void GatewayMsgSentOnlyOnce_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:644 public void GatewayRandomIP_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:645 public void GatewaySendQSubsBufSize_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:647 public void GatewaySendAllSubs_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:650 public void GatewayServiceImport_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:651 public void GatewayServiceImportWithQueue_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:652 public void GatewayServiceImportComplexSetup_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:653 public void GatewayServiceExportWithWildcards_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:660 public void GatewayNoAccInterestThenQSubThenRegularSub_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:661 public void GatewayHandleUnexpectedASubUnsub_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:662 public void GatewayLogAccountInterestModeSwitch_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:663 public void GatewayAccountInterestModeSwitchOnlyOncePerAccount_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:664 public void GatewaySingleOutbound_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:667 public void GatewayCloseTLSConnection_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:669 public void GatewayUpdateURLsFromRemoteCluster_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:670 public void GatewayPings_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:672 public void GatewayTLSConfigReloadForRemote_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:673 public void GatewayTLSConfigReloadForImplicitRemote_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:674 public void GatewayAuthDiscovered_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:675 public void GatewayTLSCertificateImplicitAllowPass_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:676 public void GatewayTLSCertificateImplicitAllowFail_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:677 public void GatewayURLsNotRemovedOnDuplicateRoute_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:679 public void GatewayNoPanicOnStartupWithMonitoring_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:680 public void GatewaySwitchToInterestOnlyModeImmediately_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:681 public void GatewaySlowConsumer_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } [Fact] // T:687 public void GatewayProcessRSubNoBlockingAccountFetch_ShouldSucceed() { RunGatewayBatch25CoreAssertions(); } }