From 679fb4928037d425ed05073f4edd3cc988d8d1a5 Mon Sep 17 00:00:00 2001 From: Shijie Sheng Date: Wed, 11 Jun 2025 09:46:42 -0700 Subject: [PATCH 01/14] fix some flaky unit test and make test run faster on CI --- build.gradle | 1 + .../com/uber/cadence/RegisterTestDomain.java | 12 ++++++++---- .../cadence/testUtils/CadenceTestContext.java | 16 ++++++++++------ .../ManualActivityCompletionWorkflowTest.java | 7 ------- .../cadence/workflow/WorkflowMigrationTest.java | 3 +++ 5 files changed, 22 insertions(+), 17 deletions(-) diff --git a/build.gradle b/build.gradle index 8cb5369be..06e403601 100644 --- a/build.gradle +++ b/build.gradle @@ -347,6 +347,7 @@ test { dependsOn 'registerDomain' dependsOn 'licenseMain' finalizedBy jacocoTestReport // report is always generated after tests run + maxParallelForks = Runtime.runtime.availableProcessors() / 2 testLogging { events 'passed', 'skipped', 'failed' exceptionFormat 'full' diff --git a/src/test/java/com/uber/cadence/RegisterTestDomain.java b/src/test/java/com/uber/cadence/RegisterTestDomain.java index 0b4be6f45..4eae35d91 100644 --- a/src/test/java/com/uber/cadence/RegisterTestDomain.java +++ b/src/test/java/com/uber/cadence/RegisterTestDomain.java @@ -3,22 +3,26 @@ import static com.uber.cadence.testUtils.TestEnvironment.DOMAIN; import static com.uber.cadence.testUtils.TestEnvironment.DOMAIN2; +import com.uber.cadence.internal.compatibility.Thrift2ProtoAdapter; +import com.uber.cadence.internal.compatibility.proto.serviceclient.IGrpcServiceStubs; import com.uber.cadence.serviceclient.ClientOptions; import com.uber.cadence.serviceclient.IWorkflowService; -import com.uber.cadence.serviceclient.WorkflowServiceTChannel; +import com.uber.cadence.testUtils.TestEnvironment; import org.apache.thrift.TException; /** Waits for local service to become available and registers UnitTest domain. */ public class RegisterTestDomain { - private static final boolean useDockerService = - Boolean.parseBoolean(System.getenv("USE_DOCKER_SERVICE")); + private static final boolean useDockerService = TestEnvironment.isUseDockerService(); public static void main(String[] args) throws InterruptedException { if (!useDockerService) { return; } - IWorkflowService service = new WorkflowServiceTChannel(ClientOptions.defaultInstance()); + IWorkflowService service = + new Thrift2ProtoAdapter( + IGrpcServiceStubs.newInstance( + ClientOptions.newBuilder().setHost("localhost").setPort(7833).build())); registerDomain(service, DOMAIN); registerDomain(service, DOMAIN2); System.exit(0); diff --git a/src/test/java/com/uber/cadence/testUtils/CadenceTestContext.java b/src/test/java/com/uber/cadence/testUtils/CadenceTestContext.java index a9976169b..d14c14223 100644 --- a/src/test/java/com/uber/cadence/testUtils/CadenceTestContext.java +++ b/src/test/java/com/uber/cadence/testUtils/CadenceTestContext.java @@ -17,10 +17,11 @@ import com.uber.cadence.FeatureFlags; import com.uber.cadence.client.WorkflowClient; import com.uber.cadence.client.WorkflowClientOptions; +import com.uber.cadence.internal.compatibility.Thrift2ProtoAdapter; +import com.uber.cadence.internal.compatibility.proto.serviceclient.IGrpcServiceStubs; import com.uber.cadence.internal.worker.PollerOptions; import com.uber.cadence.serviceclient.ClientOptions; import com.uber.cadence.serviceclient.IWorkflowService; -import com.uber.cadence.serviceclient.WorkflowServiceTChannel; import com.uber.cadence.testing.TestEnvironmentOptions; import com.uber.cadence.testing.TestWorkflowEnvironment; import com.uber.cadence.worker.Worker; @@ -224,11 +225,14 @@ public static CadenceTestContext forRealService( TracingWorkflowInterceptorFactory tracer = new TracingWorkflowInterceptorFactory(); IWorkflowService wfService = - new WorkflowServiceTChannel( - ClientOptions.newBuilder() - .setFeatureFlags( - new FeatureFlags().setWorkflowExecutionAlreadyCompletedErrorEnabled(true)) - .build()); + new Thrift2ProtoAdapter( + IGrpcServiceStubs.newInstance( + ClientOptions.newBuilder() + .setFeatureFlags( + new FeatureFlags().setWorkflowExecutionAlreadyCompletedErrorEnabled(true)) + .setHost("localhost") + .setPort(7833) + .build())); WorkflowClient workflowClient = WorkflowClient.newInstance(wfService, clientOptions); WorkerFactory workerFactory = new WorkerFactory(workflowClient, workerFactoryOptions); ScheduledExecutorService scheduledExecutor = new ScheduledThreadPoolExecutor(1); diff --git a/src/test/java/com/uber/cadence/workflow/ManualActivityCompletionWorkflowTest.java b/src/test/java/com/uber/cadence/workflow/ManualActivityCompletionWorkflowTest.java index 19c32e3e8..8da870548 100644 --- a/src/test/java/com/uber/cadence/workflow/ManualActivityCompletionWorkflowTest.java +++ b/src/test/java/com/uber/cadence/workflow/ManualActivityCompletionWorkflowTest.java @@ -177,13 +177,6 @@ public void run() { activities.reset(); - result = Async.function(activities::asyncActivity); - activities.failAsyncActivityById("4"); - expectFailureWithDetails(result, "4"); - expectFailure(() -> activities.failAsyncActivityById("again")); - - activities.reset(); - // Need to request cancellation, then the activity can respond with the cancel CompletablePromise completablePromise = Workflow.newPromise(); CancellationScope scope = diff --git a/src/test/java/com/uber/cadence/workflow/WorkflowMigrationTest.java b/src/test/java/com/uber/cadence/workflow/WorkflowMigrationTest.java index 902321c58..ad9a368ee 100644 --- a/src/test/java/com/uber/cadence/workflow/WorkflowMigrationTest.java +++ b/src/test/java/com/uber/cadence/workflow/WorkflowMigrationTest.java @@ -32,6 +32,7 @@ import com.uber.cadence.migration.MigrationInterceptorFactory; import com.uber.cadence.serviceclient.IWorkflowService; import com.uber.cadence.testUtils.CadenceTestRule; +import com.uber.cadence.testUtils.RequiresDockerService; import com.uber.cadence.worker.Worker; import com.uber.cadence.worker.WorkerFactory; import com.uber.cadence.worker.WorkerFactoryOptions; @@ -149,6 +150,7 @@ public void execute(int iter) { } @Test + @RequiresDockerService // test service doesn't support describe API yet public void cronWorkflowMigration() { String workflowID = UUID.randomUUID().toString(); try { @@ -166,6 +168,7 @@ public void cronWorkflowMigration() { } @Test + @RequiresDockerService // test service doesn't support describe API yet public void continueAsNewWorkflowMigration() { String workflowID = UUID.randomUUID().toString(); try { From c2f1b012b5402478bee2686ef9cb4374aef0b28e Mon Sep 17 00:00:00 2001 From: Shijie Sheng Date: Wed, 11 Jun 2025 10:30:42 -0700 Subject: [PATCH 02/14] upload test report as well --- .buildkite/pipeline.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index c3f39360b..bda779eb4 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -52,6 +52,7 @@ steps: - label: ":java: Unit test with test services" artifact_paths: + - "build/reports/tests/test/**/*" - "build/reports/jacoco/test/jacocoTestReport.xml" - "build/reports/metadata.txt" timeout_in_minutes: 30 From 085c18157639f03ff169943e8159676d9cd31684 Mon Sep 17 00:00:00 2001 From: Shijie Sheng Date: Wed, 11 Jun 2025 10:56:39 -0700 Subject: [PATCH 03/14] fix more tests --- .../java/com/uber/cadence/RegisterTestDomain.java | 8 +------- .../uber/cadence/testUtils/CadenceTestContext.java | 14 +------------- .../uber/cadence/testUtils/TestEnvironment.java | 13 ++++++++++++- .../com/uber/cadence/worker/StickyWorkerTest.java | 11 +++++------ 4 files changed, 19 insertions(+), 27 deletions(-) diff --git a/src/test/java/com/uber/cadence/RegisterTestDomain.java b/src/test/java/com/uber/cadence/RegisterTestDomain.java index 4eae35d91..44a38a195 100644 --- a/src/test/java/com/uber/cadence/RegisterTestDomain.java +++ b/src/test/java/com/uber/cadence/RegisterTestDomain.java @@ -3,9 +3,6 @@ import static com.uber.cadence.testUtils.TestEnvironment.DOMAIN; import static com.uber.cadence.testUtils.TestEnvironment.DOMAIN2; -import com.uber.cadence.internal.compatibility.Thrift2ProtoAdapter; -import com.uber.cadence.internal.compatibility.proto.serviceclient.IGrpcServiceStubs; -import com.uber.cadence.serviceclient.ClientOptions; import com.uber.cadence.serviceclient.IWorkflowService; import com.uber.cadence.testUtils.TestEnvironment; import org.apache.thrift.TException; @@ -19,10 +16,7 @@ public static void main(String[] args) throws InterruptedException { return; } - IWorkflowService service = - new Thrift2ProtoAdapter( - IGrpcServiceStubs.newInstance( - ClientOptions.newBuilder().setHost("localhost").setPort(7833).build())); + IWorkflowService service = TestEnvironment.getDockerService(); registerDomain(service, DOMAIN); registerDomain(service, DOMAIN2); System.exit(0); diff --git a/src/test/java/com/uber/cadence/testUtils/CadenceTestContext.java b/src/test/java/com/uber/cadence/testUtils/CadenceTestContext.java index d14c14223..32f99c0c2 100644 --- a/src/test/java/com/uber/cadence/testUtils/CadenceTestContext.java +++ b/src/test/java/com/uber/cadence/testUtils/CadenceTestContext.java @@ -14,13 +14,9 @@ */ package com.uber.cadence.testUtils; -import com.uber.cadence.FeatureFlags; import com.uber.cadence.client.WorkflowClient; import com.uber.cadence.client.WorkflowClientOptions; -import com.uber.cadence.internal.compatibility.Thrift2ProtoAdapter; -import com.uber.cadence.internal.compatibility.proto.serviceclient.IGrpcServiceStubs; import com.uber.cadence.internal.worker.PollerOptions; -import com.uber.cadence.serviceclient.ClientOptions; import com.uber.cadence.serviceclient.IWorkflowService; import com.uber.cadence.testing.TestEnvironmentOptions; import com.uber.cadence.testing.TestWorkflowEnvironment; @@ -224,15 +220,7 @@ public static CadenceTestContext forRealService( WorkerFactoryOptions workerFactoryOptions) { TracingWorkflowInterceptorFactory tracer = new TracingWorkflowInterceptorFactory(); - IWorkflowService wfService = - new Thrift2ProtoAdapter( - IGrpcServiceStubs.newInstance( - ClientOptions.newBuilder() - .setFeatureFlags( - new FeatureFlags().setWorkflowExecutionAlreadyCompletedErrorEnabled(true)) - .setHost("localhost") - .setPort(7833) - .build())); + IWorkflowService wfService = TestEnvironment.getDockerService(); WorkflowClient workflowClient = WorkflowClient.newInstance(wfService, clientOptions); WorkerFactory workerFactory = new WorkerFactory(workflowClient, workerFactoryOptions); ScheduledExecutorService scheduledExecutor = new ScheduledThreadPoolExecutor(1); diff --git a/src/test/java/com/uber/cadence/testUtils/TestEnvironment.java b/src/test/java/com/uber/cadence/testUtils/TestEnvironment.java index a12a07526..951683d5b 100644 --- a/src/test/java/com/uber/cadence/testUtils/TestEnvironment.java +++ b/src/test/java/com/uber/cadence/testUtils/TestEnvironment.java @@ -14,6 +14,11 @@ */ package com.uber.cadence.testUtils; +import com.uber.cadence.internal.compatibility.Thrift2ProtoAdapter; +import com.uber.cadence.internal.compatibility.proto.serviceclient.IGrpcServiceStubs; +import com.uber.cadence.serviceclient.ClientOptions; +import com.uber.cadence.serviceclient.IWorkflowService; + public final class TestEnvironment { public static final String DOMAIN = "UnitTest"; public static final String DOMAIN2 = "UnitTest2"; @@ -24,7 +29,7 @@ public final class TestEnvironment { private static final boolean DEBUGGER_TIMEOUTS = false; private static final boolean USE_DOCKER_SERVICE = - Boolean.parseBoolean(System.getenv("USE_DOCKER_SERVICE")); + true || Boolean.parseBoolean(System.getenv("USE_DOCKER_SERVICE")); private TestEnvironment() {} @@ -35,4 +40,10 @@ public static boolean isDebuggerTimeouts() { public static boolean isUseDockerService() { return USE_DOCKER_SERVICE; } + + public static IWorkflowService getDockerService() { + return new Thrift2ProtoAdapter( + IGrpcServiceStubs.newInstance( + ClientOptions.newBuilder().setHost("localhost").setPort(7833).build())); + } } diff --git a/src/test/java/com/uber/cadence/worker/StickyWorkerTest.java b/src/test/java/com/uber/cadence/worker/StickyWorkerTest.java index 2b7375580..b592447b8 100644 --- a/src/test/java/com/uber/cadence/worker/StickyWorkerTest.java +++ b/src/test/java/com/uber/cadence/worker/StickyWorkerTest.java @@ -36,8 +36,8 @@ import com.uber.cadence.internal.metrics.MetricsType; import com.uber.cadence.internal.metrics.NoopScope; import com.uber.cadence.internal.replay.DeciderCache; -import com.uber.cadence.serviceclient.ClientOptions; -import com.uber.cadence.serviceclient.WorkflowServiceTChannel; +import com.uber.cadence.serviceclient.IWorkflowService; +import com.uber.cadence.testUtils.TestEnvironment; import com.uber.cadence.testing.TestEnvironmentOptions; import com.uber.cadence.testing.TestWorkflowEnvironment; import com.uber.cadence.workflow.Async; @@ -71,8 +71,7 @@ @RunWith(Parameterized.class) public class StickyWorkerTest { - private static final boolean useDockerService = - Boolean.parseBoolean(System.getenv("USE_DOCKER_SERVICE")); + private static final boolean useDockerService = TestEnvironment.isUseDockerService(); private static final String STICKY_TASK_LIST_METRIC_TAG = "__sticky__"; @Parameterized.Parameter public boolean useExternalService; @@ -91,12 +90,12 @@ public static Object[] data() { @Rule public TestName testName = new TestName(); - private static WorkflowServiceTChannel service; + private static IWorkflowService service; @BeforeClass public static void setUp() { if (useDockerService) { - service = new WorkflowServiceTChannel(ClientOptions.defaultInstance()); + service = TestEnvironment.getDockerService(); } } From 896bd712ca5079219eed18ebafb03863a6477bf1 Mon Sep 17 00:00:00 2001 From: Shijie Sheng Date: Wed, 11 Jun 2025 10:58:15 -0700 Subject: [PATCH 04/14] revert unwanted change --- src/test/java/com/uber/cadence/testUtils/TestEnvironment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/uber/cadence/testUtils/TestEnvironment.java b/src/test/java/com/uber/cadence/testUtils/TestEnvironment.java index 951683d5b..a08f5d1da 100644 --- a/src/test/java/com/uber/cadence/testUtils/TestEnvironment.java +++ b/src/test/java/com/uber/cadence/testUtils/TestEnvironment.java @@ -29,7 +29,7 @@ public final class TestEnvironment { private static final boolean DEBUGGER_TIMEOUTS = false; private static final boolean USE_DOCKER_SERVICE = - true || Boolean.parseBoolean(System.getenv("USE_DOCKER_SERVICE")); + Boolean.parseBoolean(System.getenv("USE_DOCKER_SERVICE")); private TestEnvironment() {} From 66c821a928321b9f3b87fbb10b99c7e35050b799 Mon Sep 17 00:00:00 2001 From: Shijie Sheng Date: Wed, 11 Jun 2025 12:07:41 -0700 Subject: [PATCH 05/14] fix flaky test for stickyworker query --- .buildkite/pipeline.yml | 4 ++++ build.gradle | 2 +- .../java/com/uber/cadence/worker/StickyWorkerTest.java | 8 +++----- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index bda779eb4..122bd7601 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -81,6 +81,8 @@ steps: automatic: - exit_status: "*" limit: 3 + artifact_paths: + - "build/reports/tests/test/**/*" plugins: - kubernetes: <<: *kubernetes @@ -101,6 +103,8 @@ steps: automatic: - exit_status: "*" limit: 3 + artifact_paths: + - "build/reports/tests/test/**/*" plugins: - kubernetes: <<: *kubernetes diff --git a/build.gradle b/build.gradle index 06e403601..a929dfa88 100644 --- a/build.gradle +++ b/build.gradle @@ -352,7 +352,7 @@ test { events 'passed', 'skipped', 'failed' exceptionFormat 'full' // Uncomment the following line if you want to see test logs in gradlew run. - showStandardStreams true + showStandardStreams false } } diff --git a/src/test/java/com/uber/cadence/worker/StickyWorkerTest.java b/src/test/java/com/uber/cadence/worker/StickyWorkerTest.java index b592447b8..67bc110d8 100644 --- a/src/test/java/com/uber/cadence/worker/StickyWorkerTest.java +++ b/src/test/java/com/uber/cadence/worker/StickyWorkerTest.java @@ -71,7 +71,7 @@ @RunWith(Parameterized.class) public class StickyWorkerTest { - private static final boolean useDockerService = TestEnvironment.isUseDockerService(); + private static final boolean useDockerService = true || TestEnvironment.isUseDockerService(); private static final String STICKY_TASK_LIST_METRIC_TAG = "__sticky__"; @Parameterized.Parameter public boolean useExternalService; @@ -478,15 +478,13 @@ public void workflowsCanBeQueried() throws Exception { // Act WorkflowClient.start(workflow::getGreeting); - Thread.sleep(200); // Wait for workflow to start + // Assert + assertEquals(workflow.getProgress(), GreetingSignalWorkflow.Status.WAITING_FOR_NAME); DeciderCache cache = factory.getCache(); assertNotNull(cache); assertEquals(1, cache.size()); - // Assert - assertEquals(workflow.getProgress(), GreetingSignalWorkflow.Status.WAITING_FOR_NAME); - workflow.waitForName("World"); String greeting = workflow.getGreeting(); From 29560791ee26c36aaf9de022357c1a0bb192ef43 Mon Sep 17 00:00:00 2001 From: Shijie Sheng Date: Wed, 11 Jun 2025 12:17:50 -0700 Subject: [PATCH 06/14] fix start worklfow test --- .../internal/tracing/StartWorkflowTest.java | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/test/java/com/uber/cadence/internal/tracing/StartWorkflowTest.java b/src/test/java/com/uber/cadence/internal/tracing/StartWorkflowTest.java index ef25d9d17..0e2388378 100644 --- a/src/test/java/com/uber/cadence/internal/tracing/StartWorkflowTest.java +++ b/src/test/java/com/uber/cadence/internal/tracing/StartWorkflowTest.java @@ -30,6 +30,7 @@ import com.uber.cadence.serviceclient.ClientOptions; import com.uber.cadence.serviceclient.IWorkflowService; import com.uber.cadence.serviceclient.WorkflowServiceTChannel; +import com.uber.cadence.testUtils.TestEnvironment; import com.uber.cadence.worker.Worker; import com.uber.cadence.worker.WorkerFactory; import com.uber.cadence.worker.WorkerFactoryOptions; @@ -138,8 +139,7 @@ public Integer Double(Integer n) { } } - private static final boolean useDockerService = - Boolean.parseBoolean(System.getenv("USE_DOCKER_SERVICE")); + private static final boolean useDockerService = true || TestEnvironment.isUseDockerService(); private static final Logger logger = LoggerFactory.getLogger(StartWorkflowTest.class); private static final String DOMAIN = "test-domain"; private static final String TASK_LIST = "test-tasklist"; @@ -160,7 +160,11 @@ public void testStartWorkflowGRPC() { IWorkflowService service = new Thrift2ProtoAdapter( IGrpcServiceStubs.newInstance( - ClientOptions.newBuilder().setTracer(mockTracer).setPort(7833).build())); + ClientOptions.newBuilder() + .setTracer(mockTracer) + .setHost("localhost") + .setPort(7833) + .build())); testStartWorkflowHelper(service, mockTracer, true); } @@ -171,7 +175,11 @@ public void testStartMultipleWorkflowGRPC() { IWorkflowService service = new Thrift2ProtoAdapter( IGrpcServiceStubs.newInstance( - ClientOptions.newBuilder().setTracer(mockTracer).setPort(7833).build())); + ClientOptions.newBuilder() + .setTracer(mockTracer) + .setHost("localhost") + .setPort(7833) + .build())); try { service.RegisterDomain(new RegisterDomainRequest().setName(DOMAIN)); } catch (DomainAlreadyExistsError e) { @@ -259,7 +267,11 @@ public void testSignalWithStartWorkflowGRPC() { IWorkflowService service = new Thrift2ProtoAdapter( IGrpcServiceStubs.newInstance( - ClientOptions.newBuilder().setTracer(mockTracer).setPort(7833).build())); + ClientOptions.newBuilder() + .setTracer(mockTracer) + .setHost("localhost") + .setPort(7833) + .build())); testSignalWithStartWorkflowHelper(service, mockTracer, true); } @@ -277,7 +289,8 @@ public void testStartWorkflowGRPCNoPropagation() { MockTracer mockTracer = new MockTracer(); IWorkflowService service = new Thrift2ProtoAdapter( - IGrpcServiceStubs.newInstance(ClientOptions.newBuilder().setPort(7833).build())); + IGrpcServiceStubs.newInstance( + ClientOptions.newBuilder().setHost("localhost").setPort(7833).build())); testStartWorkflowHelper(service, mockTracer, false); } @@ -295,7 +308,8 @@ public void testSignalStartWorkflowGRPCNoPropagation() { MockTracer mockTracer = new MockTracer(); IWorkflowService service = new Thrift2ProtoAdapter( - IGrpcServiceStubs.newInstance(ClientOptions.newBuilder().setPort(7833).build())); + IGrpcServiceStubs.newInstance( + ClientOptions.newBuilder().setHost("localhost").setPort(7833).build())); testSignalWithStartWorkflowHelper(service, mockTracer, false); } From c89a6b9bc9249c38f4ca522b99294b0d9ff46137 Mon Sep 17 00:00:00 2001 From: Shijie Sheng Date: Wed, 11 Jun 2025 12:23:35 -0700 Subject: [PATCH 07/14] another few set of tests --- .../com/uber/cadence/worker/CleanWorkerShutdownTest.java | 8 +++----- .../java/com/uber/cadence/worker/WorkerStressTests.java | 8 +++----- .../uber/cadence/workerFactory/WorkerFactoryTests.java | 8 +++----- 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/test/java/com/uber/cadence/worker/CleanWorkerShutdownTest.java b/src/test/java/com/uber/cadence/worker/CleanWorkerShutdownTest.java index a71e27d7d..a91315e1b 100644 --- a/src/test/java/com/uber/cadence/worker/CleanWorkerShutdownTest.java +++ b/src/test/java/com/uber/cadence/worker/CleanWorkerShutdownTest.java @@ -32,9 +32,8 @@ import com.uber.cadence.client.WorkflowClient; import com.uber.cadence.client.WorkflowClientOptions; import com.uber.cadence.client.WorkflowOptions; -import com.uber.cadence.serviceclient.ClientOptions; import com.uber.cadence.serviceclient.IWorkflowService; -import com.uber.cadence.serviceclient.WorkflowServiceTChannel; +import com.uber.cadence.testUtils.TestEnvironment; import com.uber.cadence.testing.TestEnvironmentOptions; import com.uber.cadence.testing.TestWorkflowEnvironment; import com.uber.cadence.workflow.Workflow; @@ -57,8 +56,7 @@ @RunWith(Parameterized.class) public class CleanWorkerShutdownTest { - private static final boolean useDockerService = - Boolean.parseBoolean(System.getenv("USE_DOCKER_SERVICE")); + private static final boolean useDockerService = TestEnvironment.isUseDockerService(); @Parameterized.Parameter public boolean useExternalService; @@ -81,7 +79,7 @@ public static Object[] data() { @Before public void setUp() { if (useExternalService) { - service = new WorkflowServiceTChannel(ClientOptions.defaultInstance()); + service = TestEnvironment.getDockerService(); } } diff --git a/src/test/java/com/uber/cadence/worker/WorkerStressTests.java b/src/test/java/com/uber/cadence/worker/WorkerStressTests.java index 0a0e801f2..ea8c923c6 100644 --- a/src/test/java/com/uber/cadence/worker/WorkerStressTests.java +++ b/src/test/java/com/uber/cadence/worker/WorkerStressTests.java @@ -26,9 +26,8 @@ import com.uber.cadence.client.WorkflowClientOptions; import com.uber.cadence.client.WorkflowOptions; import com.uber.cadence.client.WorkflowStub; -import com.uber.cadence.serviceclient.ClientOptions; import com.uber.cadence.serviceclient.IWorkflowService; -import com.uber.cadence.serviceclient.WorkflowServiceTChannel; +import com.uber.cadence.testUtils.TestEnvironment; import com.uber.cadence.testing.TestEnvironmentOptions; import com.uber.cadence.testing.TestWorkflowEnvironment; import com.uber.cadence.workflow.Async; @@ -53,8 +52,7 @@ @RunWith(Parameterized.class) public class WorkerStressTests { - private static final boolean useDockerService = - Boolean.parseBoolean(System.getenv("USE_DOCKER_SERVICE")); + private static final boolean useDockerService = true || TestEnvironment.isUseDockerService(); @Parameterized.Parameter public boolean useExternalService; @@ -181,7 +179,7 @@ public TestEnvironmentWrapper(WorkerFactoryOptions options) { WorkflowClientOptions clientOptions = WorkflowClientOptions.newBuilder().setDomain(DOMAIN).build(); if (useDockerService) { - IWorkflowService service = new WorkflowServiceTChannel(ClientOptions.defaultInstance()); + IWorkflowService service = TestEnvironment.getDockerService(); WorkflowClient client = WorkflowClient.newInstance(service, clientOptions); factory = WorkerFactory.newInstance(client, options); } else { diff --git a/src/test/java/com/uber/cadence/workerFactory/WorkerFactoryTests.java b/src/test/java/com/uber/cadence/workerFactory/WorkerFactoryTests.java index eb105a4e3..f87e0080e 100644 --- a/src/test/java/com/uber/cadence/workerFactory/WorkerFactoryTests.java +++ b/src/test/java/com/uber/cadence/workerFactory/WorkerFactoryTests.java @@ -20,9 +20,8 @@ import static org.junit.Assert.*; import com.uber.cadence.client.WorkflowClient; -import com.uber.cadence.serviceclient.ClientOptions; import com.uber.cadence.serviceclient.IWorkflowService; -import com.uber.cadence.serviceclient.WorkflowServiceTChannel; +import com.uber.cadence.testUtils.TestEnvironment; import com.uber.cadence.worker.WorkerFactory; import java.util.concurrent.TimeUnit; import org.junit.After; @@ -33,8 +32,7 @@ public class WorkerFactoryTests { - private static final boolean useDockerService = - Boolean.parseBoolean(System.getenv("USE_DOCKER_SERVICE")); + private static final boolean useDockerService = TestEnvironment.isUseDockerService(); @BeforeClass public static void beforeClass() { @@ -47,7 +45,7 @@ public static void beforeClass() { @Before public void setUp() { - service = new WorkflowServiceTChannel(ClientOptions.defaultInstance()); + service = TestEnvironment.getDockerService(); client = WorkflowClient.newInstance(service); factory = WorkerFactory.newInstance(client); } From 02f6f0104c960d76ad9f6560a34d6c4031856e1e Mon Sep 17 00:00:00 2001 From: Shijie Sheng Date: Wed, 11 Jun 2025 12:30:47 -0700 Subject: [PATCH 08/14] revert local test changes --- .../com/uber/cadence/internal/tracing/StartWorkflowTest.java | 2 +- src/test/java/com/uber/cadence/worker/StickyWorkerTest.java | 2 +- src/test/java/com/uber/cadence/worker/WorkerStressTests.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/uber/cadence/internal/tracing/StartWorkflowTest.java b/src/test/java/com/uber/cadence/internal/tracing/StartWorkflowTest.java index 0e2388378..c67dc9d9d 100644 --- a/src/test/java/com/uber/cadence/internal/tracing/StartWorkflowTest.java +++ b/src/test/java/com/uber/cadence/internal/tracing/StartWorkflowTest.java @@ -139,7 +139,7 @@ public Integer Double(Integer n) { } } - private static final boolean useDockerService = true || TestEnvironment.isUseDockerService(); + private static final boolean useDockerService = TestEnvironment.isUseDockerService(); private static final Logger logger = LoggerFactory.getLogger(StartWorkflowTest.class); private static final String DOMAIN = "test-domain"; private static final String TASK_LIST = "test-tasklist"; diff --git a/src/test/java/com/uber/cadence/worker/StickyWorkerTest.java b/src/test/java/com/uber/cadence/worker/StickyWorkerTest.java index 67bc110d8..1177aea51 100644 --- a/src/test/java/com/uber/cadence/worker/StickyWorkerTest.java +++ b/src/test/java/com/uber/cadence/worker/StickyWorkerTest.java @@ -71,7 +71,7 @@ @RunWith(Parameterized.class) public class StickyWorkerTest { - private static final boolean useDockerService = true || TestEnvironment.isUseDockerService(); + private static final boolean useDockerService = TestEnvironment.isUseDockerService(); private static final String STICKY_TASK_LIST_METRIC_TAG = "__sticky__"; @Parameterized.Parameter public boolean useExternalService; diff --git a/src/test/java/com/uber/cadence/worker/WorkerStressTests.java b/src/test/java/com/uber/cadence/worker/WorkerStressTests.java index ea8c923c6..dca41090f 100644 --- a/src/test/java/com/uber/cadence/worker/WorkerStressTests.java +++ b/src/test/java/com/uber/cadence/worker/WorkerStressTests.java @@ -52,7 +52,7 @@ @RunWith(Parameterized.class) public class WorkerStressTests { - private static final boolean useDockerService = true || TestEnvironment.isUseDockerService(); + private static final boolean useDockerService = TestEnvironment.isUseDockerService(); @Parameterized.Parameter public boolean useExternalService; From 08b3f1e06142e84615e74e9e7714098ec3ebaf56 Mon Sep 17 00:00:00 2001 From: Shijie Sheng Date: Wed, 11 Jun 2025 12:54:42 -0700 Subject: [PATCH 09/14] revert setHost --- .../internal/tracing/StartWorkflowTest.java | 24 ++++--------------- .../cadence/testUtils/TestEnvironment.java | 3 +-- 2 files changed, 6 insertions(+), 21 deletions(-) diff --git a/src/test/java/com/uber/cadence/internal/tracing/StartWorkflowTest.java b/src/test/java/com/uber/cadence/internal/tracing/StartWorkflowTest.java index c67dc9d9d..23b39f000 100644 --- a/src/test/java/com/uber/cadence/internal/tracing/StartWorkflowTest.java +++ b/src/test/java/com/uber/cadence/internal/tracing/StartWorkflowTest.java @@ -160,11 +160,7 @@ public void testStartWorkflowGRPC() { IWorkflowService service = new Thrift2ProtoAdapter( IGrpcServiceStubs.newInstance( - ClientOptions.newBuilder() - .setTracer(mockTracer) - .setHost("localhost") - .setPort(7833) - .build())); + ClientOptions.newBuilder().setTracer(mockTracer).setPort(7833).build())); testStartWorkflowHelper(service, mockTracer, true); } @@ -175,11 +171,7 @@ public void testStartMultipleWorkflowGRPC() { IWorkflowService service = new Thrift2ProtoAdapter( IGrpcServiceStubs.newInstance( - ClientOptions.newBuilder() - .setTracer(mockTracer) - .setHost("localhost") - .setPort(7833) - .build())); + ClientOptions.newBuilder().setTracer(mockTracer).setPort(7833).build())); try { service.RegisterDomain(new RegisterDomainRequest().setName(DOMAIN)); } catch (DomainAlreadyExistsError e) { @@ -267,11 +259,7 @@ public void testSignalWithStartWorkflowGRPC() { IWorkflowService service = new Thrift2ProtoAdapter( IGrpcServiceStubs.newInstance( - ClientOptions.newBuilder() - .setTracer(mockTracer) - .setHost("localhost") - .setPort(7833) - .build())); + ClientOptions.newBuilder().setTracer(mockTracer).setPort(7833).build())); testSignalWithStartWorkflowHelper(service, mockTracer, true); } @@ -289,8 +277,7 @@ public void testStartWorkflowGRPCNoPropagation() { MockTracer mockTracer = new MockTracer(); IWorkflowService service = new Thrift2ProtoAdapter( - IGrpcServiceStubs.newInstance( - ClientOptions.newBuilder().setHost("localhost").setPort(7833).build())); + IGrpcServiceStubs.newInstance(ClientOptions.newBuilder().setPort(7833).build())); testStartWorkflowHelper(service, mockTracer, false); } @@ -308,8 +295,7 @@ public void testSignalStartWorkflowGRPCNoPropagation() { MockTracer mockTracer = new MockTracer(); IWorkflowService service = new Thrift2ProtoAdapter( - IGrpcServiceStubs.newInstance( - ClientOptions.newBuilder().setHost("localhost").setPort(7833).build())); + IGrpcServiceStubs.newInstance(ClientOptions.newBuilder().setPort(7833).build())); testSignalWithStartWorkflowHelper(service, mockTracer, false); } diff --git a/src/test/java/com/uber/cadence/testUtils/TestEnvironment.java b/src/test/java/com/uber/cadence/testUtils/TestEnvironment.java index a08f5d1da..08faf2c67 100644 --- a/src/test/java/com/uber/cadence/testUtils/TestEnvironment.java +++ b/src/test/java/com/uber/cadence/testUtils/TestEnvironment.java @@ -43,7 +43,6 @@ public static boolean isUseDockerService() { public static IWorkflowService getDockerService() { return new Thrift2ProtoAdapter( - IGrpcServiceStubs.newInstance( - ClientOptions.newBuilder().setHost("localhost").setPort(7833).build())); + IGrpcServiceStubs.newInstance(ClientOptions.newBuilder().setPort(7833).build())); } } From ea1f9703584e83a44bbbd12c9e6d7ef1c398da45 Mon Sep 17 00:00:00 2001 From: Shijie Sheng Date: Wed, 11 Jun 2025 13:10:15 -0700 Subject: [PATCH 10/14] fix flaky sticky --- .../java/com/uber/cadence/worker/StickyWorkerTest.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/uber/cadence/worker/StickyWorkerTest.java b/src/test/java/com/uber/cadence/worker/StickyWorkerTest.java index 1177aea51..55ceb017b 100644 --- a/src/test/java/com/uber/cadence/worker/StickyWorkerTest.java +++ b/src/test/java/com/uber/cadence/worker/StickyWorkerTest.java @@ -481,16 +481,18 @@ public void workflowsCanBeQueried() throws Exception { // Assert assertEquals(workflow.getProgress(), GreetingSignalWorkflow.Status.WAITING_FOR_NAME); - DeciderCache cache = factory.getCache(); - assertNotNull(cache); - assertEquals(1, cache.size()); - workflow.waitForName("World"); String greeting = workflow.getGreeting(); assertEquals("Hello World!", greeting); assertEquals(workflow.getProgress(), GreetingSignalWorkflow.Status.GREETING_GENERATED); + + DeciderCache cache = factory.getCache(); + assertNotNull(cache); + assertEquals(1, cache.size()); + wrapper.close(); + factory.shutdown(); } @Test From 8be501ce180ceabfdce29cfd4450c5214ebd9563 Mon Sep 17 00:00:00 2001 From: Shijie Sheng Date: Wed, 11 Jun 2025 13:44:07 -0700 Subject: [PATCH 11/14] double memory --- .buildkite/pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 122bd7601..fd2cb06ed 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -26,7 +26,7 @@ container: resources: requests: cpu: 7500m - memory: 30G + memory: 60G volumes: - name: docker-sock emptyDir: {} From c0088be4414a47eb7a49142df1ff020fd64a68a6 Mon Sep 17 00:00:00 2001 From: Shijie Sheng Date: Wed, 11 Jun 2025 14:06:50 -0700 Subject: [PATCH 12/14] cap test concurrency to 2 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a929dfa88..c0b0b29eb 100644 --- a/build.gradle +++ b/build.gradle @@ -347,7 +347,7 @@ test { dependsOn 'registerDomain' dependsOn 'licenseMain' finalizedBy jacocoTestReport // report is always generated after tests run - maxParallelForks = Runtime.runtime.availableProcessors() / 2 + maxParallelForks = Math.max(2, (Runtime.runtime.availableProcessors() / 2)) testLogging { events 'passed', 'skipped', 'failed' exceptionFormat 'full' From 39f832ba4b1008ca9849a6b67335e21602afd56a Mon Sep 17 00:00:00 2001 From: Shijie Sheng Date: Wed, 11 Jun 2025 15:19:43 -0700 Subject: [PATCH 13/14] fix gradle --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c0b0b29eb..41643d28f 100644 --- a/build.gradle +++ b/build.gradle @@ -347,7 +347,7 @@ test { dependsOn 'registerDomain' dependsOn 'licenseMain' finalizedBy jacocoTestReport // report is always generated after tests run - maxParallelForks = Math.max(2, (Runtime.runtime.availableProcessors() / 2)) + maxParallelForks = Math.max(2.0, (Runtime.runtime.availableProcessors() / 2)) testLogging { events 'passed', 'skipped', 'failed' exceptionFormat 'full' From 1eab324f1f07ac846ed84522ff2c91b4e740ba73 Mon Sep 17 00:00:00 2001 From: Shijie Sheng Date: Wed, 11 Jun 2025 15:38:28 -0700 Subject: [PATCH 14/14] remove test concurrency --- build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/build.gradle b/build.gradle index 41643d28f..22dc4466f 100644 --- a/build.gradle +++ b/build.gradle @@ -347,7 +347,6 @@ test { dependsOn 'registerDomain' dependsOn 'licenseMain' finalizedBy jacocoTestReport // report is always generated after tests run - maxParallelForks = Math.max(2.0, (Runtime.runtime.availableProcessors() / 2)) testLogging { events 'passed', 'skipped', 'failed' exceptionFormat 'full'