mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-05-28 17:56:50 +00:00

* [NOD-1313] Refactor AddressManager (#918) * [NOD-1313] Refactor AddressManager. * [NOD-1313]Remove old tests.Minor improvements,fixes. * [NOD-1313] After merge fixes. Fix import cycle. * [NOD-1313] Integration tests fixes. * [NOD-1313] Allocate new slice for the returned key. * [NOD-1313] AddressManager improvements and fixes. * Move local and banned addresses to separate lists. * Move AddressManager config to the separate file. * Add LocalAddressManager. * Remove redundant KnownAddress structure. * Restore local addresses functionality. * Call initListeners from the LocalAddressManager. * AddressManager minor improvements and fixes. * [NOD-1313] Minor fixes. * [NOD-1313] Implement HandleGetPeerAddresses. Refactoring. * [NOD-1313] After-merge fixes. * [NOD-1313] Minor improvements. * AddressManager: added BannedAddresses() method. * AddressManager: HandleGetPeerAddresses() add banned addresses separately. * AddressManager: remove addressEntry redundant struct. * ConnectionManager: checkOutgoingConnections() minor improvements and fixes. * Minor refactoring. * Minor fixes. * [NOD-1313] GetPeerAddresses RPC message update * GetPeerAddresses RPC: add BannedAddresses in the separate field. * Update protobuf. * [NOD-1534] Update messages.pb.go Co-authored-by: Kirill <gammerxpower@gmail.com>
110 lines
3.2 KiB
Go
110 lines
3.2 KiB
Go
// Copyright (c) 2013-2014 The btcsuite developers
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package addressmanager
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
|
|
"github.com/kaspanet/kaspad/app/appmessage"
|
|
|
|
"github.com/kaspanet/kaspad/infrastructure/config"
|
|
)
|
|
|
|
func newAddrManagerForTest(t *testing.T, testName string) (addressManager *AddressManager, teardown func()) {
|
|
cfg := config.DefaultConfig()
|
|
|
|
addressManager, err := New(NewConfig(cfg))
|
|
if err != nil {
|
|
t.Fatalf("error creating address manager: %s", err)
|
|
}
|
|
|
|
return addressManager, func() {
|
|
}
|
|
}
|
|
|
|
func TestBestLocalAddress(t *testing.T) {
|
|
localAddrs := []appmessage.NetAddress{
|
|
{IP: net.ParseIP("192.168.0.100")},
|
|
{IP: net.ParseIP("::1")},
|
|
{IP: net.ParseIP("fe80::1")},
|
|
{IP: net.ParseIP("2001:470::1")},
|
|
}
|
|
|
|
var tests = []struct {
|
|
remoteAddr appmessage.NetAddress
|
|
want0 appmessage.NetAddress
|
|
want1 appmessage.NetAddress
|
|
want2 appmessage.NetAddress
|
|
want3 appmessage.NetAddress
|
|
}{
|
|
{
|
|
// Remote connection from public IPv4
|
|
appmessage.NetAddress{IP: net.ParseIP("204.124.8.1")},
|
|
appmessage.NetAddress{IP: net.IPv4zero},
|
|
appmessage.NetAddress{IP: net.IPv4zero},
|
|
appmessage.NetAddress{IP: net.ParseIP("204.124.8.100")},
|
|
appmessage.NetAddress{IP: net.ParseIP("fd87:d87e:eb43:25::1")},
|
|
},
|
|
{
|
|
// Remote connection from private IPv4
|
|
appmessage.NetAddress{IP: net.ParseIP("172.16.0.254")},
|
|
appmessage.NetAddress{IP: net.IPv4zero},
|
|
appmessage.NetAddress{IP: net.IPv4zero},
|
|
appmessage.NetAddress{IP: net.IPv4zero},
|
|
appmessage.NetAddress{IP: net.IPv4zero},
|
|
},
|
|
{
|
|
// Remote connection from public IPv6
|
|
appmessage.NetAddress{IP: net.ParseIP("2602:100:abcd::102")},
|
|
appmessage.NetAddress{IP: net.IPv6zero},
|
|
appmessage.NetAddress{IP: net.ParseIP("2001:470::1")},
|
|
appmessage.NetAddress{IP: net.ParseIP("2001:470::1")},
|
|
appmessage.NetAddress{IP: net.ParseIP("2001:470::1")},
|
|
},
|
|
}
|
|
|
|
amgr, teardown := newAddrManagerForTest(t, "TestGetBestLocalAddress")
|
|
defer teardown()
|
|
|
|
// Test against default when there's no address
|
|
for x, test := range tests {
|
|
got := amgr.BestLocalAddress(&test.remoteAddr)
|
|
if !test.want0.IP.Equal(got.IP) {
|
|
t.Errorf("TestGetBestLocalAddress test1 #%d failed for remote address %s: want %s got %s",
|
|
x, test.remoteAddr.IP, test.want1.IP, got.IP)
|
|
continue
|
|
}
|
|
}
|
|
|
|
for _, localAddr := range localAddrs {
|
|
amgr.localAddresses.addLocalNetAddress(&localAddr, InterfacePrio)
|
|
}
|
|
|
|
// Test against want1
|
|
for x, test := range tests {
|
|
got := amgr.BestLocalAddress(&test.remoteAddr)
|
|
if !test.want1.IP.Equal(got.IP) {
|
|
t.Errorf("TestGetBestLocalAddress test1 #%d failed for remote address %s: want %s got %s",
|
|
x, test.remoteAddr.IP, test.want1.IP, got.IP)
|
|
continue
|
|
}
|
|
}
|
|
|
|
// Add a public IP to the list of local addresses.
|
|
localAddr := appmessage.NetAddress{IP: net.ParseIP("204.124.8.100")}
|
|
amgr.localAddresses.addLocalNetAddress(&localAddr, InterfacePrio)
|
|
|
|
// Test against want2
|
|
for x, test := range tests {
|
|
got := amgr.BestLocalAddress(&test.remoteAddr)
|
|
if !test.want2.IP.Equal(got.IP) {
|
|
t.Errorf("TestGetBestLocalAddress test2 #%d failed for remote address %s: want %s got %s",
|
|
x, test.remoteAddr.IP, test.want2.IP, got.IP)
|
|
continue
|
|
}
|
|
}
|
|
}
|