kaspad/infrastructure/network/addressmanager/addressmanager_test.go
Ori Newman 7a7821e1c8
[NOD-1313] Refactor AddressManager (#918) (#1049)
* [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>
2020-11-12 14:40:41 +02:00

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
}
}
}