static_resolver_test.go 4.39 KB
Newer Older
1 2 3 4 5 6 7
// Copyright 2020 The Swarm Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package libp2p_test

import (
8
	"net"
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
	"testing"

	"github.com/ethersphere/bee/pkg/p2p/libp2p"
	ma "github.com/multiformats/go-multiaddr"
)

func TestStaticAddressResolver(t *testing.T) {
	for _, tc := range []struct {
		name              string
		natAddr           string
		observableAddress string
		want              string
	}{
		{
			name:              "replace port",
			natAddr:           ":30123",
			observableAddress: "/ip4/127.0.0.1/tcp/7071/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
			want:              "/ip4/127.0.0.1/tcp/30123/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
		},
		{
			name:              "replace ip v4",
			natAddr:           "192.168.1.34:",
			observableAddress: "/ip4/127.0.0.1/tcp/7071/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
			want:              "/ip4/192.168.1.34/tcp/7071/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
		},
		{
			name:              "replace ip v6",
			natAddr:           "[2001:db8::8a2e:370:1111]:",
			observableAddress: "/ip6/2001:db8::8a2e:370:7334/tcp/7071/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
			want:              "/ip6/2001:db8::8a2e:370:1111/tcp/7071/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
		},
		{
			name:              "replace ip v4 with ip v6",
			natAddr:           "[2001:db8::8a2e:370:1111]:",
			observableAddress: "/ip4/127.0.0.1/tcp/7071/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
			want:              "/ip6/2001:db8::8a2e:370:1111/tcp/7071/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
		},
		{
			name:              "replace ip v6 with ip v4",
			natAddr:           "192.168.1.34:",
			observableAddress: "/ip6/2001:db8::8a2e:370:7334/tcp/7071/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
			want:              "/ip4/192.168.1.34/tcp/7071/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
		},
		{
			name:              "replace ip and port",
			natAddr:           "192.168.1.34:30777",
			observableAddress: "/ip4/127.0.0.1/tcp/7071/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
			want:              "/ip4/192.168.1.34/tcp/30777/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
		},
		{
			name:              "replace ip v4 and port with ip v6",
			natAddr:           "[2001:db8::8a2e:370:1111]:30777",
			observableAddress: "/ip4/127.0.0.1/tcp/7071/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
			want:              "/ip6/2001:db8::8a2e:370:1111/tcp/30777/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
		},
		{
			name:              "replace ip v6 and port with ip v4",
			natAddr:           "192.168.1.34:30777",
			observableAddress: "/ip6/2001:db8::8a2e:370:7334/tcp/7071/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
			want:              "/ip4/192.168.1.34/tcp/30777/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
		},
70 71 72 73 74 75 76 77 78 79 80 81
		{
			name:              "replace ip v6 and port with dns v4",
			natAddr:           "ipv4.com:30777",
			observableAddress: "/ip6/2001:db8::8a2e:370:7334/tcp/7071/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
			want:              "/dns4/ipv4.com/tcp/30777/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
		},
		{
			name:              "replace ip v4 and port with dns",
			natAddr:           "ipv4and6.com:30777",
			observableAddress: "/ip4/127.0.0.1/tcp/7071/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
			want:              "/dns/ipv4and6.com/tcp/30777/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd",
		},
82 83
	} {
		t.Run(tc.name, func(t *testing.T) {
84 85 86 87 88 89 90 91 92 93 94 95
			r, err := libp2p.NewStaticAddressResolver(tc.natAddr, func(host string) ([]net.IP, error) {
				hosts := map[string][]net.IP{
					"ipv4.com": {
						net.ParseIP("192.168.1.34"),
					},
					"ipv4and6.com": {
						net.ParseIP("192.168.1.34"),
						net.ParseIP("2001:db8::8a2e:370:1111"),
					},
				}
				return hosts[host], nil
			})
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
			if err != nil {
				t.Fatal(err)
			}
			observableAddress, err := ma.NewMultiaddr(tc.observableAddress)
			if err != nil {
				t.Fatal(err)
			}
			got, err := r.Resolve(observableAddress)
			if err != nil {
				t.Fatal(err)
			}

			if got.String() != tc.want {
				t.Errorf("got %s, want %s", got, tc.want)
			}
		})
	}
}