-
Notifications
You must be signed in to change notification settings - Fork 0
/
workerloop_test.go
63 lines (51 loc) · 1.89 KB
/
workerloop_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package leanhelix
import (
"context"
"github.com/orbs-network/lean-helix-go/services/electiontrigger"
"github.com/orbs-network/lean-helix-go/services/interfaces"
"github.com/orbs-network/lean-helix-go/services/logger"
"github.com/orbs-network/lean-helix-go/spec/types/go/primitives"
"github.com/orbs-network/lean-helix-go/state"
"github.com/orbs-network/lean-helix-go/test"
"github.com/orbs-network/lean-helix-go/test/mocks"
"sync"
"testing"
"time"
)
// TODO This file is a candidate for removal - impractical to unit-test it
func DummyWorkerConfig() *interfaces.Config {
return &interfaces.Config{
InstanceId: 123,
Communication: nil,
Membership: mocks.NewFakeMembership(primitives.MemberId{0, 1, 2}, nil, nil, true),
BlockUtils: nil,
KeyManager: nil,
ElectionTimeoutOnV0: 10 * time.Millisecond,
OnElectionCB: nil,
Storage: nil,
Logger: logger.NewSilentLogger(),
MsgChanBufLen: 10,
UpdateStateChanBufLen: 10,
ElectionChanBufLen: 0,
}
}
func TestWorkerLoopReturnsOnMainContextCancellation(t *testing.T) {
test.WithContext(func(ctx context.Context) {
mainCtx, mainCancel := context.WithCancel(ctx)
wg := &sync.WaitGroup{}
wg.Add(1)
cfg := DummyWorkerConfig()
s := state.NewState()
electionTrigger := Electiontrigger.NewTimerBasedElectionTrigger(cfg.ElectionTimeoutOnV0, nil)
workerLoop := NewWorkerLoop(s, cfg, logger.NewLhLogger(cfg, s), electionTrigger, nil, nil)
go func() {
workerLoop.Run(mainCtx)
wg.Done()
}()
mainCancel()
test.FailIfNotDoneByTimeout(t, wg, 1*time.Second, "Main context was canceled but worker loop did not return by timeout")
})
}
// Write test that teases out Worker structure of loop with worker context that is canceled on NodeSync and Election
func TestWorkerContextPropagatedToCancellableOperationsInWorkerLoop(t *testing.T) {
}