private static int GetPartitionOwnerCount(Partitioner partitioner) { var owners = new HashSet <Guid>(); var count = partitioner.Count; for (var i = 0; i < count; i++) { var owner = partitioner.GetPartitionOwner(i); if (owner != default) { owners.Add(owner); } } return(owners.Count); }
public void PartitionerTest() { var partitioner = new Partitioner(); Assert.That(partitioner.Count, Is.EqualTo(0)); Assert.That(partitioner.GetPartitionOwner(1), Is.EqualTo(Guid.Empty)); Assert.That(partitioner.GetPartitionOwner(-1), Is.EqualTo(Guid.Empty)); Assert.That(partitioner.GetPartitionOwner(new PartitionHashClass(1).PartitionHash), Is.EqualTo(Guid.Empty)); Assert.That(partitioner.GetPartitionId(new PartitionHashClass(1).PartitionHash), Is.EqualTo(0)); Assert.That(partitioner.GetPartitionId(new PartitionHashClass(int.MinValue).PartitionHash), Is.EqualTo(0)); Assert.That(partitioner.GetRandomPartitionId(), Is.EqualTo(0)); partitioner.SetOrVerifyPartitionCount(4); Assert.That(partitioner.GetPartitionOwner(1), Is.EqualTo(Guid.Empty)); Assert.That(partitioner.GetPartitionOwner(-1), Is.EqualTo(Guid.Empty)); Assert.That(partitioner.GetPartitionOwner(new PartitionHashClass(1).PartitionHash), Is.EqualTo(Guid.Empty)); Assert.That(partitioner.GetPartitionId(new PartitionHashClass(1).PartitionHash), Is.EqualTo(1)); Assert.That(partitioner.GetPartitionId(new PartitionHashClass(5).PartitionHash), Is.EqualTo(1)); Assert.That(partitioner.GetPartitionId(new PartitionHashClass(int.MinValue).PartitionHash), Is.EqualTo(0)); var random = partitioner.GetRandomPartitionId(); Assert.That(random, Is.GreaterThanOrEqualTo(0)); Assert.That(random, Is.LessThan(4)); var originClientId = Guid.NewGuid(); var map = new Dictionary <int, Guid> { { 1, Guid.NewGuid() }, { 2, Guid.NewGuid() }, { 3, Guid.NewGuid() }, }; Assert.That(partitioner.NotifyPartitionView(originClientId, 0, map)); Assert.Throws <InvalidOperationException>(() => partitioner.SetOrVerifyPartitionCount(7)); Assert.That(partitioner.GetPartitionOwner(1), Is.EqualTo(map[1])); Assert.That(partitioner.GetPartitionOwner(-1), Is.EqualTo(Guid.Empty)); Assert.That(partitioner.GetPartitionOwner(new PartitionHashClass(1).PartitionHash), Is.EqualTo(map[1])); Assert.That(partitioner.GetPartitionId(new PartitionHashClass(1).PartitionHash), Is.EqualTo(1)); Assert.That(partitioner.GetPartitionId(new PartitionHashClass(4).PartitionHash), Is.EqualTo(1)); Assert.That(partitioner.GetPartitionId(new PartitionHashClass(int.MinValue).PartitionHash), Is.EqualTo(0)); random = partitioner.GetRandomPartitionId(); Assert.That(random, Is.GreaterThanOrEqualTo(0)); Assert.That(random, Is.LessThan(3)); Assert.That(partitioner.GetPartitionHashOwner(1), Is.EqualTo(map[1])); var newMap = new Dictionary <int, Guid> { { 1, Guid.NewGuid() }, { 2, Guid.NewGuid() }, { 3, Guid.NewGuid() }, }; Assert.That(partitioner.NotifyPartitionView(originClientId, 0, newMap), Is.False); Assert.That(partitioner.GetPartitionOwner(1), Is.EqualTo(map[1])); Assert.That(partitioner.NotifyPartitionView(originClientId, 1, newMap)); Assert.That(partitioner.GetPartitionOwner(1), Is.EqualTo(newMap[1])); newMap = new Dictionary <int, Guid> { { 1, Guid.NewGuid() }, { 2, Guid.NewGuid() }, { 3, Guid.NewGuid() }, }; var newOwnerId = Guid.NewGuid(); Assert.That(partitioner.NotifyPartitionView(newOwnerId, 1, newMap)); Assert.That(partitioner.GetPartitionOwner(1), Is.EqualTo(newMap[1])); Assert.That(partitioner.NotifyPartitionView(newOwnerId, 1, new Dictionary <int, Guid>()), Is.False); Assert.That(partitioner.GetPartitionOwner(1), Is.EqualTo(newMap[1])); }