Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
dms3
go-graphsync
Commits
33f67cd5
Commit
33f67cd5
authored
Mar 15, 2019
by
hannahhoward
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor(requestmanager): DRY up test
Cleanup request manager test to extract repeated code
parent
3c3dc22a
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
131 additions
and
267 deletions
+131
-267
requestmanager/requestmanager_test.go
requestmanager/requestmanager_test.go
+131
-267
No files found.
requestmanager/requestmanager_test.go
View file @
33f67cd5
...
@@ -48,6 +48,108 @@ func (fph *fakePeerHandler) CancelRequest(
...
@@ -48,6 +48,108 @@ func (fph *fakePeerHandler) CancelRequest(
}
}
}
}
func
collectBlocks
(
ctx
context
.
Context
,
t
*
testing
.
T
,
blocksChan
<-
chan
ResponseProgress
)
[]
ResponseProgress
{
var
collectedBlocks
[]
blocks
.
Block
for
{
select
{
case
blk
,
ok
:=
<-
blocksChan
:
if
!
ok
{
return
collectedBlocks
}
collectedBlocks
=
append
(
collectedBlocks
,
blk
)
case
<-
ctx
.
Done
()
:
t
.
Fatal
(
"blocks channel never closed"
)
}
}
}
func
readNBlocks
(
ctx
context
.
Context
,
t
*
testing
.
T
,
blocksChan
<-
chan
ResponseProgress
,
count
int
)
[]
ResponseProgress
{
var
returnedBlocks
[]
blocks
.
Block
for
i
:=
0
;
i
<
5
;
i
++
{
select
{
case
blk
:=
<-
blocksChan
:
returnedBlocks
=
append
(
returnedBlocks
,
blk
)
case
<-
ctx
.
Done
()
:
t
.
Fatal
(
"First blocks channel never closed"
)
}
}
return
returnedBlocks
}
func
verifySingleTerminalError
(
ctx
context
.
Context
,
t
*
testing
.
T
,
errChan
<-
chan
ResponseError
)
{
select
{
case
err
:=
<-
errChan
:
if
err
.
Error
==
nil
||
err
.
IsTerminal
!=
true
{
t
.
Fatal
(
"should have sent a erminal error but did not"
)
}
case
<-
ctx
.
Done
()
:
t
.
Fatal
(
"no errors sent"
)
}
select
{
case
_
,
ok
:=
<-
errChan
:
if
ok
{
t
.
Fatal
(
"shouldn't have sent second error but did"
)
}
case
<-
ctx
.
Done
()
:
t
.
Fatal
(
"errors not closed"
)
}
}
func
verifyEmptyErrors
(
ctx
context
.
Context
,
t
*
testing
.
T
,
errChan
<-
chan
ResponseError
)
{
for
{
select
{
case
_
,
ok
:=
<-
errChan
:
if
!
ok
{
return
}
t
.
Fatal
(
"errors were sent but shouldn't have been"
)
case
<-
ctx
.
Done
()
:
t
.
Fatal
(
"errors channel never closed"
)
}
}
}
func
verifyEmptyBlocks
(
ctx
context
.
Context
,
t
*
testing
.
T
,
blockChan
<-
chan
ResponseProgress
)
{
for
{
select
{
case
_
,
ok
:=
<-
blockChan
:
if
!
ok
{
return
}
t
.
Fatal
(
"blocks were sent but shouldn't have been"
)
case
<-
ctx
.
Done
()
:
t
.
Fatal
(
"blocks channel never closed"
)
}
}
}
func
readNNetworkRequests
(
ctx
context
.
Context
,
t
*
testing
.
T
,
requestRecordChan
<-
chan
requestRecord
,
count
int
)
[]
requestRecord
{
requestRecords
:=
make
([]
requestRecord
,
0
,
count
)
for
i
:=
0
;
i
<
count
;
i
++
{
select
{
case
rr
:=
<-
requestRecordChan
:
requestRecords
=
append
(
requestRecords
,
rr
)
case
<-
ctx
.
Done
()
:
t
.
Fatal
(
"should have sent two requests to the network but did not"
)
}
}
return
requestRecords
}
func
verifyMatchedBlocks
(
t
*
testing
.
T
,
actualBlocks
[]
blocks
.
Block
,
expectedBlocks
[]
blocks
.
Block
)
{
if
len
(
actualBlocks
)
!=
len
(
expectedBlocks
)
{
t
.
Fatal
(
"wrong number of blocks sent"
)
}
for
_
,
blk
:=
range
actualBlocks
{
if
!
testutil
.
ContainsBlock
(
expectedBlocks
,
blk
)
{
t
.
Fatal
(
"wrong block sent"
)
}
}
}
func
TestNormalSimultaneousFetch
(
t
*
testing
.
T
)
{
func
TestNormalSimultaneousFetch
(
t
*
testing
.
T
)
{
requestRecordChan
:=
make
(
chan
requestRecord
,
2
)
requestRecordChan
:=
make
(
chan
requestRecord
,
2
)
fph
:=
&
fakePeerHandler
{
requestRecordChan
}
fph
:=
&
fakePeerHandler
{
requestRecordChan
}
...
@@ -67,15 +169,7 @@ func TestNormalSimultaneousFetch(t *testing.T) {
...
@@ -67,15 +169,7 @@ func TestNormalSimultaneousFetch(t *testing.T) {
returnedBlocksChan1
,
returnedErrorChan1
:=
requestManager
.
SendRequest
(
requestCtx
,
peers
[
0
],
s1
)
returnedBlocksChan1
,
returnedErrorChan1
:=
requestManager
.
SendRequest
(
requestCtx
,
peers
[
0
],
s1
)
returnedBlocksChan2
,
returnedErrorChan2
:=
requestManager
.
SendRequest
(
requestCtx
,
peers
[
1
],
s2
)
returnedBlocksChan2
,
returnedErrorChan2
:=
requestManager
.
SendRequest
(
requestCtx
,
peers
[
1
],
s2
)
requestRecords
:=
make
([]
requestRecord
,
0
,
2
)
requestRecords
:=
readNNetworkRequests
(
requestCtx
,
t
,
requestRecordChan
,
2
)
for
i
:=
0
;
i
<
2
;
i
++
{
select
{
case
rr
:=
<-
requestRecordChan
:
requestRecords
=
append
(
requestRecords
,
rr
)
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"should have sent two requests to the network but did not"
)
}
}
if
requestRecords
[
0
]
.
p
!=
peers
[
0
]
||
requestRecords
[
1
]
.
p
!=
peers
[
1
]
||
if
requestRecords
[
0
]
.
p
!=
peers
[
0
]
||
requestRecords
[
1
]
.
p
!=
peers
[
1
]
||
requestRecords
[
0
]
.
isCancel
!=
false
||
requestRecords
[
1
]
.
isCancel
!=
false
||
requestRecords
[
0
]
.
isCancel
!=
false
||
requestRecords
[
1
]
.
isCancel
!=
false
||
...
@@ -115,79 +209,13 @@ func TestNormalSimultaneousFetch(t *testing.T) {
...
@@ -115,79 +209,13 @@ func TestNormalSimultaneousFetch(t *testing.T) {
requestManager
.
ProcessResponses
(
msg2
)
requestManager
.
ProcessResponses
(
msg2
)
var
returnedBlocks1
[]
blocks
.
Block
returnedBlocks1
:=
collectBlocks
(
requestCtx
,
t
,
returnedBlocksChan1
)
collectFirstBlocks
:
verifyMatchedBlocks
(
t
,
returnedBlocks1
,
firstBlocks
)
for
{
returnedBlocks2
:=
collectBlocks
(
requestCtx
,
t
,
returnedBlocksChan2
)
select
{
verifyMatchedBlocks
(
t
,
returnedBlocks2
[
:
5
],
firstBlocks
)
case
blk
,
ok
:=
<-
returnedBlocksChan1
:
verifyMatchedBlocks
(
t
,
returnedBlocks2
[
5
:
],
moreBlocks
)
if
!
ok
{
verifyEmptyErrors
(
requestCtx
,
t
,
returnedErrorChan1
)
break
collectFirstBlocks
verifyEmptyErrors
(
requestCtx
,
t
,
returnedErrorChan2
)
}
returnedBlocks1
=
append
(
returnedBlocks1
,
blk
)
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"First blocks channel never closed"
)
}
}
if
len
(
returnedBlocks1
)
!=
5
{
t
.
Fatal
(
"wrong number of blocks sent"
)
}
for
_
,
blk
:=
range
returnedBlocks1
{
if
!
testutil
.
ContainsBlock
(
firstBlocks
,
blk
)
{
t
.
Fatal
(
"wrong block sent"
)
}
}
var
returnedBlocks2
[]
blocks
.
Block
collectSecondBlocks
:
for
{
select
{
case
blk
,
ok
:=
<-
returnedBlocksChan2
:
if
!
ok
{
break
collectSecondBlocks
}
returnedBlocks2
=
append
(
returnedBlocks2
,
blk
)
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"Second blocks channel never closed"
)
}
}
if
len
(
returnedBlocks2
)
!=
10
{
t
.
Fatal
(
"wrong number of blocks sent"
)
}
for
i
,
blk
:=
range
returnedBlocks2
{
if
i
<
5
{
if
!
testutil
.
ContainsBlock
(
firstBlocks
,
blk
)
{
t
.
Fatal
(
"wrong block sent"
)
}
}
else
{
if
!
testutil
.
ContainsBlock
(
moreBlocks
,
blk
)
{
t
.
Fatal
(
"wrong block sent"
)
}
}
}
collectFirstErrors
:
for
{
select
{
case
_
,
ok
:=
<-
returnedErrorChan1
:
if
!
ok
{
break
collectFirstErrors
}
t
.
Fatal
(
"errors were sent but shouldn't have been"
)
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"errors channel never closed"
)
}
}
collectSecondErrors
:
for
{
select
{
case
_
,
ok
:=
<-
returnedErrorChan2
:
if
!
ok
{
break
collectSecondErrors
}
t
.
Fatal
(
"errors were sent but shouldn't have been"
)
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"errors channel never closed"
)
}
}
}
}
func
TestCancelRequestInProgress
(
t
*
testing
.
T
)
{
func
TestCancelRequestInProgress
(
t
*
testing
.
T
)
{
...
@@ -212,15 +240,7 @@ func TestCancelRequestInProgress(t *testing.T) {
...
@@ -212,15 +240,7 @@ func TestCancelRequestInProgress(t *testing.T) {
returnedBlocksChan1
,
returnedErrorChan1
:=
requestManager
.
SendRequest
(
requestCtx1
,
peers
[
0
],
s1
)
returnedBlocksChan1
,
returnedErrorChan1
:=
requestManager
.
SendRequest
(
requestCtx1
,
peers
[
0
],
s1
)
returnedBlocksChan2
,
returnedErrorChan2
:=
requestManager
.
SendRequest
(
requestCtx2
,
peers
[
1
],
s2
)
returnedBlocksChan2
,
returnedErrorChan2
:=
requestManager
.
SendRequest
(
requestCtx2
,
peers
[
1
],
s2
)
requestRecords
:=
make
([]
requestRecord
,
0
,
2
)
requestRecords
:=
readNNetworkRequests
(
requestCtx
,
t
,
requestRecordChan
,
2
)
for
i
:=
0
;
i
<
2
;
i
++
{
select
{
case
rr
:=
<-
requestRecordChan
:
requestRecords
=
append
(
requestRecords
,
rr
)
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"should have sent two requests to the network but did not"
)
}
}
// for now, we are just going going to test that blocks get sent to all peers
// for now, we are just going going to test that blocks get sent to all peers
// whose connection is still open
// whose connection is still open
...
@@ -234,25 +254,13 @@ func TestCancelRequestInProgress(t *testing.T) {
...
@@ -234,25 +254,13 @@ func TestCancelRequestInProgress(t *testing.T) {
}
}
requestManager
.
ProcessResponses
(
msg
)
requestManager
.
ProcessResponses
(
msg
)
var
returnedBlocks1
[]
blocks
.
Block
returnedBlocks1
:=
readNBlocks
(
requestCtx
,
t
,
returnedBlocksChan1
,
5
)
for
i
:=
0
;
i
<
5
;
i
++
{
select
{
case
blk
:=
<-
returnedBlocksChan1
:
returnedBlocks1
=
append
(
returnedBlocks1
,
blk
)
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"First blocks channel never closed"
)
}
}
cancel1
()
cancel1
()
select
{
rr
:=
readNNetworkRequests
(
requestCtx
,
t
,
requestRecordChan
,
1
)[
0
]
case
rr
:=
<-
requestRecordChan
:
if
rr
.
isCancel
!=
true
||
rr
.
requestID
!=
requestRecords
[
0
]
.
requestID
{
if
rr
.
isCancel
!=
true
||
rr
.
requestID
!=
requestRecords
[
0
]
.
requestID
{
t
.
Fatal
(
"did not send correct cancel message over network"
)
t
.
Fatal
(
"did not send correct cancel message over network"
)
}
}
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"did not send cancel message over network"
)
}
moreBlocks
:=
testutil
.
GenerateBlocksOfSize
(
5
,
100
)
moreBlocks
:=
testutil
.
GenerateBlocksOfSize
(
5
,
100
)
msg2
:=
gsmsg
.
New
()
msg2
:=
gsmsg
.
New
()
...
@@ -263,78 +271,13 @@ func TestCancelRequestInProgress(t *testing.T) {
...
@@ -263,78 +271,13 @@ func TestCancelRequestInProgress(t *testing.T) {
}
}
requestManager
.
ProcessResponses
(
msg2
)
requestManager
.
ProcessResponses
(
msg2
)
collectFirstBlocks
:
returnedBlocks1
=
append
(
returnedBlocks1
,
collectBlocks
(
requestCtx
,
t
,
returnedBlocksChan1
)
...
)
for
{
verifyMatchedBlocks
(
t
,
returnedBlocks1
,
firstBlocks
)
select
{
returnedBlocks2
:=
collectBlocks
(
requestCtx
,
t
,
returnedBlocksChan2
)
case
blk
,
ok
:=
<-
returnedBlocksChan1
:
verifyMatchedBlocks
(
t
,
returnedBlocks2
[
:
5
],
firstBlocks
)
if
!
ok
{
verifyMatchedBlocks
(
t
,
returnedBlocks2
[
5
:
],
moreBlocks
)
break
collectFirstBlocks
verifyEmptyErrors
(
requestCtx
,
t
,
returnedErrorChan1
)
}
verifyEmptyErrors
(
requestCtx
,
t
,
returnedErrorChan2
)
returnedBlocks1
=
append
(
returnedBlocks1
,
blk
)
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"First blocks channel never closed"
)
}
}
if
len
(
returnedBlocks1
)
!=
5
{
t
.
Fatal
(
"wrong number of blocks sent"
)
}
for
_
,
blk
:=
range
returnedBlocks1
{
if
!
testutil
.
ContainsBlock
(
firstBlocks
,
blk
)
{
t
.
Fatal
(
"wrong block sent"
)
}
}
var
returnedBlocks2
[]
blocks
.
Block
collectSecondBlocks
:
for
{
select
{
case
blk
,
ok
:=
<-
returnedBlocksChan2
:
if
!
ok
{
break
collectSecondBlocks
}
returnedBlocks2
=
append
(
returnedBlocks2
,
blk
)
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"Second blocks channel never closed"
)
}
}
if
len
(
returnedBlocks2
)
!=
10
{
t
.
Fatal
(
"wrong number of blocks sent"
)
}
for
i
,
blk
:=
range
returnedBlocks2
{
if
i
<
5
{
if
!
testutil
.
ContainsBlock
(
firstBlocks
,
blk
)
{
t
.
Fatal
(
"wrong block sent"
)
}
}
else
{
if
!
testutil
.
ContainsBlock
(
moreBlocks
,
blk
)
{
t
.
Fatal
(
"wrong block sent"
)
}
}
}
collectFirstErrors
:
for
{
select
{
case
_
,
ok
:=
<-
returnedErrorChan1
:
if
!
ok
{
break
collectFirstErrors
}
t
.
Fatal
(
"errors were sent but shouldn't have been"
)
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"errors channel never closed"
)
}
}
collectSecondErrors
:
for
{
select
{
case
_
,
ok
:=
<-
returnedErrorChan2
:
if
!
ok
{
break
collectSecondErrors
}
t
.
Fatal
(
"errors were sent but shouldn't have been"
)
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"errors channel never closed"
)
}
}
}
}
func
TestCancelManagerExitsGracefully
(
t
*
testing
.
T
)
{
func
TestCancelManagerExitsGracefully
(
t
*
testing
.
T
)
{
...
@@ -354,12 +297,7 @@ func TestCancelManagerExitsGracefully(t *testing.T) {
...
@@ -354,12 +297,7 @@ func TestCancelManagerExitsGracefully(t *testing.T) {
s
:=
testbridge
.
NewMockSelectorSpec
(
testutil
.
GenerateCids
(
5
))
s
:=
testbridge
.
NewMockSelectorSpec
(
testutil
.
GenerateCids
(
5
))
returnedBlocksChan
,
returnedErrorChan
:=
requestManager
.
SendRequest
(
requestCtx
,
peers
[
0
],
s
)
returnedBlocksChan
,
returnedErrorChan
:=
requestManager
.
SendRequest
(
requestCtx
,
peers
[
0
],
s
)
var
rr
requestRecord
rr
:=
readNNetworkRequests
(
requestCtx
,
t
,
requestRecordChan
,
1
)[
0
]
select
{
case
rr
=
<-
requestRecordChan
:
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"should have request to the network but did not"
)
}
// for now, we are just going going to test that blocks get sent to all peers
// for now, we are just going going to test that blocks get sent to all peers
// whose connection is still open
// whose connection is still open
...
@@ -370,16 +308,7 @@ func TestCancelManagerExitsGracefully(t *testing.T) {
...
@@ -370,16 +308,7 @@ func TestCancelManagerExitsGracefully(t *testing.T) {
msg
.
AddBlock
(
blk
)
msg
.
AddBlock
(
blk
)
}
}
requestManager
.
ProcessResponses
(
msg
)
requestManager
.
ProcessResponses
(
msg
)
var
returnedBlocks
[]
blocks
.
Block
returnedBlocks
:=
readNBlocks
(
requestCtx
,
t
,
returnedBlocksChan
,
5
)
for
i
:=
0
;
i
<
5
;
i
++
{
select
{
case
blk
:=
<-
returnedBlocksChan
:
returnedBlocks
=
append
(
returnedBlocks
,
blk
)
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"blocks channel never closed"
)
}
}
managerCancel
()
managerCancel
()
moreBlocks
:=
testutil
.
GenerateBlocksOfSize
(
5
,
100
)
moreBlocks
:=
testutil
.
GenerateBlocksOfSize
(
5
,
100
)
...
@@ -390,38 +319,9 @@ func TestCancelManagerExitsGracefully(t *testing.T) {
...
@@ -390,38 +319,9 @@ func TestCancelManagerExitsGracefully(t *testing.T) {
}
}
requestManager
.
ProcessResponses
(
msg2
)
requestManager
.
ProcessResponses
(
msg2
)
collectFirstBlocks
:
returnedBlocks
=
append
(
returnedBlocks
,
collectBlocks
(
requestCtx
,
t
,
returnedBlocksChan
)
...
)
for
{
verifyMatchedBlocks
(
t
,
returnedBlocks
,
firstBlocks
)
select
{
verifyEmptyErrors
(
requestCtx
,
t
,
returnedErrorChan
)
case
blk
,
ok
:=
<-
returnedBlocksChan
:
if
!
ok
{
break
collectFirstBlocks
}
returnedBlocks
=
append
(
returnedBlocks
,
blk
)
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"blocks channel never closed"
)
}
}
if
len
(
returnedBlocks
)
!=
5
{
t
.
Fatal
(
"wrong number of blocks sent"
)
}
for
_
,
blk
:=
range
returnedBlocks
{
if
!
testutil
.
ContainsBlock
(
firstBlocks
,
blk
)
{
t
.
Fatal
(
"wrong block sent"
)
}
}
collectFirstErrors
:
for
{
select
{
case
_
,
ok
:=
<-
returnedErrorChan
:
if
!
ok
{
break
collectFirstErrors
}
t
.
Fatal
(
"errors were sent but shouldn't have been"
)
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"errors channel never closed"
)
}
}
}
}
func
TestInvalidSelector
(
t
*
testing
.
T
)
{
func
TestInvalidSelector
(
t
*
testing
.
T
)
{
...
@@ -440,26 +340,8 @@ func TestInvalidSelector(t *testing.T) {
...
@@ -440,26 +340,8 @@ func TestInvalidSelector(t *testing.T) {
s
:=
testbridge
.
NewInvalidSelectorSpec
(
testutil
.
GenerateCids
(
5
))
s
:=
testbridge
.
NewInvalidSelectorSpec
(
testutil
.
GenerateCids
(
5
))
returnedBlocksChan
,
returnedErrorChan
:=
requestManager
.
SendRequest
(
requestCtx
,
peers
[
0
],
s
)
returnedBlocksChan
,
returnedErrorChan
:=
requestManager
.
SendRequest
(
requestCtx
,
peers
[
0
],
s
)
select
{
verifySingleTerminalError
(
requestCtx
,
t
,
returnedErrorChan
)
case
err
:=
<-
returnedErrorChan
:
verifyEmptyBlocks
(
requestCtx
,
t
,
returnedBlocksChan
)
if
err
.
Error
==
nil
||
err
.
IsTerminal
!=
true
{
t
.
Fatal
(
"should have sent a single terminal error but did not"
)
}
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"no errors sent"
)
}
collectFirstBlocks
:
for
{
select
{
case
_
,
ok
:=
<-
returnedBlocksChan
:
if
!
ok
{
break
collectFirstBlocks
}
t
.
Fatal
(
"blocks were sent but shouldn't have been"
)
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"blocks channel never closed"
)
}
}
}
}
func
TestUnencodableSelector
(
t
*
testing
.
T
)
{
func
TestUnencodableSelector
(
t
*
testing
.
T
)
{
...
@@ -478,24 +360,6 @@ func TestUnencodableSelector(t *testing.T) {
...
@@ -478,24 +360,6 @@ func TestUnencodableSelector(t *testing.T) {
s
:=
testbridge
.
NewUnencodableSelectorSpec
(
testutil
.
GenerateCids
(
5
))
s
:=
testbridge
.
NewUnencodableSelectorSpec
(
testutil
.
GenerateCids
(
5
))
returnedBlocksChan
,
returnedErrorChan
:=
requestManager
.
SendRequest
(
requestCtx
,
peers
[
0
],
s
)
returnedBlocksChan
,
returnedErrorChan
:=
requestManager
.
SendRequest
(
requestCtx
,
peers
[
0
],
s
)
select
{
verifySingleTerminalError
(
requestCtx
,
t
,
returnedErrorChan
)
case
err
:=
<-
returnedErrorChan
:
verifyEmptyBlocks
(
requestCtx
,
t
,
returnedBlocksChan
)
if
err
.
Error
==
nil
||
err
.
IsTerminal
!=
true
{
t
.
Fatal
(
"should have sent a single terminal error but did not"
)
}
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"no errors sent"
)
}
collectFirstBlocks
:
for
{
select
{
case
_
,
ok
:=
<-
returnedBlocksChan
:
if
!
ok
{
break
collectFirstBlocks
}
t
.
Fatal
(
"blocks were sent but shouldn't have been"
)
case
<-
requestCtx
.
Done
()
:
t
.
Fatal
(
"blocks channel never closed"
)
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment