diff --git a/seeder.go b/seeder.go index ec60392..5e723e0 100644 --- a/seeder.go +++ b/seeder.go @@ -274,7 +274,7 @@ func (s *dnsseeder) addNa(nNa *wire.NetAddress) bool { func getNonStdIP(rip net.IP, port uint16) net.IP { b := []byte{0x0, 0x0, 0x0, 0x0} - crcAddr := crc16(rip) + crcAddr := crc16(rip.To4()) b[0] = byte(crcAddr >> 8) b[1] = byte((crcAddr & 0xff)) b[2] = byte(port >> 8) diff --git a/seeder_test.go b/seeder_test.go new file mode 100644 index 0000000..65950c3 --- /dev/null +++ b/seeder_test.go @@ -0,0 +1,93 @@ +package main + +import ( + "github.com/btcsuite/btcd/wire" + "net" + "strconv" + "testing" +) + +func TestGetNonStdIP(t *testing.T) { + + var ip_tests = []struct { + rip string + port uint16 + encip string + }{ + {"1.2.3.4", 1234, "137.195.4.210"}, + {"50.123.45.67", 43210, "101.165.168.202"}, + {"202.36.170.3", 65535, "199.31.255.255"}, + {"123.213.132.231", 34, "12.91.0.34"}, + } + + for _, x := range ip_tests { + newip := getNonStdIP(net.ParseIP(x.rip), x.port) + if newip.String() != x.encip { + t.Errorf("real-ip: %s real-port: %v encoded-ip: %v expected-ip: %s", x.rip, x.port, newip, x.encip) + } + } +} + +func TestAddnNa(t *testing.T) { + // create test data struct + var td = []struct { + ip string + port int + dnsType uint32 + }{ + {"1.2.3.4", 28333, 1}, + {"50.123.45.67", 43210, 2}, + } + + s := &dnsseeder{ + port: 28333, + pver: 1234, + maxSize: 1, + } + s.theList = make(map[string]*node) + + for _, x := range td { + // Test NewNetAddress. + tcpAddr := &net.TCPAddr{ + IP: net.ParseIP(x.ip), + Port: x.port, + } + na, _ := wire.NewNetAddress(tcpAddr, 0) + ndName := net.JoinHostPort(na.IP.String(), strconv.Itoa(int(na.Port))) + + result := s.addNa(na) + if result != true { + t.Errorf("failed to create new node: %s", ndName) + } + if s.theList[ndName].dnsType != x.dnsType { + t.Errorf("node: %s dnsType:%v expected: %v", ndName, s.theList[ndName].dnsType, x.dnsType) + } + } + + tcpAddr := &net.TCPAddr{ + IP: net.ParseIP("127.0.0.1"), + Port: 1234, + } + na, _ := wire.NewNetAddress(tcpAddr, 0) + result := s.addNa(na) + + if result != false { + t.Errorf("node added but should have failed as seeder full: %s", net.JoinHostPort(na.IP.String(), strconv.Itoa(int(na.Port)))) + } + + tcpAddr = &net.TCPAddr{ + IP: net.ParseIP("1.2.3.4"), + Port: 28333, + } + na, _ = wire.NewNetAddress(tcpAddr, 0) + result = s.addNa(na) + + if result != false { + t.Errorf("node added but should have failed as duplicate: %s", net.JoinHostPort(na.IP.String(), strconv.Itoa(int(na.Port)))) + } + +} + +/* + + */