@@ -154,33 +154,131 @@ func TestRunner_Run(t *testing.T) {
154154 })
155155}
156156
157- func TestNewTeeRunner (t * testing.T ) {
158- t .Run ("Specified list" , func (t * testing.T ) {
157+ func TestHandlerInTee (t * testing.T ) {
158+ t .Run ("specified list sets requirements on subscription " , func (t * testing.T ) {
159159 acceptedTees := []cre.TeeAndRegions {{Type : cre .TeeType_TEE_TYPE_AWS_NITRO , Regions : []string {"us-west-2" }}}
160160
161- teeRunner := newTeeRunner (
162- acceptedTees , func (b []byte ) (string , error ) { return string (b ), nil }, testRunnerInternals ( t , subscribeRequest ) , testRuntimeInternals (t ))
161+ internals := testRunnerInternals ( t , subscribeRequest )
162+ dr := newRunner ( func (b []byte ) (string , error ) { return string (b ), nil }, internals , testRuntimeInternals (t ))
163163
164- requirements := teeRunner .(teeRunnerWrapper [string ]).baseRunner .(* subscriber [string , cre.TeeRuntime ]).runnerInternals .(* runnerInternalsTestHook ).requirementsSent
165- actual := & sdk.Requirements {}
166- require .NoError (t , proto .Unmarshal (requirements , actual ))
167- expected := & sdk.Requirements {
168- Tee : & sdk.Tee {Type : & sdk.Tee_TypeSelection {TypeSelection : & sdk.TeeTypeSelection {Types : []* sdk.TeeTypeAndRegions {{Type : sdk .TeeType_TEE_TYPE_AWS_NITRO , Regions : []string {"us-west-2" }}}}}},
164+ dr .Run (func (string , * slog.Logger , cre.SecretsProvider ) (cre.Workflow [string ], error ) {
165+ return cre.Workflow [string ]{
166+ cre .HandlerInTee (
167+ basictrigger .Trigger (testworkflow .TestWorkflowTriggerConfig ()),
168+ func (_ string , _ cre.TeeRuntime , _ * basictrigger.Outputs ) (string , error ) {
169+ return "tee-result" , nil
170+ },
171+ acceptedTees ,
172+ ),
173+ }, nil
174+ })
175+
176+ actual := & sdk.ExecutionResult {}
177+ require .NoError (t , proto .Unmarshal (internals .sentResponse , actual ))
178+ switch result := actual .Result .(type ) {
179+ case * sdk.ExecutionResult_TriggerSubscriptions :
180+ subs := result .TriggerSubscriptions .Subscriptions
181+ require .Len (t , subs , 1 )
182+ expected := & sdk.Requirements {
183+ Tee : & sdk.Tee {Type : & sdk.Tee_TypeSelection {TypeSelection : & sdk.TeeTypeSelection {Types : []* sdk.TeeTypeAndRegions {{Type : sdk .TeeType_TEE_TYPE_AWS_NITRO , Regions : []string {"us-west-2" }}}}}},
184+ }
185+ assert .True (t , proto .Equal (expected , subs [0 ].Requirements ))
186+ default :
187+ assert .Fail (t , "unexpected result type" , result )
188+ }
189+ })
190+
191+ t .Run ("any tee sets requirements on subscription" , func (t * testing.T ) {
192+ internals := testRunnerInternals (t , subscribeRequest )
193+ dr := newRunner (func (b []byte ) (string , error ) { return string (b ), nil }, internals , testRuntimeInternals (t ))
194+
195+ dr .Run (func (string , * slog.Logger , cre.SecretsProvider ) (cre.Workflow [string ], error ) {
196+ return cre.Workflow [string ]{
197+ cre .HandlerInTee (
198+ basictrigger .Trigger (testworkflow .TestWorkflowTriggerConfig ()),
199+ func (_ string , _ cre.TeeRuntime , _ * basictrigger.Outputs ) (string , error ) {
200+ return "tee-result" , nil
201+ },
202+ cre.AnyTee {},
203+ ),
204+ }, nil
205+ })
206+
207+ actual := & sdk.ExecutionResult {}
208+ require .NoError (t , proto .Unmarshal (internals .sentResponse , actual ))
209+ switch result := actual .Result .(type ) {
210+ case * sdk.ExecutionResult_TriggerSubscriptions :
211+ subs := result .TriggerSubscriptions .Subscriptions
212+ require .Len (t , subs , 1 )
213+ expected := & sdk.Requirements {
214+ Tee : & sdk.Tee {Type : & sdk.Tee_Any {Any : & emptypb.Empty {}}},
215+ }
216+ assert .True (t , proto .Equal (expected , subs [0 ].Requirements ))
217+ default :
218+ assert .Fail (t , "unexpected result type" , result )
219+ }
220+ })
221+
222+ t .Run ("regular handler has no requirements on subscription" , func (t * testing.T ) {
223+ internals := testRunnerInternals (t , subscribeRequest )
224+ dr := newRunner (func (b []byte ) (string , error ) { return string (b ), nil }, internals , testRuntimeInternals (t ))
225+
226+ dr .Run (func (string , * slog.Logger , cre.SecretsProvider ) (cre.Workflow [string ], error ) {
227+ return cre.Workflow [string ]{
228+ cre .Handler (
229+ basictrigger .Trigger (testworkflow .TestWorkflowTriggerConfig ()),
230+ func (_ string , _ cre.Runtime , _ * basictrigger.Outputs ) (string , error ) {
231+ return "no-tee" , nil
232+ },
233+ ),
234+ }, nil
235+ })
236+
237+ actual := & sdk.ExecutionResult {}
238+ require .NoError (t , proto .Unmarshal (internals .sentResponse , actual ))
239+ switch result := actual .Result .(type ) {
240+ case * sdk.ExecutionResult_TriggerSubscriptions :
241+ subs := result .TriggerSubscriptions .Subscriptions
242+ require .Len (t , subs , 1 )
243+ assert .Nil (t , subs [0 ].Requirements )
244+ default :
245+ assert .Fail (t , "unexpected result type" , result )
169246 }
170- assert .True (t , proto .Equal (expected , actual ))
171247 })
172248
173- t .Run ("any tee" , func (t * testing.T ) {
174- teeRunner := newTeeRunner (
175- cre.AnyTee {}, func (b []byte ) (string , error ) { return string (b ), nil }, testRunnerInternals (t , subscribeRequest ), testRuntimeInternals (t ))
249+ t .Run ("tee handler callback receives TeeRuntime" , func (t * testing.T ) {
250+ acceptedTees := []cre.TeeAndRegions {{Type : cre .TeeType_TEE_TYPE_AWS_NITRO , Regions : []string {"us-west-2" }}}
176251
177- requirements := teeRunner .(teeRunnerWrapper [string ]).baseRunner .(* subscriber [string , cre.TeeRuntime ]).runnerInternals .(* runnerInternalsTestHook ).requirementsSent
178- actual := & sdk.Requirements {}
179- require .NoError (t , proto .Unmarshal (requirements , actual ))
180- expected := & sdk.Requirements {
181- Tee : & sdk.Tee {Type : & sdk.Tee_Any {Any : & emptypb.Empty {}}},
252+ triggerReq := & sdk.ExecuteRequest {
253+ Config : anyConfig ,
254+ MaxResponseSize : anyMaxResponseSize ,
255+ Request : & sdk.ExecuteRequest_Trigger {
256+ Trigger : & sdk.Trigger {
257+ Id : 0 ,
258+ Payload : mustAny (testworkflow .TestWorkflowTrigger ()),
259+ },
260+ },
182261 }
183- assert .True (t , proto .Equal (expected , actual ))
262+
263+ internals := testRunnerInternals (t , triggerReq )
264+ dr := newRunner (func (b []byte ) (string , error ) { return string (b ), nil }, internals , testRuntimeInternals (t ))
265+
266+ callbackInvoked := false
267+ dr .Run (func (string , * slog.Logger , cre.SecretsProvider ) (cre.Workflow [string ], error ) {
268+ return cre.Workflow [string ]{
269+ cre .HandlerInTee (
270+ basictrigger .Trigger (testworkflow .TestWorkflowTriggerConfig ()),
271+ func (_ string , rt cre.TeeRuntime , _ * basictrigger.Outputs ) (string , error ) {
272+ callbackInvoked = true
273+ assert .NotNil (t , rt , "TeeRuntime should not be nil" )
274+ return "done" , nil
275+ },
276+ acceptedTees ,
277+ ),
278+ }, nil
279+ })
280+
281+ assert .True (t , callbackInvoked , "tee callback should have been invoked" )
184282 })
185283}
186284
0 commit comments