X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=peerconn_test.go;h=a107976b27a88cc30c5e1afa744cb0e948bdb7d5;hb=6c831fef83204fb7548a522b07e17c06bd20604a;hp=23d32286cd66b82ca86cd3d04b51d6e6f77fca5c;hpb=214fe6b93c62c805f2ddfe056238e84c9cd5ede7;p=btrtrc.git diff --git a/peerconn_test.go b/peerconn_test.go index 23d32286..a107976b 100644 --- a/peerconn_test.go +++ b/peerconn_test.go @@ -4,7 +4,6 @@ import ( "encoding/binary" "errors" "fmt" - "golang.org/x/time/rate" "io" "net" "sync" @@ -13,6 +12,7 @@ import ( "github.com/frankban/quicktest" qt "github.com/frankban/quicktest" "github.com/stretchr/testify/require" + "golang.org/x/time/rate" "github.com/anacrolix/torrent/metainfo" pp "github.com/anacrolix/torrent/peer_protocol" @@ -181,6 +181,7 @@ func TestConnPexPeerFlags(t *testing.T) { } func TestConnPexEvent(t *testing.T) { + c := qt.New(t) var ( udpAddr = &net.UDPAddr{IP: net.IPv6loopback, Port: 4848} tcpAddr = &net.TCPAddr{IP: net.IPv6loopback, Port: 4848} @@ -195,27 +196,39 @@ func TestConnPexEvent(t *testing.T) { { pexAdd, &PeerConn{Peer: Peer{RemoteAddr: udpAddr, Network: udpAddr.Network()}}, - pexEvent{pexAdd, udpAddr, pp.PexSupportsUtp, nil}, + pexEvent{pexAdd, udpAddr.AddrPort(), pp.PexSupportsUtp, nil}, }, { pexDrop, - &PeerConn{Peer: Peer{RemoteAddr: tcpAddr, Network: tcpAddr.Network(), outgoing: true, PeerListenPort: dialTcpAddr.Port}}, - pexEvent{pexDrop, tcpAddr, pp.PexOutgoingConn, nil}, + &PeerConn{ + Peer: Peer{RemoteAddr: tcpAddr, Network: tcpAddr.Network(), outgoing: true}, + PeerListenPort: dialTcpAddr.Port, + }, + pexEvent{pexDrop, tcpAddr.AddrPort(), pp.PexOutgoingConn, nil}, }, { pexAdd, - &PeerConn{Peer: Peer{RemoteAddr: tcpAddr, Network: tcpAddr.Network(), PeerListenPort: dialTcpAddr.Port}}, - pexEvent{pexAdd, dialTcpAddr, 0, nil}, + &PeerConn{ + Peer: Peer{RemoteAddr: tcpAddr, Network: tcpAddr.Network()}, + PeerListenPort: dialTcpAddr.Port, + }, + pexEvent{pexAdd, dialTcpAddr.AddrPort(), 0, nil}, }, { pexDrop, - &PeerConn{Peer: Peer{RemoteAddr: udpAddr, Network: udpAddr.Network(), PeerListenPort: dialUdpAddr.Port}}, - pexEvent{pexDrop, dialUdpAddr, pp.PexSupportsUtp, nil}, + &PeerConn{ + Peer: Peer{RemoteAddr: udpAddr, Network: udpAddr.Network()}, + PeerListenPort: dialUdpAddr.Port, + }, + pexEvent{pexDrop, dialUdpAddr.AddrPort(), pp.PexSupportsUtp, nil}, }, } for i, tc := range testcases { - e := tc.c.pexEvent(tc.t) - require.EqualValues(t, tc.e, e, i) + c.Run(fmt.Sprintf("%v", i), func(c *qt.C) { + e, err := tc.c.pexEvent(tc.t) + c.Assert(err, qt.IsNil) + c.Check(e, qt.Equals, tc.e) + }) } } @@ -256,7 +269,10 @@ func TestApplyRequestStateWriteBufferConstraints(t *testing.T) { c.Logf("max local to remote requests: %v", maxLocalToRemoteRequests) } -func peerConnForPreferredNetworkDirection(localPeerId, remotePeerId int, outgoing, utp, ipv6 bool) *PeerConn { +func peerConnForPreferredNetworkDirection( + localPeerId, remotePeerId int, + outgoing, utp, ipv6 bool, +) *PeerConn { pc := PeerConn{} pc.outgoing = outgoing if utp { @@ -277,16 +293,37 @@ func peerConnForPreferredNetworkDirection(localPeerId, remotePeerId int, outgoin func TestPreferredNetworkDirection(t *testing.T) { pc := peerConnForPreferredNetworkDirection c := qt.New(t) - // Prefer outgoing to higher peer ID - c.Assert(pc(1, 2, true, false, false).hasPreferredNetworkOver(pc(1, 2, false, false, false)), qt.IsTrue) - c.Assert(pc(1, 2, false, false, false).hasPreferredNetworkOver(pc(1, 2, true, false, false)), qt.IsFalse) - c.Assert(pc(2, 1, false, false, false).hasPreferredNetworkOver(pc(2, 1, true, false, false)), qt.IsTrue) + + // Prefer outgoing to lower peer ID + + c.Check( + pc(1, 2, true, false, false).hasPreferredNetworkOver(pc(1, 2, false, false, false)), + qt.IsFalse, + ) + c.Check( + pc(1, 2, false, false, false).hasPreferredNetworkOver(pc(1, 2, true, false, false)), + qt.IsTrue, + ) + c.Check( + pc(2, 1, false, false, false).hasPreferredNetworkOver(pc(2, 1, true, false, false)), + qt.IsFalse, + ) + // Don't prefer uTP - c.Assert(pc(1, 2, false, true, false).hasPreferredNetworkOver(pc(1, 2, false, false, false)), qt.IsFalse) + c.Check( + pc(1, 2, false, true, false).hasPreferredNetworkOver(pc(1, 2, false, false, false)), + qt.IsFalse, + ) // Prefer IPv6 - c.Assert(pc(1, 2, false, false, false).hasPreferredNetworkOver(pc(1, 2, false, false, true)), qt.IsFalse) + c.Check( + pc(1, 2, false, false, false).hasPreferredNetworkOver(pc(1, 2, false, false, true)), + qt.IsFalse, + ) // No difference - c.Assert(pc(1, 2, false, false, false).hasPreferredNetworkOver(pc(1, 2, false, false, false)), qt.IsFalse) + c.Check( + pc(1, 2, false, false, false).hasPreferredNetworkOver(pc(1, 2, false, false, false)), + qt.IsFalse, + ) } func TestReceiveLargeRequest(t *testing.T) { @@ -317,3 +354,15 @@ func TestReceiveLargeRequest(t *testing.T) { c.Check(pc.onReadRequest(req, false), qt.IsNil) c.Check(pc.messageWriter.writeBuffer.Len(), qt.Equals, 17) } + +func TestChunkOverflowsPiece(t *testing.T) { + c := qt.New(t) + check := func(begin, length, limit pp.Integer, expected bool) { + c.Check(chunkOverflowsPiece(ChunkSpec{begin, length}, limit), qt.Equals, expected) + } + check(2, 3, 1, true) + check(2, pp.IntegerMax, 1, true) + check(2, pp.IntegerMax, 3, true) + check(2, pp.IntegerMax, pp.IntegerMax, true) + check(2, pp.IntegerMax-2, pp.IntegerMax, false) +}