From 4957c7998cded3dd22507babf391fe65c18c5155 Mon Sep 17 00:00:00 2001 From: roxblnfk Date: Sat, 10 May 2025 15:17:49 +0400 Subject: [PATCH] Add versioning acceptance tests --- .../Extra/Versioning/Versioning-default.json | 99 ++++++++++ .../Extra/Versioning/Versioning-v1.json | 184 ++++++++++++++++++ .../Extra/Versioning/VersioningTest.php | 71 +++++++ 3 files changed, 354 insertions(+) create mode 100644 tests/Acceptance/Extra/Versioning/Versioning-default.json create mode 100644 tests/Acceptance/Extra/Versioning/Versioning-v1.json create mode 100644 tests/Acceptance/Extra/Versioning/VersioningTest.php diff --git a/tests/Acceptance/Extra/Versioning/Versioning-default.json b/tests/Acceptance/Extra/Versioning/Versioning-default.json new file mode 100644 index 00000000..2457bebc --- /dev/null +++ b/tests/Acceptance/Extra/Versioning/Versioning-default.json @@ -0,0 +1,99 @@ +{ + "events": [ + { + "eventId": "1", + "eventTime": "2025-05-10T11:08:43.136190100Z", + "eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_STARTED", + "taskId": "1048687", + "workflowExecutionStartedEventAttributes": { + "workflowType": { + "name": "Extra_Versioning_Versioning" + }, + "taskQueue": { + "name": "Temporal\\Tests\\Acceptance\\Extra\\Workflow\\Versioning", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "workflowExecutionTimeout": "60s", + "workflowRunTimeout": "60s", + "workflowTaskTimeout": "10s", + "originalExecutionRunId": "0196b9e2-1300-72e6-a156-df5a49685436", + "identity": "42484@roxblnfk-book", + "firstExecutionRunId": "0196b9e2-1300-72e6-a156-df5a49685436", + "attempt": 1, + "workflowExecutionExpirationTime": "2025-05-10T11:09:43.136Z", + "firstWorkflowTaskBackoff": "0s", + "workflowId": "b2c07b59-cb14-4e46-8650-0da7f50d6f0a" + } + }, + { + "eventId": "2", + "eventTime": "2025-05-10T11:08:43.136190100Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1048688", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "Temporal\\Tests\\Acceptance\\Extra\\Workflow\\Versioning", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "3", + "eventTime": "2025-05-10T11:08:43.138391700Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1048694", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "2", + "identity": "Temporal\\Tests\\Acceptance\\Extra\\Workflow\\Versioning:44882e6a-8930-4f81-b987-69210c955363", + "requestId": "32693089-d58e-4058-be32-f10928a5ab0d", + "historySizeBytes": "372", + "workerVersion": { + "buildId": "f56858783d7ba07ee263f7740e6a9993" + } + } + }, + { + "eventId": "4", + "eventTime": "2025-05-10T11:08:43.160702200Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1048698", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "2", + "startedEventId": "3", + "identity": "Temporal\\Tests\\Acceptance\\Extra\\Workflow\\Versioning:44882e6a-8930-4f81-b987-69210c955363", + "workerVersion": { + "buildId": "f56858783d7ba07ee263f7740e6a9993" + }, + "sdkMetadata": { + "langUsedFlags": [ + 3 + ], + "sdkName": "temporal-go", + "sdkVersion": "1.34.0" + }, + "meteringMetadata": {} + } + }, + { + "eventId": "5", + "eventTime": "2025-05-10T11:08:43.160702200Z", + "eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED", + "taskId": "1048699", + "workflowExecutionCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "ImRlZmF1bHQi" + } + ] + }, + "workflowTaskCompletedEventId": "4" + } + } + ] +} diff --git a/tests/Acceptance/Extra/Versioning/Versioning-v1.json b/tests/Acceptance/Extra/Versioning/Versioning-v1.json new file mode 100644 index 00000000..a9848983 --- /dev/null +++ b/tests/Acceptance/Extra/Versioning/Versioning-v1.json @@ -0,0 +1,184 @@ +{ + "events": [ + { + "eventId": "1", + "eventTime": "2025-05-10T10:58:43.335213500Z", + "eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_STARTED", + "taskId": "1048607", + "workflowExecutionStartedEventAttributes": { + "workflowType": { + "name": "Extra_Versioning_Versioning" + }, + "taskQueue": { + "name": "Temporal\\Tests\\Acceptance\\Extra\\Workflow\\Versioning", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "workflowExecutionTimeout": "60s", + "workflowRunTimeout": "60s", + "workflowTaskTimeout": "10s", + "originalExecutionRunId": "0196b9d8-ec07-7341-b56b-620f48a7eba9", + "identity": "36696@roxblnfk-book", + "firstExecutionRunId": "0196b9d8-ec07-7341-b56b-620f48a7eba9", + "attempt": 1, + "workflowExecutionExpirationTime": "2025-05-10T10:59:43.335Z", + "firstWorkflowTaskBackoff": "0s", + "workflowId": "31a01a98-7406-4130-b462-4adf7026b1db" + } + }, + { + "eventId": "2", + "eventTime": "2025-05-10T10:58:43.335213500Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1048608", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "Temporal\\Tests\\Acceptance\\Extra\\Workflow\\Versioning", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "3", + "eventTime": "2025-05-10T10:58:43.336783600Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1048614", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "2", + "identity": "Temporal\\Tests\\Acceptance\\Extra\\Workflow\\Versioning:b7e7bdac-03cb-40fe-bc45-896345d005f9", + "requestId": "29e46cf8-0357-40f7-9d82-e1b13b42dcdf", + "historySizeBytes": "375", + "workerVersion": { + "buildId": "f56858783d7ba07ee263f7740e6a9993" + } + } + }, + { + "eventId": "4", + "eventTime": "2025-05-10T10:58:43.378803600Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1048618", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "2", + "startedEventId": "3", + "identity": "Temporal\\Tests\\Acceptance\\Extra\\Workflow\\Versioning:b7e7bdac-03cb-40fe-bc45-896345d005f9", + "workerVersion": { + "buildId": "f56858783d7ba07ee263f7740e6a9993" + }, + "sdkMetadata": { + "langUsedFlags": [ + 3, + 1 + ], + "sdkName": "temporal-go", + "sdkVersion": "1.34.0" + }, + "meteringMetadata": {} + } + }, + { + "eventId": "5", + "eventTime": "2025-05-10T10:58:43.378803600Z", + "eventType": "EVENT_TYPE_MARKER_RECORDED", + "taskId": "1048619", + "markerRecordedEventAttributes": { + "markerName": "Version", + "details": { + "change-id": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InRlc3Qi" + } + ] + }, + "version": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "MQ==" + } + ] + } + }, + "workflowTaskCompletedEventId": "4" + } + }, + { + "eventId": "6", + "eventTime": "2025-05-10T10:58:43.379333100Z", + "eventType": "EVENT_TYPE_UPSERT_WORKFLOW_SEARCH_ATTRIBUTES", + "taskId": "1048620", + "upsertWorkflowSearchAttributesEventAttributes": { + "workflowTaskCompletedEventId": "4", + "searchAttributes": { + "indexedFields": { + "TemporalChangeVersion": { + "metadata": { + "encoding": "anNvbi9wbGFpbg==", + "type": "S2V5d29yZExpc3Q=" + }, + "data": "WyJ0ZXN0LTEiXQ==" + } + } + } + } + }, + { + "eventId": "7", + "eventTime": "2025-05-10T10:58:43.379333100Z", + "eventType": "EVENT_TYPE_MARKER_RECORDED", + "taskId": "1048621", + "markerRecordedEventAttributes": { + "markerName": "SideEffect", + "details": { + "data": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InRlc3Qi" + } + ] + }, + "side-effect-id": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "MQ==" + } + ] + } + }, + "workflowTaskCompletedEventId": "4" + } + }, + { + "eventId": "8", + "eventTime": "2025-05-10T10:58:43.379333100Z", + "eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED", + "taskId": "1048622", + "workflowExecutionCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InRlc3Qi" + } + ] + }, + "workflowTaskCompletedEventId": "4" + } + } + ] +} diff --git a/tests/Acceptance/Extra/Versioning/VersioningTest.php b/tests/Acceptance/Extra/Versioning/VersioningTest.php new file mode 100644 index 00000000..bc8250d9 --- /dev/null +++ b/tests/Acceptance/Extra/Versioning/VersioningTest.php @@ -0,0 +1,71 @@ +getResult(); + self::assertSame('v2', $result); + + $replayer = new WorkflowReplayer(); + $replayer->replayFromJSON('Extra_Versioning_Versioning', __DIR__ . '/Versioning-default.json'); + $replayer->replayFromJSON('Extra_Versioning_Versioning', __DIR__ . '/Versioning-v1.json'); + + $replayer->replayFromServer($stub->getWorkflowType(), $stub->getExecution()); + } +} + +#[WorkflowInterface] +class TestWorkflow +{ + #[WorkflowMethod(name: "Extra_Versioning_Versioning")] + public function handle() + { + $version = yield Workflow::getVersion('test', Workflow::DEFAULT_VERSION, 2); + + if ($version === 1) { + yield Workflow::sideEffect(static fn() => 'test'); + return 'v1'; + } + + if ($version === 2) { + return yield Workflow::executeActivity( + 'Extra_Versioning_Versioning.handler', + args: ['v2'], + options: ActivityOptions::new()->withScheduleToCloseTimeout(5), + ); + } + + return 'default'; + } +} + +#[ActivityInterface(prefix: 'Extra_Versioning_Versioning.')] +class TestActivity +{ + #[ActivityMethod] + public function handler(string $result): string + { + return $result; + } +}