public void BucketSplitTest() { Contact dummyContact = new Contact(new VirtualProtocol(), ID.Zero); ((VirtualProtocol)dummyContact.Protocol).Node = new Node(dummyContact, new VirtualStorage()); BucketList bucketList = new BucketList(ID.RandomIDInKeySpace, dummyContact); Constants.K.ForEach(() => bucketList.AddContact(new Contact(null, ID.RandomIDInKeySpace))); bucketList.AddContact(new Contact(null, ID.RandomIDInKeySpace)); Assert.IsTrue(bucketList.Buckets.Count > 1, "Bucket should have split into two or more buckets."); }
public void DuplicateIDTest() { Contact dummyContact = new Contact(new VirtualProtocol(), ID.Zero); ((VirtualProtocol)dummyContact.Protocol).Node = new Node(dummyContact, new VirtualStorage()); BucketList bucketList = new BucketList(ID.RandomIDInKeySpace, dummyContact); ID id = ID.RandomIDInKeySpace; bucketList.AddContact(new Contact(null, id)); bucketList.AddContact(new Contact(null, id)); Assert.IsTrue(bucketList.Buckets.Count == 1, "No split should have taken place."); Assert.IsTrue(bucketList.Buckets[0].Contacts.Count == 1, "Bucket should have one contact."); }
public void RandomIDDistributionTest() { Contact dummyContact = new Contact(new VirtualProtocol(), ID.Zero); ((VirtualProtocol)dummyContact.Protocol).Node = new Node(dummyContact, new VirtualStorage()); Random rnd = new Random(); byte[] buffer = new byte[20]; List <int> contactsAdded = new List <int>(); 100.ForEach(() => { rnd.NextBytes(buffer); BucketList bucketList = new BucketList(new ID(buffer), dummyContact); 3200.ForEach(() => { rnd.NextBytes(buffer); Contact contact = new Contact(new VirtualProtocol(), new ID(buffer)); ((VirtualProtocol)contact.Protocol).Node = new Node(contact, new VirtualStorage()); bucketList.AddContact(contact); }); int contacts = bucketList.Buckets.Sum(b => b.Contacts.Count); contactsAdded.Add(contacts); }); Assert.IsTrue(contactsAdded.Average().ApproximatelyEquals(720, 20), "Unexpected distribution."); Assert.IsTrue(contactsAdded.Select(n => (double)n).StdDev().ApproximatelyEquals(10, 2), "Bad distribution"); }
public void DistributionTestForEachPrefix() { Contact dummyContact = new Contact(new VirtualProtocol(), ID.Zero); ((VirtualProtocol)dummyContact.Protocol).Node = new Node(dummyContact, new VirtualStorage()); Random rnd = new Random(); StringBuilder sb = new StringBuilder(); byte[] buffer = new byte[20]; 160.ForEach((i) => { BucketList bucketList = new BucketList(new ID(BigInteger.Pow(new BigInteger(2), i)), dummyContact); 3200.ForEach(() => { rnd.NextBytes(buffer); Contact contact = new Contact(new VirtualProtocol(), new ID(buffer)); ((VirtualProtocol)contact.Protocol).Node = new Node(contact, new VirtualStorage()); bucketList.AddContact(contact); }); int contacts = bucketList.Buckets.Sum(b => b.Contacts.Count); sb.Append(i + "," + contacts + CRLF); }); File.WriteAllText("prefixTest.txt", sb.ToString()); }
public void RandomPrefixDistributionTest() { Contact dummyContact = new Contact(new VirtualProtocol(), ID.Zero); ((VirtualProtocol)dummyContact.Protocol).Node = new Node(dummyContact, new VirtualStorage()); List <int> contactsAdded = new List <int>(); 100.ForEach(() => { ID ourID = ID.RandomIDInKeySpace; BucketList bucketList = new BucketList(ourID, dummyContact); 3200.ForEach(() => { ID id = ID.RandomIDInKeySpace; if (id != ourID) { Contact contact = new Contact(new VirtualProtocol(), id); ((VirtualProtocol)contact.Protocol).Node = new Node(contact, new VirtualStorage()); bucketList.AddContact(contact); } }); int contacts = bucketList.Buckets.Sum(b => b.Contacts.Count); contactsAdded.Add(contacts); }); double avg = contactsAdded.Average(); double stdev = contactsAdded.Select(n => (double)n).StdDev(); Assert.IsTrue(contactsAdded.Average().ApproximatelyEquals(1900, 200), "Unexpected distribution: avg = " + avg); Assert.IsTrue(stdev.ApproximatelyEquals(800, 100), "Bad distribution: stdev = " + stdev); }
public void UniqueIDAddTest() { Contact dummyContact = new Contact(new VirtualProtocol(), ID.Zero); ((VirtualProtocol)dummyContact.Protocol).Node = new Node(dummyContact, new VirtualStorage()); BucketList bucketList = new BucketList(ID.RandomIDInKeySpace, dummyContact); Constants.K.ForEach(() => bucketList.AddContact(new Contact(null, ID.RandomIDInKeySpace))); Assert.IsTrue(bucketList.Buckets.Count == 1, "No split should have taken place."); Assert.IsTrue(bucketList.Buckets[0].Contacts.Count == Constants.K, "K contacts should have been added."); }
public void DistributionTestForEachPrefixWithRandomPrefixDistributedContacts() { Contact dummyContact = new Contact(new VirtualProtocol(), ID.Zero); ((VirtualProtocol)dummyContact.Protocol).Node = new Node(dummyContact, new VirtualStorage()); StringBuilder sb = new StringBuilder(); 160.ForEach((i) => { BucketList bucketList = new BucketList(new ID(BigInteger.Pow(new BigInteger(2), i)), dummyContact); Contact contact = new Contact(new VirtualProtocol(), ID.RandomIDInKeySpace); ((VirtualProtocol)contact.Protocol).Node = new Node(contact, new VirtualStorage()); 3200.ForEach(() => bucketList.AddContact(contact)); int contacts = bucketList.Buckets.Sum(b => b.Contacts.Count); sb.Append(i + "," + contacts + CRLF); }); File.WriteAllText("prefixTest.txt", sb.ToString()); }