public void UpdatePeersInfoModifiesPool() { var metadata = new Metadata(new Configuration()); var cc = new ControlConnection(GetCluster(), metadata); cc.Host = TestHelper.CreateHost("127.0.0.1"); metadata.AddHost(cc.Host.Address); var hostAddress2 = IPAddress.Parse("127.0.0.2"); var hostAddress3 = IPAddress.Parse("127.0.0.3"); var rows = TestHelper.CreateRows(new List <Dictionary <string, object> > { new Dictionary <string, object> { { "rpc_address", hostAddress2 }, { "peer", null }, { "data_center", "ut-dc2" }, { "rack", "ut-rack2" }, { "tokens", null } }, new Dictionary <string, object> { { "rpc_address", IPAddress.Parse("0.0.0.0") }, { "peer", hostAddress3 }, { "data_center", "ut-dc3" }, { "rack", "ut-rack3" }, { "tokens", null } } }); cc.UpdatePeersInfo(rows); Assert.AreEqual(3, metadata.AllHosts().Count); //using rpc_address var host2 = metadata.GetHost(new IPEndPoint(hostAddress2, ProtocolOptions.DefaultPort)); Assert.NotNull(host2); Assert.AreEqual("ut-dc2", host2.Datacenter); Assert.AreEqual("ut-rack2", host2.Rack); //with rpc_address = 0.0.0.0, use peer var host3 = metadata.GetHost(new IPEndPoint(hostAddress3, ProtocolOptions.DefaultPort)); Assert.NotNull(host3); Assert.AreEqual("ut-dc3", host3.Datacenter); Assert.AreEqual("ut-rack3", host3.Rack); }
public void ShouldNotAttemptDownOrIgnoredHosts() { var config = new TestConfigurationBuilder() { SocketOptions = new SocketOptions().SetConnectTimeoutMillis(100).SetReadTimeoutMillis(100), Policies = new Cassandra.Policies( new ClusterUnitTests.FakeHostDistanceLbp(new Dictionary <string, HostDistance> { { "127.0.0.1", HostDistance.Local }, { "127.0.0.2", HostDistance.Local }, { "127.0.0.3", HostDistance.Ignored }, { "127.0.0.4", HostDistance.Local } }), new ConstantReconnectionPolicy(1000), new DefaultRetryPolicy()) }.Build(); var cluster = Mock.Of <IInternalCluster>(); var metadata = new Metadata(config); using (var cc = NewInstance(cluster, config, metadata)) { cc.Host = TestHelper.CreateHost("127.0.0.1"); metadata.AddHost(cc.Host.Address); var hostAddress2 = IPAddress.Parse("127.0.0.2"); var hostAddress3 = IPAddress.Parse("127.0.0.3"); var hostAddress4 = IPAddress.Parse("127.0.0.4"); var rows = TestHelper.CreateRows(new List <Dictionary <string, object> > { new Dictionary <string, object> { { "rpc_address", hostAddress2 }, { "peer", null }, { "data_center", "ut-dc2" }, { "rack", "ut-rack2" }, { "tokens", null }, { "release_version", "2.1.5" } }, new Dictionary <string, object> { { "rpc_address", IPAddress.Parse("0.0.0.0") }, { "peer", hostAddress3 }, { "data_center", "ut-dc3" }, { "rack", "ut-rack3" }, { "tokens", null }, { "release_version", "2.1.5" } }, new Dictionary <string, object> { { "rpc_address", IPAddress.Parse("0.0.0.0") }, { "peer", hostAddress4 }, { "data_center", "ut-dc3" }, { "rack", "ut-rack2" }, { "tokens", null }, { "release_version", "2.1.5" } } }); cc.UpdatePeersInfo(rows, cc.Host); Assert.AreEqual(4, metadata.AllHosts().Count); var host2 = metadata.GetHost(new IPEndPoint(hostAddress2, ProtocolOptions.DefaultPort)); Assert.NotNull(host2); host2.SetDown(); var host3 = metadata.GetHost(new IPEndPoint(hostAddress3, ProtocolOptions.DefaultPort)); Assert.NotNull(host3); Mock.Get(cluster) .Setup(c => c.RetrieveAndSetDistance(It.IsAny <Host>())) .Returns <Host>(h => config.Policies.LoadBalancingPolicy.Distance(h)); Mock.Get(cluster).Setup(c => c.AllHosts()).Returns(() => metadata.AllHosts()); config.Policies.LoadBalancingPolicy.Initialize(cluster); var ex = Assert.ThrowsAsync <NoHostAvailableException>(() => cc.Reconnect()); CollectionAssert.AreEquivalent(new[] { "127.0.0.1", "127.0.0.4" }, ex.Errors.Keys.Select(e => e.Address.ToString())); } }
public void UpdatePeersInfoUsesAddressTranslator() { var invokedEndPoints = new List <IPEndPoint>(); var translatorMock = new Mock <IAddressTranslator>(MockBehavior.Strict); translatorMock .Setup(t => t.Translate(It.IsAny <IPEndPoint>())) .Callback <IPEndPoint>(invokedEndPoints.Add) .Returns <IPEndPoint>(e => e); const int portNumber = 9999; var metadata = new Metadata(new Configuration()); var config = new Configuration(Policies.DefaultPolicies, new ProtocolOptions(portNumber), null, new SocketOptions(), new ClientOptions(), NoneAuthProvider.Instance, null, new QueryOptions(), translatorMock.Object, Mock.Of <IStartupOptionsFactory>(), new SessionFactoryBuilder(), new Dictionary <string, IExecutionProfile>(), new RequestOptionsMapper(), null, null, null, null, null); var cc = NewInstance(config, metadata); cc.Host = TestHelper.CreateHost("127.0.0.1"); metadata.AddHost(cc.Host.Address); var hostAddress2 = IPAddress.Parse("127.0.0.2"); var hostAddress3 = IPAddress.Parse("127.0.0.3"); var rows = TestHelper.CreateRows(new List <Dictionary <string, object> > { new Dictionary <string, object> { { "rpc_address", hostAddress2 }, { "peer", null }, { "data_center", "ut-dc2" }, { "rack", "ut-rack2" }, { "tokens", null } }, new Dictionary <string, object> { { "rpc_address", IPAddress.Parse("0.0.0.0") }, { "peer", hostAddress3 }, { "data_center", "ut-dc3" }, { "rack", "ut-rack3" }, { "tokens", null } } }); cc.UpdatePeersInfo(rows, cc.Host); Assert.AreEqual(3, metadata.AllHosts().Count); Assert.AreEqual(2, invokedEndPoints.Count); Assert.AreEqual(hostAddress2, invokedEndPoints[0].Address); Assert.AreEqual(portNumber, invokedEndPoints[0].Port); Assert.AreEqual(hostAddress3, invokedEndPoints[1].Address); Assert.AreEqual(portNumber, invokedEndPoints[1].Port); }
public void UpdatePeersInfoWithNullRpcIgnores() { var metadata = new Metadata(new Configuration()); var cc = new ControlConnection(GetCluster(), metadata); cc.Host = TestHelper.CreateHost("127.0.0.1"); metadata.AddHost(cc.Host.Address); var rows = TestHelper.CreateRows(new List <Dictionary <string, object> > { new Dictionary <string, object> { { "rpc_address", null }, { "peer", null }, { "data_center", "ut-dc2" }, { "rack", "ut-rack" }, { "tokens", null } } }); cc.UpdatePeersInfo(rows); //Only local host present Assert.AreEqual(1, metadata.AllHosts().Count); }
public void UpdatePeersInfoWithNullRpcIgnores() { var config = new Configuration(); var metadata = new Metadata(config); var cc = NewInstance(Mock.Of <IInternalCluster>(), config, metadata); cc.Host = TestHelper.CreateHost("127.0.0.1"); metadata.AddHost(cc.Host.Address); var rows = TestHelper.CreateRows(new List <Dictionary <string, object> > { new Dictionary <string, object> { { "rpc_address", null }, { "peer", null }, { "data_center", "ut-dc2" }, { "rack", "ut-rack" }, { "tokens", null }, { "release_version", "2.2.1" } } }); cc.UpdatePeersInfo(rows, cc.Host); //Only local host present Assert.AreEqual(1, metadata.AllHosts().Count); }
public void UpdatePeersInfoUsesAddressTranslator() { var invokedEndPoints = new List <IPEndPoint>(); var translatorMock = new Mock <IAddressTranslator>(MockBehavior.Strict); translatorMock .Setup(t => t.Translate(It.IsAny <IPEndPoint>())) .Callback <IPEndPoint>(invokedEndPoints.Add) .Returns <IPEndPoint>(e => e); const int portNumber = 9999; var metadata = new Metadata(new Configuration()); var config = new TestConfigurationBuilder { ProtocolOptions = new ProtocolOptions(portNumber), AddressTranslator = translatorMock.Object, StartupOptionsFactory = Mock.Of <IStartupOptionsFactory>() }.Build(); var cc = NewInstance(Mock.Of <IInternalCluster>(), config, metadata); cc.Host = TestHelper.CreateHost("127.0.0.1"); metadata.AddHost(cc.Host.Address); var hostAddress2 = IPAddress.Parse("127.0.0.2"); var hostAddress3 = IPAddress.Parse("127.0.0.3"); var rows = TestHelper.CreateRows(new List <Dictionary <string, object> > { new Dictionary <string, object> { { "rpc_address", hostAddress2 }, { "peer", null }, { "data_center", "ut-dc2" }, { "rack", "ut-rack2" }, { "tokens", null } }, new Dictionary <string, object> { { "rpc_address", IPAddress.Parse("0.0.0.0") }, { "peer", hostAddress3 }, { "data_center", "ut-dc3" }, { "rack", "ut-rack3" }, { "tokens", null } } }); cc.UpdatePeersInfo(rows, cc.Host); Assert.AreEqual(3, metadata.AllHosts().Count); Assert.AreEqual(2, invokedEndPoints.Count); Assert.AreEqual(hostAddress2, invokedEndPoints[0].Address); Assert.AreEqual(portNumber, invokedEndPoints[0].Port); Assert.AreEqual(hostAddress3, invokedEndPoints[1].Address); Assert.AreEqual(portNumber, invokedEndPoints[1].Port); }