Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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);
        }