Skip to content

Instantly share code, notes, and snippets.

@romanman
Created March 9, 2015 13:22
Show Gist options
  • Save romanman/76a85acc417080cde4f3 to your computer and use it in GitHub Desktop.
Save romanman/76a85acc417080cde4f3 to your computer and use it in GitHub Desktop.
package test.ethereum.dht;
import org.ethereum.net.dht.Bucket;
import org.ethereum.net.dht.Peer;
import org.junit.Test;
import org.spongycastle.util.encoders.Hex;
import java.util.List;
import static org.ethereum.net.dht.DHTUtils.getAllLeafs;
import static org.ethereum.crypto.HashUtil.randomPeerId;
import static org.junit.Assert.assertTrue;
public class KademliaTableTest {
String[] testdata = new String[]{
"00000000011111101111011110001010101000100100000001000000010000100110110010101101000111000110110100010011001111110011011100110001100110011111100001001111101010101010110000110110100111011011011101000001111000000100010100010010001111010001111010010010100111000011101000001010011010010011000101100001100110001111101001000011111101101101000101010110110111100000101101101001111010000010101011001100111110111101100100100000101100000110010100101110111101100010001011110001000001010110111010111010111011000101111110100100",
"00010111010011010001111100111101001000110000111000100010001100000000110110101000011100110100101110110111011110111111010100011000000010000101101001011111011111001100101000111001011011011011111010110111000111001001101000101111100010101101000010100011011110000110010100101101110000100011111010010101000010100101111000001111011001001111100100001000111110000001111001101001111010001011111000000010000010110101000001000101101111111101101001101011111101001010110100100000001101001111111000011111000101100111010110000101",
"00101100010110110010111100010011000110010001011101011011000110011001011010110101100000101100001000010110010010101001001001111111100111111000111110010010000001110100010010110111011111101101111011010101111011101000010011001011000001101000001001100100011010111001100111001111011101011001110010101101101000110011001010011000111010001010010101101101110011000010111110110011101011111101100011110011100101100001001010111011000010001100000000110010001100110100111000010011011111011111110100110011001100011101010001000000",
"00111010100111111110100110110110010011101101101001001101010110001011111000011110110110010000110100010010110111110000010111010010011111110110010011101110011101011100101110101011100000010000011110011110011111011110111000010100100000001000111110110001000011000000010110100111110101100110000100001110000111100010001111001110001111111000101111110110101110110001100100000001101000101100011100011000100011111110010111000101101000000111010111001101000110111111000011101111001100000001100010111001011111111001110001101110",
"01000101000111000111011101101000100110000110110001000100011011111110100110110110011100100110101110000110110100110100010101100101101110001100010100110110000010101011010100010110111101101101110110000100110011011110110101010011110100000000100100001011111101101001011110000010011011001100101000010000011111011100011110011000011001110001100101100110100000100000011010111001001001100111100001000010110001100101101011110111000111101000001100011111001101010110010000110011001001110010001000010011101100101101010110010101",
"01001010101011111101111100100101101000110000011010110010110000110110000111110111010110110110000011100000011010110011100010000111011110000110000001001000010100010110000111101111111101000101110101001100100101111111000101100101101001001110010101100110010010111010000001011100011001111100110011000011001110010100000011001111000000101000100101110001111010010001110010110110011000000000101100010110001010100010100110101100101011010100010111001100000001100111110001100111001110011011001110111100111001010110101110101111",
"01100011010001001101001011110011101100011101010010001011101001010011001101001101011000010001101100111111110001011000010101101100000110111001010001100011011100111110010110010101010001010101001101000101010101001010000101100000100011101011110111001111100101001010011101110110110001011011001100101001101111111010010011010111101101011110100100011101101111010000111001010110001101110011100001100101011000010111100001101110101001010010000110000000100100111110011011010101100101000001001011101011100100111000001100011110",
"01101001101111001011010010001011000110110001001111101011010100110111110010001001010010110101001000110110101011100101101000101111011101101011110100111000010001001011001010010111001000011011111111111100010111011110101001100010100000001010111001101111000110111011110010111111010001011100110000010110101100100111010101110100001101010000111111000101100111011000010010100011000010111101111100111011000010110100000011001010111110100011010101110011110010011111111010111001000001011100111000001111000000001100011011100001",
"01110101000011100101100001000001011000110110100111101100010111101111001001010000010000111011100101101011011110001010110010100011111110100010001100001101111111100001110000000000010001010000111000101110110011010000100101000010100111101011011001000001010001110100010001011111110010110110001011011000110111111001000100000110111001100100011111100001001100010010101100011001001011001101010110010101001101111001000111100000011111011110101111011000011010010110111101110111101110001110101011111011111111110101010010101110",
"01111111111000000101010011000011100111100111011100100001110101010110101010101011011011100011101111110001110001101101010101110000000001000111010000101101011110110110001100000111001110111110001110001110101101111011100011010011100010001000011111111010001001000110110110010100110000101100111111111001110010011010101001011100101011011010101001100101101111001110110100111000100101011100011101000011011000000010011111011111000101110000101111011101101111000001001011111101100000001111101110000111000111101110100111000010",
"10000011110000010101100110011011000111011000001010100100110111010101001001011001110010000010010000110000110100101110010111100100011000111001101101101100000111001101011100100110100111001001001111011010011100101111100110000010011100011111000111111100010000000001101101001101010111010110110011101010111001110110111001111100110010110100001000100101110110111010110110101101000000110110001011101001000010001110111010101111100001100111011000000000110010111001101110111010011110011000011101010101111011101110001111100111",
"10000110100000100100001100111010010000001011011111100001010101111110001000010111011110000010111001000101111010010000111101111101010101110100011111100101100110100011111001101101010111100001000001101100111001011011000010100101011010010000100010100010110001100110101010110111000000011011001101001001100100101101011001000010100011111000001011001000111111111001011100011100001001001100010101100000001101001111110011011111010101001110000000101000111000000000101110010110100100110011010000110000010100011011000010101010",
"10001000000001100110101101100100011010111000110101111011001000100011000000001010000101111110011101110110111000010111001011010101101010011101010100111111001000010011101011101100011101111001001001000100011101000001111111110111100111100101010001100111010000100010101011100001100111000101001010001000011001100010010101001000001101100011111001011000111111111010100001110111100000100010011100110100111100011100110111101111110101001111000001100100000001111111001111100101101111110111100111010110100110100111110101110110",
"10001111011011000111110111001010000001001111110101010110101010101011010101011000101110111110100011001111010011011101111000001101011011010000101000000100111011000011111000101000010011100101111101111001010011001110100011111010011101101001000011100010011101001111111111011011001001110101000011110111001001110010110111010001010100101110011010011011001001100100110000101011011011000001100110001110101011000011010001111010101111011110011111001000001111001001110100100001111111001011011000111111110111000011111011001101",
"10010110110111101010010001100011011011010110001111101011011110100010111101000010101110101111100000011101001010001110101001001100100111010100101001100001011010011110011100001101101101010010111101011111000010001011000010100100111100000010011101001101100101001011100111100111011001010101011101100111110100010010111100001000000001111001111001111100110000001100111010110000000001000010001101000101111010101100100010100110101111111101001001111010110011001111101000010111011011010001110001010011010111001110101110101110",
"10011100000101100010000101110110110111101010101000110111100001101111101000011110011000011101100110001001110100010010000011001001001011101111100110010101101111001010111001100100010100000111110101110001000111000011110010000001000100111100111000001010100010000110110001010010101100100001011000100000100011001100001001101000010001000111101000101110001111110110111000000111100111110111010000101010001010011111110101010001010111101100100001010000110100010010000101110111101110111010111110001101010101011010000010000001",
"10101010100111101010100111010111101000010000111011110001100110111000111010100011001010010001001011100010100111101011110000000000101001111001000110000101101010000100010010010110100001010110001011100100010100010100001001011000111011010110101001101100000110100000000101110001111101011111100111100011100110011000001010111011001011111110111111111110110011100111010101100101110101101101110011111100001110001000100100110100011111100111001001101111101100100110010110011111011010000101101110011011100011000111110111111100",
"10110011100111010100011011110110100011000110110111110011111000101010111001111001001011011111010010100111111111101010100000010101101100000101000110010110010000110000100011111101000101001000110000010010011111111001000110010010010010101010000011101010111011111100101011100110100000110001101100001111111110100001111100110110000111100111001010111000010110011111111011110010000011111101011011010000100001110010011000011100111100100001101010001010111011001000010010110111011001010100001110000111011100011101101011100110",
"10110101100011100001011100001101011011110000100000011011010101001100010000010010001111001110001011100010010101110001011100001011011100110101100110011010001111010000010111110110000100111001111110100100001010000001111110011100110111011001000010101110011011011110100011100110011010000101001101001100010000101101011011110111011100011001110101001100000100110110010111101000000001000001010100101101000000100001110111101010111001101110010111101001010111110110011001010010011111000000111101010110110100001100111101000011",
"10111010001011011111111110100010110111110100111011000111111110001010001100011110010011010101011110100001100010110110100011001001101011001010000110001011100011000000111001110000100100110101110000111100011001101110101110101011010100110011111111011000000010010011000011101111000001010001001110000100100000100000000000011011101100010111101101011000011011110001001100010011000110101010110001110100001110110111010100100000011000001000001100111000110010100000101001000000111111001010101001011111001011001101111000111001",
"11000110101110100111010000111111001001011010100100000000001001110111001001111100101111000101111101101010111010000110100100010100100110110110010010101101110000010100001100111010101000111110001011000110110001000100001001100110110010111011000000110111000001111111110100000101000100000001111010001010011011011000010001010101010110100011001010110000001011111011101001101110001010011110101000100100111111010101000100111110000101101000001010011001011101101110110110110000001111101001011111001100011111000010000101011100",
"11001001010001100110000100101110001100111111101011101010110010111101110101010111110100001111001111101000111111100010000100100101100110000111110100110100101100010100110100010010010100010000101010100111001110100111101101100011010111100011011010100100001010101010010101110010111011001000100001101111000111110000110000110010100001110010011000111110101010001111111001100000001101100010111100001010010000100011011100011100000011111010001011001101111010001110000100110100001011011010011110110011110011110111111101100101",
"11010010001110011111010110000000011011011100111011101111000100011000101011100101111000101101011011101011000101101010110100000111011010000011001110111001101110110111010111001110010100101001000110011010011110110111001001011011110111110000110111010000110000110110011111000111101111110101111101010110010001101010011101101001100111000110111001111001100000001001110111000011100000010110001011011110010000110111010011001101111111000101010000110111000011010100011111001010010010100101010110000011100101010100111010000100",
"11011111110110110011000010011110001000110001100011101100111101000111001101010000100011101101001100100100010101011110001010010110010011011101011011110111100111001011101001000100110110101011101011000010111010101101110110011100010000100110101101101011000010110101001111100111010001000000111010100110101100011100010100011101000001011000111110001100101010001100100011110010111100001010001010001010110001100100010001100101010110100101011011000111001110110001101001101000100100001010110101010100100101101001001001011011",
"11100001001011000101101100011110001001111000111111010110000011010000101011000101101001100111000100101100100101101010100101110001100110111000011101000000000001101101011000110010100010111000110011000100100110101111001000110110001111100101110001001010011100001111001011011001110101101010110001001000010001001111110100000100001111010001110000000100100001101110001010111111010101001010010011110000111101101100111100000000001111001010100001110100111100000011101111001000101101001101110001101001001101110100001000111111",
"11100011100000011111101010010111111101000101001111001011100000110101110100010001101010111101111010100000101100111110111111101110001011100001101100011001010101011011100001101110110010000101101110010100011001110110110101111100111001000100010100001110011111010000011101111011101111101111101111001001101010011011111010010011001100101110000000101000101111001010001110001011111010000011000000011001000000010000111111011000101100111011100011011010101000011001011000101101000111001111011110000110011011001000010001011101",
"11100011101001001101010010110100110101100010010000110100111111100000010010110101011011001000011001001110100101011100101101011110101001101110110100000110011100101110000100110100110001100111111111001110010000101011110100011111000001011000001110000101110111100011100101101011110000110000111001100111110101001001011001101010011100001010100011101010110011010110100111011011000101001001000101100001100011111000110010100000001110001100011111000001101111110100111000100100011100110100001001000101000010011011111001101111",
"11101011001101011111111011101101000100001001010000011001010111000101010100101011110011111010110011111000000001110011011001111101001011101000010110110100001111101011110100011100000001111000011001011110010111100001001001011100101110010011010010110101110111101001001101011101010011010011101010111111100101011100100110010110011000110111101111111001111101010000101001000000000001111111110001110010011111110111100011010101101110011110011010011100100101100110001101001110000010111110001010000100010011000100111110010101",
"11110000100110101110111010001110100111111001110111111001001101001001111111101100001111100001101010101010100000001100010001100110010110100000110000101101010111010101010101111011100001101000111100011001000011010100001101111110111111100100000011001100110110111010010110001000111011110100000011010110101101111100111011011110111101100101111011100010001110110111110010110000011010000101100100111011011111100110010010100001011111000100100110110110010110011011011110101110110000001100111010010100000001001010001101000011",
"11110011100000100000010000011000111000000010100011100001010011001101000010100101111001110011010111110110001111011001110111010101010111111000000110100011001001011000101111010001001110011010001011110001011010101101010010111110001000100111110101110100000100100011100010111111111001100011100011010100001001100111101000110100011110010001110001100010100110111111110100110000101111111001100110101101100010110010010110001111011000101001010111010001111101001001111001101010101100011010011010100111010011011110001011100011"
};
@Test // split bucket assert all peer ids are in appropriate bucket tree
public void test1() {
Bucket root = new Bucket("110");
Peer peer1 = new Peer(randomPeerId());
peer1.getId()[0] |= 0b11_000000;
peer1.getId()[0] &= 0b11_011111;
Peer peer2 = new Peer(randomPeerId());
peer2.getId()[0] |= 0b11_000000;
peer2.getId()[0] &= 0b11_011111;
Peer peer3 = new Peer(randomPeerId());
peer3.getId()[0] |= 0b11_000000;
peer3.getId()[0] &= 0b11_011111;
Peer peer4 = new Peer(randomPeerId());
peer4.getId()[0] |= 0b11_000000;
peer4.getId()[0] &= 0b11_011111;
Peer peer5 = new Peer(randomPeerId());
peer5.getId()[0] |= 0b11_000000;
peer5.getId()[0] &= 0b11_011111;
Peer peer6 = new Peer(randomPeerId());
peer6.getId()[0] |= 0b11_000000;
peer6.getId()[0] &= 0b11_011111;
root.add(peer1);
root.add(peer2);
root.add(peer3);
root.add(peer4);
root.add(peer5);
root.add(peer6);
List<Bucket> leafs = getAllLeafs(root);
boolean correct = true;
for (Bucket leaf : leafs)
for (Peer peer : leaf.getPeers())
correct &= peer.toBinaryString().startsWith(leaf.getName());
assertTrue(correct);
for (Bucket leaf : leafs)
for (Peer peer : leaf.getPeers())
System.out.println(peer.toString());
}
@Test // assert that all the test data instances are on the leafs
public void test2() {
Bucket root = new Bucket("");
for (int i = 0; i < testdata.length; i++) {
Peer peer = new Peer(Hex.decode(testdata[i]));
root.add(peer);
}
List<Bucket> leafs = getAllLeafs(root);
int instances = 0;
for (Bucket leaf : leafs)
for (Peer peer : leaf.getPeers())
instances += 1;
// assert that you have all of them
assertTrue(instances == testdata.length);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment