|
40 | 40 | import io.temporal.payload.context.SerializationContext;
|
41 | 41 | import io.temporal.testing.internal.SDKTestOptions;
|
42 | 42 | import io.temporal.testing.internal.SDKTestWorkflowRule;
|
43 |
| -import io.temporal.workflow.ChildWorkflowOptions; |
44 |
| -import io.temporal.workflow.ContinueAsNewOptions; |
45 |
| -import io.temporal.workflow.Workflow; |
| 43 | +import io.temporal.workflow.*; |
46 | 44 | import io.temporal.workflow.shared.TestWorkflowWithCronScheduleImpl;
|
47 | 45 | import io.temporal.workflow.shared.TestWorkflows;
|
48 | 46 | import java.io.IOException;
|
@@ -79,10 +77,13 @@ public class WorkflowIdSignedPayloadsTest {
|
79 | 77 | public SDKTestWorkflowRule testWorkflowRule =
|
80 | 78 | SDKTestWorkflowRule.newBuilder()
|
81 | 79 | .setWorkflowTypes(
|
82 |
| - SimpleWorkflowWithAnActivity.class, TestWorkflowWithCronScheduleImpl.class) |
| 80 | + SimpleWorkflowWithAnActivity.class, |
| 81 | + TestWorkflowWithCronScheduleImpl.class, |
| 82 | + DynamicWorkflowImpl.class) |
83 | 83 | .setWorkflowClientOptions(
|
84 | 84 | WorkflowClientOptions.newBuilder().setDataConverter(codecDataConverter).build())
|
85 |
| - .setActivityImplementations(heartbeatingActivity, manualCompletionActivity) |
| 85 | + .setActivityImplementations( |
| 86 | + heartbeatingActivity, manualCompletionActivity, new DynamicActivityImpl()) |
86 | 87 | .build();
|
87 | 88 |
|
88 | 89 | @Rule public TestName testName = new TestName();
|
@@ -162,6 +163,16 @@ public void testSimpleCronWorkflow() {
|
162 | 163 | TestWorkflowWithCronScheduleImpl.lastFail.get().getMessage().contains("simulated error"));
|
163 | 164 | }
|
164 | 165 |
|
| 166 | + @Test |
| 167 | + public void testDynamicWorkflow() { |
| 168 | + WorkflowOptions options = |
| 169 | + SDKTestOptions.newWorkflowOptionsWithTimeouts(testWorkflowRule.getTaskQueue()); |
| 170 | + WorkflowStub workflow = |
| 171 | + testWorkflowRule.getWorkflowClient().newUntypedWorkflowStub("workflowFoo", options); |
| 172 | + workflow.start("World"); |
| 173 | + assertEquals("Hello World", workflow.getResult(String.class)); |
| 174 | + } |
| 175 | + |
165 | 176 | @ActivityInterface
|
166 | 177 | public interface SimpleActivity {
|
167 | 178 | @ActivityMethod(name = "simple")
|
@@ -258,6 +269,24 @@ public String execute(String input) {
|
258 | 269 | }
|
259 | 270 | }
|
260 | 271 |
|
| 272 | + public static class DynamicWorkflowImpl implements DynamicWorkflow { |
| 273 | + @Override |
| 274 | + public Object execute(EncodedValues args) { |
| 275 | + String input = args.get(0, String.class); |
| 276 | + ActivityStub activity = |
| 277 | + Workflow.newUntypedActivityStub( |
| 278 | + ActivityOptions.newBuilder().setStartToCloseTimeout(Duration.ofSeconds(10)).build()); |
| 279 | + return activity.execute("dynamicActivity", String.class, input); |
| 280 | + } |
| 281 | + } |
| 282 | + |
| 283 | + public static class DynamicActivityImpl implements DynamicActivity { |
| 284 | + @Override |
| 285 | + public Object execute(EncodedValues args) { |
| 286 | + return "Hello " + args.get(0, String.class); |
| 287 | + } |
| 288 | + } |
| 289 | + |
261 | 290 | private static class PayloadEncoderWithWorkflowIdSignature implements PayloadCodec {
|
262 | 291 | private final ByteString METADATA_ENCODING = ByteString.copyFromUtf8("signed");
|
263 | 292 |
|
|
0 commit comments