public void ShouldThrowOnFatalDiscovery() { var error = new FatalDiscoveryException("message"); var discovery = new Mock <IDiscovery>(); discovery.Setup(x => x.DiscoverAsync(It.IsAny <IConnection>(), "bar", null, Bookmark.Empty)) .ThrowsAsync(error); var poolManager = new Mock <IClusterConnectionPoolManager>(); poolManager.Setup(x => x.CreateClusterConnectionAsync(It.IsAny <Uri>())) .ReturnsAsync(Mock.Of <IConnection>()); var initialAddressProvider = new Mock <IInitialServerAddressProvider>(); initialAddressProvider.Setup(x => x.Get()).Returns(new HashSet <Uri> { server01, server04, server07 }); var manager = new RoutingTableManager(initialAddressProvider.Object, discovery.Object, poolManager.Object, Mock.Of <ILogger>(), TimeSpan.MaxValue); manager.Awaiting(m => m.EnsureRoutingTableForModeAsync(AccessMode.Write, "bar", null, Bookmark.Empty)) .Should().Throw <FatalDiscoveryException>().Which.Should().Be(error); }
public async Task ShouldIsolateEntriesFromFailures() { var defaultRoutingTable = new RoutingTable(null, new[] { server01 }, new[] { server02 }, new[] { server03 }, 60); var fooRoutingTable = new RoutingTable("foo", new[] { server04 }, new[] { server05 }, new[] { server06 }, 80); var discovery = new Mock <IDiscovery>(); discovery.Setup(x => x.DiscoverAsync(It.IsAny <IConnection>(), "", null, Bookmark.Empty)) .ReturnsAsync(defaultRoutingTable); discovery.Setup(x => x.DiscoverAsync(It.IsAny <IConnection>(), "foo", null, Bookmark.Empty)) .ReturnsAsync(fooRoutingTable); discovery.Setup(x => x.DiscoverAsync(It.IsAny <IConnection>(), "bar", null, Bookmark.Empty)) .ThrowsAsync(new FatalDiscoveryException("message")); var poolManager = new Mock <IClusterConnectionPoolManager>(); poolManager.Setup(x => x.CreateClusterConnectionAsync(It.IsAny <Uri>())) .ReturnsAsync(Mock.Of <IConnection>()); var initialAddressProvider = new Mock <IInitialServerAddressProvider>(); initialAddressProvider.Setup(x => x.Get()).Returns(new HashSet <Uri> { server01, server04, server07 }); var manager = new RoutingTableManager(initialAddressProvider.Object, discovery.Object, poolManager.Object, Mock.Of <ILogger>(), TimeSpan.MaxValue); // When var routingTable1 = await manager.EnsureRoutingTableForModeAsync(AccessMode.Write, null, null, Bookmark.Empty); var routingTable2 = await manager.EnsureRoutingTableForModeAsync(AccessMode.Write, "foo", null, Bookmark.Empty); routingTable1.Should().Be(defaultRoutingTable); routingTable2.Should().Be(fooRoutingTable); manager.Awaiting(m => m.EnsureRoutingTableForModeAsync(AccessMode.Write, "bar", null, Bookmark.Empty)) .Should().Throw <FatalDiscoveryException>(); manager.RoutingTableFor("").Should().Be(defaultRoutingTable); manager.RoutingTableFor("foo").Should().Be(fooRoutingTable); }