temporalio 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (316) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +130 -0
  3. data/bridge/Cargo.lock +2865 -0
  4. data/bridge/Cargo.toml +26 -0
  5. data/bridge/sdk-core/ARCHITECTURE.md +76 -0
  6. data/bridge/sdk-core/Cargo.lock +2606 -0
  7. data/bridge/sdk-core/Cargo.toml +2 -0
  8. data/bridge/sdk-core/LICENSE.txt +23 -0
  9. data/bridge/sdk-core/README.md +107 -0
  10. data/bridge/sdk-core/arch_docs/diagrams/README.md +10 -0
  11. data/bridge/sdk-core/arch_docs/diagrams/sticky_queues.puml +40 -0
  12. data/bridge/sdk-core/arch_docs/diagrams/workflow_internals.svg +1 -0
  13. data/bridge/sdk-core/arch_docs/sticky_queues.md +51 -0
  14. data/bridge/sdk-core/bridge-ffi/Cargo.toml +24 -0
  15. data/bridge/sdk-core/bridge-ffi/LICENSE.txt +23 -0
  16. data/bridge/sdk-core/bridge-ffi/build.rs +25 -0
  17. data/bridge/sdk-core/bridge-ffi/include/sdk-core-bridge.h +249 -0
  18. data/bridge/sdk-core/bridge-ffi/src/lib.rs +825 -0
  19. data/bridge/sdk-core/bridge-ffi/src/wrappers.rs +211 -0
  20. data/bridge/sdk-core/client/Cargo.toml +40 -0
  21. data/bridge/sdk-core/client/LICENSE.txt +23 -0
  22. data/bridge/sdk-core/client/src/lib.rs +1294 -0
  23. data/bridge/sdk-core/client/src/metrics.rs +165 -0
  24. data/bridge/sdk-core/client/src/raw.rs +931 -0
  25. data/bridge/sdk-core/client/src/retry.rs +674 -0
  26. data/bridge/sdk-core/client/src/workflow_handle/mod.rs +185 -0
  27. data/bridge/sdk-core/core/Cargo.toml +116 -0
  28. data/bridge/sdk-core/core/LICENSE.txt +23 -0
  29. data/bridge/sdk-core/core/benches/workflow_replay.rs +73 -0
  30. data/bridge/sdk-core/core/src/abstractions.rs +166 -0
  31. data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +911 -0
  32. data/bridge/sdk-core/core/src/core_tests/child_workflows.rs +221 -0
  33. data/bridge/sdk-core/core/src/core_tests/determinism.rs +107 -0
  34. data/bridge/sdk-core/core/src/core_tests/local_activities.rs +515 -0
  35. data/bridge/sdk-core/core/src/core_tests/mod.rs +100 -0
  36. data/bridge/sdk-core/core/src/core_tests/queries.rs +736 -0
  37. data/bridge/sdk-core/core/src/core_tests/replay_flag.rs +65 -0
  38. data/bridge/sdk-core/core/src/core_tests/workers.rs +259 -0
  39. data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +124 -0
  40. data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +2070 -0
  41. data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +515 -0
  42. data/bridge/sdk-core/core/src/lib.rs +175 -0
  43. data/bridge/sdk-core/core/src/log_export.rs +62 -0
  44. data/bridge/sdk-core/core/src/pollers/mod.rs +54 -0
  45. data/bridge/sdk-core/core/src/pollers/poll_buffer.rs +297 -0
  46. data/bridge/sdk-core/core/src/protosext/mod.rs +428 -0
  47. data/bridge/sdk-core/core/src/replay/mod.rs +71 -0
  48. data/bridge/sdk-core/core/src/retry_logic.rs +202 -0
  49. data/bridge/sdk-core/core/src/telemetry/metrics.rs +383 -0
  50. data/bridge/sdk-core/core/src/telemetry/mod.rs +412 -0
  51. data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +77 -0
  52. data/bridge/sdk-core/core/src/test_help/mod.rs +875 -0
  53. data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +580 -0
  54. data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +1042 -0
  55. data/bridge/sdk-core/core/src/worker/activities.rs +464 -0
  56. data/bridge/sdk-core/core/src/worker/client/mocks.rs +87 -0
  57. data/bridge/sdk-core/core/src/worker/client.rs +347 -0
  58. data/bridge/sdk-core/core/src/worker/mod.rs +566 -0
  59. data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +37 -0
  60. data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +110 -0
  61. data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +458 -0
  62. data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +911 -0
  63. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +298 -0
  64. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +171 -0
  65. data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +860 -0
  66. data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +140 -0
  67. data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +161 -0
  68. data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +133 -0
  69. data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +1448 -0
  70. data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +342 -0
  71. data/bridge/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +127 -0
  72. data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +712 -0
  73. data/bridge/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +71 -0
  74. data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +443 -0
  75. data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +439 -0
  76. data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +169 -0
  77. data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +246 -0
  78. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +96 -0
  79. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +1184 -0
  80. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +277 -0
  81. data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +198 -0
  82. data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +647 -0
  83. data/bridge/sdk-core/core/src/worker/workflow/mod.rs +1143 -0
  84. data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +145 -0
  85. data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +88 -0
  86. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +940 -0
  87. data/bridge/sdk-core/core-api/Cargo.toml +31 -0
  88. data/bridge/sdk-core/core-api/LICENSE.txt +23 -0
  89. data/bridge/sdk-core/core-api/src/errors.rs +95 -0
  90. data/bridge/sdk-core/core-api/src/lib.rs +151 -0
  91. data/bridge/sdk-core/core-api/src/worker.rs +135 -0
  92. data/bridge/sdk-core/etc/deps.svg +187 -0
  93. data/bridge/sdk-core/etc/dynamic-config.yaml +2 -0
  94. data/bridge/sdk-core/etc/otel-collector-config.yaml +36 -0
  95. data/bridge/sdk-core/etc/prometheus.yaml +6 -0
  96. data/bridge/sdk-core/fsm/Cargo.toml +18 -0
  97. data/bridge/sdk-core/fsm/LICENSE.txt +23 -0
  98. data/bridge/sdk-core/fsm/README.md +3 -0
  99. data/bridge/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +27 -0
  100. data/bridge/sdk-core/fsm/rustfsm_procmacro/LICENSE.txt +23 -0
  101. data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +647 -0
  102. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/progress.rs +8 -0
  103. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.rs +18 -0
  104. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.stderr +12 -0
  105. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dynamic_dest_pass.rs +41 -0
  106. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.rs +14 -0
  107. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.stderr +11 -0
  108. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_arg_pass.rs +32 -0
  109. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_pass.rs +31 -0
  110. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/medium_complex_pass.rs +46 -0
  111. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.rs +29 -0
  112. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +12 -0
  113. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/simple_pass.rs +32 -0
  114. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.rs +18 -0
  115. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.stderr +5 -0
  116. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.rs +11 -0
  117. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.stderr +5 -0
  118. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.rs +11 -0
  119. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.stderr +5 -0
  120. data/bridge/sdk-core/fsm/rustfsm_trait/Cargo.toml +14 -0
  121. data/bridge/sdk-core/fsm/rustfsm_trait/LICENSE.txt +23 -0
  122. data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +249 -0
  123. data/bridge/sdk-core/fsm/src/lib.rs +2 -0
  124. data/bridge/sdk-core/histories/fail_wf_task.bin +0 -0
  125. data/bridge/sdk-core/histories/timer_workflow_history.bin +0 -0
  126. data/bridge/sdk-core/integ-with-otel.sh +7 -0
  127. data/bridge/sdk-core/protos/api_upstream/README.md +9 -0
  128. data/bridge/sdk-core/protos/api_upstream/api-linter.yaml +40 -0
  129. data/bridge/sdk-core/protos/api_upstream/buf.yaml +12 -0
  130. data/bridge/sdk-core/protos/api_upstream/dependencies/gogoproto/gogo.proto +141 -0
  131. data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +86 -0
  132. data/bridge/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +83 -0
  133. data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +259 -0
  134. data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +112 -0
  135. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +46 -0
  136. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/cluster.proto +40 -0
  137. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +57 -0
  138. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +55 -0
  139. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +168 -0
  140. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +97 -0
  141. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +51 -0
  142. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +50 -0
  143. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +41 -0
  144. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +60 -0
  145. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +59 -0
  146. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +51 -0
  147. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +122 -0
  148. data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +108 -0
  149. data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +114 -0
  150. data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +56 -0
  151. data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +751 -0
  152. data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +97 -0
  153. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +161 -0
  154. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +99 -0
  155. data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +61 -0
  156. data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +55 -0
  157. data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +300 -0
  158. data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +108 -0
  159. data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +46 -0
  160. data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +59 -0
  161. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +145 -0
  162. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +1124 -0
  163. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +401 -0
  164. data/bridge/sdk-core/protos/grpc/health/v1/health.proto +63 -0
  165. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +78 -0
  166. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +79 -0
  167. data/bridge/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +210 -0
  168. data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +77 -0
  169. data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +15 -0
  170. data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +30 -0
  171. data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +30 -0
  172. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +261 -0
  173. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +297 -0
  174. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +29 -0
  175. data/bridge/sdk-core/protos/testsrv_upstream/api-linter.yaml +38 -0
  176. data/bridge/sdk-core/protos/testsrv_upstream/buf.yaml +13 -0
  177. data/bridge/sdk-core/protos/testsrv_upstream/dependencies/gogoproto/gogo.proto +141 -0
  178. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +63 -0
  179. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +90 -0
  180. data/bridge/sdk-core/rustfmt.toml +1 -0
  181. data/bridge/sdk-core/sdk/Cargo.toml +47 -0
  182. data/bridge/sdk-core/sdk/LICENSE.txt +23 -0
  183. data/bridge/sdk-core/sdk/src/activity_context.rs +230 -0
  184. data/bridge/sdk-core/sdk/src/app_data.rs +37 -0
  185. data/bridge/sdk-core/sdk/src/conversions.rs +8 -0
  186. data/bridge/sdk-core/sdk/src/interceptors.rs +17 -0
  187. data/bridge/sdk-core/sdk/src/lib.rs +792 -0
  188. data/bridge/sdk-core/sdk/src/payload_converter.rs +11 -0
  189. data/bridge/sdk-core/sdk/src/workflow_context/options.rs +295 -0
  190. data/bridge/sdk-core/sdk/src/workflow_context.rs +683 -0
  191. data/bridge/sdk-core/sdk/src/workflow_future.rs +503 -0
  192. data/bridge/sdk-core/sdk-core-protos/Cargo.toml +30 -0
  193. data/bridge/sdk-core/sdk-core-protos/LICENSE.txt +23 -0
  194. data/bridge/sdk-core/sdk-core-protos/build.rs +108 -0
  195. data/bridge/sdk-core/sdk-core-protos/src/constants.rs +7 -0
  196. data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +497 -0
  197. data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +230 -0
  198. data/bridge/sdk-core/sdk-core-protos/src/lib.rs +1910 -0
  199. data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +38 -0
  200. data/bridge/sdk-core/sdk-core-protos/src/utilities.rs +14 -0
  201. data/bridge/sdk-core/test-utils/Cargo.toml +35 -0
  202. data/bridge/sdk-core/test-utils/src/canned_histories.rs +1579 -0
  203. data/bridge/sdk-core/test-utils/src/histfetch.rs +28 -0
  204. data/bridge/sdk-core/test-utils/src/lib.rs +598 -0
  205. data/bridge/sdk-core/tests/integ_tests/client_tests.rs +36 -0
  206. data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +128 -0
  207. data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +218 -0
  208. data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +146 -0
  209. data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +437 -0
  210. data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +93 -0
  211. data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +878 -0
  212. data/bridge/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +61 -0
  213. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +59 -0
  214. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +58 -0
  215. data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +50 -0
  216. data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +60 -0
  217. data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +54 -0
  218. data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +634 -0
  219. data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +113 -0
  220. data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +137 -0
  221. data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +93 -0
  222. data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +167 -0
  223. data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +99 -0
  224. data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +131 -0
  225. data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +75 -0
  226. data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +587 -0
  227. data/bridge/sdk-core/tests/load_tests.rs +191 -0
  228. data/bridge/sdk-core/tests/main.rs +111 -0
  229. data/bridge/sdk-core/tests/runner.rs +93 -0
  230. data/bridge/src/connection.rs +167 -0
  231. data/bridge/src/lib.rs +180 -0
  232. data/bridge/src/runtime.rs +47 -0
  233. data/bridge/src/worker.rs +73 -0
  234. data/ext/Rakefile +9 -0
  235. data/lib/bridge.so +0 -0
  236. data/lib/gen/dependencies/gogoproto/gogo_pb.rb +14 -0
  237. data/lib/gen/temporal/api/batch/v1/message_pb.rb +48 -0
  238. data/lib/gen/temporal/api/cluster/v1/message_pb.rb +67 -0
  239. data/lib/gen/temporal/api/command/v1/message_pb.rb +166 -0
  240. data/lib/gen/temporal/api/common/v1/message_pb.rb +69 -0
  241. data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +32 -0
  242. data/lib/gen/temporal/api/enums/v1/cluster_pb.rb +26 -0
  243. data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +37 -0
  244. data/lib/gen/temporal/api/enums/v1/common_pb.rb +41 -0
  245. data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +67 -0
  246. data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +71 -0
  247. data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +37 -0
  248. data/lib/gen/temporal/api/enums/v1/query_pb.rb +31 -0
  249. data/lib/gen/temporal/api/enums/v1/reset_pb.rb +24 -0
  250. data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +28 -0
  251. data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +30 -0
  252. data/lib/gen/temporal/api/enums/v1/update_pb.rb +28 -0
  253. data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +89 -0
  254. data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +84 -0
  255. data/lib/gen/temporal/api/failure/v1/message_pb.rb +83 -0
  256. data/lib/gen/temporal/api/filter/v1/message_pb.rb +40 -0
  257. data/lib/gen/temporal/api/history/v1/message_pb.rb +489 -0
  258. data/lib/gen/temporal/api/namespace/v1/message_pb.rb +63 -0
  259. data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +125 -0
  260. data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +20 -0
  261. data/lib/gen/temporal/api/query/v1/message_pb.rb +38 -0
  262. data/lib/gen/temporal/api/replication/v1/message_pb.rb +37 -0
  263. data/lib/gen/temporal/api/schedule/v1/message_pb.rb +128 -0
  264. data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +73 -0
  265. data/lib/gen/temporal/api/update/v1/message_pb.rb +26 -0
  266. data/lib/gen/temporal/api/version/v1/message_pb.rb +41 -0
  267. data/lib/gen/temporal/api/workflow/v1/message_pb.rb +110 -0
  268. data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +771 -0
  269. data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +20 -0
  270. data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +58 -0
  271. data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +57 -0
  272. data/lib/gen/temporal/sdk/core/bridge/bridge_pb.rb +222 -0
  273. data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +57 -0
  274. data/lib/gen/temporal/sdk/core/common/common_pb.rb +22 -0
  275. data/lib/gen/temporal/sdk/core/core_interface_pb.rb +34 -0
  276. data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +27 -0
  277. data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +164 -0
  278. data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +192 -0
  279. data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +34 -0
  280. data/lib/temporal/bridge.rb +14 -0
  281. data/lib/temporal/client/implementation.rb +339 -0
  282. data/lib/temporal/client/workflow_handle.rb +243 -0
  283. data/lib/temporal/client.rb +144 -0
  284. data/lib/temporal/connection.rb +736 -0
  285. data/lib/temporal/data_converter.rb +150 -0
  286. data/lib/temporal/error/failure.rb +194 -0
  287. data/lib/temporal/error/workflow_failure.rb +17 -0
  288. data/lib/temporal/errors.rb +22 -0
  289. data/lib/temporal/failure_converter/base.rb +26 -0
  290. data/lib/temporal/failure_converter/basic.rb +313 -0
  291. data/lib/temporal/failure_converter.rb +8 -0
  292. data/lib/temporal/interceptor/chain.rb +27 -0
  293. data/lib/temporal/interceptor/client.rb +102 -0
  294. data/lib/temporal/payload_codec/base.rb +32 -0
  295. data/lib/temporal/payload_converter/base.rb +24 -0
  296. data/lib/temporal/payload_converter/bytes.rb +26 -0
  297. data/lib/temporal/payload_converter/composite.rb +47 -0
  298. data/lib/temporal/payload_converter/encoding_base.rb +35 -0
  299. data/lib/temporal/payload_converter/json.rb +25 -0
  300. data/lib/temporal/payload_converter/nil.rb +25 -0
  301. data/lib/temporal/payload_converter.rb +14 -0
  302. data/lib/temporal/retry_policy.rb +82 -0
  303. data/lib/temporal/retry_state.rb +35 -0
  304. data/lib/temporal/runtime.rb +22 -0
  305. data/lib/temporal/timeout_type.rb +29 -0
  306. data/lib/temporal/version.rb +1 -1
  307. data/lib/temporal/workflow/execution_info.rb +54 -0
  308. data/lib/temporal/workflow/execution_status.rb +36 -0
  309. data/lib/temporal/workflow/id_reuse_policy.rb +36 -0
  310. data/lib/temporal/workflow/query_reject_condition.rb +33 -0
  311. data/lib/temporal.rb +4 -0
  312. data/lib/temporalio.rb +3 -1
  313. data/lib/thermite_patch.rb +23 -0
  314. data/temporalio.gemspec +41 -0
  315. metadata +543 -9
  316. data/temporal.gemspec +0 -20
@@ -0,0 +1,1579 @@
1
+ use prost::Message;
2
+ use rand::RngCore;
3
+ use std::{fs::File, io::Write, path::PathBuf};
4
+ use temporal_sdk_core::replay::TestHistoryBuilder;
5
+ use temporal_sdk_core_protos::{
6
+ coresdk::common::NamespacedWorkflowExecution,
7
+ temporal::api::{
8
+ common::v1::{Payload, WorkflowExecution},
9
+ enums::v1::{EventType, StartChildWorkflowExecutionFailedCause, WorkflowTaskFailedCause},
10
+ failure::v1::Failure,
11
+ history::v1::*,
12
+ },
13
+ };
14
+
15
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
16
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
17
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
18
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
19
+ /// 5: EVENT_TYPE_TIMER_STARTED
20
+ /// 6: EVENT_TYPE_TIMER_FIRED
21
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
22
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
23
+ pub fn single_timer(timer_id: &str) -> TestHistoryBuilder {
24
+ let mut t = TestHistoryBuilder::default();
25
+ t.add_by_type(EventType::WorkflowExecutionStarted);
26
+ t.add_full_wf_task();
27
+ let timer_started_event_id = t.add_get_event_id(EventType::TimerStarted, None);
28
+ t.add_timer_fired(timer_started_event_id, timer_id.to_string());
29
+ t.add_workflow_task_scheduled_and_started();
30
+ t
31
+ }
32
+
33
+ pub fn single_timer_wf_completes(timer_id: &str) -> TestHistoryBuilder {
34
+ let mut t = single_timer(timer_id);
35
+ t.add_workflow_task_completed();
36
+ t.add_workflow_execution_completed();
37
+ t
38
+ }
39
+
40
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
41
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
42
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
43
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
44
+ /// 5: EVENT_TYPE_TIMER_STARTED (cancel)
45
+ /// 6: EVENT_TYPE_TIMER_STARTED (wait)
46
+ /// 7: EVENT_TYPE_TIMER_FIRED (wait)
47
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
48
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_STARTED
49
+ /// 10: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
50
+ /// 11: EVENT_TYPE_TIMER_CANCELED (cancel)
51
+ /// 12: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
52
+ pub fn cancel_timer(wait_timer_id: &str, cancel_timer_id: &str) -> TestHistoryBuilder {
53
+ let mut t = TestHistoryBuilder::default();
54
+ t.add_by_type(EventType::WorkflowExecutionStarted);
55
+ t.add_full_wf_task();
56
+ let cancel_timer_started_id = t.add_get_event_id(EventType::TimerStarted, None);
57
+ let wait_timer_started_id = t.add_get_event_id(EventType::TimerStarted, None);
58
+ t.add_timer_fired(wait_timer_started_id, wait_timer_id.to_string());
59
+ // 8
60
+ t.add_full_wf_task();
61
+ // 11
62
+ t.add(
63
+ EventType::TimerCanceled,
64
+ history_event::Attributes::TimerCanceledEventAttributes(TimerCanceledEventAttributes {
65
+ started_event_id: cancel_timer_started_id,
66
+ timer_id: cancel_timer_id.to_string(),
67
+ ..Default::default()
68
+ }),
69
+ );
70
+ // 12
71
+ t.add_workflow_execution_completed();
72
+ t
73
+ }
74
+
75
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
76
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
77
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
78
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
79
+ /// 5: EVENT_TYPE_TIMER_STARTED
80
+ /// 6: EVENT_TYPE_TIMER_STARTED
81
+ /// 7: EVENT_TYPE_TIMER_FIRED
82
+ /// 8: EVENT_TYPE_TIMER_FIRED
83
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
84
+ /// 10: EVENT_TYPE_WORKFLOW_TASK_STARTED
85
+ pub fn parallel_timer(timer1: &str, timer2: &str) -> TestHistoryBuilder {
86
+ let mut t = TestHistoryBuilder::default();
87
+ t.add_by_type(EventType::WorkflowExecutionStarted);
88
+ t.add_full_wf_task();
89
+ let timer_started_event_id = t.add_get_event_id(EventType::TimerStarted, None);
90
+ let timer_2_started_event_id = t.add_get_event_id(EventType::TimerStarted, None);
91
+ t.add_timer_fired(timer_started_event_id, timer1.to_string());
92
+ t.add_timer_fired(timer_2_started_event_id, timer2.to_string());
93
+ t.add_workflow_task_scheduled_and_started();
94
+ t
95
+ }
96
+
97
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
98
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
99
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
100
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
101
+ /// 5: EVENT_TYPE_TIMER_STARTED
102
+ /// 6: EVENT_TYPE_TIMER_FIRED
103
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
104
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
105
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_FAILED
106
+ /// 10: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
107
+ /// 11: EVENT_TYPE_WORKFLOW_TASK_STARTED
108
+ pub fn workflow_fails_with_reset_after_timer(
109
+ timer_id: &str,
110
+ original_run_id: &str,
111
+ ) -> TestHistoryBuilder {
112
+ let mut t = single_timer(timer_id);
113
+ t.add_workflow_task_failed_new_id(WorkflowTaskFailedCause::ResetWorkflow, original_run_id);
114
+
115
+ t.add_workflow_task_scheduled_and_started();
116
+ t
117
+ }
118
+
119
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
120
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
121
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
122
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
123
+ /// 5: EVENT_TYPE_TIMER_STARTED
124
+ /// 6: EVENT_TYPE_TIMER_FIRED
125
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
126
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
127
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_FAILED
128
+ /// 10: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
129
+ /// 11: EVENT_TYPE_WORKFLOW_TASK_STARTED
130
+ pub fn workflow_fails_with_failure_after_timer(timer_id: &str) -> TestHistoryBuilder {
131
+ let mut t = single_timer(timer_id);
132
+ t.add_workflow_task_failed_with_failure(
133
+ WorkflowTaskFailedCause::WorkflowWorkerUnhandledFailure,
134
+ Failure {
135
+ message: "boom".to_string(),
136
+ ..Default::default()
137
+ },
138
+ );
139
+
140
+ t.add_workflow_task_scheduled_and_started();
141
+ t
142
+ }
143
+
144
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
145
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
146
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
147
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
148
+ /// 5: EVENT_TYPE_TIMER_STARTED
149
+ /// 6: EVENT_TYPE_TIMER_FIRED
150
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
151
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
152
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_FAILED
153
+ /// 10: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
154
+ /// 11: EVENT_TYPE_WORKFLOW_TASK_STARTED
155
+ /// 12: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
156
+ /// 13: EVENT_TYPE_TIMER_STARTED
157
+ /// 14: EVENT_TYPE_TIMER_FIRED
158
+ /// 15: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
159
+ /// 16: EVENT_TYPE_WORKFLOW_TASK_STARTED
160
+ /// 17: EVENT_TYPE_WORKFLOW_TASK_FAILED
161
+ /// 18: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
162
+ /// 19: EVENT_TYPE_WORKFLOW_TASK_STARTED
163
+ pub fn workflow_fails_with_failure_two_different_points(
164
+ timer_1: &str,
165
+ timer_2: &str,
166
+ ) -> TestHistoryBuilder {
167
+ let mut t = single_timer(timer_1);
168
+ t.add_workflow_task_failed_with_failure(
169
+ WorkflowTaskFailedCause::WorkflowWorkerUnhandledFailure,
170
+ Failure {
171
+ message: "boom 1".to_string(),
172
+ ..Default::default()
173
+ },
174
+ );
175
+ t.add_full_wf_task();
176
+ let timer_started_event_id = t.add_get_event_id(EventType::TimerStarted, None);
177
+ t.add_timer_fired(timer_started_event_id, timer_2.to_string());
178
+ t.add_workflow_task_scheduled_and_started();
179
+ t.add_workflow_task_failed_with_failure(
180
+ WorkflowTaskFailedCause::WorkflowWorkerUnhandledFailure,
181
+ Failure {
182
+ message: "boom 2".to_string(),
183
+ ..Default::default()
184
+ },
185
+ );
186
+ t.add_workflow_task_scheduled_and_started();
187
+
188
+ t
189
+ }
190
+
191
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
192
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
193
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
194
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
195
+ /// 5: EVENT_TYPE_ACTIVITY_TASK_SCHEDULED
196
+ /// 6: EVENT_TYPE_ACTIVITY_TASK_STARTED
197
+ /// 7: EVENT_TYPE_ACTIVITY_TASK_COMPLETED
198
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
199
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_STARTED
200
+ pub fn single_activity(activity_id: &str) -> TestHistoryBuilder {
201
+ let mut t = TestHistoryBuilder::default();
202
+ t.add_by_type(EventType::WorkflowExecutionStarted);
203
+ t.add_full_wf_task();
204
+ let scheduled_event_id = t.add_activity_task_scheduled(activity_id);
205
+ let started_event_id = t.add_activity_task_started(scheduled_event_id);
206
+ t.add_activity_task_completed(scheduled_event_id, started_event_id, Default::default());
207
+ t.add_workflow_task_scheduled_and_started();
208
+ t
209
+ }
210
+
211
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
212
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
213
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
214
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
215
+ /// 5: EVENT_TYPE_ACTIVITY_TASK_SCHEDULED
216
+ /// 6: EVENT_TYPE_ACTIVITY_TASK_STARTED
217
+ /// 7: EVENT_TYPE_ACTIVITY_TASK_FAILED
218
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
219
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_STARTED
220
+ pub fn single_failed_activity(activity_id: &str) -> TestHistoryBuilder {
221
+ let mut t = TestHistoryBuilder::default();
222
+ t.add_by_type(EventType::WorkflowExecutionStarted);
223
+ t.add_full_wf_task();
224
+ let scheduled_event_id = t.add_activity_task_scheduled(activity_id);
225
+ let started_event_id = t.add_activity_task_started(scheduled_event_id);
226
+ t.add(
227
+ EventType::ActivityTaskFailed,
228
+ history_event::Attributes::ActivityTaskFailedEventAttributes(
229
+ ActivityTaskFailedEventAttributes {
230
+ scheduled_event_id,
231
+ started_event_id,
232
+ ..Default::default()
233
+ },
234
+ ),
235
+ );
236
+ t.add_workflow_task_scheduled_and_started();
237
+ t
238
+ }
239
+
240
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
241
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
242
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
243
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
244
+ /// 5: EVENT_TYPE_ACTIVITY_TASK_SCHEDULED
245
+ /// 6: EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED
246
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
247
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
248
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
249
+ /// 10: EVENT_TYPE_ACTIVITY_TASK_CANCEL_REQUESTED
250
+ /// 11: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
251
+ pub fn cancel_scheduled_activity(activity_id: &str, signal_id: &str) -> TestHistoryBuilder {
252
+ let mut t = TestHistoryBuilder::default();
253
+ t.add_by_type(EventType::WorkflowExecutionStarted);
254
+ t.add_full_wf_task();
255
+ let scheduled_event_id = t.add_activity_task_scheduled(activity_id);
256
+ t.add_we_signaled(
257
+ signal_id,
258
+ vec![Payload {
259
+ metadata: Default::default(),
260
+ data: b"hello ".to_vec(),
261
+ }],
262
+ );
263
+ t.add_full_wf_task();
264
+ t.add(
265
+ EventType::ActivityTaskCancelRequested,
266
+ history_event::Attributes::ActivityTaskCancelRequestedEventAttributes(
267
+ ActivityTaskCancelRequestedEventAttributes {
268
+ scheduled_event_id,
269
+ ..Default::default()
270
+ },
271
+ ),
272
+ );
273
+ t.add_workflow_execution_completed();
274
+ t
275
+ }
276
+
277
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
278
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
279
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
280
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
281
+ /// 5: EVENT_TYPE_ACTIVITY_TASK_SCHEDULED
282
+ /// 6: EVENT_TYPE_ACTIVITY_TASK_TIMED_OUT
283
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
284
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
285
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
286
+ /// 10: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
287
+ pub fn scheduled_activity_timeout(activity_id: &str) -> TestHistoryBuilder {
288
+ let mut t = TestHistoryBuilder::default();
289
+ t.add_by_type(EventType::WorkflowExecutionStarted);
290
+ t.add_full_wf_task();
291
+ let scheduled_event_id = t.add_activity_task_scheduled(activity_id);
292
+ t.add(
293
+ EventType::ActivityTaskTimedOut,
294
+ history_event::Attributes::ActivityTaskTimedOutEventAttributes(
295
+ ActivityTaskTimedOutEventAttributes {
296
+ scheduled_event_id,
297
+ ..Default::default()
298
+ },
299
+ ),
300
+ );
301
+ t.add_full_wf_task();
302
+ t.add_workflow_execution_completed();
303
+ t
304
+ }
305
+
306
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
307
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
308
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
309
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
310
+ /// 5: EVENT_TYPE_ACTIVITY_TASK_SCHEDULED
311
+ /// 6: EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED
312
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
313
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
314
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
315
+ /// 10: EVENT_TYPE_ACTIVITY_TASK_CANCEL_REQUESTED
316
+ /// 11: EVENT_TYPE_ACTIVITY_TASK_TIMED_OUT
317
+ /// 12: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
318
+ /// 13: EVENT_TYPE_WORKFLOW_TASK_STARTED
319
+ /// 14: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
320
+ /// 15: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
321
+ pub fn scheduled_cancelled_activity_timeout(
322
+ activity_id: &str,
323
+ signal_id: &str,
324
+ ) -> TestHistoryBuilder {
325
+ let mut t = TestHistoryBuilder::default();
326
+ t.add_by_type(EventType::WorkflowExecutionStarted);
327
+ t.add_full_wf_task();
328
+ let scheduled_event_id = t.add_activity_task_scheduled(activity_id);
329
+ t.add_we_signaled(
330
+ signal_id,
331
+ vec![Payload {
332
+ metadata: Default::default(),
333
+ data: b"hello ".to_vec(),
334
+ }],
335
+ );
336
+ t.add_full_wf_task();
337
+ t.add(
338
+ EventType::ActivityTaskCancelRequested,
339
+ history_event::Attributes::ActivityTaskCancelRequestedEventAttributes(
340
+ ActivityTaskCancelRequestedEventAttributes {
341
+ scheduled_event_id,
342
+ ..Default::default()
343
+ },
344
+ ),
345
+ );
346
+ t.add(
347
+ EventType::ActivityTaskTimedOut,
348
+ history_event::Attributes::ActivityTaskTimedOutEventAttributes(
349
+ ActivityTaskTimedOutEventAttributes {
350
+ scheduled_event_id,
351
+ ..Default::default()
352
+ },
353
+ ),
354
+ );
355
+ t.add_full_wf_task();
356
+ t.add_workflow_execution_completed();
357
+ t
358
+ }
359
+
360
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
361
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
362
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
363
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
364
+ /// 5: EVENT_TYPE_ACTIVITY_TASK_SCHEDULED
365
+ /// 6: EVENT_TYPE_ACTIVITY_TASK_STARTED
366
+ /// 7: EVENT_TYPE_ACTIVITY_TASK_TIMED_OUT
367
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
368
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_STARTED
369
+ /// 10: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
370
+ /// 11: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
371
+ pub fn started_activity_timeout(activity_id: &str) -> TestHistoryBuilder {
372
+ let mut t = TestHistoryBuilder::default();
373
+ t.add_by_type(EventType::WorkflowExecutionStarted);
374
+ t.add_full_wf_task();
375
+ let scheduled_event_id = t.add_get_event_id(
376
+ EventType::ActivityTaskScheduled,
377
+ Some(
378
+ history_event::Attributes::ActivityTaskScheduledEventAttributes(
379
+ ActivityTaskScheduledEventAttributes {
380
+ activity_id: activity_id.to_string(),
381
+ ..Default::default()
382
+ },
383
+ ),
384
+ ),
385
+ );
386
+ let started_event_id = t.add_get_event_id(
387
+ EventType::ActivityTaskStarted,
388
+ Some(
389
+ history_event::Attributes::ActivityTaskStartedEventAttributes(
390
+ ActivityTaskStartedEventAttributes {
391
+ scheduled_event_id,
392
+ ..Default::default()
393
+ },
394
+ ),
395
+ ),
396
+ );
397
+ t.add(
398
+ EventType::ActivityTaskTimedOut,
399
+ history_event::Attributes::ActivityTaskTimedOutEventAttributes(
400
+ ActivityTaskTimedOutEventAttributes {
401
+ scheduled_event_id,
402
+ started_event_id,
403
+ ..Default::default()
404
+ },
405
+ ),
406
+ );
407
+ t.add_full_wf_task();
408
+ t.add_workflow_execution_completed();
409
+ t
410
+ }
411
+
412
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
413
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
414
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
415
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
416
+ /// 5: EVENT_TYPE_ACTIVITY_TASK_SCHEDULED
417
+ /// 6: EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED
418
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
419
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
420
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
421
+ /// 11: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
422
+ pub fn cancel_scheduled_activity_abandon(activity_id: &str, signal_id: &str) -> TestHistoryBuilder {
423
+ let mut t = TestHistoryBuilder::default();
424
+ t.add_by_type(EventType::WorkflowExecutionStarted);
425
+ t.add_full_wf_task();
426
+ t.add_get_event_id(
427
+ EventType::ActivityTaskScheduled,
428
+ Some(
429
+ history_event::Attributes::ActivityTaskScheduledEventAttributes(
430
+ ActivityTaskScheduledEventAttributes {
431
+ activity_id: activity_id.to_string(),
432
+ ..Default::default()
433
+ },
434
+ ),
435
+ ),
436
+ );
437
+ t.add_we_signaled(
438
+ signal_id,
439
+ vec![Payload {
440
+ metadata: Default::default(),
441
+ data: b"hello ".to_vec(),
442
+ }],
443
+ );
444
+ t.add_full_wf_task();
445
+ t.add_workflow_execution_completed();
446
+ t
447
+ }
448
+
449
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
450
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
451
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
452
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
453
+ /// 5: EVENT_TYPE_ACTIVITY_TASK_SCHEDULED
454
+ /// 6: EVENT_TYPE_ACTIVITY_TASK_STARTED
455
+ /// 7: EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED
456
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
457
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_STARTED
458
+ /// 10: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
459
+ /// 11: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
460
+ pub fn cancel_started_activity_abandon(activity_id: &str, signal_id: &str) -> TestHistoryBuilder {
461
+ let mut t = TestHistoryBuilder::default();
462
+ t.add_by_type(EventType::WorkflowExecutionStarted);
463
+ t.add_full_wf_task();
464
+ let scheduled_event_id = t.add_get_event_id(
465
+ EventType::ActivityTaskScheduled,
466
+ Some(
467
+ history_event::Attributes::ActivityTaskScheduledEventAttributes(
468
+ ActivityTaskScheduledEventAttributes {
469
+ activity_id: activity_id.to_string(),
470
+ ..Default::default()
471
+ },
472
+ ),
473
+ ),
474
+ );
475
+ t.add_get_event_id(
476
+ EventType::ActivityTaskStarted,
477
+ Some(
478
+ history_event::Attributes::ActivityTaskStartedEventAttributes(
479
+ ActivityTaskStartedEventAttributes {
480
+ scheduled_event_id,
481
+ ..Default::default()
482
+ },
483
+ ),
484
+ ),
485
+ );
486
+ t.add_we_signaled(
487
+ signal_id,
488
+ vec![Payload {
489
+ metadata: Default::default(),
490
+ data: b"hello ".to_vec(),
491
+ }],
492
+ );
493
+ t.add_full_wf_task();
494
+ t.add_workflow_execution_completed();
495
+ t
496
+ }
497
+
498
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
499
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
500
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
501
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
502
+ /// 5: EVENT_TYPE_ACTIVITY_TASK_SCHEDULED
503
+ /// 6: EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED
504
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
505
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
506
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
507
+ /// 10: EVENT_TYPE_ACTIVITY_TASK_CANCEL_REQUESTED
508
+ /// 11: EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED
509
+ /// 12: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
510
+ /// 13: EVENT_TYPE_WORKFLOW_TASK_STARTED
511
+ /// 14: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
512
+ /// 15: EVENT_TYPE_ACTIVITY_TASK_CANCELED
513
+ /// 16: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
514
+ /// 17: EVENT_TYPE_WORKFLOW_TASK_STARTED
515
+ /// 18: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
516
+ /// 19: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
517
+ pub fn cancel_scheduled_activity_with_signal_and_activity_task_cancel(
518
+ activity_id: &str,
519
+ signal_id: &str,
520
+ ) -> TestHistoryBuilder {
521
+ let mut t = TestHistoryBuilder::default();
522
+ t.add_by_type(EventType::WorkflowExecutionStarted);
523
+ t.add_full_wf_task();
524
+ let scheduled_event_id = t.add_get_event_id(
525
+ EventType::ActivityTaskScheduled,
526
+ Some(
527
+ history_event::Attributes::ActivityTaskScheduledEventAttributes(
528
+ ActivityTaskScheduledEventAttributes {
529
+ activity_id: activity_id.to_string(),
530
+ ..Default::default()
531
+ },
532
+ ),
533
+ ),
534
+ );
535
+ t.add_we_signaled(
536
+ signal_id,
537
+ vec![Payload {
538
+ metadata: Default::default(),
539
+ data: b"hello ".to_vec(),
540
+ }],
541
+ );
542
+ t.add_full_wf_task();
543
+ t.add(
544
+ EventType::ActivityTaskCancelRequested,
545
+ history_event::Attributes::ActivityTaskCancelRequestedEventAttributes(
546
+ ActivityTaskCancelRequestedEventAttributes {
547
+ scheduled_event_id,
548
+ ..Default::default()
549
+ },
550
+ ),
551
+ );
552
+ t.add_we_signaled(
553
+ signal_id,
554
+ vec![Payload {
555
+ metadata: Default::default(),
556
+ data: b"hello ".to_vec(),
557
+ }],
558
+ );
559
+ t.add_full_wf_task();
560
+ t.add(
561
+ EventType::ActivityTaskCanceled,
562
+ history_event::Attributes::ActivityTaskCanceledEventAttributes(
563
+ ActivityTaskCanceledEventAttributes {
564
+ scheduled_event_id,
565
+ ..Default::default()
566
+ },
567
+ ),
568
+ );
569
+ t.add_full_wf_task();
570
+ t.add_workflow_execution_completed();
571
+ t
572
+ }
573
+
574
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
575
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
576
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
577
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
578
+ /// 5: EVENT_TYPE_ACTIVITY_TASK_SCHEDULED
579
+ /// 6: EVENT_TYPE_ACTIVITY_TASK_STARTED
580
+ /// 7: EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED
581
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
582
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_STARTED
583
+ /// 10: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
584
+ /// 11: EVENT_TYPE_ACTIVITY_TASK_CANCEL_REQUESTED
585
+ /// 12: EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED
586
+ /// 13: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
587
+ /// 14: EVENT_TYPE_WORKFLOW_TASK_STARTED
588
+ /// 15: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
589
+ /// 16: EVENT_TYPE_ACTIVITY_TASK_CANCELED
590
+ /// 17: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
591
+ /// 18: EVENT_TYPE_WORKFLOW_TASK_STARTED
592
+ /// 19: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
593
+ /// 20: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
594
+ pub fn cancel_started_activity_with_signal_and_activity_task_cancel(
595
+ activity_id: &str,
596
+ signal_id: &str,
597
+ ) -> TestHistoryBuilder {
598
+ let mut t = TestHistoryBuilder::default();
599
+ t.add_by_type(EventType::WorkflowExecutionStarted);
600
+ t.add_full_wf_task();
601
+ let scheduled_event_id = t.add_get_event_id(
602
+ EventType::ActivityTaskScheduled,
603
+ Some(
604
+ history_event::Attributes::ActivityTaskScheduledEventAttributes(
605
+ ActivityTaskScheduledEventAttributes {
606
+ activity_id: activity_id.to_string(),
607
+ ..Default::default()
608
+ },
609
+ ),
610
+ ),
611
+ );
612
+ t.add_get_event_id(
613
+ EventType::ActivityTaskStarted,
614
+ Some(
615
+ history_event::Attributes::ActivityTaskStartedEventAttributes(
616
+ ActivityTaskStartedEventAttributes {
617
+ scheduled_event_id,
618
+ ..Default::default()
619
+ },
620
+ ),
621
+ ),
622
+ );
623
+ t.add_we_signaled(
624
+ signal_id,
625
+ vec![Payload {
626
+ metadata: Default::default(),
627
+ data: b"hello ".to_vec(),
628
+ }],
629
+ );
630
+ t.add_full_wf_task();
631
+ t.add(
632
+ EventType::ActivityTaskCancelRequested,
633
+ history_event::Attributes::ActivityTaskCancelRequestedEventAttributes(
634
+ ActivityTaskCancelRequestedEventAttributes {
635
+ scheduled_event_id,
636
+ ..Default::default()
637
+ },
638
+ ),
639
+ );
640
+ t.add_we_signaled(
641
+ signal_id,
642
+ vec![Payload {
643
+ metadata: Default::default(),
644
+ data: b"hello ".to_vec(),
645
+ }],
646
+ );
647
+ t.add_full_wf_task();
648
+ t.add(
649
+ EventType::ActivityTaskCanceled,
650
+ history_event::Attributes::ActivityTaskCanceledEventAttributes(
651
+ ActivityTaskCanceledEventAttributes {
652
+ scheduled_event_id,
653
+ ..Default::default()
654
+ },
655
+ ),
656
+ );
657
+ t.add_full_wf_task();
658
+ t.add_workflow_execution_completed();
659
+ t
660
+ }
661
+
662
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
663
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
664
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
665
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
666
+ /// 5: EVENT_TYPE_ACTIVITY_TASK_SCHEDULED
667
+ /// 6: EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED
668
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
669
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
670
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
671
+ /// 10: EVENT_TYPE_ACTIVITY_TASK_CANCEL_REQUESTED
672
+ /// 11: EVENT_TYPE_ACTIVITY_TASK_CANCELED
673
+ /// 12: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
674
+ /// 13: EVENT_TYPE_WORKFLOW_TASK_STARTED
675
+ /// 14: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
676
+ /// 15: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
677
+ pub fn cancel_scheduled_activity_with_activity_task_cancel(
678
+ activity_id: &str,
679
+ signal_id: &str,
680
+ ) -> TestHistoryBuilder {
681
+ let mut t = TestHistoryBuilder::default();
682
+ t.add_by_type(EventType::WorkflowExecutionStarted);
683
+ t.add_full_wf_task();
684
+ let scheduled_event_id = t.add_get_event_id(
685
+ EventType::ActivityTaskScheduled,
686
+ Some(
687
+ history_event::Attributes::ActivityTaskScheduledEventAttributes(
688
+ ActivityTaskScheduledEventAttributes {
689
+ activity_id: activity_id.to_string(),
690
+ ..Default::default()
691
+ },
692
+ ),
693
+ ),
694
+ );
695
+ t.add_we_signaled(
696
+ signal_id,
697
+ vec![Payload {
698
+ metadata: Default::default(),
699
+ data: b"hello ".to_vec(),
700
+ }],
701
+ );
702
+ t.add_full_wf_task();
703
+ t.add(
704
+ EventType::ActivityTaskCancelRequested,
705
+ history_event::Attributes::ActivityTaskCancelRequestedEventAttributes(
706
+ ActivityTaskCancelRequestedEventAttributes {
707
+ scheduled_event_id,
708
+ ..Default::default()
709
+ },
710
+ ),
711
+ );
712
+ t.add(
713
+ EventType::ActivityTaskCanceled,
714
+ history_event::Attributes::ActivityTaskCanceledEventAttributes(
715
+ ActivityTaskCanceledEventAttributes {
716
+ scheduled_event_id,
717
+ ..Default::default()
718
+ },
719
+ ),
720
+ );
721
+ t.add_full_wf_task();
722
+ t.add_workflow_execution_completed();
723
+ t
724
+ }
725
+
726
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
727
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
728
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
729
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
730
+ /// 5: EVENT_TYPE_ACTIVITY_TASK_SCHEDULED
731
+ /// 6: EVENT_TYPE_ACTIVITY_TASK_STARTED
732
+ /// 7: EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED
733
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
734
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_STARTED
735
+ /// 10: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
736
+ /// 11: EVENT_TYPE_ACTIVITY_TASK_CANCEL_REQUESTED
737
+ /// 12: EVENT_TYPE_ACTIVITY_TASK_CANCELED
738
+ /// 13: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
739
+ /// 14: EVENT_TYPE_WORKFLOW_TASK_STARTED
740
+ /// 15: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
741
+ /// 16: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
742
+ pub fn cancel_started_activity_with_activity_task_cancel(
743
+ activity_id: &str,
744
+ signal_id: &str,
745
+ ) -> TestHistoryBuilder {
746
+ let mut t = TestHistoryBuilder::default();
747
+ t.add_by_type(EventType::WorkflowExecutionStarted);
748
+ t.add_full_wf_task();
749
+ let scheduled_event_id = t.add_get_event_id(
750
+ EventType::ActivityTaskScheduled,
751
+ Some(
752
+ history_event::Attributes::ActivityTaskScheduledEventAttributes(
753
+ ActivityTaskScheduledEventAttributes {
754
+ activity_id: activity_id.to_string(),
755
+ ..Default::default()
756
+ },
757
+ ),
758
+ ),
759
+ );
760
+ t.add_get_event_id(
761
+ EventType::ActivityTaskStarted,
762
+ Some(
763
+ history_event::Attributes::ActivityTaskStartedEventAttributes(
764
+ ActivityTaskStartedEventAttributes {
765
+ scheduled_event_id,
766
+ ..Default::default()
767
+ },
768
+ ),
769
+ ),
770
+ );
771
+ t.add_we_signaled(
772
+ signal_id,
773
+ vec![Payload {
774
+ metadata: Default::default(),
775
+ data: b"hello ".to_vec(),
776
+ }],
777
+ );
778
+ t.add_full_wf_task();
779
+ t.add(
780
+ EventType::ActivityTaskCancelRequested,
781
+ history_event::Attributes::ActivityTaskCancelRequestedEventAttributes(
782
+ ActivityTaskCancelRequestedEventAttributes {
783
+ scheduled_event_id,
784
+ ..Default::default()
785
+ },
786
+ ),
787
+ );
788
+ t.add(
789
+ EventType::ActivityTaskCanceled,
790
+ history_event::Attributes::ActivityTaskCanceledEventAttributes(
791
+ ActivityTaskCanceledEventAttributes {
792
+ scheduled_event_id,
793
+ ..Default::default()
794
+ },
795
+ ),
796
+ );
797
+ t.add_full_wf_task();
798
+ t.add_workflow_execution_completed();
799
+ t
800
+ }
801
+
802
+ /// First signal's payload is "hello " and second is "world" (no metadata for either)
803
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
804
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
805
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
806
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
807
+ /// 5: EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED
808
+ /// 6: EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED
809
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
810
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
811
+ pub fn two_signals(sig_1_id: &str, sig_2_id: &str) -> TestHistoryBuilder {
812
+ let mut t = TestHistoryBuilder::default();
813
+ t.add_by_type(EventType::WorkflowExecutionStarted);
814
+ t.add_full_wf_task();
815
+ t.add_we_signaled(
816
+ sig_1_id,
817
+ vec![Payload {
818
+ metadata: Default::default(),
819
+ data: b"hello ".to_vec(),
820
+ }],
821
+ );
822
+ t.add_we_signaled(
823
+ sig_2_id,
824
+ vec![Payload {
825
+ metadata: Default::default(),
826
+ data: b"world".to_vec(),
827
+ }],
828
+ );
829
+ t.add_workflow_task_scheduled_and_started();
830
+ t
831
+ }
832
+
833
+ /// Can produce long histories that look like below. `num_tasks` must be > 1.
834
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
835
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
836
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
837
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
838
+ /// --- Repeat num_tasks - 1 (the above is counted) times ---
839
+ /// x: EVENT_TYPE_TIMER_STARTED
840
+ /// x: EVENT_TYPE_TIMER_FIRED
841
+ /// x: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
842
+ /// x: EVENT_TYPE_WORKFLOW_TASK_STARTED
843
+ /// x: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
844
+ /// --- End repeat ---
845
+ /// 4 + (num tasks - 1) * 4 + 1: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
846
+ pub fn long_sequential_timers(num_tasks: usize) -> TestHistoryBuilder {
847
+ let mut t = TestHistoryBuilder::default();
848
+ t.add_by_type(EventType::WorkflowExecutionStarted);
849
+ t.add_full_wf_task();
850
+
851
+ for i in 1..=num_tasks {
852
+ let timer_started_event_id = t.add_get_event_id(EventType::TimerStarted, None);
853
+ t.add_timer_fired(timer_started_event_id, i.to_string());
854
+ t.add_full_wf_task();
855
+ }
856
+
857
+ t.add_workflow_execution_completed();
858
+ t
859
+ }
860
+
861
+ /// Sends 5 large signals per workflow task
862
+ pub fn lots_of_big_signals(num_tasks: usize) -> TestHistoryBuilder {
863
+ let mut t = TestHistoryBuilder::default();
864
+ t.add_by_type(EventType::WorkflowExecutionStarted);
865
+ t.add_full_wf_task();
866
+
867
+ let mut rng = rand::thread_rng();
868
+ for _ in 1..=num_tasks {
869
+ let mut dat = [0_u8; 1024 * 1000];
870
+ for _ in 1..=5 {
871
+ rng.fill_bytes(&mut dat);
872
+ t.add_we_signaled(
873
+ "bigsig",
874
+ vec![Payload {
875
+ metadata: Default::default(),
876
+ data: dat.into(),
877
+ }],
878
+ );
879
+ }
880
+ t.add_full_wf_task();
881
+ }
882
+
883
+ t.add_workflow_execution_completed();
884
+ t
885
+ }
886
+
887
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
888
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
889
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
890
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
891
+ /// 5: EVENT_TYPE_ACTIVITY_TASK_SCHEDULED
892
+ /// 6: EVENT_TYPE_TIMER_STARTED
893
+ /// 7: EVENT_TYPE_TIMER_FIRED
894
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
895
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_STARTED
896
+ /// 10: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
897
+ /// 11: EVENT_TYPE_ACTIVITY_TASK_CANCEL_REQUESTED
898
+ /// 12: EVENT_TYPE_TIMER_STARTED
899
+ /// 13: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
900
+ /// 14: EVENT_TYPE_WORKFLOW_TASK_STARTED
901
+ pub fn unsent_at_cancel_repro() -> TestHistoryBuilder {
902
+ let mut t = TestHistoryBuilder::default();
903
+ t.add_by_type(EventType::WorkflowExecutionStarted);
904
+ t.add_full_wf_task();
905
+
906
+ let scheduled_event_id = t.add_get_event_id(
907
+ EventType::ActivityTaskScheduled,
908
+ Some(
909
+ history_event::Attributes::ActivityTaskScheduledEventAttributes(
910
+ ActivityTaskScheduledEventAttributes {
911
+ activity_id: 1.to_string(),
912
+ ..Default::default()
913
+ },
914
+ ),
915
+ ),
916
+ );
917
+ let timer_started_event_id = t.add_get_event_id(EventType::TimerStarted, None);
918
+ t.add_timer_fired(timer_started_event_id, 1.to_string());
919
+
920
+ t.add_full_wf_task();
921
+ t.add_activity_task_cancel_requested(scheduled_event_id);
922
+ t.add_get_event_id(EventType::TimerStarted, None);
923
+ t.add_workflow_task_scheduled_and_started();
924
+
925
+ t
926
+ }
927
+
928
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
929
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
930
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
931
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
932
+ /// 5: EVENT_TYPE_ACTIVITY_TASK_SCHEDULED
933
+ /// 6: EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED
934
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
935
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
936
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
937
+ /// 10: EVENT_TYPE_ACTIVITY_TASK_CANCEL_REQUESTED
938
+ /// 11: EVENT_TYPE_TIMER_STARTED
939
+ /// 12: EVENT_TYPE_ACTIVITY_TASK_STARTED
940
+ /// 13: EVENT_TYPE_ACTIVITY_TASK_COMPLETED
941
+ /// 14: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
942
+ /// 15: EVENT_TYPE_WORKFLOW_TASK_STARTED
943
+ /// 16: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
944
+ /// 17: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
945
+ pub fn cancel_not_sent_when_also_complete_repro() -> TestHistoryBuilder {
946
+ let mut t = TestHistoryBuilder::default();
947
+ t.add_by_type(EventType::WorkflowExecutionStarted);
948
+ t.add_full_wf_task();
949
+
950
+ let scheduled_event_id = t.add_get_event_id(
951
+ EventType::ActivityTaskScheduled,
952
+ Some(
953
+ history_event::Attributes::ActivityTaskScheduledEventAttributes(
954
+ ActivityTaskScheduledEventAttributes {
955
+ activity_id: "act-1".to_string(),
956
+ ..Default::default()
957
+ },
958
+ ),
959
+ ),
960
+ );
961
+ t.add_we_signaled(
962
+ "sig-1",
963
+ vec![Payload {
964
+ metadata: Default::default(),
965
+ data: b"hello ".to_vec(),
966
+ }],
967
+ );
968
+ t.add_full_wf_task();
969
+ t.add_activity_task_cancel_requested(scheduled_event_id);
970
+ t.add_get_event_id(EventType::TimerStarted, None);
971
+ let started_event_id = t.add_get_event_id(
972
+ EventType::ActivityTaskStarted,
973
+ Some(
974
+ history_event::Attributes::ActivityTaskStartedEventAttributes(
975
+ ActivityTaskStartedEventAttributes {
976
+ scheduled_event_id,
977
+ ..Default::default()
978
+ },
979
+ ),
980
+ ),
981
+ );
982
+ t.add(
983
+ EventType::ActivityTaskCompleted,
984
+ history_event::Attributes::ActivityTaskCompletedEventAttributes(
985
+ ActivityTaskCompletedEventAttributes {
986
+ scheduled_event_id,
987
+ started_event_id,
988
+ ..Default::default()
989
+ },
990
+ ),
991
+ );
992
+ t.add_full_wf_task();
993
+ t.add_workflow_execution_completed();
994
+
995
+ t
996
+ }
997
+
998
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
999
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1000
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
1001
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1002
+ /// 5: EVENT_TYPE_ACTIVITY_TASK_SCHEDULED
1003
+ /// 6: EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED (at-started)
1004
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1005
+ /// 8: EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED (at-completed)
1006
+ /// 9: EVENT_TYPE_ACTIVITY_TASK_STARTED
1007
+ /// 10: EVENT_TYPE_ACTIVITY_TASK_COMPLETED
1008
+ /// 11: EVENT_TYPE_WORKFLOW_TASK_STARTED
1009
+ /// 12: EVENT_TYPE_WORKFLOW_TASK_TIMED_OUT
1010
+ /// 13: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1011
+ /// 14: EVENT_TYPE_WORKFLOW_TASK_STARTED
1012
+ /// 15: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1013
+ /// 16: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
1014
+ pub fn wft_timeout_repro() -> TestHistoryBuilder {
1015
+ let mut t = TestHistoryBuilder::default();
1016
+ t.add_by_type(EventType::WorkflowExecutionStarted);
1017
+ t.add_full_wf_task();
1018
+ let scheduled_event_id = t.add_get_event_id(
1019
+ EventType::ActivityTaskScheduled,
1020
+ Some(
1021
+ history_event::Attributes::ActivityTaskScheduledEventAttributes(
1022
+ ActivityTaskScheduledEventAttributes {
1023
+ activity_id: "act-1".to_string(),
1024
+ ..Default::default()
1025
+ },
1026
+ ),
1027
+ ),
1028
+ );
1029
+ t.add_we_signaled(
1030
+ "at-started",
1031
+ vec![Payload {
1032
+ metadata: Default::default(),
1033
+ data: b"hello ".to_vec(),
1034
+ }],
1035
+ );
1036
+ t.add_workflow_task_scheduled();
1037
+ t.add_we_signaled(
1038
+ "at-completed",
1039
+ vec![Payload {
1040
+ metadata: Default::default(),
1041
+ data: b"hello ".to_vec(),
1042
+ }],
1043
+ );
1044
+ let started_event_id = t.add_get_event_id(
1045
+ EventType::ActivityTaskStarted,
1046
+ Some(
1047
+ history_event::Attributes::ActivityTaskStartedEventAttributes(
1048
+ ActivityTaskStartedEventAttributes {
1049
+ scheduled_event_id,
1050
+ ..Default::default()
1051
+ },
1052
+ ),
1053
+ ),
1054
+ );
1055
+ t.add(
1056
+ EventType::ActivityTaskCompleted,
1057
+ history_event::Attributes::ActivityTaskCompletedEventAttributes(
1058
+ ActivityTaskCompletedEventAttributes {
1059
+ scheduled_event_id,
1060
+ started_event_id,
1061
+ ..Default::default()
1062
+ },
1063
+ ),
1064
+ );
1065
+ t.add_workflow_task_started();
1066
+ t.add_workflow_task_timed_out();
1067
+ t.add_full_wf_task();
1068
+ t.add_workflow_execution_completed();
1069
+
1070
+ t
1071
+ }
1072
+
1073
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
1074
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1075
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
1076
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1077
+ /// 5: EVENT_TYPE_TIMER_STARTED
1078
+ /// 6: EVENT_TYPE_TIMER_FIRED
1079
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1080
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
1081
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1082
+ /// 10: EVENT_TYPE_WORKFLOW_EXECUTION_CONTINUED_AS_NEW
1083
+ pub fn timer_then_continue_as_new(timer_id: &str) -> TestHistoryBuilder {
1084
+ let mut t = TestHistoryBuilder::default();
1085
+ t.add_by_type(EventType::WorkflowExecutionStarted);
1086
+ t.add_full_wf_task();
1087
+ let timer_started_event_id = t.add_get_event_id(EventType::TimerStarted, None);
1088
+ t.add_timer_fired(timer_started_event_id, timer_id.to_string());
1089
+ t.add_full_wf_task();
1090
+ t.add_continued_as_new();
1091
+ t
1092
+ }
1093
+
1094
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
1095
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1096
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
1097
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1098
+ /// 5: EVENT_TYPE_TIMER_STARTED
1099
+ /// 6: EVENT_TYPE_TIMER_FIRED
1100
+ /// 7: EVENT_TYPE_WORKFLOW_EXECUTION_CANCEL_REQUESTED
1101
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1102
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_STARTED
1103
+ /// 10: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1104
+ /// 11: EVENT_TYPE_WORKFLOW_EXECUTION_CANCELED
1105
+ pub fn timer_wf_cancel_req_cancelled(timer_id: &str) -> TestHistoryBuilder {
1106
+ timer_cancel_req_then(timer_id, TestHistoryBuilder::add_cancelled)
1107
+ }
1108
+ pub fn timer_wf_cancel_req_completed(timer_id: &str) -> TestHistoryBuilder {
1109
+ timer_cancel_req_then(
1110
+ timer_id,
1111
+ TestHistoryBuilder::add_workflow_execution_completed,
1112
+ )
1113
+ }
1114
+ pub fn timer_wf_cancel_req_failed(timer_id: &str) -> TestHistoryBuilder {
1115
+ timer_cancel_req_then(timer_id, TestHistoryBuilder::add_workflow_execution_failed)
1116
+ }
1117
+
1118
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
1119
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1120
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
1121
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1122
+ /// 5: EVENT_TYPE_TIMER_STARTED
1123
+ /// 6: EVENT_TYPE_TIMER_FIRED
1124
+ /// 7: EVENT_TYPE_WORKFLOW_EXECUTION_CANCEL_REQUESTED
1125
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1126
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_STARTED
1127
+ /// 10: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1128
+ /// 11: EVENT_TYPE_TIMER_STARTED
1129
+ /// 12: EVENT_TYPE_TIMER_FIRED
1130
+ /// 13: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1131
+ /// 14: EVENT_TYPE_WORKFLOW_TASK_STARTED
1132
+ /// 15: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1133
+ /// 16: EVENT_TYPE_WORKFLOW_EXECUTION_CANCELED
1134
+ pub fn timer_wf_cancel_req_do_another_timer_then_cancelled() -> TestHistoryBuilder {
1135
+ timer_cancel_req_then("1", |t| {
1136
+ let timer_started_event_id = t.add_get_event_id(EventType::TimerStarted, None);
1137
+ t.add_timer_fired(timer_started_event_id, "2".to_string());
1138
+ t.add_full_wf_task();
1139
+ t.add_cancelled();
1140
+ })
1141
+ }
1142
+
1143
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
1144
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1145
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
1146
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1147
+ /// 5: EVENT_TYPE_TIMER_STARTED
1148
+ /// 6: EVENT_TYPE_TIMER_FIRED
1149
+ /// 7: EVENT_TYPE_WORKFLOW_EXECUTION_CANCEL_REQUESTED
1150
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1151
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_STARTED
1152
+ /// 10: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1153
+ /// xxxxx
1154
+ fn timer_cancel_req_then(
1155
+ timer_id: &str,
1156
+ end_action: impl Fn(&mut TestHistoryBuilder),
1157
+ ) -> TestHistoryBuilder {
1158
+ let mut t = TestHistoryBuilder::default();
1159
+ t.add_by_type(EventType::WorkflowExecutionStarted);
1160
+ t.add_full_wf_task();
1161
+ let timer_started_event_id = t.add_get_event_id(EventType::TimerStarted, None);
1162
+ t.add_timer_fired(timer_started_event_id, timer_id.to_string());
1163
+ t.add_cancel_requested();
1164
+ t.add_full_wf_task();
1165
+ end_action(&mut t);
1166
+ t
1167
+ }
1168
+
1169
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
1170
+ /// 2: EVENT_TYPE_WORKFLOW_EXECUTION_CANCEL_REQUESTED
1171
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1172
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_STARTED
1173
+ /// 5: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1174
+ /// 6: EVENT_TYPE_WORKFLOW_EXECUTION_CANCELED
1175
+ pub fn immediate_wf_cancel() -> TestHistoryBuilder {
1176
+ let mut t = TestHistoryBuilder::default();
1177
+ t.add_by_type(EventType::WorkflowExecutionStarted);
1178
+ t.add_cancel_requested();
1179
+ t.add_full_wf_task();
1180
+ t.add_cancelled();
1181
+ t
1182
+ }
1183
+
1184
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
1185
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1186
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
1187
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1188
+ /// 5: EVENT_TYPE_ACTIVITY_TASK_SCHEDULED
1189
+ /// 6: EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED
1190
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1191
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
1192
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1193
+ /// 10: EVENT_TYPE_ACTIVITY_TASK_CANCEL_REQUESTED
1194
+ /// 11: EVENT_TYPE_TIMER_STARTED
1195
+ /// 12: EVENT_TYPE_ACTIVITY_TASK_STARTED
1196
+ /// 13: EVENT_TYPE_ACTIVITY_TASK_TIMED_OUT
1197
+ /// 14: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1198
+ /// 15: EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED
1199
+ /// 16: EVENT_TYPE_WORKFLOW_TASK_STARTED
1200
+ /// 17: EVENT_TYPE_WORKFLOW_TASK_TIMED_OUT
1201
+ /// 18: EVENT_TYPE_TIMER_FIRED
1202
+ /// 19: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1203
+ /// 20: EVENT_TYPE_WORKFLOW_TASK_STARTED
1204
+ /// 21: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1205
+ /// 22: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
1206
+ pub fn activity_double_resolve_repro() -> TestHistoryBuilder {
1207
+ let mut t = TestHistoryBuilder::default();
1208
+ t.add_by_type(EventType::WorkflowExecutionStarted);
1209
+ t.add_full_wf_task();
1210
+ let act_sched_id = t.add_get_event_id(
1211
+ EventType::ActivityTaskScheduled,
1212
+ Some(
1213
+ history_event::Attributes::ActivityTaskScheduledEventAttributes(
1214
+ ActivityTaskScheduledEventAttributes {
1215
+ activity_id: "1".to_string(),
1216
+ ..Default::default()
1217
+ },
1218
+ ),
1219
+ ),
1220
+ );
1221
+ t.add_we_signaled("sig1", vec![]);
1222
+ t.add_full_wf_task();
1223
+ t.add_activity_task_cancel_requested(act_sched_id);
1224
+ let timer_started_event_id = t.add_get_event_id(EventType::TimerStarted, None);
1225
+ t.add_get_event_id(
1226
+ EventType::ActivityTaskStarted,
1227
+ Some(
1228
+ history_event::Attributes::ActivityTaskStartedEventAttributes(
1229
+ ActivityTaskStartedEventAttributes {
1230
+ scheduled_event_id: act_sched_id,
1231
+ ..Default::default()
1232
+ },
1233
+ ),
1234
+ ),
1235
+ );
1236
+ t.add(
1237
+ EventType::ActivityTaskTimedOut,
1238
+ history_event::Attributes::ActivityTaskTimedOutEventAttributes(
1239
+ ActivityTaskTimedOutEventAttributes {
1240
+ scheduled_event_id: act_sched_id,
1241
+ ..Default::default()
1242
+ },
1243
+ ),
1244
+ );
1245
+ t.add_workflow_task_scheduled();
1246
+ t.add_we_signaled("sig2", vec![]);
1247
+ t.add_workflow_task_started();
1248
+ t.add_workflow_task_timed_out();
1249
+ t.add_timer_fired(timer_started_event_id, "2".to_string());
1250
+ t.add_full_wf_task();
1251
+ t.add_workflow_execution_completed();
1252
+
1253
+ t
1254
+ }
1255
+
1256
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
1257
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1258
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
1259
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1260
+ /// 5: EVENT_TYPE_START_CHILD_WORKFLOW_EXECUTION_INITIATED
1261
+ /// 6: EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_STARTED
1262
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1263
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
1264
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1265
+ fn start_child_wf_preamble(child_wf_id: &str) -> (TestHistoryBuilder, i64, i64) {
1266
+ let mut t = TestHistoryBuilder::default();
1267
+ t.add_by_type(EventType::WorkflowExecutionStarted);
1268
+ t.add_full_wf_task();
1269
+ let initiated_event_id = t.add_get_event_id(
1270
+ EventType::StartChildWorkflowExecutionInitiated,
1271
+ Some(
1272
+ history_event::Attributes::StartChildWorkflowExecutionInitiatedEventAttributes(
1273
+ StartChildWorkflowExecutionInitiatedEventAttributes {
1274
+ workflow_id: child_wf_id.to_owned(),
1275
+ ..Default::default()
1276
+ },
1277
+ ),
1278
+ ),
1279
+ );
1280
+ let started_event_id = t.add_get_event_id(
1281
+ EventType::ChildWorkflowExecutionStarted,
1282
+ Some(
1283
+ history_event::Attributes::ChildWorkflowExecutionStartedEventAttributes(
1284
+ ChildWorkflowExecutionStartedEventAttributes {
1285
+ initiated_event_id,
1286
+ workflow_execution: Some(WorkflowExecution {
1287
+ workflow_id: child_wf_id.to_owned(),
1288
+ ..Default::default()
1289
+ }),
1290
+ ..Default::default()
1291
+ },
1292
+ ),
1293
+ ),
1294
+ );
1295
+ t.add_full_wf_task();
1296
+ (t, initiated_event_id, started_event_id)
1297
+ }
1298
+
1299
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
1300
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1301
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
1302
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1303
+ /// 5: EVENT_TYPE_START_CHILD_WORKFLOW_EXECUTION_INITIATED
1304
+ /// 6: EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_STARTED
1305
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1306
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
1307
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1308
+ /// 10: EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_COMPLETED
1309
+ /// 11: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1310
+ /// 12: EVENT_TYPE_WORKFLOW_TASK_STARTED
1311
+ /// 13: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1312
+ /// 14: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
1313
+ pub fn single_child_workflow(child_wf_id: &str) -> TestHistoryBuilder {
1314
+ let (mut t, initiated_event_id, started_event_id) = start_child_wf_preamble(child_wf_id);
1315
+ t.add(
1316
+ EventType::ChildWorkflowExecutionCompleted,
1317
+ history_event::Attributes::ChildWorkflowExecutionCompletedEventAttributes(
1318
+ ChildWorkflowExecutionCompletedEventAttributes {
1319
+ initiated_event_id,
1320
+ started_event_id,
1321
+ // todo add the result payload
1322
+ ..Default::default()
1323
+ },
1324
+ ),
1325
+ );
1326
+ t.add_full_wf_task();
1327
+ t.add_workflow_execution_completed();
1328
+ t
1329
+ }
1330
+
1331
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
1332
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1333
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
1334
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1335
+ /// 5: EVENT_TYPE_START_CHILD_WORKFLOW_EXECUTION_INITIATED
1336
+ /// 6: EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_STARTED
1337
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1338
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
1339
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1340
+ /// 10: EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_FAILED
1341
+ /// 11: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1342
+ /// 12: EVENT_TYPE_WORKFLOW_TASK_STARTED
1343
+ /// 13: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1344
+ /// 14: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
1345
+ pub fn single_child_workflow_fail(child_wf_id: &str) -> TestHistoryBuilder {
1346
+ let (mut t, initiated_event_id, started_event_id) = start_child_wf_preamble(child_wf_id);
1347
+ t.add(
1348
+ EventType::ChildWorkflowExecutionFailed,
1349
+ history_event::Attributes::ChildWorkflowExecutionFailedEventAttributes(
1350
+ ChildWorkflowExecutionFailedEventAttributes {
1351
+ initiated_event_id,
1352
+ started_event_id,
1353
+ ..Default::default()
1354
+ },
1355
+ ),
1356
+ );
1357
+ t.add_full_wf_task();
1358
+ t.add_workflow_execution_completed();
1359
+ t
1360
+ }
1361
+
1362
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
1363
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1364
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
1365
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1366
+ /// 5: EVENT_TYPE_START_CHILD_WORKFLOW_EXECUTION_INITIATED
1367
+ /// 6: EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_STARTED
1368
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1369
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
1370
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1371
+ /// 10: EVENT_TYPE_SIGNAL_WORKFLOW_EXECUTION_INITIATED
1372
+ /// 11: EVENT_TYPE_EXTERNAL_WORKFLOW_EXECUTION_SIGNALED
1373
+ /// 12: EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_COMPLETED
1374
+ /// 13: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1375
+ /// 14: EVENT_TYPE_WORKFLOW_TASK_STARTED
1376
+ /// 15: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1377
+ /// 16: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
1378
+ pub fn single_child_workflow_signaled(child_wf_id: &str, signame: &str) -> TestHistoryBuilder {
1379
+ let (mut t, initiated_event_id, started_event_id) = start_child_wf_preamble(child_wf_id);
1380
+ let id = t.add_signal_wf(signame, "fake_wid", "fake_rid");
1381
+ t.add_external_signal_completed(id);
1382
+ t.add(
1383
+ EventType::ChildWorkflowExecutionCompleted,
1384
+ history_event::Attributes::ChildWorkflowExecutionCompletedEventAttributes(
1385
+ ChildWorkflowExecutionCompletedEventAttributes {
1386
+ initiated_event_id,
1387
+ started_event_id,
1388
+ ..Default::default()
1389
+ },
1390
+ ),
1391
+ );
1392
+ t.add_full_wf_task();
1393
+ t.add_workflow_execution_completed();
1394
+ t
1395
+ }
1396
+
1397
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
1398
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1399
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
1400
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1401
+ /// 5: EVENT_TYPE_START_CHILD_WORKFLOW_EXECUTION_INITIATED
1402
+ /// 6: EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_STARTED
1403
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1404
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
1405
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1406
+ /// 10: EVENT_TYPE_REQUEST_CANCEL_EXTERNAL_WORKFLOW_EXECUTION_INITIATED
1407
+ /// 11: EVENT_TYPE_EXTERNAL_WORKFLOW_EXECUTION_CANCEL_REQUESTED
1408
+ /// 12: EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_CANCELLED
1409
+ /// 13: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1410
+ /// 14: EVENT_TYPE_WORKFLOW_TASK_STARTED
1411
+ /// 15: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1412
+ /// 16: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
1413
+ pub fn single_child_workflow_cancelled(child_wf_id: &str) -> TestHistoryBuilder {
1414
+ let (mut t, initiated_event_id, started_event_id) = start_child_wf_preamble(child_wf_id);
1415
+ let id = t.add_cancel_external_wf(NamespacedWorkflowExecution {
1416
+ workflow_id: child_wf_id.to_string(),
1417
+ ..Default::default()
1418
+ });
1419
+ t.add_cancel_external_wf_completed(id);
1420
+ t.add(
1421
+ EventType::ChildWorkflowExecutionCanceled,
1422
+ history_event::Attributes::ChildWorkflowExecutionCanceledEventAttributes(
1423
+ ChildWorkflowExecutionCanceledEventAttributes {
1424
+ initiated_event_id,
1425
+ started_event_id,
1426
+ ..Default::default()
1427
+ },
1428
+ ),
1429
+ );
1430
+ t.add_full_wf_task();
1431
+ t.add_workflow_execution_completed();
1432
+ t
1433
+ }
1434
+
1435
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
1436
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1437
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
1438
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1439
+ /// 5: EVENT_TYPE_START_CHILD_WORKFLOW_EXECUTION_INITIATED
1440
+ /// 6: EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_STARTED
1441
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1442
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
1443
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1444
+ /// 10: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
1445
+ pub fn single_child_workflow_abandon_cancelled(child_wf_id: &str) -> TestHistoryBuilder {
1446
+ let (mut t, _, _) = start_child_wf_preamble(child_wf_id);
1447
+ t.add_workflow_execution_completed();
1448
+ t
1449
+ }
1450
+
1451
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
1452
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1453
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
1454
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1455
+ /// 5: EVENT_TYPE_START_CHILD_WORKFLOW_EXECUTION_INITIATED
1456
+ /// 6: EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_STARTED
1457
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1458
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_STARTED
1459
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1460
+ /// 10: EVENT_TYPE_REQUEST_CANCEL_EXTERNAL_WORKFLOW_EXECUTION_INITIATED
1461
+ /// 11: EVENT_TYPE_EXTERNAL_WORKFLOW_EXECUTION_CANCEL_REQUESTED
1462
+ /// 12: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1463
+ /// 13: EVENT_TYPE_WORKFLOW_TASK_STARTED
1464
+ /// 14: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1465
+ /// 15: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
1466
+ pub fn single_child_workflow_try_cancelled(child_wf_id: &str) -> TestHistoryBuilder {
1467
+ let (mut t, _, _) = start_child_wf_preamble(child_wf_id);
1468
+ let id = t.add_cancel_external_wf(NamespacedWorkflowExecution {
1469
+ workflow_id: child_wf_id.to_string(),
1470
+ ..Default::default()
1471
+ });
1472
+ t.add_cancel_external_wf_completed(id);
1473
+ t.add_full_wf_task();
1474
+ t.add_workflow_execution_completed();
1475
+ t
1476
+ }
1477
+
1478
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
1479
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1480
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
1481
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1482
+ /// 5: EVENT_TYPE_START_CHILD_WORKFLOW_EXECUTION_INITIATED
1483
+ /// 5: EVENT_TYPE_START_CHILD_WORKFLOW_EXECUTION_FAILED
1484
+ /// 6: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1485
+ /// 7: EVENT_TYPE_WORKFLOW_TASK_STARTED
1486
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1487
+ /// 9: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
1488
+ pub fn single_child_workflow_start_fail(child_wf_id: &str) -> TestHistoryBuilder {
1489
+ let mut t = TestHistoryBuilder::default();
1490
+ t.add_by_type(EventType::WorkflowExecutionStarted);
1491
+ t.add_full_wf_task();
1492
+ let initiated_event_id = t.add_get_event_id(
1493
+ EventType::StartChildWorkflowExecutionInitiated,
1494
+ Some(
1495
+ history_event::Attributes::StartChildWorkflowExecutionInitiatedEventAttributes(
1496
+ StartChildWorkflowExecutionInitiatedEventAttributes {
1497
+ workflow_id: child_wf_id.to_owned(),
1498
+ ..Default::default()
1499
+ },
1500
+ ),
1501
+ ),
1502
+ );
1503
+ t.add_get_event_id(
1504
+ EventType::StartChildWorkflowExecutionFailed,
1505
+ Some(
1506
+ history_event::Attributes::StartChildWorkflowExecutionFailedEventAttributes(
1507
+ StartChildWorkflowExecutionFailedEventAttributes {
1508
+ workflow_id: child_wf_id.to_owned(),
1509
+ initiated_event_id,
1510
+ cause: StartChildWorkflowExecutionFailedCause::WorkflowAlreadyExists as i32,
1511
+ ..Default::default()
1512
+ },
1513
+ ),
1514
+ ),
1515
+ );
1516
+ t.add_full_wf_task();
1517
+ t.add_workflow_execution_completed();
1518
+ t
1519
+ }
1520
+
1521
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
1522
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1523
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
1524
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1525
+ /// 5: EVENT_TYPE_MARKER_RECORDED (la result)
1526
+ /// 7: EVENT_TYPE_MARKER_RECORDED (la result)
1527
+ /// 8: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
1528
+ pub fn two_local_activities_one_wft(parallel: bool) -> TestHistoryBuilder {
1529
+ let mut t = TestHistoryBuilder::default();
1530
+ t.add_by_type(EventType::WorkflowExecutionStarted);
1531
+ t.add_full_wf_task();
1532
+ let mut start_time = t.wft_start_time();
1533
+ start_time.seconds += 1;
1534
+ t.add_local_activity_result_marker_with_time(1, "1", b"hi".into(), start_time.clone());
1535
+ if !parallel {
1536
+ start_time.seconds += 1;
1537
+ }
1538
+ t.add_local_activity_result_marker_with_time(2, "2", b"hi2".into(), start_time);
1539
+ t.add_workflow_execution_completed();
1540
+ t
1541
+ }
1542
+
1543
+ /// 1: EVENT_TYPE_WORKFLOW_EXECUTION_STARTED
1544
+ /// 2: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1545
+ /// 3: EVENT_TYPE_WORKFLOW_TASK_STARTED
1546
+ /// 4: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1547
+ /// 5: EVENT_TYPE_MARKER_RECORDED (la result)
1548
+ /// 6: EVENT_TYPE_TIMER_STARTED
1549
+ /// 7: EVENT_TYPE_TIMER_FIRED
1550
+ /// 8: EVENT_TYPE_WORKFLOW_TASK_SCHEDULED
1551
+ /// 9: EVENT_TYPE_WORKFLOW_TASK_STARTED
1552
+ /// 10: EVENT_TYPE_WORKFLOW_TASK_COMPLETED
1553
+ /// 11: EVENT_TYPE_MARKER_RECORDED (la result)
1554
+ /// 12: EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
1555
+ pub fn two_local_activities_separated_by_timer() -> TestHistoryBuilder {
1556
+ let mut t = TestHistoryBuilder::default();
1557
+ t.add_by_type(EventType::WorkflowExecutionStarted);
1558
+ t.add_full_wf_task();
1559
+ t.add_local_activity_result_marker(1, "1", b"hi".into());
1560
+ let timer_started_event_id = t.add_get_event_id(EventType::TimerStarted, None);
1561
+ t.add_timer_fired(timer_started_event_id, "1".to_string());
1562
+ t.add_full_wf_task();
1563
+ t.add_local_activity_result_marker(2, "2", b"hi2".into());
1564
+ t.add_workflow_execution_completed();
1565
+ t
1566
+ }
1567
+
1568
+ /// Useful for one-of needs to write a crafted history to a file. Writes it as serialized proto
1569
+ /// binary to the provided path.
1570
+ pub fn write_hist_to_binfile(
1571
+ thb: &TestHistoryBuilder,
1572
+ file_path: PathBuf,
1573
+ ) -> Result<(), anyhow::Error> {
1574
+ let as_complete_hist: History = thb.get_full_history_info()?.into();
1575
+ let serialized = as_complete_hist.encode_to_vec();
1576
+ let mut file = File::create(file_path)?;
1577
+ file.write_all(&serialized)?;
1578
+ Ok(())
1579
+ }