]> Sergey Matveev's repositories - btrtrc.git/blobdiff - ut-holepunching_test.go
Attempt holepunch after initial dial fails
[btrtrc.git] / ut-holepunching_test.go
index 1b4b7d08c29aff12af0a0c5aff318b0dfe60be55..93ff3a4ea58f53aa95b5e37d762f7cbe0b7ab381 100644 (file)
@@ -6,6 +6,8 @@ import (
        "testing"
        "testing/iotest"
 
+       "github.com/anacrolix/log"
+
        "github.com/anacrolix/torrent/internal/testutil"
        qt "github.com/frankban/quicktest"
        "github.com/stretchr/testify/assert"
@@ -23,8 +25,9 @@ func TestHolepunchConnect(t *testing.T) {
        cfg.MaxAllocPeerRequestDataPerConn = 4
        cfg.DataDir = greetingTempDir
        cfg.DisablePEX = true
-       //cfg.Debug = true
+       cfg.Debug = true
        cfg.AcceptPeerConnections = false
+       //cfg.DisableUTP = true
        seeder, err := NewClient(cfg)
        require.NoError(t, err)
        defer seeder.Close()
@@ -52,6 +55,7 @@ func TestHolepunchConnect(t *testing.T) {
        cfg.DataDir = t.TempDir()
        cfg.MaxAllocPeerRequestDataPerConn = 4
        cfg.Debug = true
+       cfg.NominalDialTimeout = time.Second
        //cfg.DisableUTP = true
        leecherLeecher, _ := NewClient(cfg)
        require.NoError(t, err)
@@ -85,12 +89,29 @@ func TestHolepunchConnect(t *testing.T) {
        waitForConns(seederTorrent)
        go llg.AddClientPeer(leecher)
        waitForConns(llg)
+       time.Sleep(time.Second)
        llg.cl.lock()
-       llg.initiateConn(PeerInfo{
-               Addr: seeder.ListenAddrs()[0],
-       }, true, false)
+       targetAddr := seeder.ListenAddrs()[0]
+       log.Printf("trying to initiate to %v", targetAddr)
+       initiateConn(outgoingConnOpts{
+               peerInfo: PeerInfo{
+                       Addr: targetAddr,
+               },
+               t:                       llg,
+               requireRendezvous:       true,
+               skipHolepunchRendezvous: false,
+               HeaderObfuscationPolicy: llg.cl.config.HeaderObfuscationPolicy,
+       }, true)
        llg.cl.unlock()
        wg.Wait()
+
+       llClientStats := leecherLeecher.Stats()
+       c.Check(llClientStats.NumPeersDialableOnlyAfterHolepunch, qt.Not(qt.Equals), 0)
+       c.Check(
+               llClientStats.NumPeersDialableOnlyAfterHolepunch,
+               qt.Equals,
+               llClientStats.NumPeersUndialableWithoutHolepunchDialedAfterHolepunchConnect,
+       )
 }
 
 func waitForConns(t *Torrent) {
@@ -103,3 +124,12 @@ func waitForConns(t *Torrent) {
                t.cl.event.Wait()
        }
 }
+
+func TestDialTcpNotAccepting(t *testing.T) {
+       l, err := net.Listen("tcp", "localhost:0")
+       c := qt.New(t)
+       c.Check(err, qt.IsNil)
+       defer l.Close()
+       _, err = net.Dial("tcp", l.Addr().String())
+       c.Assert(err, qt.IsNotNil)
+}