@@ -91,6 +91,7 @@ public class TestWorkflowExtension
91
91
private final String target ;
92
92
private final boolean doNotStart ;
93
93
private final long initialTimeMillis ;
94
+ private final boolean useTimeskipping ;
94
95
95
96
private final Set <Class <?>> supportedParameterTypes = new HashSet <>();
96
97
private boolean includesDynamicWorkflow ;
@@ -110,6 +111,7 @@ private TestWorkflowExtension(Builder builder) {
110
111
target = builder .target ;
111
112
doNotStart = builder .doNotStart ;
112
113
initialTimeMillis = builder .initialTimeMillis ;
114
+ useTimeskipping = builder .useTimeskipping ;
113
115
114
116
supportedParameterTypes .add (TestWorkflowEnvironment .class );
115
117
supportedParameterTypes .add (WorkflowClient .class );
@@ -187,20 +189,15 @@ public Object resolveParameter(
187
189
}
188
190
189
191
@ Override
190
- public void beforeEach (ExtensionContext context ) throws Exception {
192
+ public void beforeEach (ExtensionContext context ) {
191
193
long currentInitialTimeMillis =
192
194
AnnotationSupport .findAnnotation (context .getElement (), WorkflowInitialTime .class )
193
195
.map (annotation -> Instant .parse (annotation .value ()).toEpochMilli ())
194
196
.orElse (initialTimeMillis );
195
- TestEnvironmentOptions testOptions =
196
- TestEnvironmentOptions .newBuilder ()
197
- .setWorkflowClientOptions (workflowClientOptions )
198
- .setWorkerFactoryOptions (workerFactoryOptions )
199
- .setUseExternalService (useExternalService )
200
- .setTarget (target )
201
- .setInitialTimeMillis (currentInitialTimeMillis )
202
- .build ();
203
- TestWorkflowEnvironment testEnvironment = TestWorkflowEnvironment .newInstance (testOptions );
197
+
198
+ TestWorkflowEnvironment testEnvironment =
199
+ TestWorkflowEnvironment .newInstance (createTestEnvOptions (currentInitialTimeMillis ));
200
+
204
201
String taskQueue =
205
202
String .format ("WorkflowTest-%s-%s" , context .getDisplayName (), context .getUniqueId ());
206
203
Worker worker = testEnvironment .newWorker (taskQueue , workerOptions );
@@ -216,6 +213,17 @@ public void beforeEach(ExtensionContext context) throws Exception {
216
213
setWorkflowOptions (context , WorkflowOptions .newBuilder ().setTaskQueue (taskQueue ).build ());
217
214
}
218
215
216
+ protected TestEnvironmentOptions createTestEnvOptions (long initialTimeMillis ) {
217
+ return TestEnvironmentOptions .newBuilder ()
218
+ .setWorkflowClientOptions (workflowClientOptions )
219
+ .setWorkerFactoryOptions (workerFactoryOptions )
220
+ .setUseExternalService (useExternalService )
221
+ .setUseTimeskipping (useTimeskipping )
222
+ .setTarget (target )
223
+ .setInitialTimeMillis (initialTimeMillis )
224
+ .build ();
225
+ }
226
+
219
227
@ Override
220
228
public void afterEach (ExtensionContext context ) throws Exception {
221
229
TestWorkflowEnvironment testEnvironment = getTestEnvironment (context );
@@ -274,6 +282,9 @@ public static class Builder {
274
282
private String target = null ;
275
283
private boolean doNotStart = false ;
276
284
private long initialTimeMillis ;
285
+ // Default to TestEnvironmentOptions isUseTimeskipping
286
+ private boolean useTimeskipping =
287
+ TestEnvironmentOptions .getDefaultInstance ().isUseTimeskipping ();
277
288
278
289
private Builder () {}
279
290
@@ -397,6 +408,17 @@ public Builder setInitialTime(Instant initialTime) {
397
408
return this ;
398
409
}
399
410
411
+ /**
412
+ * Sets TestEnvironmentOptions.setUseTimeskippings. If true, no actual wall-clock time will pass
413
+ * when a workflow sleeps or sets a timer.
414
+ *
415
+ * <p>Default is true
416
+ */
417
+ public Builder setUseTimeskipping (boolean useTimeskipping ) {
418
+ this .useTimeskipping = useTimeskipping ;
419
+ return this ;
420
+ }
421
+
400
422
public TestWorkflowExtension build () {
401
423
return new TestWorkflowExtension (this );
402
424
}
0 commit comments