arnaucube
arnaucube/go-dhtPublic Self-hosted repository
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}