Skip to content

Commit 0c7b97e

Browse files
authored
Add versioning acceptance tests (#614)
1 parent b25d8dc commit 0c7b97e

File tree

3 files changed

+354
-0
lines changed

3 files changed

+354
-0
lines changed
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
{
2+
"events": [
3+
{
4+
"eventId": "1",
5+
"eventTime": "2025-05-10T11:08:43.136190100Z",
6+
"eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_STARTED",
7+
"taskId": "1048687",
8+
"workflowExecutionStartedEventAttributes": {
9+
"workflowType": {
10+
"name": "Extra_Versioning_Versioning"
11+
},
12+
"taskQueue": {
13+
"name": "Temporal\\Tests\\Acceptance\\Extra\\Workflow\\Versioning",
14+
"kind": "TASK_QUEUE_KIND_NORMAL"
15+
},
16+
"workflowExecutionTimeout": "60s",
17+
"workflowRunTimeout": "60s",
18+
"workflowTaskTimeout": "10s",
19+
"originalExecutionRunId": "0196b9e2-1300-72e6-a156-df5a49685436",
20+
"identity": "42484@roxblnfk-book",
21+
"firstExecutionRunId": "0196b9e2-1300-72e6-a156-df5a49685436",
22+
"attempt": 1,
23+
"workflowExecutionExpirationTime": "2025-05-10T11:09:43.136Z",
24+
"firstWorkflowTaskBackoff": "0s",
25+
"workflowId": "b2c07b59-cb14-4e46-8650-0da7f50d6f0a"
26+
}
27+
},
28+
{
29+
"eventId": "2",
30+
"eventTime": "2025-05-10T11:08:43.136190100Z",
31+
"eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED",
32+
"taskId": "1048688",
33+
"workflowTaskScheduledEventAttributes": {
34+
"taskQueue": {
35+
"name": "Temporal\\Tests\\Acceptance\\Extra\\Workflow\\Versioning",
36+
"kind": "TASK_QUEUE_KIND_NORMAL"
37+
},
38+
"startToCloseTimeout": "10s",
39+
"attempt": 1
40+
}
41+
},
42+
{
43+
"eventId": "3",
44+
"eventTime": "2025-05-10T11:08:43.138391700Z",
45+
"eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED",
46+
"taskId": "1048694",
47+
"workflowTaskStartedEventAttributes": {
48+
"scheduledEventId": "2",
49+
"identity": "Temporal\\Tests\\Acceptance\\Extra\\Workflow\\Versioning:44882e6a-8930-4f81-b987-69210c955363",
50+
"requestId": "32693089-d58e-4058-be32-f10928a5ab0d",
51+
"historySizeBytes": "372",
52+
"workerVersion": {
53+
"buildId": "f56858783d7ba07ee263f7740e6a9993"
54+
}
55+
}
56+
},
57+
{
58+
"eventId": "4",
59+
"eventTime": "2025-05-10T11:08:43.160702200Z",
60+
"eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED",
61+
"taskId": "1048698",
62+
"workflowTaskCompletedEventAttributes": {
63+
"scheduledEventId": "2",
64+
"startedEventId": "3",
65+
"identity": "Temporal\\Tests\\Acceptance\\Extra\\Workflow\\Versioning:44882e6a-8930-4f81-b987-69210c955363",
66+
"workerVersion": {
67+
"buildId": "f56858783d7ba07ee263f7740e6a9993"
68+
},
69+
"sdkMetadata": {
70+
"langUsedFlags": [
71+
3
72+
],
73+
"sdkName": "temporal-go",
74+
"sdkVersion": "1.34.0"
75+
},
76+
"meteringMetadata": {}
77+
}
78+
},
79+
{
80+
"eventId": "5",
81+
"eventTime": "2025-05-10T11:08:43.160702200Z",
82+
"eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED",
83+
"taskId": "1048699",
84+
"workflowExecutionCompletedEventAttributes": {
85+
"result": {
86+
"payloads": [
87+
{
88+
"metadata": {
89+
"encoding": "anNvbi9wbGFpbg=="
90+
},
91+
"data": "ImRlZmF1bHQi"
92+
}
93+
]
94+
},
95+
"workflowTaskCompletedEventId": "4"
96+
}
97+
}
98+
]
99+
}
Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
{
2+
"events": [
3+
{
4+
"eventId": "1",
5+
"eventTime": "2025-05-10T10:58:43.335213500Z",
6+
"eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_STARTED",
7+
"taskId": "1048607",
8+
"workflowExecutionStartedEventAttributes": {
9+
"workflowType": {
10+
"name": "Extra_Versioning_Versioning"
11+
},
12+
"taskQueue": {
13+
"name": "Temporal\\Tests\\Acceptance\\Extra\\Workflow\\Versioning",
14+
"kind": "TASK_QUEUE_KIND_NORMAL"
15+
},
16+
"workflowExecutionTimeout": "60s",
17+
"workflowRunTimeout": "60s",
18+
"workflowTaskTimeout": "10s",
19+
"originalExecutionRunId": "0196b9d8-ec07-7341-b56b-620f48a7eba9",
20+
"identity": "36696@roxblnfk-book",
21+
"firstExecutionRunId": "0196b9d8-ec07-7341-b56b-620f48a7eba9",
22+
"attempt": 1,
23+
"workflowExecutionExpirationTime": "2025-05-10T10:59:43.335Z",
24+
"firstWorkflowTaskBackoff": "0s",
25+
"workflowId": "31a01a98-7406-4130-b462-4adf7026b1db"
26+
}
27+
},
28+
{
29+
"eventId": "2",
30+
"eventTime": "2025-05-10T10:58:43.335213500Z",
31+
"eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED",
32+
"taskId": "1048608",
33+
"workflowTaskScheduledEventAttributes": {
34+
"taskQueue": {
35+
"name": "Temporal\\Tests\\Acceptance\\Extra\\Workflow\\Versioning",
36+
"kind": "TASK_QUEUE_KIND_NORMAL"
37+
},
38+
"startToCloseTimeout": "10s",
39+
"attempt": 1
40+
}
41+
},
42+
{
43+
"eventId": "3",
44+
"eventTime": "2025-05-10T10:58:43.336783600Z",
45+
"eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED",
46+
"taskId": "1048614",
47+
"workflowTaskStartedEventAttributes": {
48+
"scheduledEventId": "2",
49+
"identity": "Temporal\\Tests\\Acceptance\\Extra\\Workflow\\Versioning:b7e7bdac-03cb-40fe-bc45-896345d005f9",
50+
"requestId": "29e46cf8-0357-40f7-9d82-e1b13b42dcdf",
51+
"historySizeBytes": "375",
52+
"workerVersion": {
53+
"buildId": "f56858783d7ba07ee263f7740e6a9993"
54+
}
55+
}
56+
},
57+
{
58+
"eventId": "4",
59+
"eventTime": "2025-05-10T10:58:43.378803600Z",
60+
"eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED",
61+
"taskId": "1048618",
62+
"workflowTaskCompletedEventAttributes": {
63+
"scheduledEventId": "2",
64+
"startedEventId": "3",
65+
"identity": "Temporal\\Tests\\Acceptance\\Extra\\Workflow\\Versioning:b7e7bdac-03cb-40fe-bc45-896345d005f9",
66+
"workerVersion": {
67+
"buildId": "f56858783d7ba07ee263f7740e6a9993"
68+
},
69+
"sdkMetadata": {
70+
"langUsedFlags": [
71+
3,
72+
1
73+
],
74+
"sdkName": "temporal-go",
75+
"sdkVersion": "1.34.0"
76+
},
77+
"meteringMetadata": {}
78+
}
79+
},
80+
{
81+
"eventId": "5",
82+
"eventTime": "2025-05-10T10:58:43.378803600Z",
83+
"eventType": "EVENT_TYPE_MARKER_RECORDED",
84+
"taskId": "1048619",
85+
"markerRecordedEventAttributes": {
86+
"markerName": "Version",
87+
"details": {
88+
"change-id": {
89+
"payloads": [
90+
{
91+
"metadata": {
92+
"encoding": "anNvbi9wbGFpbg=="
93+
},
94+
"data": "InRlc3Qi"
95+
}
96+
]
97+
},
98+
"version": {
99+
"payloads": [
100+
{
101+
"metadata": {
102+
"encoding": "anNvbi9wbGFpbg=="
103+
},
104+
"data": "MQ=="
105+
}
106+
]
107+
}
108+
},
109+
"workflowTaskCompletedEventId": "4"
110+
}
111+
},
112+
{
113+
"eventId": "6",
114+
"eventTime": "2025-05-10T10:58:43.379333100Z",
115+
"eventType": "EVENT_TYPE_UPSERT_WORKFLOW_SEARCH_ATTRIBUTES",
116+
"taskId": "1048620",
117+
"upsertWorkflowSearchAttributesEventAttributes": {
118+
"workflowTaskCompletedEventId": "4",
119+
"searchAttributes": {
120+
"indexedFields": {
121+
"TemporalChangeVersion": {
122+
"metadata": {
123+
"encoding": "anNvbi9wbGFpbg==",
124+
"type": "S2V5d29yZExpc3Q="
125+
},
126+
"data": "WyJ0ZXN0LTEiXQ=="
127+
}
128+
}
129+
}
130+
}
131+
},
132+
{
133+
"eventId": "7",
134+
"eventTime": "2025-05-10T10:58:43.379333100Z",
135+
"eventType": "EVENT_TYPE_MARKER_RECORDED",
136+
"taskId": "1048621",
137+
"markerRecordedEventAttributes": {
138+
"markerName": "SideEffect",
139+
"details": {
140+
"data": {
141+
"payloads": [
142+
{
143+
"metadata": {
144+
"encoding": "anNvbi9wbGFpbg=="
145+
},
146+
"data": "InRlc3Qi"
147+
}
148+
]
149+
},
150+
"side-effect-id": {
151+
"payloads": [
152+
{
153+
"metadata": {
154+
"encoding": "anNvbi9wbGFpbg=="
155+
},
156+
"data": "MQ=="
157+
}
158+
]
159+
}
160+
},
161+
"workflowTaskCompletedEventId": "4"
162+
}
163+
},
164+
{
165+
"eventId": "8",
166+
"eventTime": "2025-05-10T10:58:43.379333100Z",
167+
"eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED",
168+
"taskId": "1048622",
169+
"workflowExecutionCompletedEventAttributes": {
170+
"result": {
171+
"payloads": [
172+
{
173+
"metadata": {
174+
"encoding": "anNvbi9wbGFpbg=="
175+
},
176+
"data": "InRlc3Qi"
177+
}
178+
]
179+
},
180+
"workflowTaskCompletedEventId": "4"
181+
}
182+
}
183+
]
184+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Temporal\Tests\Acceptance\Extra\Workflow\Versioning;
6+
7+
use PHPUnit\Framework\Attributes\Test;
8+
use Temporal\Activity\ActivityInterface;
9+
use Temporal\Activity\ActivityMethod;
10+
use Temporal\Activity\ActivityOptions;
11+
use Temporal\Client\WorkflowStubInterface;
12+
use Temporal\Testing\Replay\WorkflowReplayer;
13+
use Temporal\Tests\Acceptance\App\Attribute\Stub;
14+
use Temporal\Tests\Acceptance\App\TestCase;
15+
use Temporal\Workflow;
16+
use Temporal\Workflow\WorkflowInterface;
17+
use Temporal\Workflow\WorkflowMethod;
18+
19+
class VersioningTest extends TestCase
20+
{
21+
#[Test]
22+
public function sendEmpty(
23+
#[Stub(
24+
type: 'Extra_Versioning_Versioning',
25+
)] WorkflowStubInterface $stub,
26+
): void {
27+
$result = $stub->getResult();
28+
self::assertSame('v2', $result);
29+
30+
$replayer = new WorkflowReplayer();
31+
$replayer->replayFromJSON('Extra_Versioning_Versioning', __DIR__ . '/Versioning-default.json');
32+
$replayer->replayFromJSON('Extra_Versioning_Versioning', __DIR__ . '/Versioning-v1.json');
33+
34+
$replayer->replayFromServer($stub->getWorkflowType(), $stub->getExecution());
35+
}
36+
}
37+
38+
#[WorkflowInterface]
39+
class TestWorkflow
40+
{
41+
#[WorkflowMethod(name: "Extra_Versioning_Versioning")]
42+
public function handle()
43+
{
44+
$version = yield Workflow::getVersion('test', Workflow::DEFAULT_VERSION, 2);
45+
46+
if ($version === 1) {
47+
yield Workflow::sideEffect(static fn() => 'test');
48+
return 'v1';
49+
}
50+
51+
if ($version === 2) {
52+
return yield Workflow::executeActivity(
53+
'Extra_Versioning_Versioning.handler',
54+
args: ['v2'],
55+
options: ActivityOptions::new()->withScheduleToCloseTimeout(5),
56+
);
57+
}
58+
59+
return 'default';
60+
}
61+
}
62+
63+
#[ActivityInterface(prefix: 'Extra_Versioning_Versioning.')]
64+
class TestActivity
65+
{
66+
#[ActivityMethod]
67+
public function handler(string $result): string
68+
{
69+
return $result;
70+
}
71+
}

0 commit comments

Comments
 (0)