68 lines
1.0 KiB
Go
68 lines
1.0 KiB
Go
package dht
|
|
|
|
import (
|
|
"net"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func nid(c string) [20]byte {
|
|
var id [20]byte
|
|
copy(id[:], strings.Repeat(c, 20))
|
|
return id
|
|
}
|
|
|
|
func TestEncodeDecodeNodes(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
nodes []node
|
|
}{
|
|
{
|
|
name: "empty",
|
|
nodes: []node{},
|
|
},
|
|
{
|
|
name: "single",
|
|
nodes: []node{
|
|
{
|
|
ID: nid("a"),
|
|
Addr: &net.UDPAddr{
|
|
IP: net.IPv4(127, 0, 0, 1),
|
|
Port: 6881,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "multiple",
|
|
nodes: []node{
|
|
{
|
|
ID: nid("a"),
|
|
Addr: &net.UDPAddr{
|
|
IP: net.IPv4(127, 0, 0, 1),
|
|
Port: 6881,
|
|
},
|
|
},
|
|
{
|
|
ID: nid("a"),
|
|
Addr: &net.UDPAddr{
|
|
IP: net.IPv4(192, 168, 1, 1),
|
|
Port: 8080,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
data := encodeNodes(tt.nodes)
|
|
got := decodeNodes(data)
|
|
data2 := encodeNodes(got)
|
|
if data != data2 {
|
|
t.Errorf("roundtrip mismatch: got %x, want %x", data2, data)
|
|
}
|
|
})
|
|
}
|
|
}
|