diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 50df553e2e..d3bb2044e0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -175,7 +175,7 @@ jobs: - name: Run cloud test if: ${{ steps.cloud-test-eligibility.outputs.enabled == 'true' }} - timeout-minutes: 15 + timeout-minutes: 30 env: USER: unittest TEMPORAL_TEST_ENV_CONFIG_SERVER: "true" @@ -184,10 +184,7 @@ jobs: TEMPORAL_CLIENT_CLOUD_NAMESPACE: ${{ steps.create-cloud-namespace.outputs.namespace }} TEMPORAL_CLIENT_CLOUD_API_KEY: ${{ secrets.TEMPORAL_CLIENT_CLOUD_API_KEY }} TEMPORAL_CLIENT_CLOUD_API_VERSION: v0.19.1 - run: | - ./gradlew --no-daemon :temporal-sdk:test \ - --tests '*CloudOperationsClientTest' \ - --tests 'io.temporal.client.functional.SignalTest.signalCompletedWorkflow' + run: ./gradlew --no-daemon :temporal-sdk:testCloud - name: Delete Cloud namespace id: delete-cloud-namespace @@ -207,7 +204,7 @@ jobs: uses: mikepenz/action-junit-report@bccf2e31636835cf0874589931c4116687171386 # v6 if: success() || failure() # always run even if the previous step fails with: - report_paths: "**/build/test-results/test/TEST-*.xml" + report_paths: "**/build/test-results/testCloud/TEST-*.xml" code_format: name: Code format diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1dc11851ae..81c6b80ad8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -112,6 +112,13 @@ Values from `TEMPORAL_ADDRESS`, `TEMPORAL_NAMESPACE`, `TEMPORAL_API_KEY`, `TEMPO `TEMPORAL_GRPC_META_*` override the selected profile. Envconfig mode connects to an existing server and namespace; it does not create or register either one. +The `:temporal-sdk:testCloud` task runs tests that are eligible for Temporal Cloud. It uses the same +envconfig variables and excludes tests annotated with a `CloudTestExclusion` JUnit category. Tests +are Cloud-eligible by default; use the narrowest applicable exclusion reason when a test requires a +local server, requires Cloud resources that CI does not provision, or still needs Cloud-specific +adaptation. Run `./gradlew :temporal-sdk:testCloud --test-dry-run` to inventory the selected tests +without executing them. The normal `test` task continues to run Cloud-excluded tests locally. + ## Things to Avoid Avoid changes that make review harder without improving the contribution: diff --git a/temporal-sdk/build.gradle b/temporal-sdk/build.gradle index b74f330a68..5dd82cab2e 100644 --- a/temporal-sdk/build.gradle +++ b/temporal-sdk/build.gradle @@ -179,6 +179,34 @@ test { } } +task testCloud(type: Test) { + group = 'verification' + description = 'Runs temporal-sdk tests that are eligible for Temporal Cloud.' + testClassesDirs = sourceSets.test.output.classesDirs + classpath = sourceSets.test.runtimeClasspath + if (project.hasProperty('testJavaVersion')) { + javaLauncher = javaToolchains.launcherFor { + languageVersion = JavaLanguageVersion.of(project.property('testJavaVersion') as int) + } + } + useJUnit { + excludeCategories 'io.temporal.testing.CloudTestExclusion' + excludeCategories 'io.temporal.worker.IndependentResourceBasedTests' + } + testLogging { + events 'passed', 'skipped', 'failed' + exceptionFormat 'full' + showStandardStreams true + } + forkEvery = 1 + maxParallelForks = Math.max(Runtime.runtime.availableProcessors().intdiv(2), 1) ?: 1 + afterTest { TestDescriptor descriptor, TestResult result -> + if (result.resultType == org.gradle.api.tasks.testing.TestResult.ResultType.FAILURE) { + failedTests << ["${descriptor.className}::${descriptor.name}"] + } + } +} + // On Java 17+, prepend java17 classes to all test classpaths so that Class.forName finds // the real Jackson3JsonPayloadConverter instead of the Java 8 stub. This lets us test // the present-java17-but-absent-jackson3 behavior (NoClassDefFoundError) in the same diff --git a/temporal-sdk/src/test/java/io/temporal/activity/ActivityInfoTest.java b/temporal-sdk/src/test/java/io/temporal/activity/ActivityInfoTest.java index 8e8a8ccc3b..ab2f878bcc 100644 --- a/temporal-sdk/src/test/java/io/temporal/activity/ActivityInfoTest.java +++ b/temporal-sdk/src/test/java/io/temporal/activity/ActivityInfoTest.java @@ -73,7 +73,8 @@ public void getActivityInfo() { Assert.assertEquals(ACTIVITY_OPTIONS.getStartToCloseTimeout(), info.startToCloseTimeout); Assert.assertEquals(ACTIVITY_OPTIONS.getHeartbeatTimeout(), info.heartbeatTimeout); Assert.assertEquals(ActivityInfoWorkflow.class.getSimpleName(), info.workflowType); - Assert.assertEquals(SDKTestWorkflowRule.NAMESPACE, info.namespace); + Assert.assertEquals( + testWorkflowRule.getWorkflowClient().getOptions().getNamespace(), info.namespace); Assert.assertEquals(testWorkflowRule.getTaskQueue(), info.activityTaskQueue); Assert.assertFalse(info.isLocal); Assert.assertEquals(0, info.priorityKey); @@ -98,7 +99,8 @@ public void getLocalActivityInfo() { Assert.assertTrue(info.startToCloseTimeout.isZero()); Assert.assertTrue(info.heartbeatTimeout.isZero()); Assert.assertEquals(ActivityInfoWorkflow.class.getSimpleName(), info.workflowType); - Assert.assertEquals(SDKTestWorkflowRule.NAMESPACE, info.namespace); + Assert.assertEquals( + testWorkflowRule.getWorkflowClient().getOptions().getNamespace(), info.namespace); Assert.assertEquals(testWorkflowRule.getTaskQueue(), info.activityTaskQueue); Assert.assertTrue(info.isLocal); Assert.assertEquals(0, info.priorityKey); diff --git a/temporal-sdk/src/test/java/io/temporal/authorization/AuthorizationTokenTest.java b/temporal-sdk/src/test/java/io/temporal/authorization/AuthorizationTokenTest.java index 544732a65f..364875eb92 100644 --- a/temporal-sdk/src/test/java/io/temporal/authorization/AuthorizationTokenTest.java +++ b/temporal-sdk/src/test/java/io/temporal/authorization/AuthorizationTokenTest.java @@ -6,6 +6,7 @@ import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowOptions; import io.temporal.serviceclient.WorkflowServiceStubsOptions; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestEnvironmentOptions; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; @@ -20,9 +21,12 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.rules.TestWatcher; import org.junit.runner.Description; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class AuthorizationTokenTest { private static Metadata.Key TEMPORAL_NAMESPACE_HEADER_KEY = Metadata.Key.of("temporal-namespace", Metadata.ASCII_STRING_MARSHALLER); diff --git a/temporal-sdk/src/test/java/io/temporal/client/functional/GetActivityResultAsyncOverServerLongPollWaitTest.java b/temporal-sdk/src/test/java/io/temporal/client/functional/GetActivityResultAsyncOverServerLongPollWaitTest.java index 02add6c2ba..1c735233c0 100644 --- a/temporal-sdk/src/test/java/io/temporal/client/functional/GetActivityResultAsyncOverServerLongPollWaitTest.java +++ b/temporal-sdk/src/test/java/io/temporal/client/functional/GetActivityResultAsyncOverServerLongPollWaitTest.java @@ -54,7 +54,9 @@ public void run() { private ActivityClient newActivityClient() { return ActivityClient.newInstance( testWorkflowRule.getWorkflowClient().getWorkflowServiceStubs(), - ActivityClientOptions.newBuilder().setNamespace(SDKTestWorkflowRule.NAMESPACE).build()); + ActivityClientOptions.newBuilder() + .setNamespace(testWorkflowRule.getWorkflowClient().getOptions().getNamespace()) + .build()); } private StartActivityOptions slowOpts() { diff --git a/temporal-sdk/src/test/java/io/temporal/client/functional/GetActivityResultOverLongPollWaitTest.java b/temporal-sdk/src/test/java/io/temporal/client/functional/GetActivityResultOverLongPollWaitTest.java index 376fbe0255..ee5f32e474 100644 --- a/temporal-sdk/src/test/java/io/temporal/client/functional/GetActivityResultOverLongPollWaitTest.java +++ b/temporal-sdk/src/test/java/io/temporal/client/functional/GetActivityResultOverLongPollWaitTest.java @@ -66,7 +66,9 @@ public void setUp() { activityClient = ActivityClient.newInstance( clientStubs, - ActivityClientOptions.newBuilder().setNamespace(SDKTestWorkflowRule.NAMESPACE).build()); + ActivityClientOptions.newBuilder() + .setNamespace(testWorkflowRule.getWorkflowClient().getOptions().getNamespace()) + .build()); } @After diff --git a/temporal-sdk/src/test/java/io/temporal/client/functional/GetActivityResultSyncOverServerLongPollWaitTest.java b/temporal-sdk/src/test/java/io/temporal/client/functional/GetActivityResultSyncOverServerLongPollWaitTest.java index 858e8a3df7..f2ac623409 100644 --- a/temporal-sdk/src/test/java/io/temporal/client/functional/GetActivityResultSyncOverServerLongPollWaitTest.java +++ b/temporal-sdk/src/test/java/io/temporal/client/functional/GetActivityResultSyncOverServerLongPollWaitTest.java @@ -53,7 +53,9 @@ public void run() { private ActivityClient newActivityClient() { return ActivityClient.newInstance( testWorkflowRule.getWorkflowClient().getWorkflowServiceStubs(), - ActivityClientOptions.newBuilder().setNamespace(SDKTestWorkflowRule.NAMESPACE).build()); + ActivityClientOptions.newBuilder() + .setNamespace(testWorkflowRule.getWorkflowClient().getOptions().getNamespace()) + .build()); } private StartActivityOptions slowOpts() { diff --git a/temporal-sdk/src/test/java/io/temporal/client/functional/MetricsTest.java b/temporal-sdk/src/test/java/io/temporal/client/functional/MetricsTest.java index a7452fb37d..22e0092592 100644 --- a/temporal-sdk/src/test/java/io/temporal/client/functional/MetricsTest.java +++ b/temporal-sdk/src/test/java/io/temporal/client/functional/MetricsTest.java @@ -1,7 +1,6 @@ package io.temporal.client.functional; import static io.temporal.testUtils.Eventually.assertEventually; -import static io.temporal.testing.internal.SDKTestWorkflowRule.NAMESPACE; import static junit.framework.TestCase.*; import static org.junit.Assume.assumeTrue; @@ -54,22 +53,26 @@ public class MetricsTest { private final ActivityClient activityClient = ActivityClient.newInstance( testWorkflowRule.getWorkflowServiceStubs(), - ActivityClientOptions.newBuilder().setNamespace(SDKTestWorkflowRule.NAMESPACE).build()); - - private static final List TAGS_NAMESPACE = - MetricsTag.defaultTags(NAMESPACE).entrySet().stream() - .map( - nameValueEntry -> - new ImmutableTag(nameValueEntry.getKey(), nameValueEntry.getValue())) - .collect(Collectors.toList()); + ActivityClientOptions.newBuilder() + .setNamespace(testWorkflowRule.getWorkflowClient().getOptions().getNamespace()) + .build()); + private List tagsNamespace; private List tagsNamespaceQueue; @Before public void setUp() { registry.clear(); + tagsNamespace = + MetricsTag.defaultTags(testWorkflowRule.getWorkflowClient().getOptions().getNamespace()) + .entrySet() + .stream() + .map( + nameValueEntry -> + new ImmutableTag(nameValueEntry.getKey(), nameValueEntry.getValue())) + .collect(Collectors.toList()); tagsNamespaceQueue = - replaceTags(TAGS_NAMESPACE, MetricsTag.TASK_QUEUE, testWorkflowRule.getTaskQueue()); + replaceTags(tagsNamespace, MetricsTag.TASK_QUEUE, testWorkflowRule.getTaskQueue()); } @After @@ -97,7 +100,7 @@ public void testSynchronousStartAndGetResult() throws InterruptedException { MetricsTag.WORKFLOW_TYPE, "QuicklyCompletingWorkflow"); List longPollRequestTags = - replaceTag(TAGS_NAMESPACE, MetricsTag.OPERATION_NAME, "GetWorkflowExecutionHistory"); + replaceTag(tagsNamespace, MetricsTag.OPERATION_NAME, "GetWorkflowExecutionHistory"); assertEventually( Duration.ofSeconds(2), @@ -130,7 +133,7 @@ public void testAsynchronousStartAndGetResult() throws InterruptedException, Exe MetricsTag.WORKFLOW_TYPE, "QuicklyCompletingWorkflow"); List longPollRequestTags = - replaceTag(TAGS_NAMESPACE, MetricsTag.OPERATION_NAME, "GetWorkflowExecutionHistory"); + replaceTag(tagsNamespace, MetricsTag.OPERATION_NAME, "GetWorkflowExecutionHistory"); assertEventually( Duration.ofSeconds(2), diff --git a/temporal-sdk/src/test/java/io/temporal/client/functional/StandaloneActivityTest.java b/temporal-sdk/src/test/java/io/temporal/client/functional/StandaloneActivityTest.java index 5be3226dcd..354b909280 100644 --- a/temporal-sdk/src/test/java/io/temporal/client/functional/StandaloneActivityTest.java +++ b/temporal-sdk/src/test/java/io/temporal/client/functional/StandaloneActivityTest.java @@ -257,7 +257,9 @@ private StartActivityOptions simpleOpts(String id) { private ActivityClient newActivityClient() { return ActivityClient.newInstance( testWorkflowRule.getWorkflowServiceStubs(), - ActivityClientOptions.newBuilder().setNamespace(SDKTestWorkflowRule.NAMESPACE).build()); + ActivityClientOptions.newBuilder() + .setNamespace(testWorkflowRule.getWorkflowClient().getOptions().getNamespace()) + .build()); } @Test @@ -516,7 +518,7 @@ public void testStartActivityInterceptorsAreCalledProperly() throws InterruptedE ActivityClient.newInstance( testWorkflowRule.getWorkflowServiceStubs(), ActivityClientOptions.newBuilder() - .setNamespace(SDKTestWorkflowRule.NAMESPACE) + .setNamespace(testWorkflowRule.getWorkflowClient().getOptions().getNamespace()) .setInterceptors(Collections.singletonList(interceptor)) .build()); @@ -570,7 +572,7 @@ public void testExecuteActivityWorkerActivityInfoIsAccurate() { assertEquals(activityId, info.activityId); assertEquals("InspectInfo", info.activityType); - assertEquals(SDKTestWorkflowRule.NAMESPACE, info.namespace); + assertEquals(testWorkflowRule.getWorkflowClient().getOptions().getNamespace(), info.namespace); assertEquals(testWorkflowRule.getTaskQueue(), info.taskQueue); assertFalse(info.isLocal); assertFalse(info.isInWorkflow); diff --git a/temporal-sdk/src/test/java/io/temporal/client/functional/StartTest.java b/temporal-sdk/src/test/java/io/temporal/client/functional/StartTest.java index 2c70b3a94e..5c3162abe5 100644 --- a/temporal-sdk/src/test/java/io/temporal/client/functional/StartTest.java +++ b/temporal-sdk/src/test/java/io/temporal/client/functional/StartTest.java @@ -12,6 +12,7 @@ import io.temporal.client.WorkflowTargetOptions; import io.temporal.common.WorkflowExecutionHistory; import io.temporal.internal.common.ProtobufTimeUtils; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestOptions; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.shared.TestMultiArgWorkflowFunctions.*; @@ -21,6 +22,7 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; public class StartTest { @@ -70,6 +72,8 @@ public void startNoArgFuncWithRejectDuplicate() { "func", stubF.func()); // Check that duplicated start just returns the result. } + // This test exercises behavior that is only supported by the local test server. + @Category(RequiresLocalServer.class) @Test public void startOneArgsFuncWithDefault() { // TODO why it doesn't work with external service? diff --git a/temporal-sdk/src/test/java/io/temporal/client/nexus/NexusAsyncApiTest.java b/temporal-sdk/src/test/java/io/temporal/client/nexus/NexusAsyncApiTest.java index c778091b4c..72a6676cbb 100644 --- a/temporal-sdk/src/test/java/io/temporal/client/nexus/NexusAsyncApiTest.java +++ b/temporal-sdk/src/test/java/io/temporal/client/nexus/NexusAsyncApiTest.java @@ -12,6 +12,7 @@ import io.temporal.client.UntypedNexusOperationHandle; import io.temporal.client.UntypedNexusServiceClient; import io.temporal.failure.ApplicationFailure; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.shared.EchoNexusServiceImpl; import io.temporal.workflow.shared.TestNexusServices; @@ -25,6 +26,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Coverage tests for the {@link CompletableFuture}-returning surface on the standalone Nexus @@ -33,6 +35,8 @@ * UntypedNexusOperationHandle}. Each overload is asserted against the existing sync echo handler so * the Java async API is exercised without depending on server-side async completion. */ +// Cloud CI does not provision the standalone Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class NexusAsyncApiTest { @Rule diff --git a/temporal-sdk/src/test/java/io/temporal/client/nexus/NexusClientTest.java b/temporal-sdk/src/test/java/io/temporal/client/nexus/NexusClientTest.java index 0046a321d4..1ba756af99 100644 --- a/temporal-sdk/src/test/java/io/temporal/client/nexus/NexusClientTest.java +++ b/temporal-sdk/src/test/java/io/temporal/client/nexus/NexusClientTest.java @@ -26,6 +26,7 @@ import io.temporal.client.UntypedNexusOperationHandle; import io.temporal.client.UntypedNexusServiceClient; import io.temporal.nexus.TemporalOperationHandler; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.shared.EchoNexusServiceImpl; import io.temporal.workflow.shared.TestNexusServices; @@ -41,7 +42,10 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the standalone Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class NexusClientTest { private final AtomicInteger activityInvocationCount = new AtomicInteger(); diff --git a/temporal-sdk/src/test/java/io/temporal/client/nexus/NexusOperationHandleTest.java b/temporal-sdk/src/test/java/io/temporal/client/nexus/NexusOperationHandleTest.java index 11d76f0b1e..3a46f55b33 100644 --- a/temporal-sdk/src/test/java/io/temporal/client/nexus/NexusOperationHandleTest.java +++ b/temporal-sdk/src/test/java/io/temporal/client/nexus/NexusOperationHandleTest.java @@ -14,6 +14,7 @@ import io.temporal.client.UntypedNexusOperationHandle; import io.temporal.client.UntypedNexusServiceClient; import io.temporal.failure.ApplicationFailure; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.shared.EchoNexusServiceImpl; import io.temporal.workflow.shared.TestNexusServices; @@ -24,12 +25,15 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Tests for {@link UntypedNexusOperationHandle} per-execution lifecycle methods returned by {@link * NexusClient#getHandle(String, String)}: {@code describe()}, {@code cancel()}/{@code * cancel(reason)}, and {@code terminate()}/{@code terminate(reason)}. */ +// Cloud CI does not provision the standalone Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class NexusOperationHandleTest { @Rule diff --git a/temporal-sdk/src/test/java/io/temporal/client/nexus/NexusServiceClientTest.java b/temporal-sdk/src/test/java/io/temporal/client/nexus/NexusServiceClientTest.java index 395a0be2bf..15849efab3 100644 --- a/temporal-sdk/src/test/java/io/temporal/client/nexus/NexusServiceClientTest.java +++ b/temporal-sdk/src/test/java/io/temporal/client/nexus/NexusServiceClientTest.java @@ -13,6 +13,7 @@ import io.temporal.client.NexusServiceClient; import io.temporal.client.StartNexusOperationOptions; import io.temporal.client.UntypedNexusOperationHandle; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.shared.EchoNexusServiceImpl; import io.temporal.workflow.shared.TestNexusServices; @@ -23,11 +24,14 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * End-to-end tests for {@link NexusServiceClient}: typed start/execute via {@link * io.temporal.workflow.Functions.Func2} method references. */ +// Cloud CI does not provision the standalone Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class NexusServiceClientTest { @Rule diff --git a/temporal-sdk/src/test/java/io/temporal/client/nexus/StandaloneNexusBackingWorkflowTest.java b/temporal-sdk/src/test/java/io/temporal/client/nexus/StandaloneNexusBackingWorkflowTest.java index dea4b8b8d8..6c80411988 100644 --- a/temporal-sdk/src/test/java/io/temporal/client/nexus/StandaloneNexusBackingWorkflowTest.java +++ b/temporal-sdk/src/test/java/io/temporal/client/nexus/StandaloneNexusBackingWorkflowTest.java @@ -24,6 +24,7 @@ import io.temporal.failure.CanceledFailure; import io.temporal.nexus.Nexus; import io.temporal.nexus.WorkflowRunOperation; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.Workflow; import io.temporal.workflow.WorkflowInterface; @@ -36,6 +37,7 @@ import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Behavior tests for standalone Nexus operations whose handler is {@link WorkflowRunOperation}, @@ -43,6 +45,8 @@ * individual tests can exercise cancel propagation, bidirectional link plumbing, and any other * behavior that depends on the SANO ↔ backing-workflow relationship. */ +// Cloud CI does not provision the standalone Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class StandaloneNexusBackingWorkflowTest { static final AtomicReference capturedWorkflowId = new AtomicReference<>(); diff --git a/temporal-sdk/src/test/java/io/temporal/client/nexus/StandaloneNexusSignalLinkingTest.java b/temporal-sdk/src/test/java/io/temporal/client/nexus/StandaloneNexusSignalLinkingTest.java index 2864ed2ca7..a72b526e0a 100644 --- a/temporal-sdk/src/test/java/io/temporal/client/nexus/StandaloneNexusSignalLinkingTest.java +++ b/temporal-sdk/src/test/java/io/temporal/client/nexus/StandaloneNexusSignalLinkingTest.java @@ -21,6 +21,7 @@ import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowOptions; import io.temporal.nexus.Nexus; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.SignalMethod; import io.temporal.workflow.Workflow; @@ -33,6 +34,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Verifies bidirectional link propagation when a Nexus operation handler signal-with-starts a @@ -52,6 +54,8 @@ *

Requires a real server: standalone Nexus operations and {@code EnableCHASMSignalBacklinks} are * not implemented by the in-memory test server. Test skips locally and runs in CI. */ +// Cloud CI does not provision the standalone Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class StandaloneNexusSignalLinkingTest { @Rule diff --git a/temporal-sdk/src/test/java/io/temporal/client/schedules/ScheduleWithTypedSearchAttributesTest.java b/temporal-sdk/src/test/java/io/temporal/client/schedules/ScheduleWithTypedSearchAttributesTest.java index 55b6ccedfd..cb7dc430e1 100644 --- a/temporal-sdk/src/test/java/io/temporal/client/schedules/ScheduleWithTypedSearchAttributesTest.java +++ b/temporal-sdk/src/test/java/io/temporal/client/schedules/ScheduleWithTypedSearchAttributesTest.java @@ -12,6 +12,7 @@ import io.temporal.common.SearchAttributeKey; import io.temporal.common.SearchAttributes; import io.temporal.common.converter.DefaultDataConverter; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.shared.TestWorkflows; import java.time.Duration; @@ -22,7 +23,10 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the custom search attributes used by this schedule suite. +@Category(RequiresCloudProvisioning.class) public class ScheduleWithTypedSearchAttributesTest { static final SearchAttributeKey CUSTOM_KEYWORD_SA = SearchAttributeKey.forKeyword("CustomKeywordField"); diff --git a/temporal-sdk/src/test/java/io/temporal/common/PluginPropagationTest.java b/temporal-sdk/src/test/java/io/temporal/common/PluginPropagationTest.java index d91922884a..fb255cb421 100644 --- a/temporal-sdk/src/test/java/io/temporal/common/PluginPropagationTest.java +++ b/temporal-sdk/src/test/java/io/temporal/common/PluginPropagationTest.java @@ -24,6 +24,7 @@ import io.temporal.client.WorkflowClientOptions; import io.temporal.serviceclient.WorkflowServiceStubsOptions; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestEnvironmentOptions; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.WorkerFactoryOptions; @@ -34,11 +35,14 @@ import java.util.List; import javax.annotation.Nonnull; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Tests that plugins propagate through the full chain: WorkflowServiceStubsOptions → * WorkflowClientOptions → WorkerFactory */ +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class PluginPropagationTest { /** A plugin that tracks all configuration calls via subclassing. */ diff --git a/temporal-sdk/src/test/java/io/temporal/common/interceptors/ActivityClientCallsInterceptorChainTest.java b/temporal-sdk/src/test/java/io/temporal/common/interceptors/ActivityClientCallsInterceptorChainTest.java index 83747ce8f4..17a5909fe7 100644 --- a/temporal-sdk/src/test/java/io/temporal/common/interceptors/ActivityClientCallsInterceptorChainTest.java +++ b/temporal-sdk/src/test/java/io/temporal/common/interceptors/ActivityClientCallsInterceptorChainTest.java @@ -72,7 +72,7 @@ private ActivityClient newClient(ActivityClientInterceptor... interceptors) { return ActivityClient.newInstance( testRule.getWorkflowServiceStubs(), ActivityClientOptions.newBuilder() - .setNamespace(SDKTestWorkflowRule.NAMESPACE) + .setNamespace(testRule.getWorkflowClient().getOptions().getNamespace()) .setInterceptors(Arrays.asList(interceptors)) .build()); } diff --git a/temporal-sdk/src/test/java/io/temporal/functional/serialization/WorkflowIdSignedPayloadsTest.java b/temporal-sdk/src/test/java/io/temporal/functional/serialization/WorkflowIdSignedPayloadsTest.java index 136c07bea2..4350b00365 100644 --- a/temporal-sdk/src/test/java/io/temporal/functional/serialization/WorkflowIdSignedPayloadsTest.java +++ b/temporal-sdk/src/test/java/io/temporal/functional/serialization/WorkflowIdSignedPayloadsTest.java @@ -18,6 +18,7 @@ import io.temporal.payload.context.ActivitySerializationContext; import io.temporal.payload.context.HasWorkflowSerializationContext; import io.temporal.payload.context.SerializationContext; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestOptions; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; @@ -32,6 +33,7 @@ import javax.annotation.Nullable; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.rules.TestName; /** @@ -108,6 +110,8 @@ public void testSimpleWorkflowWithMemo() throws InterruptedException { assertEquals(MEMO_VALUE, executions.get(0).getMemo(MEMO_KEY, String.class)); } + // This cron test depends on local test-server time skipping. + @Category(RequiresLocalServer.class) @Test public void testSimpleCronWorkflow() { assumeFalse("skipping as test will timeout", SDKTestWorkflowRule.useExternalService); diff --git a/temporal-sdk/src/test/java/io/temporal/internal/replay/GetVersionInterleavedUpdateReplayTaskHandlerTest.java b/temporal-sdk/src/test/java/io/temporal/internal/replay/GetVersionInterleavedUpdateReplayTaskHandlerTest.java index 2e90698ff7..ebc82fcc7e 100644 --- a/temporal-sdk/src/test/java/io/temporal/internal/replay/GetVersionInterleavedUpdateReplayTaskHandlerTest.java +++ b/temporal-sdk/src/test/java/io/temporal/internal/replay/GetVersionInterleavedUpdateReplayTaskHandlerTest.java @@ -11,6 +11,7 @@ import io.temporal.common.WorkflowExecutionHistory; import io.temporal.internal.worker.QueryReplayHelper; import io.temporal.serviceclient.WorkflowServiceStubs; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; import io.temporal.workflow.versionTests.GetVersionInterleavedUpdateReplayTest; @@ -19,7 +20,10 @@ import java.lang.reflect.Method; import java.util.Arrays; import org.junit.Test; +import org.junit.experimental.categories.Category; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class GetVersionInterleavedUpdateReplayTaskHandlerTest { private static final String EXPECTED_FIRST_CHANGE_ID = "ChangeId1"; private static final String EXPECTED_SECOND_CHANGE_ID = "ChangeId2"; diff --git a/temporal-sdk/src/test/java/io/temporal/internal/replay/ReplayWorkflowRunTaskHandlerCacheTests.java b/temporal-sdk/src/test/java/io/temporal/internal/replay/ReplayWorkflowRunTaskHandlerCacheTests.java index 751af5435c..e25721c416 100644 --- a/temporal-sdk/src/test/java/io/temporal/internal/replay/ReplayWorkflowRunTaskHandlerCacheTests.java +++ b/temporal-sdk/src/test/java/io/temporal/internal/replay/ReplayWorkflowRunTaskHandlerCacheTests.java @@ -26,6 +26,7 @@ import io.temporal.internal.worker.WorkflowRunLockManager; import io.temporal.serviceclient.MetricsTag; import io.temporal.testUtils.HistoryUtils; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.worker.MetricsType; import java.util.Map; @@ -34,6 +35,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; public class ReplayWorkflowRunTaskHandlerCacheTests { @@ -71,6 +73,8 @@ public void whenHistoryIsFullNewWorkflowExecutorIsReturnedAndCached_InitiallyEmp cache.getOrCreate(workflowTask, metricsScope, () -> createFakeExecutor(workflowTask))); } + // This cache test depends on local test-server execution behavior. + @Category(RequiresLocalServer.class) @Test public void whenHistoryIsFullNewWorkflowExecutorIsReturned_InitiallyCached() throws Exception { assumeFalse("skipping for docker tests", SDKTestWorkflowRule.useExternalService); @@ -110,6 +114,8 @@ public void whenHistoryIsFullNewWorkflowExecutorIsReturned_InitiallyCached() thr assertSame(workflowRunTaskHandler2, workflowRunTaskHandler); } + // This cache test depends on local test-server execution behavior. + @Category(RequiresLocalServer.class) @Test(timeout = 2000) public void whenHistoryIsPartialCachedEntryIsReturned() throws Exception { assumeFalse("skipping for docker tests", SDKTestWorkflowRule.useExternalService); diff --git a/temporal-sdk/src/test/java/io/temporal/internal/replay/ReplayWorkflowRunTaskHandlerTaskHandlerTests.java b/temporal-sdk/src/test/java/io/temporal/internal/replay/ReplayWorkflowRunTaskHandlerTaskHandlerTests.java index ed6446678a..b52b587b3b 100644 --- a/temporal-sdk/src/test/java/io/temporal/internal/replay/ReplayWorkflowRunTaskHandlerTaskHandlerTests.java +++ b/temporal-sdk/src/test/java/io/temporal/internal/replay/ReplayWorkflowRunTaskHandlerTaskHandlerTests.java @@ -26,6 +26,7 @@ import io.temporal.serviceclient.Version; import io.temporal.serviceclient.WorkflowServiceStubs; import io.temporal.testUtils.HistoryUtils; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestWorkflowRule; import java.time.Duration; import java.util.HashMap; @@ -33,11 +34,14 @@ import java.util.Optional; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; public class ReplayWorkflowRunTaskHandlerTaskHandlerTests { @Rule public SDKTestWorkflowRule testWorkflowRule = SDKTestWorkflowRule.newBuilder().build(); + // This cache test depends on local test-server execution behavior. + @Category(RequiresLocalServer.class) @Test public void ifStickyExecutionAttributesAreNotSetThenWorkflowsAreNotCached() throws Throwable { assumeFalse("skipping for docker tests", SDKTestWorkflowRule.useExternalService); @@ -65,6 +69,8 @@ public void ifStickyExecutionAttributesAreNotSetThenWorkflowsAreNotCached() thro assertFalse(result.getTaskCompleted().hasStickyAttributes()); } + // This replay test depends on local test-server execution behavior. + @Category(RequiresLocalServer.class) @Test public void workflowTaskFailOnIncompleteHistory() throws Throwable { assumeFalse("skipping for docker tests", SDKTestWorkflowRule.useExternalService); @@ -158,6 +164,8 @@ public void localActivityMeteringHelper() { assertEquals(5, laMeteringHelper.getNonfirstAttempts()); } + // This cache test depends on local test-server execution behavior. + @Category(RequiresLocalServer.class) @Test public void ifStickyExecutionAttributesAreSetThenWorkflowsAreCached() throws Throwable { assumeFalse("skipping for docker tests", SDKTestWorkflowRule.useExternalService); @@ -189,6 +197,8 @@ public void ifStickyExecutionAttributesAreSetThenWorkflowsAreCached() throws Thr assertEquals(Durations.fromSeconds(5), attributes.getScheduleToStartTimeout()); } + // This replay test depends on local test-server execution behavior. + @Category(RequiresLocalServer.class) @Test public void setsSdkNameAndVersionIfNotSetInHistory() throws Throwable { assumeFalse("skipping for docker tests", SDKTestWorkflowRule.useExternalService); diff --git a/temporal-sdk/src/test/java/io/temporal/internal/replay/UnknownHistoryEventReplayerTest.java b/temporal-sdk/src/test/java/io/temporal/internal/replay/UnknownHistoryEventReplayerTest.java index f0985b81f6..923ee3f91f 100644 --- a/temporal-sdk/src/test/java/io/temporal/internal/replay/UnknownHistoryEventReplayerTest.java +++ b/temporal-sdk/src/test/java/io/temporal/internal/replay/UnknownHistoryEventReplayerTest.java @@ -6,13 +6,17 @@ import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowOptions; import io.temporal.common.WorkflowExecutionHistory; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; import io.temporal.workflow.*; import java.time.Duration; import org.junit.*; +import org.junit.experimental.categories.Category; import org.junit.rules.Timeout; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class UnknownHistoryEventReplayerTest { public static final String TASK_QUEUE = "unknown-history-event"; diff --git a/temporal-sdk/src/test/java/io/temporal/internal/sync/PromiseTest.java b/temporal-sdk/src/test/java/io/temporal/internal/sync/PromiseTest.java index d8a69f6f79..9447f249a5 100644 --- a/temporal-sdk/src/test/java/io/temporal/internal/sync/PromiseTest.java +++ b/temporal-sdk/src/test/java/io/temporal/internal/sync/PromiseTest.java @@ -7,6 +7,7 @@ import io.temporal.client.WorkflowOptions; import io.temporal.failure.CanceledFailure; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; import io.temporal.workflow.CompletablePromise; @@ -21,7 +22,10 @@ import java.util.List; import java.util.concurrent.*; import org.junit.*; +import org.junit.experimental.categories.Category; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class PromiseTest { @Rule public final Tracer trace = new Tracer(); diff --git a/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalDeprecatedQueueTest.java b/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalDeprecatedQueueTest.java index 6f8352bca8..d8b9eff7a0 100644 --- a/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalDeprecatedQueueTest.java +++ b/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalDeprecatedQueueTest.java @@ -4,6 +4,7 @@ import io.temporal.client.WorkflowOptions; import io.temporal.failure.CanceledFailure; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; import io.temporal.workflow.*; @@ -16,8 +17,11 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import org.junit.*; +import org.junit.experimental.categories.Category; @SuppressWarnings("deprecation") +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class WorkflowInternalDeprecatedQueueTest { @Rule public final Tracer trace = new Tracer(); diff --git a/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalLockTest.java b/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalLockTest.java index 9d96dd3248..a4cc56b557 100644 --- a/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalLockTest.java +++ b/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalLockTest.java @@ -4,6 +4,7 @@ import io.temporal.client.WorkflowOptions; import io.temporal.failure.CanceledFailure; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; import io.temporal.workflow.*; @@ -19,7 +20,10 @@ import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class WorkflowInternalLockTest { @Rule public final Tracer trace = new Tracer(); diff --git a/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalQueueTest.java b/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalQueueTest.java index dd63b1a61a..d530642ec2 100644 --- a/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalQueueTest.java +++ b/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalQueueTest.java @@ -4,6 +4,7 @@ import io.temporal.client.WorkflowOptions; import io.temporal.failure.CanceledFailure; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; import io.temporal.workflow.QueueConsumer; @@ -20,7 +21,10 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import org.junit.*; +import org.junit.experimental.categories.Category; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class WorkflowInternalQueueTest { @Rule public final Tracer trace = new Tracer(); diff --git a/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalSemaphoreTest.java b/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalSemaphoreTest.java index 8b7cabac52..f0aef7abc7 100644 --- a/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalSemaphoreTest.java +++ b/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalSemaphoreTest.java @@ -4,6 +4,7 @@ import io.temporal.client.WorkflowOptions; import io.temporal.failure.CanceledFailure; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; import io.temporal.workflow.*; @@ -16,7 +17,10 @@ import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class WorkflowInternalSemaphoreTest { @Rule public final Tracer trace = new Tracer(); diff --git a/temporal-sdk/src/test/java/io/temporal/internal/testing/WorkflowReplayerTest.java b/temporal-sdk/src/test/java/io/temporal/internal/testing/WorkflowReplayerTest.java index 73935a37ec..e8c5a732ec 100644 --- a/temporal-sdk/src/test/java/io/temporal/internal/testing/WorkflowReplayerTest.java +++ b/temporal-sdk/src/test/java/io/temporal/internal/testing/WorkflowReplayerTest.java @@ -11,6 +11,7 @@ import io.temporal.client.WorkflowOptions; import io.temporal.client.WorkflowStub; import io.temporal.common.WorkflowExecutionHistory; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.ReplayResults; import io.temporal.testing.TestEnvironmentOptions; import io.temporal.testing.TestWorkflowEnvironment; @@ -28,8 +29,11 @@ import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; import org.junit.*; +import org.junit.experimental.categories.Category; import org.junit.rules.Timeout; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class WorkflowReplayerTest { @Rule public Timeout testTimeout = Timeout.seconds(10); diff --git a/temporal-sdk/src/test/java/io/temporal/internal/testing/WorkflowTestingTest.java b/temporal-sdk/src/test/java/io/temporal/internal/testing/WorkflowTestingTest.java index a0479ee3d0..c898bb9693 100644 --- a/temporal-sdk/src/test/java/io/temporal/internal/testing/WorkflowTestingTest.java +++ b/temporal-sdk/src/test/java/io/temporal/internal/testing/WorkflowTestingTest.java @@ -22,6 +22,7 @@ import io.temporal.failure.ApplicationFailure; import io.temporal.failure.ChildWorkflowFailure; import io.temporal.failure.TimeoutFailure; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestEnvironmentOptions; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; @@ -41,12 +42,15 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import org.junit.*; +import org.junit.experimental.categories.Category; import org.junit.rules.TestWatcher; import org.junit.rules.Timeout; import org.junit.runner.Description; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class WorkflowTestingTest { private static final Logger log = LoggerFactory.getLogger(WorkflowTestingTest.class); private static final String TASK_QUEUE = "test-workflow"; diff --git a/temporal-sdk/src/test/java/io/temporal/internal/worker/WorkflowSlotTests.java b/temporal-sdk/src/test/java/io/temporal/internal/worker/WorkflowSlotTests.java index cf0c79cfce..a8fe78f01b 100644 --- a/temporal-sdk/src/test/java/io/temporal/internal/worker/WorkflowSlotTests.java +++ b/temporal-sdk/src/test/java/io/temporal/internal/worker/WorkflowSlotTests.java @@ -14,6 +14,7 @@ import io.temporal.common.RetryOptions; import io.temporal.common.reporter.TestStatsReporter; import io.temporal.testUtils.CountingSlotSupplier; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.worker.MetricsType; import io.temporal.worker.WorkerOptions; @@ -27,7 +28,10 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the standalone Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class WorkflowSlotTests { private final int MAX_CONCURRENT_WORKFLOW_TASK_EXECUTION_SIZE = 100; private final int MAX_CONCURRENT_ACTIVITY_EXECUTION_SIZE = 1000; diff --git a/temporal-sdk/src/test/java/io/temporal/testing/CloudTestExclusion.java b/temporal-sdk/src/test/java/io/temporal/testing/CloudTestExclusion.java new file mode 100644 index 0000000000..08c3af3d0a --- /dev/null +++ b/temporal-sdk/src/test/java/io/temporal/testing/CloudTestExclusion.java @@ -0,0 +1,14 @@ +package io.temporal.testing; + +/** Category hierarchy for tests excluded from Temporal Cloud execution. */ +public interface CloudTestExclusion { + + /** The test requires one or more local Temporal Server instances. */ + interface RequiresLocalServer extends CloudTestExclusion {} + + /** The test requires Cloud resources or privileges that CI does not provision. */ + interface RequiresCloudProvisioning extends CloudTestExclusion {} + + /** The test can run in Cloud after its setup or assertions are adapted. */ + interface NeedsCloudAdaptation extends CloudTestExclusion {} +} diff --git a/temporal-sdk/src/test/java/io/temporal/testing/CloudTestExclusionTest.java b/temporal-sdk/src/test/java/io/temporal/testing/CloudTestExclusionTest.java new file mode 100644 index 0000000000..59c957603e --- /dev/null +++ b/temporal-sdk/src/test/java/io/temporal/testing/CloudTestExclusionTest.java @@ -0,0 +1,48 @@ +package io.temporal.testing; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import io.temporal.testing.CloudTestExclusion.NeedsCloudAdaptation; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; +import java.lang.reflect.Method; +import org.junit.Test; +import org.junit.experimental.categories.Categories.CategoryFilter; +import org.junit.experimental.categories.Category; +import org.junit.runner.Description; + +public class CloudTestExclusionTest { + @Test + public void umbrellaCategoryExcludesEveryReasonAtClassAndMethodScope() throws Exception { + CategoryFilter filter = CategoryFilter.exclude(CloudTestExclusion.class); + + assertFalse( + filter.shouldRun( + Description.createSuiteDescription( + ClassExcludedFixture.class.getName(), + ClassExcludedFixture.class.getAnnotations()))); + assertFalse(filter.shouldRun(methodDescription("requiresCloudProvisioning"))); + assertFalse(filter.shouldRun(methodDescription("needsCloudAdaptation"))); + assertTrue(filter.shouldRun(methodDescription("cloudEligible"))); + } + + @Category(RequiresLocalServer.class) + private static class ClassExcludedFixture {} + + private static Description methodDescription(String name) throws Exception { + Method method = MethodExcludedFixture.class.getDeclaredMethod(name); + return Description.createTestDescription( + MethodExcludedFixture.class, name, method.getAnnotations()); + } + + private static class MethodExcludedFixture { + public void cloudEligible() {} + + @Category(RequiresCloudProvisioning.class) + public void requiresCloudProvisioning() {} + + @Category(NeedsCloudAdaptation.class) + public void needsCloudAdaptation() {} + } +} diff --git a/temporal-sdk/src/test/java/io/temporal/worker/ActiveTaskQueueTypesTest.java b/temporal-sdk/src/test/java/io/temporal/worker/ActiveTaskQueueTypesTest.java index 613306b93b..1ad9740740 100644 --- a/temporal-sdk/src/test/java/io/temporal/worker/ActiveTaskQueueTypesTest.java +++ b/temporal-sdk/src/test/java/io/temporal/worker/ActiveTaskQueueTypesTest.java @@ -8,6 +8,7 @@ import io.temporal.activity.ActivityInterface; import io.temporal.activity.ActivityMethod; import io.temporal.api.enums.v1.TaskQueueType; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestEnvironmentOptions; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.workflow.WorkflowInterface; @@ -15,7 +16,10 @@ import io.temporal.workflow.shared.TestNexusServices; import java.util.List; import org.junit.Test; +import org.junit.experimental.categories.Category; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class ActiveTaskQueueTypesTest { @WorkflowInterface diff --git a/temporal-sdk/src/test/java/io/temporal/worker/ResourceBasedTunerTests.java b/temporal-sdk/src/test/java/io/temporal/worker/ResourceBasedTunerTests.java index bfa14d950e..2b8292646a 100644 --- a/temporal-sdk/src/test/java/io/temporal/worker/ResourceBasedTunerTests.java +++ b/temporal-sdk/src/test/java/io/temporal/worker/ResourceBasedTunerTests.java @@ -1,7 +1,5 @@ package io.temporal.worker; -import static io.temporal.testing.internal.SDKTestWorkflowRule.NAMESPACE; - import com.uber.m3.tally.RootScopeBuilder; import com.uber.m3.util.ImmutableMap; import io.temporal.activity.ActivityInterface; @@ -12,6 +10,7 @@ import io.temporal.common.reporter.TestStatsReporter; import io.temporal.serviceclient.MetricsTag; import io.temporal.testUtils.Eventually; +import io.temporal.testing.CloudTestExclusion.NeedsCloudAdaptation; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.worker.tuning.*; import io.temporal.workflow.*; @@ -27,8 +26,6 @@ public class ResourceBasedTunerTests { private final TestStatsReporter reporter = new TestStatsReporter(); - private static final Map TAGS_NAMESPACE = - new ImmutableMap.Builder().putAll(MetricsTag.defaultTags(NAMESPACE)).build(); @Rule public SDKTestWorkflowRule testWorkflowRule = @@ -55,7 +52,9 @@ public void canRunWithResourceBasedTuner() throws InterruptedException { workflow.execute(5, 5, 1000); Map nsAndTaskQueue = new ImmutableMap.Builder() - .putAll(TAGS_NAMESPACE) + .putAll( + MetricsTag.defaultTags( + testWorkflowRule.getWorkflowClient().getOptions().getNamespace())) .put(MetricsTag.TASK_QUEUE, testWorkflowRule.getTaskQueue()) .build(); reporter.assertGauge(MetricsType.RESOURCE_MEM_USAGE, nsAndTaskQueue, (val) -> val > 0); @@ -76,7 +75,8 @@ public void canRunWithResourceBasedTuner() throws InterruptedException { MetricsType.WORKER_TASK_SLOTS_USED, getWorkerTags("LocalActivityWorker"), 0); } - @Category(IndependentResourceBasedTests.class) + // This resource-heavy test still needs a dedicated Cloud execution strategy. + @Category({IndependentResourceBasedTests.class, NeedsCloudAdaptation.class}) @Test(timeout = 300 * 1000) public void canRunHeavyMemoryWithResourceBasedTuner() { ResourceTunerWorkflow workflow = testWorkflowRule.newWorkflowStub(ResourceTunerWorkflow.class); diff --git a/temporal-sdk/src/test/java/io/temporal/worker/StickyWorkerTest.java b/temporal-sdk/src/test/java/io/temporal/worker/StickyWorkerTest.java index 4a900476fd..68a84c7b83 100644 --- a/temporal-sdk/src/test/java/io/temporal/worker/StickyWorkerTest.java +++ b/temporal-sdk/src/test/java/io/temporal/worker/StickyWorkerTest.java @@ -19,6 +19,7 @@ import io.temporal.common.reporter.TestStatsReporter; import io.temporal.internal.worker.WorkflowExecutorCache; import io.temporal.serviceclient.MetricsTag; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestEnvironmentOptions; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.testing.internal.ExternalServiceTestConfigurator; @@ -46,10 +47,13 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.rules.TestName; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class StickyWorkerTest { private static final boolean useExternalService = diff --git a/temporal-sdk/src/test/java/io/temporal/worker/WorkerIsNotGettingStartedTest.java b/temporal-sdk/src/test/java/io/temporal/worker/WorkerIsNotGettingStartedTest.java index 8ed28ff269..60fa0b236c 100644 --- a/temporal-sdk/src/test/java/io/temporal/worker/WorkerIsNotGettingStartedTest.java +++ b/temporal-sdk/src/test/java/io/temporal/worker/WorkerIsNotGettingStartedTest.java @@ -5,6 +5,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestEnvironmentOptions; import io.temporal.testing.TestWorkflowEnvironment; import java.util.Map; @@ -12,7 +13,10 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.junit.experimental.categories.Category; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class WorkerIsNotGettingStartedTest { private static final int WORKFLOW_POLL_COUNT = 11; private static final int ACTIVITY_POLL_COUNT = 18; diff --git a/temporal-sdk/src/test/java/io/temporal/worker/WorkerPollerThreadCountTest.java b/temporal-sdk/src/test/java/io/temporal/worker/WorkerPollerThreadCountTest.java index 0794a95a9e..e18345d03a 100644 --- a/temporal-sdk/src/test/java/io/temporal/worker/WorkerPollerThreadCountTest.java +++ b/temporal-sdk/src/test/java/io/temporal/worker/WorkerPollerThreadCountTest.java @@ -7,6 +7,7 @@ import io.nexusrpc.handler.OperationImpl; import io.nexusrpc.handler.ServiceImpl; import io.temporal.activity.ActivityInterface; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestEnvironmentOptions; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.workflow.WorkflowInterface; @@ -17,7 +18,10 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.junit.experimental.categories.Category; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class WorkerPollerThreadCountTest { private static final String ACTIVITY_POLLER_THREAD_NAME_PREFIX = "Activity Poller task"; diff --git a/temporal-sdk/src/test/java/io/temporal/worker/WorkerStressTests.java b/temporal-sdk/src/test/java/io/temporal/worker/WorkerStressTests.java index 30f2252b9b..a5b1593fac 100644 --- a/temporal-sdk/src/test/java/io/temporal/worker/WorkerStressTests.java +++ b/temporal-sdk/src/test/java/io/temporal/worker/WorkerStressTests.java @@ -11,6 +11,7 @@ import io.temporal.client.WorkflowStub; import io.temporal.serviceclient.WorkflowServiceStubs; import io.temporal.serviceclient.WorkflowServiceStubsOptions; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestEnvironmentOptions; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.testing.internal.ExternalServiceTestConfigurator; @@ -27,6 +28,7 @@ import java.util.concurrent.TimeUnit; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.rules.TestName; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -34,6 +36,8 @@ import org.slf4j.LoggerFactory; @RunWith(Parameterized.class) +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class WorkerStressTests { @Parameterized.Parameter public boolean useExternalService; diff --git a/temporal-sdk/src/test/java/io/temporal/worker/shutdown/CleanNexusWorkerShutdownTest.java b/temporal-sdk/src/test/java/io/temporal/worker/shutdown/CleanNexusWorkerShutdownTest.java index 073928f354..2a9f678258 100644 --- a/temporal-sdk/src/test/java/io/temporal/worker/shutdown/CleanNexusWorkerShutdownTest.java +++ b/temporal-sdk/src/test/java/io/temporal/worker/shutdown/CleanNexusWorkerShutdownTest.java @@ -12,6 +12,7 @@ import io.temporal.api.history.v1.HistoryEvent; import io.temporal.client.WorkflowClient; import io.temporal.common.converter.DefaultDataConverter; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.worker.WorkerOptions; import io.temporal.worker.tuning.PollerBehavior; @@ -30,10 +31,13 @@ import java.util.concurrent.TimeUnit; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @RunWith(Parameterized.class) +// Cloud CI does not provision the standalone Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class CleanNexusWorkerShutdownTest { private static final String COMPLETED = "Completed"; diff --git a/temporal-sdk/src/test/java/io/temporal/worker/shutdown/HeartbeatDuringWorkerShutdownTest.java b/temporal-sdk/src/test/java/io/temporal/worker/shutdown/HeartbeatDuringWorkerShutdownTest.java index 0da728c65a..36a9ea17b5 100644 --- a/temporal-sdk/src/test/java/io/temporal/worker/shutdown/HeartbeatDuringWorkerShutdownTest.java +++ b/temporal-sdk/src/test/java/io/temporal/worker/shutdown/HeartbeatDuringWorkerShutdownTest.java @@ -99,7 +99,9 @@ private ActivityHandle startHeartbeatingActivity() { ActivityClient client = ActivityClient.newInstance( testWorkflowRule.getWorkflowServiceStubs(), - ActivityClientOptions.newBuilder().setNamespace(SDKTestWorkflowRule.NAMESPACE).build()); + ActivityClientOptions.newBuilder() + .setNamespace(testWorkflowRule.getWorkflowClient().getOptions().getNamespace()) + .build()); StartActivityOptions options = StartActivityOptions.newBuilder() .setId("heartbeat-during-shutdown-" + UUID.randomUUID()) diff --git a/temporal-sdk/src/test/java/io/temporal/worker/tuning/ResourceBasedSlotSupplierNonRecursiveTest.java b/temporal-sdk/src/test/java/io/temporal/worker/tuning/ResourceBasedSlotSupplierNonRecursiveTest.java index 68fad1c67e..06f63224be 100644 --- a/temporal-sdk/src/test/java/io/temporal/worker/tuning/ResourceBasedSlotSupplierNonRecursiveTest.java +++ b/temporal-sdk/src/test/java/io/temporal/worker/tuning/ResourceBasedSlotSupplierNonRecursiveTest.java @@ -7,12 +7,12 @@ import io.temporal.activity.ActivityMethod; import io.temporal.activity.ActivityOptions; import io.temporal.client.WorkflowClient; -import io.temporal.client.WorkflowClientOptions; import io.temporal.client.WorkflowOptions; import io.temporal.internal.worker.SlotReservationData; import io.temporal.internal.worker.TrackingSlotSupplier; import io.temporal.serviceclient.WorkflowServiceStubs; import io.temporal.serviceclient.WorkflowServiceStubsOptions; +import io.temporal.testing.TestEnvironmentOptions; import io.temporal.testing.internal.ExternalServiceTestConfigurator; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.worker.Worker; @@ -190,14 +190,15 @@ public void testEndToEndWorkerWithResourceStarvationRecovery() throws Exception "=== End-to-End Worker Test with Resource Starvation Recovery (External Service) ==="); // Create connections to real Temporal server - WorkflowServiceStubs service = - WorkflowServiceStubs.newServiceStubs( - WorkflowServiceStubsOptions.newBuilder() - .setTarget(ExternalServiceTestConfigurator.getTemporalServiceAddress()) - .build()); + TestEnvironmentOptions environmentOptions = + ExternalServiceTestConfigurator.configuredTestEnvironmentOptions().build(); + WorkflowServiceStubsOptions serviceOptions = + WorkflowServiceStubsOptions.newBuilder(environmentOptions.getWorkflowServiceStubsOptions()) + .setTarget(environmentOptions.getTarget()) + .build(); + WorkflowServiceStubs service = WorkflowServiceStubs.newServiceStubs(serviceOptions); WorkflowClient client = - WorkflowClient.newInstance( - service, WorkflowClientOptions.newBuilder().setNamespace("default").build()); + WorkflowClient.newInstance(service, environmentOptions.getWorkflowClientOptions()); WorkerFactory workerFactory = WorkerFactory.newInstance(client); // Create our own resource controller that we can control diff --git a/temporal-sdk/src/test/java/io/temporal/workerFactory/WorkerFactoryTests.java b/temporal-sdk/src/test/java/io/temporal/workerFactory/WorkerFactoryTests.java index 1fb26f3452..a9653179e7 100644 --- a/temporal-sdk/src/test/java/io/temporal/workerFactory/WorkerFactoryTests.java +++ b/temporal-sdk/src/test/java/io/temporal/workerFactory/WorkerFactoryTests.java @@ -11,6 +11,8 @@ import io.temporal.client.WorkflowClientOptions; import io.temporal.serviceclient.WorkflowServiceStubs; import io.temporal.serviceclient.WorkflowServiceStubsOptions; +import io.temporal.testing.CloudTestExclusion.NeedsCloudAdaptation; +import io.temporal.testing.TestEnvironmentOptions; import io.temporal.testing.internal.ExternalServiceTestConfigurator; import io.temporal.worker.WorkerFactory; import java.util.concurrent.TimeUnit; @@ -19,13 +21,12 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; +import org.junit.experimental.categories.Category; public class WorkerFactoryTests { private static final boolean useExternalService = ExternalServiceTestConfigurator.isUseExternalService(); - private static final String serviceAddress = - ExternalServiceTestConfigurator.getTemporalServiceAddress(); @BeforeClass public static void beforeClass() { @@ -37,10 +38,16 @@ public static void beforeClass() { @Before public void setUp() { + TestEnvironmentOptions environmentOptions = + ExternalServiceTestConfigurator.configuredTestEnvironmentOptions().build(); service = WorkflowServiceStubs.newServiceStubs( - WorkflowServiceStubsOptions.newBuilder().setTarget(serviceAddress).build()); - WorkflowClient client = WorkflowClient.newInstance(service); + WorkflowServiceStubsOptions.newBuilder( + environmentOptions.getWorkflowServiceStubsOptions()) + .setTarget(environmentOptions.getTarget()) + .build()); + WorkflowClient client = + WorkflowClient.newInstance(service, environmentOptions.getWorkflowClientOptions()); factory = WorkerFactory.newInstance(client); } @@ -137,13 +144,23 @@ public void factoryCanBeShutdownMoreThanOnce() { } @Test + // Cloud hides nonexistent namespaces from namespace-scoped credentials. + @Category(NeedsCloudAdaptation.class) public void startFailsOnNonexistentNamespace() { + TestEnvironmentOptions environmentOptions = + ExternalServiceTestConfigurator.configuredTestEnvironmentOptions().build(); WorkflowServiceStubs serviceLocal = WorkflowServiceStubs.newServiceStubs( - WorkflowServiceStubsOptions.newBuilder().setTarget(serviceAddress).build()); + WorkflowServiceStubsOptions.newBuilder( + environmentOptions.getWorkflowServiceStubsOptions()) + .setTarget(environmentOptions.getTarget()) + .build()); WorkflowClient clientLocal = WorkflowClient.newInstance( - serviceLocal, WorkflowClientOptions.newBuilder().setNamespace("i_dont_exist").build()); + serviceLocal, + WorkflowClientOptions.newBuilder(environmentOptions.getWorkflowClientOptions()) + .setNamespace("i_dont_exist") + .build()); WorkerFactory factoryLocal = WorkerFactory.newInstance(clientLocal); factoryLocal.newWorker("task-queue"); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/ContextPropagationTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/ContextPropagationTest.java index 4de7876bc9..81b1532621 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/ContextPropagationTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/ContextPropagationTest.java @@ -11,6 +11,7 @@ import io.temporal.common.context.ContextPropagator; import io.temporal.common.converter.DefaultDataConverter; import io.temporal.internal.testing.WorkflowTestingTest; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestEnvironmentOptions; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; @@ -23,10 +24,13 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.rules.TestWatcher; import org.junit.runner.Description; import org.slf4j.MDC; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class ContextPropagationTest { private static final String TASK_QUEUE = "test-workflow"; private TestWorkflowEnvironment testEnvironment; diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/GetCronScheduleFromWorkflowInfoTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/GetCronScheduleFromWorkflowInfoTest.java index aaa2d9679e..956bfc440f 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/GetCronScheduleFromWorkflowInfoTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/GetCronScheduleFromWorkflowInfoTest.java @@ -8,6 +8,7 @@ import io.temporal.client.WorkflowFailedException; import io.temporal.client.WorkflowStub; import io.temporal.failure.CanceledFailure; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestWorkflowRule; import java.time.Duration; import java.util.HashMap; @@ -17,6 +18,7 @@ import org.junit.Assume; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.rules.TestName; public class GetCronScheduleFromWorkflowInfoTest { @@ -29,6 +31,8 @@ public class GetCronScheduleFromWorkflowInfoTest { .setWorkflowTypes(TestGetCronScheduleWorkflowsFuncImpl.class) .build(); + // This cron test depends on local test-server time skipping. + @Category(RequiresLocalServer.class) @Test public void testGetCronScheduleFromWorkflowInfo() throws InterruptedException { Assume.assumeFalse("skipping for docker tests", testWorkflowRule.isUseExternalService()); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/LoggerTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/LoggerTest.java index 283433a8c4..51a1c6d809 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/LoggerTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/LoggerTest.java @@ -10,6 +10,7 @@ import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowOptions; import io.temporal.internal.logging.LoggerTag; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; import java.time.Duration; @@ -21,9 +22,12 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class LoggerTest { private static final ListAppender listAppender = new ListAppender<>(); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/MemoTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/MemoTest.java index a36c9a9700..36e23276a8 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/MemoTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/MemoTest.java @@ -66,7 +66,7 @@ public void testMemo() { GetWorkflowExecutionHistoryResponse historyResp = WorkflowClientHelper.getHistoryPage( testWorkflowRule.getWorkflowServiceStubs(), - SDKTestWorkflowRule.NAMESPACE, + testWorkflowRule.getWorkflowClient().getOptions().getNamespace(), executionF, ByteString.EMPTY, new NoopScope()); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/MetricsTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/MetricsTest.java index 17178b1996..4aa8eef10a 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/MetricsTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/MetricsTest.java @@ -28,6 +28,7 @@ import io.temporal.common.reporter.TestStatsReporter; import io.temporal.serviceclient.MetricsTag; import io.temporal.serviceclient.WorkflowServiceStubs; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestEnvironmentOptions; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.testing.internal.SDKTestWorkflowRule; @@ -50,9 +51,12 @@ import org.junit.After; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.rules.TestWatcher; import org.junit.runner.Description; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class MetricsTest { private static final long REPORTING_FLUSH_TIME = 600; diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/SideEffectRaceConditionTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/SideEffectRaceConditionTest.java index 2f5447e379..2e95a39f99 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/SideEffectRaceConditionTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/SideEffectRaceConditionTest.java @@ -2,6 +2,7 @@ import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowOptions; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestEnvironmentOptions; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; @@ -14,7 +15,10 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.junit.experimental.categories.Category; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class SideEffectRaceConditionTest { private static final String TASK_QUEUE = "test-workflow"; diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/TestEnvironmentCloseTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/TestEnvironmentCloseTest.java index ce7ab8e969..65a5b2e478 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/TestEnvironmentCloseTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/TestEnvironmentCloseTest.java @@ -2,11 +2,15 @@ import static junit.framework.TestCase.assertTrue; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; import io.temporal.workflow.shared.TestActivities.NoArgsActivity; import org.junit.Test; +import org.junit.experimental.categories.Category; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class TestEnvironmentCloseTest { @Test diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/WorkflowTaskFailureBackoffTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/WorkflowTaskFailureBackoffTest.java index fb029dfd4f..09e379d08c 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/WorkflowTaskFailureBackoffTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/WorkflowTaskFailureBackoffTest.java @@ -1,7 +1,5 @@ package io.temporal.workflow; -import static io.temporal.testing.internal.SDKTestWorkflowRule.NAMESPACE; - import com.google.common.collect.ImmutableMap; import com.uber.m3.tally.RootScopeBuilder; import io.temporal.api.common.v1.WorkflowExecution; @@ -62,7 +60,9 @@ public void testWorkflowTaskFailureBackoff() { .size()); Map tags = ImmutableMap.builder() - .putAll(MetricsTag.defaultTags(NAMESPACE)) + .putAll( + MetricsTag.defaultTags( + testWorkflowRule.getWorkflowClient().getOptions().getNamespace())) .put(MetricsTag.WORKER_TYPE, WorkerMetricsTag.WorkerType.WORKFLOW_WORKER.getValue()) .put(MetricsTag.TASK_QUEUE, testWorkflowRule.getTaskQueue()) .put(MetricsTag.WORKFLOW_TYPE, "TestWorkflow1") diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/WorkflowWithCronScheduleTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/WorkflowWithCronScheduleTest.java index 0a6ec9fb25..3238b16496 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/WorkflowWithCronScheduleTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/WorkflowWithCronScheduleTest.java @@ -7,12 +7,14 @@ import io.temporal.client.WorkflowFailedException; import io.temporal.client.WorkflowStub; import io.temporal.failure.CanceledFailure; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.shared.TestWorkflowWithCronScheduleImpl; import java.time.Duration; import java.util.Map; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.rules.TestName; public class WorkflowWithCronScheduleTest { @@ -25,6 +27,8 @@ public class WorkflowWithCronScheduleTest { .setWorkflowTypes(TestWorkflowWithCronScheduleImpl.class) .build(); + // This cron test depends on local test-server time skipping. + @Category(RequiresLocalServer.class) @Test public void testCronWorkflowWithIncrementSchedule() { // Min interval in cron is 1min. So we will not test it against real service in Jenkins. diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/activityTests/EagerActivityDispatchingTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/activityTests/EagerActivityDispatchingTest.java index 8353b40c37..9a4582b906 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/activityTests/EagerActivityDispatchingTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/activityTests/EagerActivityDispatchingTest.java @@ -20,6 +20,7 @@ import io.temporal.internal.Config; import io.temporal.serviceclient.WorkflowServiceStubsOptions; import io.temporal.testUtils.CountingSlotSupplier; +import io.temporal.testing.TestEnvironmentOptions; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.testing.internal.ExternalServiceTestConfigurator; import io.temporal.testing.internal.SDKTestWorkflowRule; @@ -56,11 +57,19 @@ public class EagerActivityDispatchingTest { @Before public void setUp() throws Exception { eagerActivityRequestInterceptor.reset(); + TestEnvironmentOptions.Builder environmentOptions = + ExternalServiceTestConfigurator.configuredTestEnvironmentOptions(); + WorkflowServiceStubsOptions configuredServiceOptions = + environmentOptions.build().getWorkflowServiceStubsOptions(); + WorkflowServiceStubsOptions.Builder serviceOptions = + configuredServiceOptions == null + ? WorkflowServiceStubsOptions.newBuilder() + : WorkflowServiceStubsOptions.newBuilder(configuredServiceOptions); this.env = TestWorkflowEnvironment.newInstance( - ExternalServiceTestConfigurator.configuredTestEnvironmentOptions() + environmentOptions .setWorkflowServiceStubsOptions( - WorkflowServiceStubsOptions.newBuilder() + serviceOptions .setGrpcClientInterceptors( Collections.singletonList(eagerActivityRequestInterceptor)) .build()) diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/activityTests/LocalActivityManyWorkflowsTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/activityTests/LocalActivityManyWorkflowsTest.java index 2facb94d89..e07fbd03d3 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/activityTests/LocalActivityManyWorkflowsTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/activityTests/LocalActivityManyWorkflowsTest.java @@ -4,6 +4,7 @@ import io.temporal.activity.ActivityInterface; import io.temporal.activity.LocalActivityOptions; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.Workflow; import io.temporal.workflow.shared.TestWorkflows.TestWorkflow1; @@ -11,6 +12,7 @@ import org.junit.Assume; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; public class LocalActivityManyWorkflowsTest { @@ -21,6 +23,8 @@ public class LocalActivityManyWorkflowsTest { .setWorkflowTypes(ActivityWorkflow.class) .build(); + // This stress test depends on local test-server execution behavior. + @Category(RequiresLocalServer.class) @Test public void manyWorkflowsTest() { Assume.assumeFalse("skipping for docker tests", testWorkflowRule.isUseExternalService()); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/activityTests/LongLocalActivityFailsWhileHeartbeatingMeteringTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/activityTests/LongLocalActivityFailsWhileHeartbeatingMeteringTest.java index 5392bcb32e..3e1b9b485d 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/activityTests/LongLocalActivityFailsWhileHeartbeatingMeteringTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/activityTests/LongLocalActivityFailsWhileHeartbeatingMeteringTest.java @@ -9,6 +9,7 @@ import io.temporal.client.WorkflowStub; import io.temporal.common.RetryOptions; import io.temporal.failure.ActivityFailure; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.Workflow; import io.temporal.workflow.shared.TestActivities.TestActivitiesImpl; @@ -20,6 +21,7 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; public class LongLocalActivityFailsWhileHeartbeatingMeteringTest { @@ -39,6 +41,8 @@ public class LongLocalActivityFailsWhileHeartbeatingMeteringTest { * Test that local activity that failed to heartbeat and executed longer than Workflow Task * Timeout will be repeated during replay */ + // This test depends on local test-server metering metadata behavior. + @Category(RequiresLocalServer.class) @Test public void testLongLocalActivityFailsWhileHeartbeatingMetering() { // Needs server release which propagates metering metadata to event diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/childWorkflowTests/ChildWorkflowRetryTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/childWorkflowTests/ChildWorkflowRetryTest.java index 12994c7496..07cff0c523 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/childWorkflowTests/ChildWorkflowRetryTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/childWorkflowTests/ChildWorkflowRetryTest.java @@ -1,6 +1,5 @@ package io.temporal.workflow.childWorkflowTests; -import static io.temporal.testing.internal.SDKTestWorkflowRule.NAMESPACE; import static org.junit.Assert.*; import io.temporal.api.common.v1.WorkflowExecution; @@ -67,7 +66,6 @@ public WorkflowSignalWithStartOutput signalWithStart( }; } }) - .setNamespace(NAMESPACE) .build()) .build(); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/childWorkflowTests/ChildWorkflowWithCronScheduleTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/childWorkflowTests/ChildWorkflowWithCronScheduleTest.java index 4446a045ab..fa9103bb49 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/childWorkflowTests/ChildWorkflowWithCronScheduleTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/childWorkflowTests/ChildWorkflowWithCronScheduleTest.java @@ -7,6 +7,7 @@ import io.temporal.client.WorkflowOptions; import io.temporal.client.WorkflowStub; import io.temporal.failure.CanceledFailure; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.Workflow; import io.temporal.workflow.shared.TestWorkflowWithCronScheduleImpl; @@ -16,6 +17,7 @@ import java.util.Map; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.rules.TestName; public class ChildWorkflowWithCronScheduleTest { @@ -28,6 +30,8 @@ public class ChildWorkflowWithCronScheduleTest { .setWorkflowTypes(TestCronParentWorkflow.class, TestWorkflowWithCronScheduleImpl.class) .build(); + // This test advances time through the local test service. + @Category(RequiresLocalServer.class) @Test public void testChildWorkflowWithCronSchedule() { // Min interval in cron is 1min. So we will not test it against real service in Jenkins. diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/failure/FailureEncodingTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/failure/FailureEncodingTest.java index 1b8fb0a0be..b384526cd9 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/failure/FailureEncodingTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/failure/FailureEncodingTest.java @@ -22,6 +22,7 @@ import io.temporal.internal.testing.WorkflowTestingTest.FailingWorkflowImpl; import io.temporal.payload.codec.PayloadCodec; import io.temporal.payload.codec.PayloadCodecException; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestEnvironmentOptions; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; @@ -37,6 +38,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.rules.Timeout; /** @@ -54,6 +56,8 @@ * that Failure carries no sensible data and no stack trace. * */ +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class FailureEncodingTest { private static final String TASK_QUEUE = "test-workflow"; diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/interceptorsTests/InterceptorExceptionTests.java b/temporal-sdk/src/test/java/io/temporal/workflow/interceptorsTests/InterceptorExceptionTests.java index 6648ddd718..add3896537 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/interceptorsTests/InterceptorExceptionTests.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/interceptorsTests/InterceptorExceptionTests.java @@ -8,12 +8,16 @@ import io.temporal.common.interceptors.WorkflowClientCallsInterceptor; import io.temporal.common.interceptors.WorkflowClientCallsInterceptorBase; import io.temporal.common.interceptors.WorkflowClientInterceptorBase; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.shared.TestWorkflows.NoArgsWorkflow; import org.junit.After; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// This suite directly controls the local test service lifecycle during cleanup. +@Category(RequiresLocalServer.class) public class InterceptorExceptionTests { @Rule diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/ActivityHandleFailOnConflictTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/ActivityHandleFailOnConflictTest.java index bf6e23912d..338143f763 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/ActivityHandleFailOnConflictTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/ActivityHandleFailOnConflictTest.java @@ -17,6 +17,7 @@ import io.temporal.failure.ApplicationFailure; import io.temporal.failure.NexusOperationFailure; import io.temporal.nexus.TemporalOperationHandler; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.Workflow; import io.temporal.workflow.shared.TestNexusServices; @@ -29,7 +30,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class ActivityHandleFailOnConflictTest { private final CountDownLatch activityStarted = new CountDownLatch(1); private final CountDownLatch releaseActivity = new CountDownLatch(1); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/ActivityHandleUseExistingOnConflictTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/ActivityHandleUseExistingOnConflictTest.java index c699d997ea..8e3bb4f636 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/ActivityHandleUseExistingOnConflictTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/ActivityHandleUseExistingOnConflictTest.java @@ -13,6 +13,7 @@ import io.temporal.client.WorkflowStub; import io.temporal.nexus.TemporalOperationHandler; import io.temporal.testUtils.Eventually; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.NexusOperationExecution; import io.temporal.workflow.NexusOperationHandle; @@ -31,7 +32,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class ActivityHandleUseExistingOnConflictTest { private static final int OPERATION_COUNT = 5; diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/AsyncActivityOperationTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/AsyncActivityOperationTest.java index 1a1e5bea49..3e9e721a7f 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/AsyncActivityOperationTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/AsyncActivityOperationTest.java @@ -12,6 +12,7 @@ import io.temporal.internal.nexus.OperationTokenType; import io.temporal.internal.nexus.OperationTokenUtil; import io.temporal.nexus.TemporalOperationHandler; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestNexusServices; @@ -20,7 +21,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class AsyncActivityOperationTest { @Rule diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/AsyncWorkflowOperationTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/AsyncWorkflowOperationTest.java index 3259c428ea..721f28fe41 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/AsyncWorkflowOperationTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/AsyncWorkflowOperationTest.java @@ -10,6 +10,7 @@ import io.temporal.internal.nexus.OperationTokenUtil; import io.temporal.nexus.Nexus; import io.temporal.nexus.WorkflowRunOperation; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.WorkflowReplayer; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; @@ -18,7 +19,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class AsyncWorkflowOperationTest extends BaseNexusTest { private static final String WORKFLOW_ID_PREFIX = "test-prefix"; diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/CancelActivityAsyncOperationTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/CancelActivityAsyncOperationTest.java index 45a2b78794..fc1be8aabd 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/CancelActivityAsyncOperationTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/CancelActivityAsyncOperationTest.java @@ -18,6 +18,7 @@ import io.temporal.nexus.CancelActivityExecutionInput; import io.temporal.nexus.TemporalOperationCancelContext; import io.temporal.nexus.TemporalOperationHandler; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import java.time.Duration; @@ -26,7 +27,10 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class CancelActivityAsyncOperationTest extends BaseNexusTest { static final AtomicBoolean cancelled = new AtomicBoolean(false); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/CancelWorkflowAsyncOperationTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/CancelWorkflowAsyncOperationTest.java index 3c9f1b8719..3a317f0c0b 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/CancelWorkflowAsyncOperationTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/CancelWorkflowAsyncOperationTest.java @@ -15,6 +15,7 @@ import io.temporal.internal.Signal; import io.temporal.nexus.Nexus; import io.temporal.nexus.WorkflowRunOperation; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.WorkflowReplayer; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; @@ -23,7 +24,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class CancelWorkflowAsyncOperationTest extends BaseNexusTest { private static final Signal opStarted = new Signal(); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerCancelTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerCancelTest.java index 4773e6c521..c3c1840047 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerCancelTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerCancelTest.java @@ -12,13 +12,17 @@ import io.temporal.failure.CanceledFailure; import io.temporal.internal.Signal; import io.temporal.nexus.TemporalOperationHandler; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import java.time.Duration; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class GenericHandlerCancelTest extends BaseNexusTest { private static final Signal opStarted = new Signal(); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerDoubleStartTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerDoubleStartTest.java index 9d0c4e6c9f..1b8cc53919 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerDoubleStartTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerDoubleStartTest.java @@ -11,6 +11,7 @@ import io.temporal.failure.ApplicationFailure; import io.temporal.failure.NexusOperationFailure; import io.temporal.nexus.TemporalOperationHandler; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestWorkflows; @@ -18,7 +19,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class GenericHandlerDoubleStartTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerSyncResultTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerSyncResultTest.java index 01eda16b01..b290406567 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerSyncResultTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerSyncResultTest.java @@ -7,6 +7,7 @@ import io.nexusrpc.handler.ServiceImpl; import io.temporal.nexus.TemporalOperationHandler; import io.temporal.nexus.TemporalOperationResult; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestWorkflows; @@ -14,7 +15,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class GenericHandlerSyncResultTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerTypedProcTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerTypedProcTest.java index ae3d01be32..aef7661d8f 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerTypedProcTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerTypedProcTest.java @@ -7,6 +7,7 @@ import io.nexusrpc.handler.ServiceImpl; import io.temporal.client.WorkflowOptions; import io.temporal.nexus.TemporalOperationHandler; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestMultiArgWorkflowFunctions; @@ -15,7 +16,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class GenericHandlerTypedProcTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerTypedStartWorkflowTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerTypedStartWorkflowTest.java index 49662cc6af..27e8db3fee 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerTypedStartWorkflowTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerTypedStartWorkflowTest.java @@ -7,6 +7,7 @@ import io.nexusrpc.handler.ServiceImpl; import io.temporal.client.WorkflowOptions; import io.temporal.nexus.TemporalOperationHandler; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestMultiArgWorkflowFunctions; @@ -15,7 +16,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class GenericHandlerTypedStartWorkflowTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerUntypedStartWorkflowTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerUntypedStartWorkflowTest.java index 1f682d4534..52f95d4541 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerUntypedStartWorkflowTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericHandlerUntypedStartWorkflowTest.java @@ -7,6 +7,7 @@ import io.nexusrpc.handler.ServiceImpl; import io.temporal.client.WorkflowOptions; import io.temporal.nexus.TemporalOperationHandler; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestMultiArgWorkflowFunctions; @@ -15,7 +16,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class GenericHandlerUntypedStartWorkflowTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericListOperationTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericListOperationTest.java index 517b87bdea..a8e203dcb6 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericListOperationTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/GenericListOperationTest.java @@ -6,6 +6,7 @@ import io.nexusrpc.handler.OperationImpl; import io.nexusrpc.handler.ServiceImpl; import io.temporal.common.converter.EncodedValuesTest; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.NexusServiceOptions; import io.temporal.workflow.Workflow; @@ -15,8 +16,11 @@ import org.junit.Assert; import org.junit.ClassRule; import org.junit.Test; +import org.junit.experimental.categories.Category; // Test an operation that takes and returns a List type with a non-primitive element type +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class GenericListOperationTest { @ClassRule public static SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/HeaderTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/HeaderTest.java index 144b275c8c..47bfc7df69 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/HeaderTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/HeaderTest.java @@ -5,14 +5,18 @@ import io.nexusrpc.handler.OperationHandler; import io.nexusrpc.handler.OperationImpl; import io.nexusrpc.handler.ServiceImpl; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import java.util.Map; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; // Test the start operation handler receives the correct headers +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class HeaderTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/NexusOperationInfoTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/NexusOperationInfoTest.java index 6922903497..f6f0610b46 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/NexusOperationInfoTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/NexusOperationInfoTest.java @@ -5,6 +5,7 @@ import io.nexusrpc.handler.ServiceImpl; import io.temporal.nexus.Nexus; import io.temporal.nexus.NexusOperationInfo; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestNexusServices; @@ -12,7 +13,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class NexusOperationInfoTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/NexusOperationMetadataTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/NexusOperationMetadataTest.java index 1ef17fea39..53b8931957 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/NexusOperationMetadataTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/NexusOperationMetadataTest.java @@ -8,6 +8,7 @@ import io.temporal.client.WorkflowStub; import io.temporal.common.WorkflowExecutionHistory; import io.temporal.testUtils.HistoryUtils; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.NexusOperationOptions; import io.temporal.workflow.NexusServiceOptions; @@ -19,7 +20,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class NexusOperationMetadataTest { static final String NEXUS_OPERATION_SUMMARY = "nexus-operation-summary"; diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/OperationFailMetricTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/OperationFailMetricTest.java index c822036df3..6d736bd593 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/OperationFailMetricTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/OperationFailMetricTest.java @@ -19,6 +19,7 @@ import io.temporal.failure.TemporalFailure; import io.temporal.serviceclient.MetricsTag; import io.temporal.testUtils.Eventually; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.worker.MetricsType; import io.temporal.worker.WorkerMetricsTag; @@ -29,7 +30,10 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.junit.*; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class OperationFailMetricTest { private static final Map invocationCount = new ConcurrentHashMap<>(); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/OperationFailureConversionTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/OperationFailureConversionTest.java index 1f8d4e550f..2a80187f53 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/OperationFailureConversionTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/OperationFailureConversionTest.java @@ -9,6 +9,7 @@ import io.temporal.client.WorkflowNotFoundException; import io.temporal.failure.ApplicationFailure; import io.temporal.failure.NexusOperationFailure; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestNexusServices; @@ -19,7 +20,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class OperationFailureConversionTest { @Rule diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/ParallelWorkflowOperationTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/ParallelWorkflowOperationTest.java index e50bc84b57..12e7636def 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/ParallelWorkflowOperationTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/ParallelWorkflowOperationTest.java @@ -6,6 +6,7 @@ import io.temporal.client.WorkflowOptions; import io.temporal.nexus.Nexus; import io.temporal.nexus.WorkflowRunOperation; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.WorkflowReplayer; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; @@ -17,7 +18,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class ParallelWorkflowOperationTest extends BaseNexusTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/ProtoOperationTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/ProtoOperationTest.java index b1af56480a..9b68275d5d 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/ProtoOperationTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/ProtoOperationTest.java @@ -9,14 +9,18 @@ import io.temporal.api.workflowservice.v1.DescribeWorkflowExecutionRequest; import io.temporal.api.workflowservice.v1.DescribeWorkflowExecutionResponse; import io.temporal.nexus.Nexus; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestWorkflows; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; // Test an operation that takes and returns a protobuf message +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class ProtoOperationTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SignalOperationLinkingTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SignalOperationLinkingTest.java index afb91f72d2..71aceedd92 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SignalOperationLinkingTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SignalOperationLinkingTest.java @@ -17,6 +17,7 @@ import io.temporal.client.WorkflowOptions; import io.temporal.client.WorkflowStub; import io.temporal.nexus.Nexus; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.NexusOperationHandle; import io.temporal.workflow.NexusOperationOptions; @@ -37,6 +38,7 @@ import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Verifies link propagation in both directions when a Nexus operation handler interacts with a @@ -57,6 +59,8 @@ * in-memory test server does not implement this path so the class is skipped unless a real server * is in use. */ +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class SignalOperationLinkingTest { private static final String MODE_SIGNAL_WITH_START = "signalWithStart"; diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncClientOperationTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncClientOperationTest.java index 14ad5a632a..c5e3352d6d 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncClientOperationTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncClientOperationTest.java @@ -12,6 +12,7 @@ import io.temporal.failure.ApplicationFailure; import io.temporal.nexus.Nexus; import io.temporal.serviceclient.MetricsTag; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.testing.internal.TracingWorkerInterceptor; import io.temporal.worker.MetricsType; @@ -23,7 +24,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class SyncClientOperationTest { private final TestStatsReporter reporter = new TestStatsReporter(); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncOperationCancelledTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncOperationCancelledTest.java index a6bb29daaa..0376fc0a30 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncOperationCancelledTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncOperationCancelledTest.java @@ -7,6 +7,7 @@ import io.temporal.client.WorkflowFailedException; import io.temporal.failure.CanceledFailure; import io.temporal.failure.NexusOperationFailure; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestNexusServices; @@ -15,7 +16,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class SyncOperationCancelledTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncOperationFailTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncOperationFailTest.java index b37114d392..317b39f314 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncOperationFailTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncOperationFailTest.java @@ -14,6 +14,7 @@ import io.temporal.failure.NexusOperationFailure; import io.temporal.serviceclient.MetricsTag; import io.temporal.testUtils.Eventually; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.worker.MetricsType; import io.temporal.worker.WorkerMetricsTag; @@ -23,7 +24,10 @@ import java.time.Duration; import java.util.Map; import org.junit.*; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class SyncOperationFailTest { private final TestStatsReporter reporter = new TestStatsReporter(); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncOperationStubTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncOperationStubTest.java index 0e1fff61da..0d360604a1 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncOperationStubTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncOperationStubTest.java @@ -3,6 +3,7 @@ import io.nexusrpc.handler.OperationHandler; import io.nexusrpc.handler.OperationImpl; import io.nexusrpc.handler.ServiceImpl; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestNexusServices; @@ -11,7 +12,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class SyncOperationStubTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncOperationTimeoutTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncOperationTimeoutTest.java index ed1e72d493..942aa17716 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncOperationTimeoutTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/SyncOperationTimeoutTest.java @@ -6,6 +6,7 @@ import io.temporal.client.WorkflowFailedException; import io.temporal.failure.NexusOperationFailure; import io.temporal.failure.TimeoutFailure; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestNexusServices; @@ -14,7 +15,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class SyncOperationTimeoutTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/TerminateWorkflowAsyncOperationTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/TerminateWorkflowAsyncOperationTest.java index fc8767d3d2..e0d04cdd95 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/TerminateWorkflowAsyncOperationTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/TerminateWorkflowAsyncOperationTest.java @@ -12,6 +12,7 @@ import io.temporal.nexus.Nexus; import io.temporal.nexus.WorkflowHandle; import io.temporal.nexus.WorkflowRunOperation; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestWorkflows; @@ -19,7 +20,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class TerminateWorkflowAsyncOperationTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/UntypedSyncOperationStubTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/UntypedSyncOperationStubTest.java index bc03b5ff8c..12c6a0806a 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/UntypedSyncOperationStubTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/UntypedSyncOperationStubTest.java @@ -3,6 +3,7 @@ import io.nexusrpc.handler.OperationHandler; import io.nexusrpc.handler.OperationImpl; import io.nexusrpc.handler.ServiceImpl; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestNexusServices; @@ -11,7 +12,10 @@ import org.junit.Assert; import org.junit.ClassRule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class UntypedSyncOperationStubTest { @ClassRule public static SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/UpdateWorkflowOperationTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/UpdateWorkflowOperationTest.java index b228d02b3d..b16440f524 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/UpdateWorkflowOperationTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/UpdateWorkflowOperationTest.java @@ -18,6 +18,7 @@ import io.temporal.internal.nexus.OperationTokenType; import io.temporal.internal.nexus.OperationTokenUtil; import io.temporal.nexus.TemporalOperationHandler; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestWorkflows; @@ -28,7 +29,10 @@ import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class UpdateWorkflowOperationTest extends BaseNexusTest { private static final String asyncVal = "async"; diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/VoidOperationTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/VoidOperationTest.java index 108d3c294d..7dd938fe79 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/VoidOperationTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/VoidOperationTest.java @@ -5,6 +5,7 @@ import io.nexusrpc.handler.OperationHandler; import io.nexusrpc.handler.OperationImpl; import io.nexusrpc.handler.ServiceImpl; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.NexusServiceOptions; import io.temporal.workflow.NexusServiceStub; @@ -13,8 +14,11 @@ import org.junit.Assert; import org.junit.ClassRule; import org.junit.Test; +import org.junit.experimental.categories.Category; // Test an operation that takes and returns a void type +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class VoidOperationTest { @ClassRule public static SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleFailOnConflictTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleFailOnConflictTest.java index 9f47280a38..e86e40f8d9 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleFailOnConflictTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleFailOnConflictTest.java @@ -10,6 +10,7 @@ import io.temporal.failure.NexusOperationFailure; import io.temporal.nexus.Nexus; import io.temporal.nexus.WorkflowRunOperation; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestNexusServices; @@ -20,7 +21,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class WorkflowHandleFailOnConflictTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleFuncTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleFuncTest.java index 859a1442b0..9f61d188d5 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleFuncTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleFuncTest.java @@ -10,6 +10,7 @@ import io.temporal.nexus.Nexus; import io.temporal.nexus.WorkflowHandle; import io.temporal.nexus.WorkflowRunOperation; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestMultiArgWorkflowFunctions; @@ -18,7 +19,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class WorkflowHandleFuncTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleProcTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleProcTest.java index e940161033..0ab18e1e0a 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleProcTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleProcTest.java @@ -10,6 +10,7 @@ import io.temporal.nexus.Nexus; import io.temporal.nexus.WorkflowHandle; import io.temporal.nexus.WorkflowRunOperation; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.NexusOperationOptions; import io.temporal.workflow.NexusServiceOptions; @@ -20,7 +21,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class WorkflowHandleProcTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleStubTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleStubTest.java index d2c283ed9a..6ed5699213 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleStubTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleStubTest.java @@ -10,6 +10,7 @@ import io.temporal.nexus.Nexus; import io.temporal.nexus.WorkflowHandle; import io.temporal.nexus.WorkflowRunOperation; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.NexusOperationOptions; import io.temporal.workflow.NexusServiceOptions; @@ -20,7 +21,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class WorkflowHandleStubTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleUseExistingOnConflictCancelTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleUseExistingOnConflictCancelTest.java index 4d5052579f..809386304d 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleUseExistingOnConflictCancelTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleUseExistingOnConflictCancelTest.java @@ -9,6 +9,7 @@ import io.temporal.failure.NexusOperationFailure; import io.temporal.nexus.Nexus; import io.temporal.nexus.WorkflowRunOperation; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestNexusServices; @@ -17,7 +18,10 @@ import java.util.List; import java.util.UUID; import org.junit.*; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class WorkflowHandleUseExistingOnConflictCancelTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleUseExistingOnConflictTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleUseExistingOnConflictTest.java index af658aeaa9..f97aafe7c8 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleUseExistingOnConflictTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowHandleUseExistingOnConflictTest.java @@ -10,6 +10,7 @@ import io.temporal.client.WorkflowStub; import io.temporal.nexus.Nexus; import io.temporal.nexus.WorkflowRunOperation; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestNexusServices; @@ -19,7 +20,10 @@ import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; import org.junit.*; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class WorkflowHandleUseExistingOnConflictTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowOperationLinkingTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowOperationLinkingTest.java index 7777c5fff3..d69e8b3dec 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowOperationLinkingTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/nexus/WorkflowOperationLinkingTest.java @@ -14,6 +14,7 @@ import io.temporal.internal.nexus.OperationTokenUtil; import io.temporal.nexus.Nexus; import io.temporal.nexus.WorkflowRunOperation; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.*; import io.temporal.workflow.shared.TestNexusServices; @@ -22,7 +23,10 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// Cloud CI does not provision the Nexus endpoint required by this test. +@Category(RequiresCloudProvisioning.class) public class WorkflowOperationLinkingTest extends BaseNexusTest { @Rule public SDKTestWorkflowRule testWorkflowRule = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/searchattributes/SearchAttributesTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/searchattributes/SearchAttributesTest.java index e9653e4292..0661433d34 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/searchattributes/SearchAttributesTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/searchattributes/SearchAttributesTest.java @@ -23,6 +23,7 @@ import io.temporal.client.WorkflowServiceException; import io.temporal.internal.client.WorkflowClientHelper; import io.temporal.internal.common.SearchAttributesUtil; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestOptions; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.ChildWorkflowOptions; @@ -36,8 +37,11 @@ import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; @SuppressWarnings("deprecation") +// Cloud CI does not provision the custom search attributes required by this test. +@Category(RequiresCloudProvisioning.class) public class SearchAttributesTest { private static final String TEST_KEY_STRING = "CustomStringField"; private static final String TEST_VALUE_STRING = NAMESPACE; diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/searchattributes/TypedSearchAttributesTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/searchattributes/TypedSearchAttributesTest.java index 5f74665ee0..9b18926ab3 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/searchattributes/TypedSearchAttributesTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/searchattributes/TypedSearchAttributesTest.java @@ -18,6 +18,7 @@ import io.temporal.common.SearchAttributeKey; import io.temporal.internal.client.WorkflowClientHelper; import io.temporal.internal.common.SearchAttributesUtil; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestOptions; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.ChildWorkflowOptions; @@ -31,8 +32,11 @@ import java.util.List; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; /** Typed attribute translation of {@link SearchAttributesTest} */ +// Cloud CI does not provision the custom search attributes required by this test. +@Category(RequiresCloudProvisioning.class) public class TypedSearchAttributesTest { private static final SearchAttributeKey> TEST_NEW_KEY = SearchAttributeKey.forKeywordList("NewKeyList"); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/searchattributes/UpsertTypedSearchAttributeTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/searchattributes/UpsertTypedSearchAttributeTest.java index 8f9a5c25f6..a88f5e8c03 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/searchattributes/UpsertTypedSearchAttributeTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/searchattributes/UpsertTypedSearchAttributeTest.java @@ -8,6 +8,7 @@ import io.temporal.client.WorkflowOptions; import io.temporal.common.SearchAttributeKey; import io.temporal.common.SearchAttributes; +import io.temporal.testing.CloudTestExclusion.RequiresCloudProvisioning; import io.temporal.testing.internal.SDKTestOptions; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.testing.internal.TracingWorkerInterceptor; @@ -18,8 +19,11 @@ import java.util.concurrent.atomic.AtomicBoolean; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; /** Typed attribute translation of {@link UpsertSearchAttributeTest} */ +// Cloud CI does not provision the custom search attributes required by this test. +@Category(RequiresCloudProvisioning.class) public class UpsertTypedSearchAttributeTest { private static final String TEST_VALUE = "test"; diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/shared/TestActivities.java b/temporal-sdk/src/test/java/io/temporal/workflow/shared/TestActivities.java index 0c71210516..4e108a974b 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/shared/TestActivities.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/shared/TestActivities.java @@ -17,7 +17,6 @@ import io.temporal.common.MethodRetry; import io.temporal.common.converter.RawValue; import io.temporal.failure.ApplicationFailure; -import io.temporal.testing.internal.SDKTestWorkflowRule; import java.io.Closeable; import java.io.IOException; import java.time.Duration; @@ -352,7 +351,7 @@ public String heartbeatAndWait(long waitMs, boolean heartbeatMoreThanOnce) { @Override public void throwIO() { ActivityInfo info = Activity.getExecutionContext().getInfo(); - assertEquals(SDKTestWorkflowRule.NAMESPACE, info.getNamespace()); + assertFalse(info.getNamespace().isEmpty()); assertNotNull(info.getWorkflowId()); assertNotNull(info.getWorkflowRunId()); assertFalse(info.getWorkflowId().isEmpty()); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/signalTests/SignalDuringLastWorkflowTaskTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/signalTests/SignalDuringLastWorkflowTaskTest.java index 5a226a9496..f3fa26ff8e 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/signalTests/SignalDuringLastWorkflowTaskTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/signalTests/SignalDuringLastWorkflowTaskTest.java @@ -6,6 +6,7 @@ import io.temporal.api.common.v1.WorkflowExecution; import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowTargetOptions; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.worker.WorkerOptions; import io.temporal.workflow.shared.TestWorkflows.TestSignaledWorkflow; @@ -18,6 +19,7 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; public class SignalDuringLastWorkflowTaskTest { @@ -33,6 +35,8 @@ public class SignalDuringLastWorkflowTaskTest { WorkerOptions.newBuilder().setDefaultDeadlockDetectionTimeout(5000).build()) .build(); + // This signal timing test depends on local test-server time skipping. + @Category(RequiresLocalServer.class) @Test public void testSignalDuringLastWorkflowTask() throws ExecutionException, InterruptedException { assumeFalse("skipping for docker tests", SDKTestWorkflowRule.useExternalService); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/signalTests/SignalTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/signalTests/SignalTest.java index a3bde4bf9e..d2f28e2b7d 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/signalTests/SignalTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/signalTests/SignalTest.java @@ -177,8 +177,7 @@ public void testSignalUntyped() { WorkflowClient client = WorkflowClient.newInstance( testWorkflowRule.getWorkflowServiceStubs(), - WorkflowClientOptions.newBuilder() - .setNamespace(SDKTestWorkflowRule.NAMESPACE) + WorkflowClientOptions.newBuilder(testWorkflowRule.getWorkflowClient().getOptions()) .setQueryRejectCondition(QueryRejectCondition.QUERY_REJECT_CONDITION_NOT_OPEN) .build()); WorkflowStub workflowStubNotOptionRejectCondition = diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/updateTest/UpdateTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/updateTest/UpdateTest.java index 1489b21280..09a255bd93 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/updateTest/UpdateTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/updateTest/UpdateTest.java @@ -276,7 +276,7 @@ public void testUpdateResets() { .blockingStub() .resetWorkflowExecution( ResetWorkflowExecutionRequest.newBuilder() - .setNamespace(SDKTestWorkflowRule.NAMESPACE) + .setNamespace(workflowClient.getOptions().getNamespace()) .setReason("Integration test") .setWorkflowExecution(execution) .setWorkflowTaskFinishEventId(4) diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionAddNewBeforeTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionAddNewBeforeTest.java index a5ad4b8262..7c46a3a12d 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionAddNewBeforeTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionAddNewBeforeTest.java @@ -3,6 +3,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assume.assumeFalse; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.worker.WorkerOptions; import io.temporal.workflow.Workflow; @@ -11,6 +12,7 @@ import java.time.Duration; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,6 +37,8 @@ public GetVersionAddNewBeforeTest(boolean setVersioningFlag, boolean upsertVersi super(setVersioningFlag, upsertVersioningSA); } + // This versioning test depends on local test-server execution behavior. + @Category(RequiresLocalServer.class) @Test public void testGetVersionAddNewBefore() { assumeFalse("skipping for docker tests", SDKTestWorkflowRule.useExternalService); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionAndTimerTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionAndTimerTest.java index f58e1efa76..e1be606f00 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionAndTimerTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionAndTimerTest.java @@ -4,6 +4,7 @@ import static org.junit.Assume.assumeFalse; import io.temporal.client.WorkflowOptions; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.workflow.Workflow; import io.temporal.workflow.WorkflowInterface; @@ -12,6 +13,7 @@ import java.time.Instant; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; public class GetVersionAndTimerTest extends BaseVersionTest { @@ -30,12 +32,16 @@ public GetVersionAndTimerTest(boolean setVersioningFlag, boolean upsertVersionin super(setVersioningFlag, upsertVersioningSA); } + // This timer test depends on local test-server time skipping. + @Category(RequiresLocalServer.class) @Test public void testTimedWorkflowWithoutVersionImpl() { assumeFalse("skipping for docker tests", SDKTestWorkflowRule.useExternalService); testTimedWorkflow(testWorkflowRuleWithoutVersion); } + // This timer test depends on local test-server time skipping. + @Category(RequiresLocalServer.class) @Test public void testTimedWorkflowWithVersionImpl() { assumeFalse("skipping for docker tests", SDKTestWorkflowRule.useExternalService); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionAsyncLocalActivityReplayTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionAsyncLocalActivityReplayTest.java index 1a36b7c4ab..eab0efa70f 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionAsyncLocalActivityReplayTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionAsyncLocalActivityReplayTest.java @@ -16,6 +16,7 @@ import io.temporal.internal.common.SdkFlag; import io.temporal.internal.history.VersionMarkerUtils; import io.temporal.internal.statemachines.WorkflowStateMachines; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.testing.WorkflowReplayer; import io.temporal.worker.Worker; @@ -34,7 +35,10 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.junit.experimental.categories.Category; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class GetVersionAsyncLocalActivityReplayTest { private static final String TASK_QUEUE = "get-version-async-local-activity-replay"; private static final String CHANGE_ID = "async-local-activity-change"; diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionInterleavedUpdateReplayTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionInterleavedUpdateReplayTest.java index 5aa8813e00..578e5fe318 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionInterleavedUpdateReplayTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionInterleavedUpdateReplayTest.java @@ -30,6 +30,7 @@ import io.temporal.internal.common.SdkFlag; import io.temporal.internal.history.VersionMarkerUtils; import io.temporal.internal.statemachines.WorkflowStateMachines; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestEnvironmentOptions; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.testing.WorkflowHistoryLoader; @@ -51,6 +52,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.slf4j.Logger; /** @@ -58,6 +60,8 @@ * gauravthadani/samples-kotlin and captures histories that exercise interleaved updates around * getVersion. */ +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class GetVersionInterleavedUpdateReplayTest { private static final String HISTORY_RESOURCE = "testGetVersionInterleavedUpdateReplayHistory.json"; diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionSameIdOnReplayTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionSameIdOnReplayTest.java index c5de8bfebd..f9ea1d9d9d 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionSameIdOnReplayTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionSameIdOnReplayTest.java @@ -7,6 +7,7 @@ import io.temporal.api.common.v1.WorkflowExecution; import io.temporal.api.enums.v1.EventType; import io.temporal.client.WorkflowStub; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.worker.WorkerOptions; import io.temporal.workflow.Workflow; @@ -15,6 +16,7 @@ import java.time.Duration; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; public class GetVersionSameIdOnReplayTest extends BaseVersionTest { @@ -36,6 +38,8 @@ public GetVersionSameIdOnReplayTest(boolean setVersioningFlag, boolean upsertVer super(setVersioningFlag, upsertVersioningSA); } + // This replay test depends on local test-server execution behavior. + @Category(RequiresLocalServer.class) @Test public void testGetVersionSameIdOnReplay() { assumeFalse("skipping for docker tests", SDKTestWorkflowRule.useExternalService); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionSameIdTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionSameIdTest.java index 24fb6aea0e..8e968b684e 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionSameIdTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionSameIdTest.java @@ -4,6 +4,7 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assume.assumeFalse; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.worker.WorkerOptions; import io.temporal.workflow.Workflow; @@ -12,6 +13,7 @@ import java.time.Duration; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; public class GetVersionSameIdTest extends BaseVersionTest { @@ -32,6 +34,8 @@ public GetVersionSameIdTest(boolean setVersioningFlag, boolean upsertVersioningS super(setVersioningFlag, upsertVersioningSA); } + // This versioning test depends on local test-server execution behavior. + @Category(RequiresLocalServer.class) @Test public void testGetVersionSameId() { assumeFalse("skipping for docker tests", SDKTestWorkflowRule.useExternalService); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionWorkflowRemoveTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionWorkflowRemoveTest.java index 5389d6f621..6911268841 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionWorkflowRemoveTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionWorkflowRemoveTest.java @@ -5,6 +5,7 @@ import static org.junit.Assume.assumeFalse; import io.temporal.client.WorkflowStub; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestOptions; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.worker.WorkerOptions; @@ -17,6 +18,7 @@ import java.util.List; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; public class GetVersionWorkflowRemoveTest extends BaseVersionTest { @@ -39,6 +41,8 @@ public GetVersionWorkflowRemoveTest(boolean setVersioningFlag, boolean upsertVer super(setVersioningFlag, upsertVersioningSA); } + // This versioning test depends on local test-server execution behavior. + @Category(RequiresLocalServer.class) @Test public void testGetVersionWorkflowRemove() { assumeFalse("skipping for docker tests", SDKTestWorkflowRule.useExternalService); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionWorkflowReplaceCompletelyTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionWorkflowReplaceCompletelyTest.java index 73071be6df..61fc90e0a8 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionWorkflowReplaceCompletelyTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionWorkflowReplaceCompletelyTest.java @@ -5,6 +5,7 @@ import static org.junit.Assume.assumeFalse; import io.temporal.client.WorkflowStub; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.worker.WorkerOptions; import io.temporal.workflow.Workflow; @@ -14,6 +15,7 @@ import java.util.List; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,6 +43,8 @@ public GetVersionWorkflowReplaceCompletelyTest( super(setVersioningFlag, upsertVersioningSA); } + // This versioning test depends on local test-server execution behavior. + @Category(RequiresLocalServer.class) @Test public void testGetVersionWorkflowReplaceCompletely() { assumeFalse("skipping for docker tests", SDKTestWorkflowRule.useExternalService); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionWorkflowReplaceGetVersionIdTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionWorkflowReplaceGetVersionIdTest.java index 44bf65edaa..31f402063f 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionWorkflowReplaceGetVersionIdTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/GetVersionWorkflowReplaceGetVersionIdTest.java @@ -5,6 +5,7 @@ import static org.junit.Assume.assumeFalse; import io.temporal.client.WorkflowStub; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.worker.WorkerOptions; import io.temporal.workflow.Workflow; @@ -14,6 +15,7 @@ import java.util.List; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,6 +43,8 @@ public GetVersionWorkflowReplaceGetVersionIdTest( super(setVersioningFlag, upsertVersioningSA); } + // This versioning test depends on local test-server execution behavior. + @Category(RequiresLocalServer.class) @Test public void testGetVersionWorkflowReplaceGetVersionId() { assumeFalse("skipping for docker tests", SDKTestWorkflowRule.useExternalService); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/PreferredVersionProviderRolloutTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/PreferredVersionProviderRolloutTest.java index cfdb1b9b5f..bee3831f79 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/PreferredVersionProviderRolloutTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/PreferredVersionProviderRolloutTest.java @@ -7,6 +7,7 @@ import io.temporal.client.WorkflowClientOptions; import io.temporal.client.WorkflowOptions; import io.temporal.client.WorkflowStub; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.PreferredVersionProvider; import io.temporal.worker.VersionPreference; @@ -24,7 +25,10 @@ import java.util.concurrent.atomic.AtomicInteger; import org.junit.Before; import org.junit.Test; +import org.junit.experimental.categories.Category; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class PreferredVersionProviderRolloutTest { private static final String CHANGE_ID = "preferred-change"; private static final AtomicInteger unactivatedProviderCalls = new AtomicInteger(); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/PreferredVersionProviderTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/PreferredVersionProviderTest.java index f3da4f7e76..ce10397289 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/PreferredVersionProviderTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/versionTests/PreferredVersionProviderTest.java @@ -6,6 +6,7 @@ import io.temporal.client.WorkflowOptions; import io.temporal.client.WorkflowStub; import io.temporal.internal.sync.ReadOnlyException; +import io.temporal.testing.CloudTestExclusion.RequiresLocalServer; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.testing.internal.SDKTestWorkflowRule; import io.temporal.worker.PreferredVersionProviderInput; @@ -21,7 +22,10 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; +// This test directly creates and controls a local test service. +@Category(RequiresLocalServer.class) public class PreferredVersionProviderTest { private static final String CHANGE_ID = "preferred-change"; private static final AtomicInteger providerCalls = new AtomicInteger();