@@ -7,11 +7,14 @@ package api
77
88import (
99 "context"
10+ "fmt"
1011 "runtime"
1112 "testing"
1213 "time"
1314
1415 "github.com/linuxboot/contest/pkg/job"
16+ "github.com/linuxboot/contest/pkg/signaling"
17+ "github.com/linuxboot/contest/pkg/signals"
1518
1619 "github.com/facebookincubator/go-belt/tool/logger"
1720
@@ -38,6 +41,83 @@ func (d dummyEventMsg) Requestor() EventRequestor {
3841 return "unit-test"
3942}
4043
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+
41121func TestEventTimeout (t * testing.T ) {
42122 t .Run ("timeout" , func (t * testing.T ) {
43123 apiInstance , err := New (OptionServerID ("unit-test" ), OptionEventTimeout (time .Nanosecond ))
0 commit comments