]> Sergey Matveev's repositories - btrtrc.git/blobdiff - client_test.go
Fix TestTorrentDroppedDuringResponsiveRead flakiness
[btrtrc.git] / client_test.go
index c626ff890ddedaf0b8346a2abc604c84351cb06d..dc53f8e863ee5a127fcc2bc2d8c0858570088f59 100644 (file)
@@ -12,7 +12,6 @@ import (
        "testing/iotest"
        "time"
 
-       "github.com/bradfitz/iter"
        "github.com/frankban/quicktest"
        "github.com/stretchr/testify/assert"
        "github.com/stretchr/testify/require"
@@ -31,7 +30,7 @@ import (
 func TestClientDefault(t *testing.T) {
        cl, err := NewClient(TestingConfig(t))
        require.NoError(t, err)
-       cl.Close()
+       require.Empty(t, cl.Close())
 }
 
 func TestClientNilConfig(t *testing.T) {
@@ -41,7 +40,7 @@ func TestClientNilConfig(t *testing.T) {
        os.Chdir(t.TempDir())
        cl, err := NewClient(nil)
        require.NoError(t, err)
-       cl.Close()
+       require.Empty(t, cl.Close())
 }
 
 func TestAddDropTorrent(t *testing.T) {
@@ -80,9 +79,8 @@ func TestPieceHashSize(t *testing.T) {
 func TestTorrentInitialState(t *testing.T) {
        dir, mi := testutil.GreetingTestTorrent()
        defer os.RemoveAll(dir)
-       cl := &Client{
-               config: TestingConfig(t),
-       }
+       var cl Client
+       cl.init(TestingConfig(t))
        cl.initLogger()
        tor := cl.newTorrent(
                mi.HashInfoBytes(),
@@ -131,7 +129,7 @@ func TestAddDropManyTorrents(t *testing.T) {
        cl, err := NewClient(TestingConfig(t))
        require.NoError(t, err)
        defer cl.Close()
-       for i := range iter.N(1000) {
+       for i := 0; i < 1000; i += 1 {
                var spec TorrentSpec
                binary.PutVarint(spec.InfoHash[:], int64(i))
                tt, new, err := cl.AddTorrentSpec(&spec)
@@ -203,7 +201,7 @@ func BenchmarkAddLargeTorrent(b *testing.B) {
        require.NoError(b, err)
        defer cl.Close()
        b.ReportAllocs()
-       for range iter.N(b.N) {
+       for i := 0; i < b.N; i += 1 {
                t, err := cl.AddTorrentFromFile("testdata/bootstrap.dat.torrent")
                if err != nil {
                        b.Fatal(err)
@@ -290,9 +288,9 @@ func TestTorrentDroppedDuringResponsiveRead(t *testing.T) {
        _, err = io.ReadFull(reader, b)
        assert.Nil(t, err)
        assert.EqualValues(t, "lo", string(b))
-       go leecherTorrent.Drop()
        _, err = reader.Seek(11, io.SeekStart)
        require.NoError(t, err)
+       leecherTorrent.Drop()
        n, err := reader.Read(b)
        assert.EqualError(t, err, "torrent closed")
        assert.EqualValues(t, 0, n)
@@ -354,7 +352,7 @@ func TestTorrentDroppedBeforeGotInfo(t *testing.T) {
 }
 
 func writeTorrentData(ts *storage.Torrent, info metainfo.Info, b []byte) {
-       for i := range iter.N(info.NumPieces()) {
+       for i := 0; i < info.NumPieces(); i += 1 {
                p := info.Piece(i)
                ts.Piece(p).WriteAt(b[p.Offset():p.Offset()+p.Length()], 0)
        }
@@ -485,7 +483,7 @@ func testDownloadCancel(t *testing.T, ps testDownloadCancelParams) {
        leecherGreeting.cl.lock()
        leecherGreeting.downloadPiecesLocked(0, leecherGreeting.numPieces())
        if ps.Cancel {
-               leecherGreeting.cancelPiecesLocked(0, leecherGreeting.NumPieces())
+               leecherGreeting.cancelPiecesLocked(0, leecherGreeting.NumPieces(), "")
        }
        leecherGreeting.cl.unlock()
        done := make(chan struct{})
@@ -539,8 +537,10 @@ func TestPeerInvalidHave(t *testing.T) {
        assert.True(t, _new)
        defer tt.Drop()
        cn := &PeerConn{Peer: Peer{
-               t: tt,
+               t:         tt,
+               callbacks: &cfg.Callbacks,
        }}
+       tt.conns[cn] = struct{}{}
        cn.peerImpl = cn
        cl.lock()
        defer cl.unlock()
@@ -609,7 +609,7 @@ func TestSetMaxEstablishedConn(t *testing.T) {
        cfg := TestingConfig(t)
        cfg.DisableAcceptRateLimiting = true
        cfg.DropDuplicatePeerIds = true
-       for i := range iter.N(3) {
+       for i := 0; i < 3; i += 1 {
                cl, err := NewClient(cfg)
                require.NoError(t, err)
                defer cl.Close()
@@ -649,8 +649,8 @@ func TestSetMaxEstablishedConn(t *testing.T) {
 
 // Creates a file containing its own name as data. Make a metainfo from that, adds it to the given
 // client, and returns a magnet link.
-func makeMagnet(t *testing.T, cl *Client, dir string, name string) string {
-       os.MkdirAll(dir, 0770)
+func makeMagnet(t *testing.T, cl *Client, dir, name string) string {
+       os.MkdirAll(dir, 0o770)
        file, err := os.Create(filepath.Join(dir, name))
        require.NoError(t, err)
        file.Write([]byte(name))
@@ -686,11 +686,11 @@ func TestMultipleTorrentsWithEncryption(t *testing.T) {
 
 // Test that the leecher can download a torrent in its entirety from the seeder. Note that the
 // seeder config is done first.
-func testSeederLeecherPair(t *testing.T, seeder func(*ClientConfig), leecher func(*ClientConfig)) {
+func testSeederLeecherPair(t *testing.T, seeder, leecher func(*ClientConfig)) {
        cfg := TestingConfig(t)
        cfg.Seed = true
        cfg.DataDir = filepath.Join(cfg.DataDir, "server")
-       os.Mkdir(cfg.DataDir, 0755)
+       os.Mkdir(cfg.DataDir, 0o755)
        seeder(cfg)
        server, err := NewClient(cfg)
        require.NoError(t, err)