public void BucketTest() { var bucket = new KBucket(4, new System.Random(), Logger.None); var peer1 = new BoundPeer( new PrivateKey().PublicKey, new DnsEndPoint("0.0.0.0", 1234), 0); var peer2 = new BoundPeer( new PrivateKey().PublicKey, new DnsEndPoint("0.0.0.0", 1234), 0); var peer3 = new BoundPeer( new PrivateKey().PublicKey, new DnsEndPoint("0.0.0.0", 1234), 0); var peer4 = new BoundPeer( new PrivateKey().PublicKey, new DnsEndPoint("0.0.0.0", 1234), 0); var peer5 = new BoundPeer( new PrivateKey().PublicKey, new DnsEndPoint("0.0.0.0", 1234), 0); Assert.Empty(bucket.Peers); Assert.True(bucket.IsEmpty()); Assert.Null(bucket.AddPeer(peer1)); Assert.True(bucket.Contains(peer1)); Assert.False(bucket.Contains(peer2)); Assert.False(bucket.IsEmpty()); Assert.False(bucket.IsFull()); Assert.Null(bucket.AddPeer(peer2)); Assert.Null(bucket.AddPeer(peer3)); Assert.Null(bucket.AddPeer(peer4)); Assert.True(bucket.IsFull()); Assert.Contains( bucket.GetRandomPeer(), new[] { peer1, peer2, peer3, peer4 }); Assert.Equal(peer1, bucket.AddPeer(peer5)); Assert.True(bucket.Contains(peer1)); Assert.False(bucket.Contains(peer5)); bucket.Clear(); Assert.True(bucket.IsEmpty()); }
public void BucketTest() { var bucket = new KBucket(4, new System.Random(), Logger.None); var peer1 = new BoundPeer( new PrivateKey().PublicKey, new DnsEndPoint("0.0.0.0", 1234), AppProtocolVer); var peer2 = new BoundPeer( new PrivateKey().PublicKey, new DnsEndPoint("0.0.0.0", 1234), AppProtocolVer); var peer3 = new BoundPeer( new PrivateKey().PublicKey, new DnsEndPoint("0.0.0.0", 1234), AppProtocolVer); var peer4 = new BoundPeer( new PrivateKey().PublicKey, new DnsEndPoint("0.0.0.0", 1234), AppProtocolVer); var peer5 = new BoundPeer( new PrivateKey().PublicKey, new DnsEndPoint("0.0.0.0", 1234), AppProtocolVer); Assert.Empty(bucket.Peers); Assert.True(bucket.IsEmpty()); bucket.AddPeer(peer1); Assert.True(bucket.Contains(peer1)); Assert.False(bucket.Contains(peer2)); Assert.False(bucket.IsEmpty()); Assert.False(bucket.IsFull()); // This sleep statement is used to distinguish updated time of followings. Thread.Sleep(100); bucket.AddPeer(peer2); Thread.Sleep(100); Assert.Contains( bucket.GetRandomPeer(null), new[] { peer1, peer2 } ); Assert.Contains( bucket.GetRandomPeer(peer1.Address), new[] { peer2 } ); bucket.AddPeer(peer3); Thread.Sleep(100); bucket.AddPeer(peer4); Assert.True(bucket.IsFull()); Assert.Equal( bucket.Peers.ToHashSet(), new HashSet <BoundPeer> { peer1, peer2, peer3, peer4 } ); Assert.Contains( bucket.GetRandomPeer(null), new[] { peer1, peer2, peer3, peer4 } ); Thread.Sleep(100); bucket.AddPeer(peer5); Assert.Equal( bucket.Peers.ToHashSet(), new HashSet <BoundPeer> { peer1, peer2, peer3, peer4 } ); Assert.False(bucket.Contains(peer5)); Assert.Equal(peer4, bucket.Head.Peer); Assert.Equal(peer1, bucket.Tail.Peer); Thread.Sleep(100); bucket.AddPeer(peer1); Assert.Equal(peer1, bucket.Head.Peer); Assert.Equal(peer2, bucket.Tail.Peer); Assert.False(bucket.RemovePeer(peer5)); Assert.True(bucket.RemovePeer(peer1)); Assert.DoesNotContain(peer1, bucket.Peers); Assert.Equal(3, bucket.Peers.Count()); bucket.Clear(); Assert.True(bucket.IsEmpty()); }