@@ -2,6 +2,7 @@ package sessionpeermanager
2
2
3
3
import (
4
4
"context"
5
+ "fmt"
5
6
"math/rand"
6
7
"sync"
7
8
"testing"
@@ -148,9 +149,10 @@ func TestRecordingReceivedBlocks(t *testing.T) {
148
149
149
150
func TestOrderingPeers (t * testing.T ) {
150
151
ctx := context .Background ()
151
- ctx , cancel := context .WithTimeout (ctx , 30 * time .Millisecond )
152
+ ctx , cancel := context .WithTimeout (ctx , 60 * time .Millisecond )
152
153
defer cancel ()
153
- peers := testutil .GeneratePeers (100 )
154
+ peerCount := 100
155
+ peers := testutil .GeneratePeers (peerCount )
154
156
completed := make (chan struct {})
155
157
fpt := & fakePeerTagger {}
156
158
fppf := & fakePeerProviderFinder {peers , completed }
@@ -165,28 +167,32 @@ func TestOrderingPeers(t *testing.T) {
165
167
case <- ctx .Done ():
166
168
t .Fatal ("Did not finish finding providers" )
167
169
}
168
- time .Sleep (2 * time .Millisecond )
170
+ time .Sleep (5 * time .Millisecond )
169
171
170
172
// record broadcast
171
173
sessionPeerManager .RecordPeerRequests (nil , c )
172
174
173
175
// record receives
174
- peer1 := peers [rand .Intn (100 )]
175
- peer2 := peers [rand .Intn (100 )]
176
- peer3 := peers [rand .Intn (100 )]
177
- time .Sleep (1 * time .Millisecond )
178
- sessionPeerManager .RecordPeerResponse (peer1 , []cid.Cid {c [0 ]})
176
+ randi := rand .Perm (peerCount )
177
+ peer1 := peers [randi [0 ]]
178
+ peer2 := peers [randi [1 ]]
179
+ peer3 := peers [randi [2 ]]
179
180
time .Sleep (5 * time .Millisecond )
181
+ sessionPeerManager .RecordPeerResponse (peer1 , []cid.Cid {c [0 ]})
182
+ time .Sleep (25 * time .Millisecond )
180
183
sessionPeerManager .RecordPeerResponse (peer2 , []cid.Cid {c [0 ]})
181
- time .Sleep (1 * time .Millisecond )
184
+ time .Sleep (5 * time .Millisecond )
182
185
sessionPeerManager .RecordPeerResponse (peer3 , []cid.Cid {c [0 ]})
183
186
184
187
sessionPeers := sessionPeerManager .GetOptimizedPeers ()
185
188
if len (sessionPeers ) != maxOptimizedPeers {
186
- t .Fatal ("Should not return more than the max of optimized peers" )
189
+ t .Fatal (fmt . Sprintf ( "Should not return more (%d) than the max of optimized peers (%d)" , len ( sessionPeers ), maxOptimizedPeers ) )
187
190
}
188
191
189
192
// should prioritize peers which are fastest
193
+ // peer1: ~5ms
194
+ // peer2: 5 + 25 = ~30ms
195
+ // peer3: 5 + 25 + 5 = ~35ms
190
196
if (sessionPeers [0 ].Peer != peer1 ) || (sessionPeers [1 ].Peer != peer2 ) || (sessionPeers [2 ].Peer != peer3 ) {
191
197
t .Fatal ("Did not prioritize peers that received blocks" )
192
198
}
@@ -202,7 +208,7 @@ func TestOrderingPeers(t *testing.T) {
202
208
t .Fatal ("Did not assign rating to other optimized peers correctly" )
203
209
}
204
210
205
- // should other peers rating of zero
211
+ // should give other non-optimized peers rating of zero
206
212
for i := 3 ; i < maxOptimizedPeers ; i ++ {
207
213
if sessionPeers [i ].OptimizationRating != 0.0 {
208
214
t .Fatal ("Did not assign rating to unoptimized peer correctly" )
@@ -220,13 +226,16 @@ func TestOrderingPeers(t *testing.T) {
220
226
// call again
221
227
nextSessionPeers := sessionPeerManager .GetOptimizedPeers ()
222
228
if len (nextSessionPeers ) != maxOptimizedPeers {
223
- t .Fatal ("Should not return more than the max of optimized peers" )
229
+ t .Fatal (fmt . Sprintf ( "Should not return more (%d) than the max of optimized peers (%d)" , len ( nextSessionPeers ), maxOptimizedPeers ) )
224
230
}
225
231
226
232
// should sort by average latency
233
+ // peer1: ~5ms
234
+ // peer3: (~35ms + ~5ms) / 2 = ~20ms
235
+ // peer2: ~30ms
227
236
if (nextSessionPeers [0 ].Peer != peer1 ) || (nextSessionPeers [1 ].Peer != peer3 ) ||
228
237
(nextSessionPeers [2 ].Peer != peer2 ) {
229
- t .Fatal ("Did not dedup peers which received multiple blocks " )
238
+ t .Fatal ("Did not correctly update order of peers sorted by average latency " )
230
239
}
231
240
232
241
// should randomize other peers
@@ -358,7 +367,7 @@ func TestTimeoutsAndCancels(t *testing.T) {
358
367
359
368
func TestUntaggingPeers (t * testing.T ) {
360
369
ctx := context .Background ()
361
- ctx , cancel := context .WithTimeout (ctx , 10 * time .Millisecond )
370
+ ctx , cancel := context .WithTimeout (ctx , 30 * time .Millisecond )
362
371
defer cancel ()
363
372
peers := testutil .GeneratePeers (5 )
364
373
completed := make (chan struct {})
@@ -375,7 +384,7 @@ func TestUntaggingPeers(t *testing.T) {
375
384
case <- ctx .Done ():
376
385
t .Fatal ("Did not finish finding providers" )
377
386
}
378
- time .Sleep (2 * time .Millisecond )
387
+ time .Sleep (15 * time .Millisecond )
379
388
380
389
if fpt .count () != len (peers ) {
381
390
t .Fatal ("Peers were not tagged!" )
0 commit comments