@@ -7,11 +7,14 @@ package api
7
7
8
8
import (
9
9
"context"
10
+ "fmt"
10
11
"runtime"
11
12
"testing"
12
13
"time"
13
14
14
15
"github.com/linuxboot/contest/pkg/job"
16
+ "github.com/linuxboot/contest/pkg/signaling"
17
+ "github.com/linuxboot/contest/pkg/signals"
15
18
16
19
"github.com/facebookincubator/go-belt/tool/logger"
17
20
@@ -38,6 +41,83 @@ func (d dummyEventMsg) Requestor() EventRequestor {
38
41
return "unit-test"
39
42
}
40
43
44
+ func TestStartContext (t * testing.T ) {
45
+ t .Run ("NoCancel" , func (t * testing.T ) {
46
+ apiInstance , err := New (OptionServerID ("unit-test" ))
47
+ require .NoError (t , err )
48
+
49
+ ctx , cancelFunc := context .WithCancel (context .Background ())
50
+ cancelFunc ()
51
+
52
+ go func () {
53
+ ev := <- apiInstance .Events
54
+ var err error
55
+ select {
56
+ case <- ev .Context .Done ():
57
+ err = fmt .Errorf ("cancel signal was propagated" )
58
+ default :
59
+ }
60
+ ev .RespCh <- & EventResponse {
61
+ Err : err ,
62
+ }
63
+ }()
64
+
65
+ r , err := apiInstance .Start (ctx , "unit-test-requestor" , "unit-test-job" )
66
+ require .NoError (t , err )
67
+ require .NoError (t , r .Err )
68
+ })
69
+
70
+ t .Run ("NoPause" , func (t * testing.T ) {
71
+ apiInstance , err := New (OptionServerID ("unit-test" ))
72
+ require .NoError (t , err )
73
+
74
+ ctx , pauseFunc := signaling .WithSignal (context .Background (), signals .Paused )
75
+ pauseFunc ()
76
+
77
+ go func () {
78
+ ev := <- apiInstance .Events
79
+ var err error
80
+ select {
81
+ case <- ev .Context .Done ():
82
+ err = fmt .Errorf ("pause signal was propagated" )
83
+ default :
84
+ }
85
+ ev .RespCh <- & EventResponse {
86
+ Err : err ,
87
+ }
88
+ }()
89
+
90
+ r , err := apiInstance .Start (ctx , "unit-test-requestor" , "unit-test-job" )
91
+ require .NoError (t , err )
92
+ require .NoError (t , r .Err )
93
+ })
94
+
95
+ t .Run ("HaveValues" , func (t * testing.T ) {
96
+ apiInstance , err := New (OptionServerID ("unit-test" ))
97
+ require .NoError (t , err )
98
+
99
+ type privateStringType string
100
+ var ctxKey = privateStringType ("unit-test-key" )
101
+
102
+ ctx := context .WithValue (context .Background (), ctxKey , "unit-test-value" )
103
+
104
+ go func () {
105
+ ev := <- apiInstance .Events
106
+ var err error
107
+ if ctx .Value (ctxKey ) != ev .Context .Value (ctxKey ) {
108
+ err = fmt .Errorf ("context value was not propagated correctly: <%v> != <%v>" , ev .Context .Value (ctxKey ), ctx .Value (ctxKey ))
109
+ }
110
+ ev .RespCh <- & EventResponse {
111
+ Err : err ,
112
+ }
113
+ }()
114
+
115
+ r , err := apiInstance .Start (ctx , "unit-test-requestor" , "unit-test-job" )
116
+ require .NoError (t , err )
117
+ require .NoError (t , r .Err )
118
+ })
119
+ }
120
+
41
121
func TestEventTimeout (t * testing.T ) {
42
122
t .Run ("timeout" , func (t * testing.T ) {
43
123
apiInstance , err := New (OptionServerID ("unit-test" ), OptionEventTimeout (time .Nanosecond ))
0 commit comments