Skip to content

Commit 6ff76d4

Browse files
authored
Expose test environment option for shadowing (#604)
1 parent 8de07b9 commit 6ff76d4

File tree

5 files changed

+76
-5
lines changed

5 files changed

+76
-5
lines changed

src/main/java/com/uber/cadence/internal/shadowing/ReplayWorkflowActivityImpl.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.uber.cadence.internal.common.WorkflowExecutionUtils;
3030
import com.uber.cadence.internal.metrics.MetricsType;
3131
import com.uber.cadence.serviceclient.IWorkflowService;
32+
import com.uber.cadence.testing.TestEnvironmentOptions;
3233
import com.uber.cadence.testing.TestWorkflowEnvironment;
3334
import com.uber.cadence.worker.Worker;
3435
import com.uber.cadence.worker.WorkflowImplementationOptions;
@@ -51,9 +52,17 @@ public final class ReplayWorkflowActivityImpl implements ReplayWorkflowActivity
5152

5253
public ReplayWorkflowActivityImpl(
5354
IWorkflowService serviceClient, Scope metricsScope, String taskList) {
55+
this(serviceClient, metricsScope, taskList, new TestEnvironmentOptions.Builder().build());
56+
}
57+
58+
public ReplayWorkflowActivityImpl(
59+
IWorkflowService serviceClient,
60+
Scope metricsScope,
61+
String taskList,
62+
TestEnvironmentOptions testOptions) {
5463
this.serviceClient = Objects.requireNonNull(serviceClient);
5564
this.metricsScope = Objects.requireNonNull(metricsScope);
56-
worker = TestWorkflowEnvironment.newInstance().newWorker(taskList);
65+
worker = TestWorkflowEnvironment.newInstance(testOptions).newWorker(taskList);
5766
}
5867

5968
@Override
@@ -131,7 +140,7 @@ public ReplayWorkflowActivityResult replayOneExecution(
131140
WorkflowExecutionHistory workflowHistory;
132141
try {
133142
workflowHistory = getFullHistory(domain, execution);
134-
} catch (Exception e) {
143+
} catch (Throwable e) {
135144
log.error(
136145
"skipped workflow execution with domain: "
137146
+ domain

src/main/java/com/uber/cadence/testing/WorkflowShadower.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,38 @@ public final class WorkflowShadower {
4343
private final ScanWorkflowActivity scanWorkflow;
4444
private final ReplayWorkflowActivity replayWorkflow;
4545

46+
/**
47+
* WorkflowShadower fetches the workflow history from remote and run replay test locally.
48+
*
49+
* @param service is the target service to fetch workflow history.
50+
* @param options is the shadowing options.
51+
* @param taskList is the task list used in the workflows.
52+
*/
4653
public WorkflowShadower(IWorkflowService service, ShadowingOptions options, String taskList) {
47-
4854
this(service, options, taskList, new NoopScope());
4955
}
5056

57+
/**
58+
* WorkflowShadower fetches the workflow history from remote and run replay test locally.
59+
*
60+
* @param service is the target service to fetch workflow history.
61+
* @param options is the shadowing options.
62+
* @param taskList is the task list used in the workflows.
63+
* @param metricsScope uses to emit replay metrics.
64+
* @param testOptions uses to set customized data converter, interceptor and context propagator.
65+
*/
66+
public WorkflowShadower(
67+
IWorkflowService service,
68+
ShadowingOptions options,
69+
String taskList,
70+
Scope metricsScope,
71+
TestEnvironmentOptions testOptions) {
72+
this(
73+
options,
74+
new ScanWorkflowActivityImpl(service),
75+
new ReplayWorkflowActivityImpl(service, metricsScope, taskList, testOptions));
76+
}
77+
5178
public WorkflowShadower(
5279
IWorkflowService service, ShadowingOptions options, String taskList, Scope metricsScope) {
5380
this(

src/main/java/com/uber/cadence/worker/ShadowingWorker.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import com.uber.cadence.serviceclient.IWorkflowService;
3737
import com.uber.cadence.shadower.WorkflowParams;
3838
import com.uber.cadence.shadower.shadowerConstants;
39+
import com.uber.cadence.testing.TestEnvironmentOptions;
3940
import com.uber.cadence.workflow.Functions;
4041
import com.uber.m3.tally.Scope;
4142
import com.uber.m3.util.ImmutableMap;
@@ -55,11 +56,37 @@ public final class ShadowingWorker implements Suspendable {
5556
private final ShadowingOptions shadowingOptions;
5657
private final AtomicBoolean started = new AtomicBoolean();
5758

59+
/**
60+
* ShadowingWorker starts a shadowing workflow to replay the target workflows.
61+
*
62+
* @param client is the target endpoint to fetch workflow history.
63+
* @param taskList is the task list used in the workflows.
64+
* @param options is worker option.
65+
* @param shadowingOptions is the shadowing options.
66+
*/
5867
public ShadowingWorker(
5968
WorkflowClient client,
6069
String taskList,
6170
WorkerOptions options,
6271
ShadowingOptions shadowingOptions) {
72+
this(client, taskList, options, shadowingOptions, new TestEnvironmentOptions.Builder().build());
73+
}
74+
75+
/**
76+
* ShadowingWorker starts a shadowing workflow to replay the target workflows.
77+
*
78+
* @param client is the target endpoint to fetch workflow history.
79+
* @param taskList is the task list used in the workflows.
80+
* @param options is worker option.
81+
* @param shadowingOptions is the shadowing options.
82+
* @param testOptions uses to set customized data converter, interceptor and context propagator.
83+
*/
84+
public ShadowingWorker(
85+
WorkflowClient client,
86+
String taskList,
87+
WorkerOptions options,
88+
ShadowingOptions shadowingOptions,
89+
TestEnvironmentOptions testOptions) {
6390
options = MoreObjects.firstNonNull(options, WorkerOptions.defaultInstance());
6491
this.shadowingOptions = Objects.requireNonNull(shadowingOptions);
6592
this.taskList = shadowingOptions.getDomain() + "-" + taskList;
@@ -75,7 +102,8 @@ public ShadowingWorker(
75102
MetricsTag.TASK_LIST,
76103
this.taskList));
77104
ScanWorkflowActivity scanActivity = new ScanWorkflowActivityImpl(client.getService());
78-
replayActivity = new ReplayWorkflowActivityImpl(client.getService(), metricsScope, taskList);
105+
replayActivity =
106+
new ReplayWorkflowActivityImpl(client.getService(), metricsScope, taskList, testOptions);
79107

80108
SingleWorkerOptions activityOptions =
81109
SingleWorkerOptions.newBuilder()

src/main/java/com/uber/cadence/worker/WorkflowStatus.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import com.uber.cadence.WorkflowExecutionCloseStatus;
1919

20+
/** The WorkflowStatus is only used in shadowing option. */
2021
public enum WorkflowStatus {
2122
OPEN("OPEN"),
2223
CLOSED("CLOSED"),

src/test/java/com/uber/cadence/internal/shadowing/ReplayWorkflowActivityTest.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,12 @@
4141
import com.uber.cadence.WorkflowExecutionStartedEventAttributes;
4242
import com.uber.cadence.WorkflowType;
4343
import com.uber.cadence.common.WorkflowExecutionHistory;
44+
import com.uber.cadence.converter.JsonDataConverter;
4445
import com.uber.cadence.internal.common.InternalUtils;
4546
import com.uber.cadence.internal.testing.WorkflowTestingTest;
4647
import com.uber.cadence.serviceclient.IWorkflowService;
4748
import com.uber.cadence.testing.TestActivityEnvironment;
49+
import com.uber.cadence.testing.TestEnvironmentOptions;
4850
import com.uber.m3.tally.RootScopeBuilder;
4951
import com.uber.m3.tally.Scope;
5052
import com.uber.m3.util.Duration;
@@ -70,7 +72,11 @@ public class ReplayWorkflowActivityTest {
7072
public void init() {
7173
mockServiceClient = mock(IWorkflowService.class);
7274
metricsScope = new RootScopeBuilder().reportEvery(Duration.ofMillis(1000));
73-
activity = new ReplayWorkflowActivityImpl(mockServiceClient, metricsScope, "test");
75+
TestEnvironmentOptions testOptions =
76+
new TestEnvironmentOptions.Builder()
77+
.setDataConverter(JsonDataConverter.getInstance())
78+
.build();
79+
activity = new ReplayWorkflowActivityImpl(mockServiceClient, metricsScope, "test", testOptions);
7480
activity.registerWorkflowImplementationTypes(WorkflowTestingTest.EmptyWorkflowImpl.class);
7581

7682
domain = UUID.randomUUID().toString();

0 commit comments

Comments
 (0)