Skip to content

Commit e354d1f

Browse files
Add support for update to the Java test server (#1762)
Add update support to test server
1 parent 5ed77f7 commit e354d1f

File tree

10 files changed

+556
-157
lines changed

10 files changed

+556
-157
lines changed

temporal-sdk/src/test/java/io/temporal/client/functional/UpdateTest.java

Lines changed: 75 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,18 @@
2020

2121
package io.temporal.client.functional;
2222

23+
import static org.junit.Assert.assertEquals;
2324
import static org.junit.Assert.assertThrows;
2425

2526
import io.temporal.api.common.v1.WorkflowExecution;
2627
import io.temporal.client.*;
2728
import io.temporal.testing.internal.SDKTestOptions;
2829
import io.temporal.testing.internal.SDKTestWorkflowRule;
30+
import io.temporal.workflow.CompletablePromise;
31+
import io.temporal.workflow.Workflow;
2932
import io.temporal.workflow.shared.TestWorkflows;
3033
import java.util.concurrent.ExecutionException;
3134
import org.junit.Assume;
32-
import org.junit.Before;
3335
import org.junit.Rule;
3436
import org.junit.Test;
3537

@@ -38,16 +40,11 @@ public class UpdateTest {
3840
@Rule
3941
public SDKTestWorkflowRule testWorkflowRule =
4042
SDKTestWorkflowRule.newBuilder()
41-
.setWorkflowTypes(UpdateTest.QuickWorkflowWithUpdateImpl.class)
43+
.setWorkflowTypes(
44+
UpdateTest.QuickWorkflowWithUpdateImpl.class,
45+
UpdateTest.LongWorkflowWithUpdateImpl.class)
4246
.build();
4347

44-
@Before
45-
public void checkExternalService() {
46-
Assume.assumeTrue(
47-
"skipping because test server does not support update",
48-
testWorkflowRule.isUseExternalService());
49-
}
50-
5148
@Test
5249
public void updateNonExistentWorkflow() {
5350

@@ -102,6 +99,44 @@ public void updateCompletedWorkflowUntyped() {
10299
assertThrows(ExecutionException.class, () -> updateRef.getResultAsync().get());
103100
}
104101

102+
@Test
103+
public void updateWorkflowDuplicateId() {
104+
Assume.assumeTrue(
105+
"skipping for real server because the real server does not handle duplicate update ID correctly",
106+
!testWorkflowRule.isUseExternalService());
107+
108+
WorkflowClient workflowClient = testWorkflowRule.getWorkflowClient();
109+
String workflowType = TestWorkflows.WorkflowWithUpdate.class.getSimpleName();
110+
WorkflowStub workflowStub =
111+
workflowClient.newUntypedWorkflowStub(
112+
workflowType,
113+
SDKTestOptions.newWorkflowOptionsWithTimeouts(testWorkflowRule.getTaskQueue()));
114+
115+
WorkflowExecution execution = workflowStub.start();
116+
SDKTestWorkflowRule.waitForOKQuery(workflowStub);
117+
118+
assertEquals(
119+
"some-value",
120+
workflowStub.update(
121+
"update",
122+
"update-id",
123+
execution.getRunId(),
124+
String.class,
125+
String.class,
126+
0,
127+
"some-value"));
128+
testWorkflowRule.waitForTheEndOfWFT(execution.getWorkflowId());
129+
// Try to send another update request with the same update Id
130+
assertEquals(
131+
"some-value",
132+
workflowStub.update(
133+
"update", "update-id", "", String.class, String.class, 1, "some-other-value"));
134+
135+
workflowStub.update("complete", void.class);
136+
137+
workflowStub.getResult(String.class);
138+
}
139+
105140
public static class QuickWorkflowWithUpdateImpl implements TestWorkflows.TestUpdatedWorkflow {
106141

107142
@Override
@@ -112,4 +147,35 @@ public String execute() {
112147
@Override
113148
public void update(String arg) {}
114149
}
150+
151+
public static class LongWorkflowWithUpdateImpl implements TestWorkflows.WorkflowWithUpdate {
152+
CompletablePromise<Void> promise = Workflow.newPromise();
153+
154+
@Override
155+
public String execute() {
156+
promise.get();
157+
return "complete";
158+
}
159+
160+
@Override
161+
public String getState() {
162+
return "running";
163+
}
164+
165+
@Override
166+
public String update(Integer index, String value) {
167+
return value;
168+
}
169+
170+
@Override
171+
public void updateValidator(Integer index, String value) {}
172+
173+
@Override
174+
public void complete() {
175+
promise.complete(null);
176+
}
177+
178+
@Override
179+
public void completeValidator() {}
180+
}
115181
}

temporal-sdk/src/test/java/io/temporal/workflow/updateTest/UpdateRetryException.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import java.util.*;
3636
import java.util.concurrent.atomic.AtomicInteger;
3737
import org.junit.Assert;
38-
import org.junit.Assume;
3938
import org.junit.Rule;
4039
import org.junit.Test;
4140
import org.slf4j.Logger;
@@ -56,10 +55,6 @@ public class UpdateRetryException {
5655

5756
@Test
5857
public void testUpdateExceptionRetries() {
59-
Assume.assumeTrue(
60-
"skipping for test server because test server does not support update",
61-
testWorkflowRule.isUseExternalService());
62-
6358
String workflowId = UUID.randomUUID().toString();
6459
WorkflowClient workflowClient = testWorkflowRule.getWorkflowClient();
6560
WorkflowOptions options =

temporal-sdk/src/test/java/io/temporal/workflow/updateTest/UpdateTest.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import java.util.Optional;
4141
import java.util.UUID;
4242
import java.util.concurrent.ExecutionException;
43-
import org.junit.Assume;
4443
import org.junit.Rule;
4544
import org.junit.Test;
4645
import org.slf4j.Logger;
@@ -60,10 +59,6 @@ public class UpdateTest {
6059

6160
@Test
6261
public void testUpdate() {
63-
Assume.assumeTrue(
64-
"skipping for test server because test server does not support update",
65-
testWorkflowRule.isUseExternalService());
66-
6762
String workflowId = UUID.randomUUID().toString();
6863
WorkflowClient workflowClient = testWorkflowRule.getWorkflowClient();
6964
WorkflowOptions options =
@@ -105,10 +100,6 @@ public void testUpdate() {
105100

106101
@Test
107102
public void testUpdateUntyped() throws ExecutionException, InterruptedException {
108-
Assume.assumeTrue(
109-
"skipping for test server because test server does not support update",
110-
testWorkflowRule.isUseExternalService());
111-
112103
WorkflowClient workflowClient = testWorkflowRule.getWorkflowClient();
113104
String workflowType = TestWorkflows.WorkflowWithUpdate.class.getSimpleName();
114105
WorkflowStub workflowStub =

temporal-sdk/src/test/java/io/temporal/workflow/updateTest/UpdateWithLocalActivity.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import java.util.List;
3737
import java.util.Optional;
3838
import java.util.UUID;
39-
import org.junit.Assume;
4039
import org.junit.Rule;
4140
import org.junit.Test;
4241
import org.slf4j.Logger;
@@ -58,10 +57,6 @@ public class UpdateWithLocalActivity {
5857

5958
@Test
6059
public void testUpdateWithLocalActivities() {
61-
Assume.assumeTrue(
62-
"skipping for test server because test server does not support update",
63-
testWorkflowRule.isUseExternalService());
64-
6560
String workflowId = UUID.randomUUID().toString();
6661
WorkflowClient workflowClient = testWorkflowRule.getWorkflowClient();
6762
WorkflowOptions options =

temporal-sdk/src/test/java/io/temporal/workflow/updateTest/UpdateWithSignalAndQuery.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import io.temporal.workflow.shared.TestActivities;
3434
import io.temporal.workflow.shared.TestWorkflows;
3535
import java.util.*;
36-
import org.junit.Assume;
3736
import org.junit.Rule;
3837
import org.junit.Test;
3938
import org.slf4j.Logger;
@@ -52,10 +51,6 @@ public class UpdateWithSignalAndQuery {
5251

5352
@Test
5453
public void testUpdateWithSignal() {
55-
Assume.assumeTrue(
56-
"skipping for test server because test server does not support update",
57-
testWorkflowRule.isUseExternalService());
58-
5954
String workflowId = UUID.randomUUID().toString();
6055
WorkflowClient workflowClient = testWorkflowRule.getWorkflowClient();
6156
WorkflowOptions options =

0 commit comments

Comments
 (0)