public void ReplaceNode(Node nodeToRemove, Node nodeToAdd) { CheckInitialization(); int distanceFromMaster = _nodeDistanceCalculator.CalculateDistance(MasterNode !.IdHash.Bytes, nodeToAdd.IdHash.Bytes); NodeBucket bucket = Buckets[distanceFromMaster > 0 ? distanceFromMaster - 1 : 0]; bucket.ReplaceNode(nodeToRemove, nodeToAdd); }
public void Throws_when_replacing_non_existing(int nodesInTheBucket) { NodeBucket nodeBucket = new NodeBucket(1, 16); AddNodes(nodeBucket, nodesInTheBucket); Node node = new Node( TestItem.PublicKeyA, IPAddress.Broadcast.ToString(), 30001); Node nonExisting = new Node( TestItem.PublicKeyA, IPAddress.Broadcast.ToString(), 30002); Assert.Throws <InvalidOperationException>(() => nodeBucket.ReplaceNode(nonExisting, node)); }
public void Can_replace_existing_when_full() { NodeBucket nodeBucket = new NodeBucket(1, 16); AddNodes(nodeBucket, 32); Node node = new Node( TestItem.PublicKeyA, IPAddress.Broadcast.ToString(), 30001); Node existing = nodeBucket.BondedItems.First().Node; nodeBucket.ReplaceNode(existing, node); nodeBucket.BondedItemsCount.Should().Be(16); nodeBucket.BondedItems.Should().HaveCount(16); nodeBucket.BondedItems.Should().Contain(bi => bi.Node == node); nodeBucket.BondedItems.Should().NotContain(bi => bi.Node == existing); }