Open
Conversation
Closed
Contributor
There was a problem hiding this comment.
Pull request overview
This PR refactors the test suite to use per-test DBOS instances backed by Testcontainers PostgreSQL (PgContainer), adds Kotlin ergonomic extensions for trailing-lambda workflow/step calls, and updates CI/workflows to reflect the new test strategy.
Changes:
- Introduce
PgContainerTestcontainers helper(s) and migrate tests away from staticDBOS.*usage to instance-basednew DBOS(config)patterns. - Add Kotlin
DBOSextension overloads to support trailing-lambda syntax forstartWorkflow/runStep, plus new Kotlin tests. - Enable/annotate concurrent JUnit execution broadly and adjust GitHub Actions workflows accordingly.
Reviewed changes
Copilot reviewed 78 out of 78 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| transact/src/test/resources/junit-platform.properties | Enables JUnit parallel execution configuration for the test suite. |
| transact/src/test/kotlin/dev/dbos/transact/KotlinExtensionsTest.kt | Adds Kotlin tests validating trailing-lambda extensions for workflows/steps. |
| transact/src/test/java/dev/dbos/transact/workflow/WorkflowMgmtTest.java | Refactors to instance-based DBOS + Testcontainers PgContainer. |
| transact/src/test/java/dev/dbos/transact/workflow/UnifiedProxyTest.java | Refactors to instance-based DBOS + Testcontainers PgContainer. |
| transact/src/test/java/dev/dbos/transact/workflow/TimeoutTest.java | Refactors to instance-based DBOS + Testcontainers PgContainer. |
| transact/src/test/java/dev/dbos/transact/workflow/SyncWorkflowTest.java | Refactors to instance-based DBOS + Testcontainers PgContainer. |
| transact/src/test/java/dev/dbos/transact/workflow/SimpleServiceImpl.java | Removes standalone test impl file (impl moved/co-located). |
| transact/src/test/java/dev/dbos/transact/workflow/SimpleService.java | Co-locates SimpleServiceImpl with interface; updates to instance-based DBOS. |
| transact/src/test/java/dev/dbos/transact/workflow/QueueChildWorkflowTest.java | Refactors to instance-based DBOS + Testcontainers PgContainer. |
| transact/src/test/java/dev/dbos/transact/workflow/MgmtService.java | Extracts mgmt service interface/impl into a shared file and injects DBOS instance. |
| transact/src/test/java/dev/dbos/transact/workflow/GarbageCollectionTest.java | Refactors to instance-based DBOS + Testcontainers PgContainer. |
| transact/src/test/java/dev/dbos/transact/workflow/GCTestService.java | Extracts GC service interface/impl into a shared file and injects DBOS instance. |
| transact/src/test/java/dev/dbos/transact/workflow/ForkTestService.java | Adds fork test service interface/impl with DBOS instance injection. |
| transact/src/test/java/dev/dbos/transact/workflow/AsyncWorkflowTest.java | Refactors to instance-based DBOS + Testcontainers PgContainer. |
| transact/src/test/java/dev/dbos/transact/utils/PgContainer.java | Adds Testcontainers-based Postgres helper for transact tests. |
| transact/src/test/java/dev/dbos/transact/utils/DBUtils.java | Renames event record types returned by DB inspection helpers. |
| transact/src/test/java/dev/dbos/transact/step/ServiceWFAndStepImpl.java | Removes standalone step/workflow impl file (migrated elsewhere). |
| transact/src/test/java/dev/dbos/transact/step/ServiceWFAndStep.java | Removes standalone step/workflow interface file (migrated elsewhere). |
| transact/src/test/java/dev/dbos/transact/step/ServiceBImpl.java | Removes standalone step service impl file (migrated elsewhere). |
| transact/src/test/java/dev/dbos/transact/step/ServiceB.java | Removes standalone step service interface file (migrated elsewhere). |
| transact/src/test/java/dev/dbos/transact/step/ServiceAImpl.java | Removes standalone workflow service impl file (migrated elsewhere). |
| transact/src/test/java/dev/dbos/transact/step/ServiceA.java | Removes standalone workflow service interface file (migrated elsewhere). |
| transact/src/test/java/dev/dbos/transact/scheduled/SkedService.java | Injects DBOS instance into scheduled service impl and updates calls. |
| transact/src/test/java/dev/dbos/transact/scheduled/SchedulerServiceTest.java | Refactors to instance-based DBOS + Testcontainers PgContainer. |
| transact/src/test/java/dev/dbos/transact/queue/PartitionedQueuesTest.java | Refactors to instance-based DBOS + Testcontainers PgContainer; updates context calls. |
| transact/src/test/java/dev/dbos/transact/migrations/MigrationManagerTest.java | Refactors migrations tests to Testcontainers PgContainer. |
| transact/src/test/java/dev/dbos/transact/json/InteropTest.java | Refactors interop tests to instance-based DBOS + Testcontainers PgContainer. |
| transact/src/test/java/dev/dbos/transact/issues/Issue218.java | Refactors restart/recovery test to try-with-resources DBOS instances + PgContainer. |
| transact/src/test/java/dev/dbos/transact/invocation/StartWorkflowTest.java | Refactors to instance-based DBOS + Testcontainers PgContainer. |
| transact/src/test/java/dev/dbos/transact/invocation/MultiDbosInstanceTest.java | Refactors multi-instance test to multiple DBOS instances + distinct containers. |
| transact/src/test/java/dev/dbos/transact/invocation/MultiClassInstanceTest.java | Refactors to instance-based DBOS + Testcontainers PgContainer. |
| transact/src/test/java/dev/dbos/transact/invocation/MockDbosInstanceTest.java | Updates mocking to mock DBOS (not DBOS.Instance). |
| transact/src/test/java/dev/dbos/transact/invocation/InstanceTest.java | Refactors to instance-based DBOS + Testcontainers PgContainer. |
| transact/src/test/java/dev/dbos/transact/invocation/HawkServiceImpl.java | Injects DBOS instance and replaces static calls in workflows. |
| transact/src/test/java/dev/dbos/transact/invocation/DirectInvocationTest.java | Refactors to instance-based DBOS + Testcontainers PgContainer. |
| transact/src/test/java/dev/dbos/transact/invocation/CustomSchemaTest.java | Refactors to instance-based DBOS + Testcontainers PgContainer with custom schema. |
| transact/src/test/java/dev/dbos/transact/invocation/BearServiceImpl.java | Injects DBOS instance and replaces static calls. |
| transact/src/test/java/dev/dbos/transact/execution/ScaleTest.java | Refactors scale test to use a scoped DBOS instance and Testcontainers config. |
| transact/src/test/java/dev/dbos/transact/execution/RecoveryServiceTest.java | Refactors recovery tests to use try-with-resources DBOS instances + PgContainer. |
| transact/src/test/java/dev/dbos/transact/execution/LifecycleTest.java | Refactors lifecycle tests to instance-based registration + PgContainer. |
| transact/src/test/java/dev/dbos/transact/execution/ExecutingServiceImpl.java | Removes standalone executing service impl file (impl moved/co-located). |
| transact/src/test/java/dev/dbos/transact/execution/ExecutingService.java | Co-locates ExecutingServiceImpl with interface; injects DBOS instance. |
| transact/src/test/java/dev/dbos/transact/database/SystemDatabaseTest.java | Refactors system DB tests to Testcontainers PgContainer. |
| transact/src/test/java/dev/dbos/transact/database/MetricsTest.java | Refactors metrics tests to scoped DBOS instance + PgContainer. |
| transact/src/test/java/dev/dbos/transact/database/ExternalStateTest.java | Refactors external state tests to Testcontainers PgContainer. |
| transact/src/test/java/dev/dbos/transact/database/DisruptiveServiceImpl.java | Removes old disruptive/chaos impl file (replaced by new chaos test/service). |
| transact/src/test/java/dev/dbos/transact/database/DisruptiveService.java | Removes old disruptive/chaos interface file (replaced by new chaos test/service). |
| transact/src/test/java/dev/dbos/transact/database/ChaosTest.java | Adds new chaos test/service implementation (currently disabled). |
| transact/src/test/java/dev/dbos/transact/conductor/ConductorTest.java | Marks conductor test class as concurrent execution. |
| transact/src/test/java/dev/dbos/transact/client/PgSqlClientTest.java | Refactors SQL client tests to instance-based DBOS + PgContainer; adds helper methods. |
| transact/src/test/java/dev/dbos/transact/client/EnqueueOptionsTest.java | Adds isolated validation tests for DBOSClient.EnqueueOptions. |
| transact/src/test/java/dev/dbos/transact/client/ClientTest.java | Refactors to instance-based DBOS + PgContainer; removes inline options validation (moved). |
| transact/src/test/java/dev/dbos/transact/client/ClientServiceImpl.java | Removes standalone client service impl file (impl moved/co-located). |
| transact/src/test/java/dev/dbos/transact/client/ClientService.java | Co-locates ClientServiceImpl with interface; injects DBOS instance. |
| transact/src/test/java/dev/dbos/transact/admin/AdminServerTest.java | Marks admin server test class as concurrent execution. |
| transact/src/test/java/dev/dbos/transact/DBOSTestAccess.java | Updates test-access helpers to accept a DBOS instance (non-static executor/service access). |
| transact/src/main/kotlin/dev/dbos/transact/DBOSExtensions.kt | Adds Kotlin extension overloads enabling trailing-lambda ergonomics for startWorkflow/runStep. |
| transact/src/main/java/dev/dbos/transact/execution/SchedulerService.java | Updates lifecycle listener usage to pass DBOS instance (not DBOS.Instance). |
| transact/src/main/java/dev/dbos/transact/execution/DBOSLifecycleListener.java | Updates lifecycle listener API to accept DBOS instance. |
| transact/src/main/java/dev/dbos/transact/execution/DBOSExecutor.java | Updates executor start signature to accept DBOS instance. |
| transact-cli/src/test/java/dev/dbos/transact/cli/ResetCommandTest.java | Refactors CLI reset test to use Testcontainers PgContainer. |
| transact-cli/src/test/java/dev/dbos/transact/cli/PgContainer.java | Adds Testcontainers-based Postgres helper for CLI tests. |
| transact-cli/src/test/java/dev/dbos/transact/cli/MigrateCommandTest.java | Refactors CLI migrate tests to use Testcontainers PgContainer. |
| TEST_REFACTOR_PLAN.md | Adds a test refactor plan document for migrating tests to instance-based patterns. |
| .github/workflows/test.yml | Updates CI matrix and workflow steps; removes explicit Postgres service usage. |
| .github/workflows/publish.yml | Updates workflow action versions for publishing pipeline. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR is a major breaking change to the DBOS public API surface area. We are removing the global singleton and most of the static methods on
DBOSin favor of using DBOS as an instance. We had already done the work to ensure that everything worked withDBOS.Instancedirectly. However, the combination of static and instance APIs made for a poor developer experience, so we've decided to remove the static API entirely.Mostly, this PR is test work since nearly all the tests used the static API. Updating all the tests allowed us to make a couple other changes - in particular, using
@AutoCloseto simplify test cleanup and using TestContainers for database isolation. The combination of DBOS Instance and TestContainers enables us to run tests in parallel, bringing a test run down to 6 minutes from 15.In addition to the Java work, this PR updates the Kotlin DBOSExtension class. The previous DBOSExtension primarily provided top level Kotlin functions for DBOS static methods. Now, the DBOSExtension simply wraps
DBOS.startWorkflowandDBOS.runStepto support Kotlin trailing lambdas syntax. We also added a Kotlin test!fixes #306