ceremonyclient/go-libp2p/p2p/host/autonat/test/autonat_test.go
2023-08-20 23:07:43 -05:00

48 lines
1.5 KiB
Go

// This separate testing package helps to resolve a circular dependency potentially
// being created between libp2p and libp2p-autonat
package autonattest
import (
"context"
"testing"
"time"
"github.com/libp2p/go-libp2p"
"github.com/libp2p/go-libp2p/core/event"
"github.com/libp2p/go-libp2p/core/network"
"github.com/libp2p/go-libp2p/p2p/host/autonat"
"github.com/stretchr/testify/require"
)
func TestAutonatRoundtrip(t *testing.T) {
t.Skip("this test doesn't work")
// 3 hosts are used: [client] and [service + dialback dialer]
client, err := libp2p.New(libp2p.ListenAddrStrings("/ip4/127.0.0.1/tcp/0"), libp2p.EnableNATService())
require.NoError(t, err)
service, err := libp2p.New(libp2p.ListenAddrStrings("/ip4/127.0.0.1/tcp/0"))
require.NoError(t, err)
dialback, err := libp2p.New(libp2p.NoListenAddrs)
require.NoError(t, err)
if _, err := autonat.New(service, autonat.EnableService(dialback.Network())); err != nil {
t.Fatal(err)
}
client.Peerstore().AddAddrs(service.ID(), service.Addrs(), time.Hour)
require.NoError(t, client.Connect(context.Background(), service.Peerstore().PeerInfo(service.ID())))
cSub, err := client.EventBus().Subscribe(new(event.EvtLocalReachabilityChanged))
require.NoError(t, err)
defer cSub.Close()
select {
case stat := <-cSub.Out():
if stat == network.ReachabilityUnknown {
t.Fatalf("After status update, client did not know its status")
}
case <-time.After(30 * time.Second):
t.Fatal("sub timed out.")
}
}