swarm/network/stream: Fix flaky tests in GetSubscriptionsRPC test (#19227)
* swarm/network/stream: fixed timing issues * swarm/network/stream: only count first iteration of subscriptions * swarm/network/stream/: fix linter errors
This commit is contained in:
parent
72b21db2d3
commit
a87776a5fe
@ -1207,7 +1207,12 @@ func TestGetSubscriptionsRPC(t *testing.T) {
|
||||
|
||||
// we use this subscriptionFunc for this test: just increases count and calls the actual subscription
|
||||
subscriptionFunc = func(r *Registry, p *network.Peer, bin uint8, subs map[enode.ID]map[Stream]struct{}) bool {
|
||||
// syncing starts after syncUpdateDelay and loops after that Duration; we only want to count at the first iteration
|
||||
// in the first iteration, subs will be empty (no existing subscriptions), thus we can use this check
|
||||
// this avoids flakyness
|
||||
if len(subs) == 0 {
|
||||
expectedMsgCount.inc()
|
||||
}
|
||||
doRequestSubscription(r, p, bin, subs)
|
||||
return true
|
||||
}
|
||||
@ -1245,19 +1250,19 @@ func TestGetSubscriptionsRPC(t *testing.T) {
|
||||
ctx, cancelSimRun := context.WithTimeout(context.Background(), 3*time.Minute)
|
||||
defer cancelSimRun()
|
||||
|
||||
// setup the filter for SubscribeMsg
|
||||
msgs := sim.PeerEvents(
|
||||
context.Background(),
|
||||
sim.UpNodeIDs(),
|
||||
simulation.NewPeerEventsFilter().ReceivedMessages().Protocol("stream").MsgCode(subscribeMsgCode),
|
||||
)
|
||||
|
||||
// upload a snapshot
|
||||
err := sim.UploadSnapshot(fmt.Sprintf("testing/snapshot_%d.json", nodeCount))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// setup the filter for SubscribeMsg
|
||||
msgs := sim.PeerEvents(
|
||||
context.Background(),
|
||||
sim.NodeIDs(),
|
||||
simulation.NewPeerEventsFilter().ReceivedMessages().Protocol("stream").MsgCode(subscribeMsgCode),
|
||||
)
|
||||
|
||||
// strategy: listen to all SubscribeMsg events; after every event we wait
|
||||
// if after `waitDuration` no more messages are being received, we assume the
|
||||
// subscription phase has terminated!
|
||||
@ -1267,9 +1272,9 @@ func TestGetSubscriptionsRPC(t *testing.T) {
|
||||
// any new subscriptions any more
|
||||
go func() {
|
||||
//for long running sims, waiting 1 sec will not be enough
|
||||
waitDuration := time.Duration(nodeCount/16) * time.Second
|
||||
waitDuration := 1 * time.Second
|
||||
if *longrunning {
|
||||
waitDuration = syncUpdateDelay
|
||||
waitDuration = 3 * time.Second
|
||||
}
|
||||
for {
|
||||
select {
|
||||
@ -1335,8 +1340,10 @@ func TestGetSubscriptionsRPC(t *testing.T) {
|
||||
log.Debug("All node streams counted", "realCount", realCount)
|
||||
}
|
||||
emc := expectedMsgCount.count()
|
||||
if realCount != emc {
|
||||
return fmt.Errorf("Real subscriptions and expected amount don't match; real: %d, expected: %d", realCount, emc)
|
||||
// after a subscription request, internally a live AND a history stream will be subscribed,
|
||||
// thus the real count should be half of the actual request subscriptions sent
|
||||
if realCount/2 != emc {
|
||||
return fmt.Errorf("Real subscriptions and expected amount don't match; real: %d, expected: %d", realCount/2, emc)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user