]> Sergey Matveev's repositories - btrtrc.git/blobdiff - client_test.go
Include holepunch message protocol family in metrics
[btrtrc.git] / client_test.go
index 65182d58be84bfe5a880ab2071f2525e5dfee851..e23ca1fa2d8d609e6df9249b25b47e4defbc0245 100644 (file)
@@ -13,15 +13,13 @@ import (
        "testing/iotest"
        "time"
 
-       "github.com/frankban/quicktest"
-       "github.com/stretchr/testify/assert"
-       "github.com/stretchr/testify/require"
-
-       "github.com/anacrolix/log"
-
        "github.com/anacrolix/dht/v2"
+       "github.com/anacrolix/log"
        "github.com/anacrolix/missinggo/v2"
        "github.com/anacrolix/missinggo/v2/filecache"
+       "github.com/frankban/quicktest"
+       "github.com/stretchr/testify/assert"
+       "github.com/stretchr/testify/require"
 
        "github.com/anacrolix/torrent/bencode"
        "github.com/anacrolix/torrent/internal/testutil"
@@ -254,6 +252,50 @@ func TestResponsive(t *testing.T) {
        assert.EqualValues(t, "d\n", string(b))
 }
 
+// TestResponsive was the first test to fail if uTP is disabled and TCP sockets dial from the
+// listening port.
+func TestResponsiveTcpOnly(t *testing.T) {
+       seederDataDir, mi := testutil.GreetingTestTorrent()
+       defer os.RemoveAll(seederDataDir)
+       cfg := TestingConfig(t)
+       cfg.DisableUTP = true
+       cfg.Seed = true
+       cfg.DataDir = seederDataDir
+       seeder, err := NewClient(cfg)
+       require.Nil(t, err)
+       defer seeder.Close()
+       seederTorrent, _, _ := seeder.AddTorrentSpec(TorrentSpecFromMetaInfo(mi))
+       seederTorrent.VerifyData()
+       leecherDataDir := t.TempDir()
+       cfg = TestingConfig(t)
+       cfg.DataDir = leecherDataDir
+       leecher, err := NewClient(cfg)
+       require.Nil(t, err)
+       defer leecher.Close()
+       leecherTorrent, _, _ := leecher.AddTorrentSpec(func() (ret *TorrentSpec) {
+               ret = TorrentSpecFromMetaInfo(mi)
+               ret.ChunkSize = 2
+               return
+       }())
+       leecherTorrent.AddClientPeer(seeder)
+       reader := leecherTorrent.NewReader()
+       defer reader.Close()
+       reader.SetReadahead(0)
+       reader.SetResponsive()
+       b := make([]byte, 2)
+       _, err = reader.Seek(3, io.SeekStart)
+       require.NoError(t, err)
+       _, err = io.ReadFull(reader, b)
+       assert.Nil(t, err)
+       assert.EqualValues(t, "lo", string(b))
+       _, err = reader.Seek(11, io.SeekStart)
+       require.NoError(t, err)
+       n, err := io.ReadFull(reader, b)
+       assert.Nil(t, err)
+       assert.EqualValues(t, 2, n)
+       assert.EqualValues(t, "d\n", string(b))
+}
+
 func TestTorrentDroppedDuringResponsiveRead(t *testing.T) {
        seederDataDir, mi := testutil.GreetingTestTorrent()
        defer os.RemoveAll(seederDataDir)
@@ -749,6 +791,7 @@ func TestClientAddressInUse(t *testing.T) {
                defer s.Close()
        }
        cfg := TestingConfig(t).SetListenAddr(":50007")
+       cfg.DisableUTP = false
        cl, err := NewClient(cfg)
        require.Error(t, err)
        require.Nil(t, cl)
@@ -808,7 +851,7 @@ func TestBadPeerIpPort(t *testing.T) {
                        true,
                        func(cl *Client) {
                                cl.ipBlockList = iplist.New([]iplist.Range{
-                                       iplist.Range{First: net.ParseIP("10.0.0.1"), Last: net.ParseIP("10.0.0.255")},
+                                       {First: net.ParseIP("10.0.0.1"), Last: net.ParseIP("10.0.0.255")},
                                })
                        },
                },
@@ -845,5 +888,4 @@ func TestBadPeerIpPort(t *testing.T) {
                        require.Equal(t, tc.expectedOk, cl.badPeerIPPort(tc.ip, tc.port))
                })
        }
-
 }