public void KeyHashShouldSelectEachPartitionType() { var selector = new DefaultPartitionSelector(); var first = selector.Select(_topicA, "0"); var second = selector.Select(_topicA, "1"); Assert.That(first.PartitionId, Is.EqualTo(0)); Assert.That(second.PartitionId, Is.EqualTo(1)); }
public void RoundRobinShouldRollOver() { var selector = new DefaultPartitionSelector(); var first = selector.Select(_topicA, null); var second = selector.Select(_topicA, null); var third = selector.Select(_topicA, null); Assert.That(first.PartitionId, Is.EqualTo(0)); Assert.That(second.PartitionId, Is.EqualTo(1)); Assert.That(third.PartitionId, Is.EqualTo(0)); }
public void RoundRobinShouldHandleMultiThreadedRollOver() { var selector = new DefaultPartitionSelector(); var bag = new ConcurrentBag<Partition>(); Parallel.For(0, 100, x => bag.Add(selector.Select(_topicA, null))); Assert.That(bag.Count(x => x.PartitionId == 0), Is.EqualTo(50)); Assert.That(bag.Count(x => x.PartitionId == 1), Is.EqualTo(50)); }
public void KeyHashShouldThrowExceptionWhenChoosesAPartitionIdThatDoesNotExist() { var selector = new DefaultPartitionSelector(); var list = new List<Partition>(_topicA.Partitions); list[1].PartitionId = 999; var topic = new Topic { Name = "badPartition", Partitions = list }; selector.Select(topic, "1"); }
public void RoundRobinShouldTrackEachTopicSeparately() { var selector = new DefaultPartitionSelector(); var a1 = selector.Select(_topicA, null); var b1 = selector.Select(_topicB, null); var a2 = selector.Select(_topicA, null); var b2 = selector.Select(_topicB, null); Assert.That(a1.PartitionId, Is.EqualTo(0)); Assert.That(a2.PartitionId, Is.EqualTo(1)); Assert.That(b1.PartitionId, Is.EqualTo(0)); Assert.That(b2.PartitionId, Is.EqualTo(1)); }
public void SelectorShouldThrowExceptionWhenPartitionsAreEmpty() { var selector = new DefaultPartitionSelector(); var topic = new Topic { Name = "emptyPartition", Partitions = new List<Partition>() }; selector.Select(topic, CreateKeyForPartition(1)); }
public void RoundRobinShouldEvenlyDistributeAcrossManyPartitions() { const int TotalPartitions = 100; var selector = new DefaultPartitionSelector(); var partitions = new List<Partition>(); for (int i = 0; i < TotalPartitions; i++) { partitions.Add(new Partition { LeaderId = i, PartitionId = i }); } var topic = new Topic { Name = "a", Partitions = partitions }; var bag = new ConcurrentBag<Partition>(); Parallel.For(0, TotalPartitions * 3, x => bag.Add(selector.Select(topic, null))); var eachPartitionHasThree = bag.GroupBy(x => x.PartitionId).Count(); Assert.That(eachPartitionHasThree, Is.EqualTo(TotalPartitions), "Each partition should have received three selections."); }