public void AreReplicationFactorsSatisfied_Should_ReturnTrue_When_OnlyFullReplicas() { var ksReplicationFactor = new Dictionary <string, ReplicationFactor> { { "dc1", ReplicationFactor.Parse("1") }, { "dc2", ReplicationFactor.Parse("3/1") }, { "dc3", ReplicationFactor.Parse("1") } }; var replicasByDc = new Dictionary <string, int> { { "dc1", 1 }, { "dc2", 2 }, { "dc3", 1 } }; //no host in DC 3 var datacenters = new Dictionary <string, DatacenterInfo> { { "dc1", new DatacenterInfo { HostLength = 10 } }, { "dc2", new DatacenterInfo { HostLength = 10 } }, { "dc3", new DatacenterInfo { HostLength = 10 } } }; Assert.True(NetworkTopologyStrategy.AreReplicationFactorsSatisfied(ksReplicationFactor, replicasByDc, datacenters)); }
public void Should_Parse_When_TransientReplicationIsDisabled() { var target = ReplicationFactor.Parse("3"); Assert.AreEqual(3, target.AllReplicas); Assert.AreEqual(0, target.TransientReplicas); Assert.AreEqual(3, target.FullReplicas); Assert.IsFalse(target.HasTransientReplicas()); }
public void Should_Parse_When_TransientReplicationIsEnabled() { var target = ReplicationFactor.Parse("3/1"); Assert.AreEqual(3, target.AllReplicas); Assert.AreEqual(1, target.TransientReplicas); Assert.AreEqual(2, target.FullReplicas); Assert.IsTrue(target.HasTransientReplicas()); }
public void Should_ReturnTwoReplicasPerToken_When_TransientReplicationIsEnabled() { var target = new SimpleStrategy(ReplicationFactor.Parse("3/1")); var testData = ReplicationStrategyTestData.Create(); var result = target.ComputeTokenToReplicaMap( testData.Ring, testData.PrimaryReplicas, testData.NumberOfHostsWithTokens, testData.Datacenters); // 3 dcs, 3 hosts per rack, 3 racks per dc, 10 tokens per host Assert.AreEqual(10 * 3 * 3 * 3, result.Count); foreach (var token in result) { Assert.AreEqual(2, token.Value.Count); } }
public void Should_NotReturnEqualsTrue_When_StrategiesHaveDifferentDatacenters() { var target1 = new NetworkTopologyStrategy( new Dictionary <string, ReplicationFactor> { { "dc1", ReplicationFactor.Parse("2") }, { "dc2", ReplicationFactor.Parse("3/1") }, }); var target2 = new NetworkTopologyStrategy( new Dictionary <string, ReplicationFactor> { { "dc1", ReplicationFactor.Parse("2") }, }); Assert.AreNotEqual(target1.GetHashCode(), target2.GetHashCode()); Assert.IsFalse(target1.Equals(target2)); Assert.IsFalse(target2.Equals(target1)); Assert.AreNotEqual(target1, target2); }
public void Should_ReturnEqualsTrueAndSameHashCode_When_BothStrategiesHaveSameReplicationSettings() { var target1 = new NetworkTopologyStrategy( new Dictionary <string, ReplicationFactor> { { "dc1", ReplicationFactor.Parse("2") }, { "dc2", ReplicationFactor.Parse("3/1") }, { "dc3", ReplicationFactor.Parse("3/2") } }); var target2 = new NetworkTopologyStrategy( new Dictionary <string, ReplicationFactor> { { "dc3", ReplicationFactor.Parse("3/2") }, { "dc1", ReplicationFactor.Parse("2") }, { "dc2", ReplicationFactor.Parse("3/1") } }); Assert.AreEqual(target1.GetHashCode(), target2.GetHashCode()); Assert.IsTrue(target1.Equals(target2)); Assert.IsTrue(target2.Equals(target1)); Assert.AreEqual(target1, target2); }
public void Should_ReturnAppropriateReplicasPerDcPerToken() { var target = new NetworkTopologyStrategy( new Dictionary <string, ReplicationFactor> { { "dc1", ReplicationFactor.Parse("2") }, { "dc2", ReplicationFactor.Parse("3/1") }, { "dc3", ReplicationFactor.Parse("3/2") } }); var testData = ReplicationStrategyTestData.Create(); var result = target.ComputeTokenToReplicaMap( testData.Ring, testData.PrimaryReplicas, testData.NumberOfHostsWithTokens, testData.Datacenters); // 3 dcs, 3 hosts per rack, 3 racks per dc, 10 tokens per host Assert.AreEqual(10 * 3 * 3 * 3, result.Count); foreach (var token in result) { // 2 for dc1, 2 for dc2, 1 for dc3 Assert.AreEqual(2 + 2 + 1, token.Value.Count); } }
private Dictionary <string, ReplicationFactor> ParseReplicationFactors(IDictionary <string, string> replicationOptions) { return(replicationOptions.ToDictionary(kvp => kvp.Key, kvp => ReplicationFactor.Parse(kvp.Value))); }