dht_filters_test.go 2.51 KB
Newer Older
1 2 3
package dht

import (
Will Scott's avatar
Will Scott committed
4 5
	"context"
	"net"
6 7
	"testing"

Will Scott's avatar
Will Scott committed
8 9 10 11
	ic "github.com/libp2p/go-libp2p-core/crypto"
	"github.com/libp2p/go-libp2p-core/network"
	"github.com/libp2p/go-libp2p-core/peer"
	ma "github.com/multiformats/go-multiaddr"
12
	manet "github.com/multiformats/go-multiaddr/net"
13 14 15
)

func TestIsRelay(t *testing.T) {
Marten Seemann's avatar
Marten Seemann committed
16
	a, _ := ma.NewMultiaddr("/ip4/127.0.0.1/tcp/5002/p2p/QmdPU7PfRyKehdrP5A3WqmjyD6bhVpU1mLGKppa2FjGDjZ/p2p-circuit/p2p/QmVT6GYwjeeAF5TR485Yc58S3xRF5EFsZ5YAF4VcP3URHt")
17 18 19
	if !isRelayAddr(a) {
		t.Fatalf("thought %s was not a relay", a)
	}
Marten Seemann's avatar
Marten Seemann committed
20
	a, _ = ma.NewMultiaddr("/p2p-circuit/p2p/QmVT6GYwjeeAF5TR485Yc58S3xRF5EFsZ5YAF4VcP3URHt")
21 22 23
	if !isRelayAddr(a) {
		t.Fatalf("thought %s was not a relay", a)
	}
Marten Seemann's avatar
Marten Seemann committed
24
	a, _ = ma.NewMultiaddr("/ip4/127.0.0.1/tcp/5002/p2p/QmdPU7PfRyKehdrP5A3WqmjyD6bhVpU1mLGKppa2FjGDjZ")
25 26 27 28 29
	if isRelayAddr(a) {
		t.Fatalf("thought %s was a relay", a)
	}

}
Will Scott's avatar
Will Scott committed
30 31 32 33 34 35

type mockConn struct {
	local  peer.AddrInfo
	remote peer.AddrInfo
}

36 37
var _ network.Conn = (*mockConn)(nil)

Steven Allen's avatar
Steven Allen committed
38 39 40 41 42 43 44 45 46 47 48
func (m *mockConn) ID() string                                        { return "0" }
func (m *mockConn) Close() error                                      { return nil }
func (m *mockConn) NewStream(context.Context) (network.Stream, error) { return nil, nil }
func (m *mockConn) GetStreams() []network.Stream                      { return []network.Stream{} }
func (m *mockConn) Stat() network.Stat                                { return network.Stat{Direction: network.DirOutbound} }
func (m *mockConn) LocalMultiaddr() ma.Multiaddr                      { return m.local.Addrs[0] }
func (m *mockConn) RemoteMultiaddr() ma.Multiaddr                     { return m.remote.Addrs[0] }
func (m *mockConn) LocalPeer() peer.ID                                { return m.local.ID }
func (m *mockConn) LocalPrivateKey() ic.PrivKey                       { return nil }
func (m *mockConn) RemotePeer() peer.ID                               { return m.remote.ID }
func (m *mockConn) RemotePublicKey() ic.PubKey                        { return nil }
Will Scott's avatar
Will Scott committed
49 50 51 52 53 54 55

func TestFilterCaching(t *testing.T) {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
	d := setupDHT(ctx, t, true)

	remote, _ := manet.FromIP(net.IPv4(8, 8, 8, 8))
56
	if privRTFilter(d, []network.Conn{&mockConn{
Will Scott's avatar
Will Scott committed
57 58 59 60 61 62 63 64 65 66 67 68
		local:  d.Host().Peerstore().PeerInfo(d.Host().ID()),
		remote: peer.AddrInfo{ID: "", Addrs: []ma.Multiaddr{remote}},
	}}) {
		t.Fatal("filter should prevent public remote peers.")
	}

	r1 := getCachedRouter()
	r2 := getCachedRouter()
	if r1 != r2 {
		t.Fatal("router should be returned multiple times.")
	}
}