]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Add more comprehensive pending requests assertions
authorMatt Joiner <anacrolix@gmail.com>
Mon, 25 Oct 2021 05:16:56 +0000 (16:16 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Mon, 25 Oct 2021 05:16:56 +0000 (16:16 +1100)
pending-requests_test.go [new file with mode: 0644]
requesting.go
torrent.go

diff --git a/pending-requests_test.go b/pending-requests_test.go
new file mode 100644 (file)
index 0000000..5f0debd
--- /dev/null
@@ -0,0 +1,19 @@
+package torrent
+
+import (
+       "testing"
+
+       qt "github.com/frankban/quicktest"
+       "github.com/google/go-cmp/cmp"
+)
+
+// Ensure that cmp.Diff will detect errors as required.
+func TestPendingRequestsDiff(t *testing.T) {
+       var a, b pendingRequests
+       c := qt.New(t)
+       diff := func() string { return cmp.Diff(a.m, b.m) }
+       c.Check(diff(), qt.ContentEquals, "")
+       a.m = []int{1, 3}
+       b.m = []int{1, 2, 3}
+       c.Check(diff(), qt.Not(qt.Equals), "")
+}
index 1d2d5e19a455a8f7f893ae58171765829a35ea24..c1ae8adac57ede1aaecabc4f426584a44d6edcbb 100644 (file)
@@ -233,6 +233,7 @@ func (p *Peer) getDesiredRequestState() (desired requestState) {
                        })
                },
        )
+       p.t.assertPendingRequests()
        heap.Init(&requestHeap)
        for requestHeap.Len() != 0 && desired.Requests.GetCardinality() < uint64(p.nominalMaxRequests()) {
                requestIndex := heap.Pop(&requestHeap).(RequestIndex)
index 222df40b641d5e5ff9d45701ae0fbeefacc3d71e..d606971dffca4d08b80c8c6738dfb66979db3b40 100644 (file)
@@ -30,6 +30,7 @@ import (
        "github.com/anacrolix/multiless"
        "github.com/anacrolix/sync"
        "github.com/davecgh/go-spew/spew"
+       "github.com/google/go-cmp/cmp"
        "github.com/pion/datachannel"
 
        "github.com/anacrolix/torrent/bencode"
@@ -1385,9 +1386,7 @@ func (t *Torrent) deletePeerConn(c *PeerConn) (ret bool) {
        }
        torrent.Add("deleted connections", 1)
        c.deleteAllRequests()
-       if t.numActivePeers() == 0 && t.haveInfo() {
-               t.assertNoPendingRequests()
-       }
+       t.assertPendingRequests()
        return
 }
 
@@ -1408,8 +1407,21 @@ func (t *Torrent) numActivePeers() (num int) {
        return
 }
 
-func (t *Torrent) assertNoPendingRequests() {
-       t.pendingRequests.AssertEmpty()
+func (t *Torrent) assertPendingRequests() {
+       var actual pendingRequests
+       if t.haveInfo() {
+               actual.m = make([]int, t.numRequests())
+       }
+       t.iterPeers(func(p *Peer) {
+               p.actualRequestState.Requests.Iterate(func(x uint32) bool {
+                       actual.Inc(x)
+                       return true
+               })
+       })
+       diff := cmp.Diff(actual.m, t.pendingRequests.m)
+       if diff != "" {
+               panic(diff)
+       }
 }
 
 func (t *Torrent) dropConnection(c *PeerConn) {