Skip to content

fix some flaky unit test and make test run faster on CI #1007

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
Jun 12, 2025
Merged
7 changes: 6 additions & 1 deletion .buildkite/pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ container:
resources:
requests:
cpu: 7500m
memory: 30G
memory: 60G
volumes:
- name: docker-sock
emptyDir: {}
Expand All @@ -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
Expand Down Expand Up @@ -80,6 +81,8 @@ steps:
automatic:
- exit_status: "*"
limit: 3
artifact_paths:
- "build/reports/tests/test/**/*"
plugins:
- kubernetes:
<<: *kubernetes
Expand All @@ -100,6 +103,8 @@ steps:
automatic:
- exit_status: "*"
limit: 3
artifact_paths:
- "build/reports/tests/test/**/*"
plugins:
- kubernetes:
<<: *kubernetes
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,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
}
}

Expand Down
8 changes: 3 additions & 5 deletions src/test/java/com/uber/cadence/RegisterTestDomain.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,20 @@
import static com.uber.cadence.testUtils.TestEnvironment.DOMAIN;
import static com.uber.cadence.testUtils.TestEnvironment.DOMAIN2;

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 = TestEnvironment.getDockerService();
registerDomain(service, DOMAIN);
registerDomain(service, DOMAIN2);
System.exit(0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 = 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";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,10 @@
*/
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.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;
Expand Down Expand Up @@ -223,12 +220,7 @@ public static CadenceTestContext forRealService(
WorkerFactoryOptions workerFactoryOptions) {
TracingWorkflowInterceptorFactory tracer = new TracingWorkflowInterceptorFactory();

IWorkflowService wfService =
new WorkflowServiceTChannel(
ClientOptions.newBuilder()
.setFeatureFlags(
new FeatureFlags().setWorkflowExecutionAlreadyCompletedErrorEnabled(true))
.build());
IWorkflowService wfService = TestEnvironment.getDockerService();
WorkflowClient workflowClient = WorkflowClient.newInstance(wfService, clientOptions);
WorkerFactory workerFactory = new WorkerFactory(workflowClient, workerFactoryOptions);
ScheduledExecutorService scheduledExecutor = new ScheduledThreadPoolExecutor(1);
Expand Down
10 changes: 10 additions & 0 deletions src/test/java/com/uber/cadence/testUtils/TestEnvironment.java
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand All @@ -35,4 +40,9 @@ public static boolean isDebuggerTimeouts() {
public static boolean isUseDockerService() {
return USE_DOCKER_SERVICE;
}

public static IWorkflowService getDockerService() {
return new Thrift2ProtoAdapter(
IGrpcServiceStubs.newInstance(ClientOptions.newBuilder().setPort(7833).build()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand All @@ -81,7 +79,7 @@ public static Object[] data() {
@Before
public void setUp() {
if (useExternalService) {
service = new WorkflowServiceTChannel(ClientOptions.defaultInstance());
service = TestEnvironment.getDockerService();
}
}

Expand Down
23 changes: 11 additions & 12 deletions src/test/java/com/uber/cadence/worker/StickyWorkerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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();
}
}

Expand Down Expand Up @@ -479,12 +478,6 @@ public void workflowsCanBeQueried() throws Exception {
// Act
WorkflowClient.start(workflow::getGreeting);

Thread.sleep(200); // Wait for workflow to start

DeciderCache cache = factory.getCache();
assertNotNull(cache);
assertEquals(1, cache.size());

// Assert
assertEquals(workflow.getProgress(), GreetingSignalWorkflow.Status.WAITING_FOR_NAME);

Expand All @@ -493,7 +486,13 @@ public void workflowsCanBeQueried() throws Exception {

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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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 = TestEnvironment.isUseDockerService();

@Parameterized.Parameter public boolean useExternalService;

Expand Down Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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() {
Expand All @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> completablePromise = Workflow.newPromise();
CancellationScope scope =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 {
Expand All @@ -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 {
Expand Down