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
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
12 changes: 8 additions & 4 deletions src/test/java/com/uber/cadence/RegisterTestDomain.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
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