rpcsrv: fix TestSubClientWaitWithMissedEvent

Add error channel to prevent data race in the test.
Increase waiting interval for subscriptions awaiting up to 2 seconds.
Failing is caused by slow subscriptions.

Close #2958

Signed-off-by: Ekaterina Pavlova <ekt@morphbits.io>

Signed-off-by: Ekaterina Pavlova <ekt@morphbits.io>
This commit is contained in:
Ekaterina Pavlova 2024-04-01 10:52:13 +03:00
parent 86f16bb931
commit 56e6119f78

View file

@ -2051,9 +2051,14 @@ func testSubClientWaitWithMissedEvent(t *testing.T, local bool) {
tx := b1.Transactions[0] tx := b1.Transactions[0]
rcvr := make(chan *state.AppExecResult) rcvr := make(chan *state.AppExecResult)
errCh := make(chan error) // Error channel for goroutine errors
go func() { go func() {
aer, err := act.Wait(tx.Hash(), tx.ValidUntilBlock, nil) aer, err := act.Wait(tx.Hash(), tx.ValidUntilBlock, nil)
require.NoError(t, err) if err != nil {
errCh <- err
return
}
rcvr <- aer rcvr <- aer
}() }()
@ -2064,7 +2069,7 @@ func testSubClientWaitWithMissedEvent(t *testing.T, local bool) {
rpcSrv.subsLock.Lock() rpcSrv.subsLock.Lock()
defer rpcSrv.subsLock.Unlock() defer rpcSrv.subsLock.Unlock()
return len(rpcSrv.subscribers) == 1 return len(rpcSrv.subscribers) == 1
}, time.Second, 100*time.Millisecond) }, 2*time.Second, 100*time.Millisecond)
rpcSrv.subsLock.Lock() rpcSrv.subsLock.Lock()
// Suppress normal event delivery. // Suppress normal event delivery.
@ -2101,6 +2106,8 @@ waitloop:
require.Equal(t, trigger.Application, aer.Trigger) require.Equal(t, trigger.Application, aer.Trigger)
require.Equal(t, vmstate.Halt, aer.VMState) require.Equal(t, vmstate.Halt, aer.VMState)
break waitloop break waitloop
case err := <-errCh:
t.Fatalf("Error waiting for transaction: %v", err)
case <-time.NewTimer(chain.GetConfig().TimePerBlock).C: case <-time.NewTimer(chain.GetConfig().TimePerBlock).C:
t.Fatal("transaction failed to be awaited") t.Fatal("transaction failed to be awaited")
} }