public async Task TestEndpointManagerWithDuplicateEndpointsAndConnectionStarted() { var sem = new TestServiceEndpointManager( new ServiceEndpoint(ConnectionString1, EndpointType.Primary, "1"), new ServiceEndpoint(ConnectionString1, EndpointType.Secondary, "2"), new ServiceEndpoint(ConnectionString2, EndpointType.Secondary, "11"), new ServiceEndpoint(ConnectionString2, EndpointType.Secondary, "12") ); var endpoints = sem.Endpoints; Assert.Equal(2, endpoints.Length); Assert.Equal("1", endpoints[0].Name); Assert.Equal("11", endpoints[1].Name); var router = new TestEndpointRouter(); var container = new MultiEndpointServiceConnectionContainer("hub", e => new TestBaseServiceConnectionContainer(new List <IServiceConnection> { new TestSimpleServiceConnection(), new TestSimpleServiceConnection(), }, e), sem, router, null); // All the connections started _ = container.StartAsync(); await container.ConnectionInitializedTask; endpoints = container.GetOnlineEndpoints().ToArray(); Assert.Equal(2, endpoints.Length); Assert.Equal("1", endpoints[0].Name); Assert.Equal("11", endpoints[1].Name); Assert.Equal(2, container.Connections.Count); }
public async Task TestEndpointManagerWithDuplicateEndpoints() { var sem = new TestServiceEndpointManager( new ServiceEndpoint(ConnectionString1, EndpointType.Primary, "1"), new ServiceEndpoint(ConnectionString1, EndpointType.Secondary, "2"), new ServiceEndpoint(ConnectionString2, EndpointType.Secondary, "11"), new ServiceEndpoint(ConnectionString2, EndpointType.Secondary, "12") ); var endpoints = sem.Endpoints; Assert.Equal(2, endpoints.Length); Assert.Equal("1", endpoints[0].Name); Assert.Equal("11", endpoints[1].Name); var router = new TestEndpointRouter(false); var container = new MultiEndpointServiceConnectionContainer("hub", e => new TestBaseServiceConnectionContainer(new List <IServiceConnection> { new TestServiceConnection(), new TestServiceConnection(), }, e), sem, router, NullLoggerFactory.Instance); _ = container.StartAsync(); await container.ConnectionInitializedTask.OrTimeout(); endpoints = container.GetOnlineEndpoints().ToArray(); Assert.Equal(2, endpoints.Length); }
public async Task TestContainerWithTwoEndpointWithPrimaryOfflineAndConnectionStartedSucceeds() { var sem = new TestServiceEndpointManager( new ServiceEndpoint(ConnectionString1), new ServiceEndpoint(ConnectionString2, EndpointType.Secondary, "online")); var router = new TestEndpointRouter(); var writeTcs = new TaskCompletionSource <object>(); var containers = new Dictionary <ServiceEndpoint, TestBaseServiceConnectionContainer>(); var container = new MultiEndpointServiceConnectionContainer("hub", e => { if (string.IsNullOrEmpty(e.Name)) { return(containers[e] = new TestBaseServiceConnectionContainer(new List <IServiceConnection> { new TestSimpleServiceConnection(ServiceConnectionStatus.Disconnected, writeAsyncTcs: writeTcs), new TestSimpleServiceConnection(ServiceConnectionStatus.Disconnected, writeAsyncTcs: writeTcs), new TestSimpleServiceConnection(ServiceConnectionStatus.Disconnected, writeAsyncTcs: writeTcs), new TestSimpleServiceConnection(ServiceConnectionStatus.Disconnected, writeAsyncTcs: writeTcs), new TestSimpleServiceConnection(ServiceConnectionStatus.Disconnected, writeAsyncTcs: writeTcs), new TestSimpleServiceConnection(ServiceConnectionStatus.Disconnected, writeAsyncTcs: writeTcs), new TestSimpleServiceConnection(ServiceConnectionStatus.Disconnected, writeAsyncTcs: writeTcs), }, e)); } return(containers[e] = new TestBaseServiceConnectionContainer(new List <IServiceConnection> { new TestSimpleServiceConnection(writeAsyncTcs: writeTcs), new TestSimpleServiceConnection(writeAsyncTcs: writeTcs), new TestSimpleServiceConnection(writeAsyncTcs: writeTcs), new TestSimpleServiceConnection(writeAsyncTcs: writeTcs), new TestSimpleServiceConnection(writeAsyncTcs: writeTcs), new TestSimpleServiceConnection(writeAsyncTcs: writeTcs), new TestSimpleServiceConnection(writeAsyncTcs: writeTcs), }, e)); }, sem, router, null); _ = container.StartAsync(); var task = container.WriteAckableMessageAsync(DefaultGroupMessage); await writeTcs.Task.OrTimeout(); containers.First(p => !string.IsNullOrEmpty(p.Key.Name)).Value.HandleAck(new AckMessage(1, (int)AckStatus.Ok)); await task.OrTimeout(); var endpoints = container.GetOnlineEndpoints().ToArray(); Assert.Single(endpoints); Assert.Equal("online", endpoints.First().Name); }
public async Task TestContainerWithTwoEndpointWithPrimaryOfflineAndConnectionStartedSucceeds() { var sem = new TestServiceEndpointManager( new ServiceEndpoint(ConnectionString1), new ServiceEndpoint(ConnectionString2, EndpointType.Secondary, "online")); var router = new TestEndpointRouter(false); var container = new MultiEndpointServiceConnectionContainer(e => { if (string.IsNullOrEmpty(e.Name)) { return(new TestBaseServiceConnectionContainer(new List <IServiceConnection> { new TestServiceConnection(ServiceConnectionStatus.Disconnected), new TestServiceConnection(ServiceConnectionStatus.Disconnected), new TestServiceConnection(ServiceConnectionStatus.Disconnected), new TestServiceConnection(ServiceConnectionStatus.Disconnected), new TestServiceConnection(ServiceConnectionStatus.Disconnected), new TestServiceConnection(ServiceConnectionStatus.Disconnected), new TestServiceConnection(ServiceConnectionStatus.Disconnected), }, e)); } return(new TestBaseServiceConnectionContainer(new List <IServiceConnection> { new TestServiceConnection(), new TestServiceConnection(), new TestServiceConnection(), new TestServiceConnection(), new TestServiceConnection(), new TestServiceConnection(), new TestServiceConnection(), }, e)); }, sem, router, null); _ = container.StartAsync(); await container.WriteAsync(DefaultGroupMessage); await container.WriteAsync("1", DefaultGroupMessage); var endpoints = container.GetOnlineEndpoints().ToArray(); Assert.Single(endpoints); Assert.Equal("online", endpoints.First().Name); }
public void TestEndpointManagerWithDuplicateEndpoints() { var sem = new TestServiceEndpointManager( new ServiceEndpoint(ConnectionString1, EndpointType.Primary, "1"), new ServiceEndpoint(ConnectionString1, EndpointType.Secondary, "2"), new ServiceEndpoint(ConnectionString2, EndpointType.Secondary, "11"), new ServiceEndpoint(ConnectionString2, EndpointType.Secondary, "12") ); var endpoints = sem.Endpoints; Assert.Equal(2, endpoints.Length); Assert.Equal("1", endpoints[0].Name); Assert.Equal("11", endpoints[1].Name); var router = new TestEndpointRouter(false); var container = new MultiEndpointServiceConnectionContainer( e => new TestBaseServiceConnectionContainer(new List <IServiceConnection> { new TestServiceConnection(), new TestServiceConnection(), }, e), sem, router, null); endpoints = container.GetOnlineEndpoints().ToArray(); Assert.Equal(2, endpoints.Length); }