@@ -68,7 +68,7 @@ func Test_FetchTrueUSDWorkflow(t *testing.T) {
68
68
framework .CreateWasmBinary (t , mainFile , wasmFile )
69
69
70
70
triggerSink := framework .NewTriggerSink (t , "cron-trigger" , "1.0.0" )
71
- dataFeedsCacheContract := setupDons (ctx , t , lggr , wasmFile , "*/5 * * * * *" , triggerSink )
71
+ dataFeedsCacheContract , thenCallback := setupDons (ctx , t , lggr , wasmFile , "*/5 * * * * *" , "*/4 * * * * *" , triggerSink )
72
72
73
73
bundleReceived := make (chan * data_feeds_cache.DataFeedsCacheBundleReportUpdated , 1000 )
74
74
bundleSub , err := dataFeedsCacheContract .WatchBundleReportUpdated (& bind.WatchOpts {}, bundleReceived , nil , nil )
@@ -82,17 +82,39 @@ func Test_FetchTrueUSDWorkflow(t *testing.T) {
82
82
require .NoError (t , err )
83
83
triggerSink .SendOutput (wrappedMap , uuid .New ().String ())
84
84
85
- loop:
86
- for {
85
+ endTime , ok := ctxWithTimeout .Deadline ()
86
+ if ! ok {
87
+ endTime = time .Now ().Add (time .Minute )
88
+ }
89
+ require .Eventually (t , func () bool {
87
90
select {
88
91
case <- ctxWithTimeout .Done ():
89
92
t .Fatalf ("timed out waiting for bundle" )
90
93
case err := <- bundleSub .Err ():
91
94
require .NoError (t , err )
92
95
case <- bundleReceived :
93
- break loop
96
+ return true
94
97
}
95
- }
98
+ return false
99
+ }, time .Until (endTime ), time .Second , "timed out waiting for first bundle" )
100
+
101
+ // Update workflow
102
+ thenCallback ()
103
+
104
+ time .Sleep (time .Second * 30 )
105
+ triggerSink .SendOutput (wrappedMap , uuid .New ().String ())
106
+
107
+ require .Eventually (t , func () bool {
108
+ select {
109
+ case <- ctxWithTimeout .Done ():
110
+ t .Fatalf ("timed out waiting for bundle" )
111
+ case err := <- bundleSub .Err ():
112
+ require .NoError (t , err )
113
+ case <- bundleReceived :
114
+ return true
115
+ }
116
+ return false
117
+ }, time .Until (endTime ), time .Second , "timed out waiting for second bundle" )
96
118
}
97
119
98
120
func generateRandomReservesResponse () string {
@@ -147,12 +169,16 @@ func (n ComputeFetcherFactory) NewFetcher(log commonlogger.Logger, emitter custm
147
169
}
148
170
}
149
171
150
- func setupDons (ctx context.Context , t * testing.T , lggr logger.SugaredLogger , workflowURL string , cronSchedule string ,
151
- triggerFactory framework.TriggerFactory ) * data_feeds_cache.DataFeedsCache {
172
+ func setupDons (ctx context.Context , t * testing.T , lggr logger.SugaredLogger , workflowURL string , cronSchedule string , cronSchedule2 string ,
173
+ triggerFactory framework.TriggerFactory ) ( * data_feeds_cache.DataFeedsCache , func ()) {
152
174
configURL := "workflow-config.json"
153
175
workflowConfig := fetchTrueUSDConfig {
154
176
CronSchedule : cronSchedule ,
155
177
}
178
+ configURL2 := "workflow-config2.json"
179
+ workflowConfig2 := fetchTrueUSDConfig {
180
+ CronSchedule : cronSchedule2 ,
181
+ }
156
182
157
183
compressedBinary , base64EncodedCompressedBinary := framework .GetCompressedWorkflowWasm (t , workflowURL )
158
184
@@ -165,6 +191,10 @@ func setupDons(ctx context.Context, t *testing.T, lggr logger.SugaredLogger, wor
165
191
configBytes , err := json .Marshal (workflowConfig )
166
192
require .NoError (t , err )
167
193
return configBytes , nil
194
+ case configURL2 :
195
+ configBytes2 , err := json .Marshal (workflowConfig2 )
196
+ require .NoError (t , err )
197
+ return configBytes2 , nil
168
198
}
169
199
170
200
return nil , fmt .Errorf ("unknown url: %s" , url )
@@ -205,11 +235,13 @@ func setupDons(ctx context.Context, t *testing.T, lggr logger.SugaredLogger, wor
205
235
workflows .HashTruncateName (workflowName ))
206
236
207
237
workflowConfig .ConsumerAddress = dataFeedsCacheAddr .String ()
238
+ workflowConfig2 .ConsumerAddress = dataFeedsCacheAddr .String ()
208
239
209
240
// Setup Write capability DON
210
241
writeTargetCapabilityID , err := writeCapabilityDon .AddPublishedEthereumWriteTargetNonStandardCapability (forwarderAddr )
211
242
require .NoError (t , err )
212
243
workflowConfig .WriteTargetCapabilityID = writeTargetCapabilityID
244
+ workflowConfig2 .WriteTargetCapabilityID = writeTargetCapabilityID
213
245
214
246
writeCapabilityDon .Initialise ()
215
247
servicetest .Run (t , writeCapabilityDon )
@@ -222,7 +254,21 @@ func setupDons(ctx context.Context, t *testing.T, lggr logger.SugaredLogger, wor
222
254
223
255
registerWorkflow (t , donContext , workflowName , compressedBinary , "" , workflowDon ,
224
256
workflowURL , configURL , workflowConfigBytes )
225
- return dataFeedsCache
257
+
258
+ workflowConfigBytes2 , err := json .Marshal (workflowConfig2 )
259
+ require .NoError (t , err )
260
+
261
+ then := func () {
262
+ newWfID := updateWorkflow (t , donContext , workflowName , compressedBinary , "" , workflowDon ,
263
+ workflowURL , configURL2 , workflowConfigBytes2 , workflowOwner )
264
+
265
+ // Wait for workflow to be added to the Workflow Registry
266
+ donContext .WaitForWorkflowRegistryMetadata (t , workflowName , workflowOwner , newWfID )
267
+
268
+ donContext .WaitForCapabilitiesToBeExposed (t , writeCapabilityDon , workflowDon )
269
+ }
270
+
271
+ return dataFeedsCache , then
226
272
}
227
273
228
274
func SetupDataFeedsCacheContract (t * testing.T , backend * framework.EthBlockchain ,
@@ -274,3 +320,20 @@ func registerWorkflow(t *testing.T, donContext framework.DonContext, workflowNam
274
320
})
275
321
require .NoError (t , err )
276
322
}
323
+
324
+ func updateWorkflow (t * testing.T , donContext framework.DonContext , workflowName string , compressedBinary []byte ,
325
+ secretsURL string , workflowDon * framework.DON , binaryURL string , configURL string , configBytes []byte , owner string ) [32 ]byte {
326
+ workflowID , err := workflows .GenerateWorkflowID (donContext .EthBlockchain .TransactionOpts ().From [:], workflowName , compressedBinary , configBytes , secretsURL )
327
+ require .NoError (t , err )
328
+
329
+ err = workflowDon .UpdateWorkflow (framework.UpdatedWorkflow {
330
+ WorkflowKey : workflowDon .ComputeHashKey (owner , workflowName ),
331
+ ID : workflowID ,
332
+ BinaryURL : binaryURL ,
333
+ ConfigURL : configURL ,
334
+ SecretsURL : secretsURL ,
335
+ })
336
+ require .NoError (t , err )
337
+
338
+ return workflowID
339
+ }
0 commit comments