go-dht/kademlia_test.go
kademlia_test.goRaw
1package main
2
3import (
4 "fmt"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8)
9
10var debug = true
11
12func TestCountZeros(t *testing.T) {
13 zeroes := []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
14 assert.Equal(t, 0, kBucketByDistance(zeroes))
15
16 b := []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
17 assert.Equal(t, 20, len(b))
18 assert.Equal(t, 159, kBucketByDistance(b))
19 b[19] = 0x00
20 assert.Equal(t, 159, kBucketByDistance(b))
21
22 b[0] = 0x0f
23 assert.Equal(t, 159-4, kBucketByDistance(b))
24
25 b[0] = 0x0c
26 assert.Equal(t, 159-4, kBucketByDistance(b))
27
28 b[0] = 0x00
29 b[1] = 0x00
30 b[2] = 0x0f
31 assert.Equal(t, 159-20, kBucketByDistance(b))
32
33 b[2] = 0x07
34 assert.Equal(t, 159-21, kBucketByDistance(b))
35
36 b[2] = 0x03
37 assert.Equal(t, 159-22, kBucketByDistance(b))
38}
39
40func TestNodeKBucket(t *testing.T) {
41 node, err := LoadNode("0fd85ddddf15aeec2d5d8b01b013dbca030a18d7")
42 assert.Nil(t, err)
43
44 d := node.KBucket(node.ID)
45 assert.Equal(t, 0, d) // same node should have distance 0
46
47 idB, err := IDFromString("c48d8b53dbefb609ed4e94d386dd5b22efcb2c5b")
48 assert.Nil(t, err)
49
50 d = node.KBucket(idB)
51 assert.Equal(t, 159, d)
52}
53
54func TestUpdate(t *testing.T) {
55 nodeA, err := LoadNode("0fd85ddddf15aeec2d5d8b01b013dbca030a18d7")
56 assert.Nil(t, err)
57
58 lnIDs := []string{
59 "c48d8b53dbefb609ed4e94d386dd5b22efcb2c5b",
60 "420bfebd44fc62615253224328f40f29c9b225fa",
61 "6272bb67b1661abfa07d1d32cd9b810e531d42cd",
62 "07db608db033384895e48098a1bbe25266387463",
63 "c19c3285ab9ada4b420050ae1a204640b2bed508",
64 "f8971d5da24517c8cc5a316fb0658de8906c4155",
65 "04122a5f2dec42284147b1847ec1bc41ecd78626",
66 "407a90870d7b482a271446c85fda940ce78a4c7a",
67 "5ebe4539e7a33721a8623f7ebfab62600aa503e7",
68 "fc44a42879ef3a74d6bd8303bc3e4e205a92acf9",
69 "fc44a42879ef3a74d6bd8303bc3e4e205a92acf9",
70 "10c86f96ebaa1685a46a6417e6faa2ef34a68976",
71 "243c81515196a5b0e2d4675e73f0da3eead12793",
72 "0fd85ddddf15aeec2d5d8b01b013dbca030a18d7",
73 "0fd85ddddf15aeec2d5d8b01b013dbca030a18d5",
74 "0fd85ddddf15aeec2d5d8b01b013dbca030a18d0",
75 "0fd85ddddf15aeec2d5d8b01b013dbca030a1800",
76 "0750931c40a52a2facd220a02851f7d34f95e1fa",
77 "ebfba615ac50bcd0f5c2420741d032e885abf576",
78 }
79 for i := 0; i < len(lnIDs); i++ {
80 idI, err := IDFromString(lnIDs[i])
81 assert.Nil(t, err)
82 lnI := ListedNode{
83 ID: idI,
84 Addr: "",
85 }
86 nodeA.Update(lnI)
87 }
88
89 if debug {
90 fmt.Println(nodeA)
91 }
92
93 assert.Equal(t, len(nodeA.KBuckets[0]), 1)
94 assert.Equal(t, len(nodeA.KBuckets[1]), 1)
95 assert.Equal(t, len(nodeA.KBuckets[158]), 4)
96 assert.Equal(t, len(nodeA.KBuckets[159]), 5)
97}