2
0
mirror of synced 2025-02-23 14:18:13 +00:00
torrent/network_test.go
FIGBERT 7d41b9b21c
Pass client logger to anacrolix/go-libutp sockets (#722)
* Update anacrolix/go-libutp (v1.1.0 -> v1.2.0)

* Pass client logger to anacrolix/go-libutp

* Pass logger instead of option

The project now compiles properly when CGO is not enabled.

Additionally, the new argument (now log.Logger instead of
utp.NewSocketOpt) is now required. The tests have been updated to match
this change, and now pass logger.Default to NewUtpSocket.

* Correct function signature of NewUtpSocket
2022-02-15 16:18:32 +11:00

77 lines
2.1 KiB
Go

package torrent
import (
"net"
"testing"
"github.com/anacrolix/log"
"github.com/anacrolix/missinggo/v2"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func testListenerNetwork(
t *testing.T,
listenFunc func(net, addr string) (net.Listener, error),
expectedNet, givenNet, addr string, validIp4 bool,
) {
l, err := listenFunc(givenNet, addr)
require.NoError(t, err)
defer l.Close()
assert.EqualValues(t, expectedNet, l.Addr().Network())
ip := missinggo.AddrIP(l.Addr())
assert.Equal(t, validIp4, ip.To4() != nil, ip)
}
func listenUtpListener(net, addr string) (l net.Listener, err error) {
l, err = NewUtpSocket(net, addr, nil, log.Default)
return
}
func testAcceptedConnAddr(
t *testing.T,
network string, valid4 bool,
dial func(addr string) (net.Conn, error),
listen func() (net.Listener, error),
) {
l, err := listen()
require.NoError(t, err)
defer l.Close()
done := make(chan struct{})
defer close(done)
go func() {
c, err := dial(l.Addr().String())
require.NoError(t, err)
<-done
c.Close()
}()
c, err := l.Accept()
require.NoError(t, err)
defer c.Close()
assert.EqualValues(t, network, c.RemoteAddr().Network())
assert.Equal(t, valid4, missinggo.AddrIP(c.RemoteAddr()).To4() != nil)
}
func listenClosure(rawListenFunc func(string, string) (net.Listener, error), network, addr string) func() (net.Listener, error) {
return func() (net.Listener, error) {
return rawListenFunc(network, addr)
}
}
func dialClosure(f func(net, addr string) (net.Conn, error), network string) func(addr string) (net.Conn, error) {
return func(addr string) (net.Conn, error) {
return f(network, addr)
}
}
func TestListenLocalhostNetwork(t *testing.T) {
testListenerNetwork(t, net.Listen, "tcp", "tcp", "0.0.0.0:0", false)
testListenerNetwork(t, net.Listen, "tcp", "tcp", "[::1]:0", false)
testListenerNetwork(t, listenUtpListener, "udp", "udp6", "[::1]:0", false)
testListenerNetwork(t, listenUtpListener, "udp", "udp6", "[::]:0", false)
testListenerNetwork(t, listenUtpListener, "udp", "udp4", "localhost:0", true)
testAcceptedConnAddr(t, "tcp", false, dialClosure(net.Dial, "tcp"), listenClosure(net.Listen, "tcp6", ":0"))
}