Skip to content

TestWorkflowEnvironment sleep incorrect behaviour #2642

@oleg-kovrizhin-paradym

Description

@oleg-kovrizhin-paradym

Expected Behavior

Integration tests with Temporal should not actually sleep or wait when using TestWorkflowEnvironment.sleep().
The virtual time should advance instantly, regardless of other tests being executed before.

Actual Behavior

In some cases, tests sleep and wait in real time instead of using virtual time.
This happens when a test using TestWorkflowEnvironment.sleep() runs after another test that executed a child workflow.

Steps to Reproduce the Problem

  1. Use Temporal library 1.30.1 with io.temporal:temporal-spring-boot-starter.

  2. Have a workflow with setStartDelay().

  3. Write an integration test that relies on TestWorkflowEnvironment.sleep(Duration.ofDays(1)).

    When run in isolation, the test passes instantly (virtual time works).

  4. Add another test that uses a child workflow, e.g.:

TestWorkflow transferWorkflow =
    Workflow.newChildWorkflowStub(
        TestWorkflow.class,
        ChildWorkflowOptions.newBuilder()
            .setWorkflowId("test-id")
            .setTaskQueue("test-task-queues")
            .setParentClosePolicy(ParentClosePolicy.PARENT_CLOSE_POLICY_ABANDON)
            .setWorkflowIdReusePolicy(WorkflowIdReusePolicy.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE)
            .setRetryOptions(RetryOptions.newBuilder()
                .setMaximumAttempts(MAXIMUM_ATTEMPTS)
                .build())
            .build()
    );


Async.procedure(() -> transferWorkflow.test(test.testId()));

Promise<WorkflowExecution> childExecution = Workflow.getWorkflowExecution(transferWorkflow);
childExecution.get();
  1. Run the whole test suite.

The test with sleep(Duration.ofDays(1)) now sleeps in real time instead of advancing virtual time.

Notes

Behavior is consistent:

✅ Works when the test with sleep is executed alone.

❌ Breaks when a test with a child workflow ran before it.

Looks like something in the child workflow test "switches" the TestWorkflowEnvironment from virtual time to real time.

Specifications

Version: 1.30.1

Platform: Java

Dependency: io.temporal:temporal-spring-boot-starter

Metadata

Metadata

Assignees

No one assigned

    Labels

    test serverRelated to the test server

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions