temporalio 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -0
  3. data/LICENSE +20 -0
  4. data/README.md +130 -0
  5. data/bridge/Cargo.lock +2865 -0
  6. data/bridge/Cargo.toml +26 -0
  7. data/bridge/sdk-core/ARCHITECTURE.md +76 -0
  8. data/bridge/sdk-core/Cargo.lock +2606 -0
  9. data/bridge/sdk-core/Cargo.toml +2 -0
  10. data/bridge/sdk-core/LICENSE.txt +23 -0
  11. data/bridge/sdk-core/README.md +107 -0
  12. data/bridge/sdk-core/arch_docs/diagrams/README.md +10 -0
  13. data/bridge/sdk-core/arch_docs/diagrams/sticky_queues.puml +40 -0
  14. data/bridge/sdk-core/arch_docs/diagrams/workflow_internals.svg +1 -0
  15. data/bridge/sdk-core/arch_docs/sticky_queues.md +51 -0
  16. data/bridge/sdk-core/bridge-ffi/Cargo.toml +24 -0
  17. data/bridge/sdk-core/bridge-ffi/LICENSE.txt +23 -0
  18. data/bridge/sdk-core/bridge-ffi/build.rs +25 -0
  19. data/bridge/sdk-core/bridge-ffi/include/sdk-core-bridge.h +249 -0
  20. data/bridge/sdk-core/bridge-ffi/src/lib.rs +825 -0
  21. data/bridge/sdk-core/bridge-ffi/src/wrappers.rs +211 -0
  22. data/bridge/sdk-core/client/Cargo.toml +40 -0
  23. data/bridge/sdk-core/client/LICENSE.txt +23 -0
  24. data/bridge/sdk-core/client/src/lib.rs +1294 -0
  25. data/bridge/sdk-core/client/src/metrics.rs +165 -0
  26. data/bridge/sdk-core/client/src/raw.rs +931 -0
  27. data/bridge/sdk-core/client/src/retry.rs +674 -0
  28. data/bridge/sdk-core/client/src/workflow_handle/mod.rs +185 -0
  29. data/bridge/sdk-core/core/Cargo.toml +116 -0
  30. data/bridge/sdk-core/core/LICENSE.txt +23 -0
  31. data/bridge/sdk-core/core/benches/workflow_replay.rs +73 -0
  32. data/bridge/sdk-core/core/src/abstractions.rs +166 -0
  33. data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +911 -0
  34. data/bridge/sdk-core/core/src/core_tests/child_workflows.rs +221 -0
  35. data/bridge/sdk-core/core/src/core_tests/determinism.rs +107 -0
  36. data/bridge/sdk-core/core/src/core_tests/local_activities.rs +515 -0
  37. data/bridge/sdk-core/core/src/core_tests/mod.rs +100 -0
  38. data/bridge/sdk-core/core/src/core_tests/queries.rs +736 -0
  39. data/bridge/sdk-core/core/src/core_tests/replay_flag.rs +65 -0
  40. data/bridge/sdk-core/core/src/core_tests/workers.rs +259 -0
  41. data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +124 -0
  42. data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +2070 -0
  43. data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +515 -0
  44. data/bridge/sdk-core/core/src/lib.rs +175 -0
  45. data/bridge/sdk-core/core/src/log_export.rs +62 -0
  46. data/bridge/sdk-core/core/src/pollers/mod.rs +54 -0
  47. data/bridge/sdk-core/core/src/pollers/poll_buffer.rs +297 -0
  48. data/bridge/sdk-core/core/src/protosext/mod.rs +428 -0
  49. data/bridge/sdk-core/core/src/replay/mod.rs +71 -0
  50. data/bridge/sdk-core/core/src/retry_logic.rs +202 -0
  51. data/bridge/sdk-core/core/src/telemetry/metrics.rs +383 -0
  52. data/bridge/sdk-core/core/src/telemetry/mod.rs +412 -0
  53. data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +77 -0
  54. data/bridge/sdk-core/core/src/test_help/mod.rs +875 -0
  55. data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +580 -0
  56. data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +1042 -0
  57. data/bridge/sdk-core/core/src/worker/activities.rs +464 -0
  58. data/bridge/sdk-core/core/src/worker/client/mocks.rs +87 -0
  59. data/bridge/sdk-core/core/src/worker/client.rs +347 -0
  60. data/bridge/sdk-core/core/src/worker/mod.rs +566 -0
  61. data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +37 -0
  62. data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +110 -0
  63. data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +458 -0
  64. data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +911 -0
  65. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +298 -0
  66. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +171 -0
  67. data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +860 -0
  68. data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +140 -0
  69. data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +161 -0
  70. data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +133 -0
  71. data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +1448 -0
  72. data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +342 -0
  73. data/bridge/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +127 -0
  74. data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +712 -0
  75. data/bridge/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +71 -0
  76. data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +443 -0
  77. data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +439 -0
  78. data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +169 -0
  79. data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +246 -0
  80. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +96 -0
  81. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +1184 -0
  82. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +277 -0
  83. data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +198 -0
  84. data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +647 -0
  85. data/bridge/sdk-core/core/src/worker/workflow/mod.rs +1143 -0
  86. data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +145 -0
  87. data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +88 -0
  88. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +940 -0
  89. data/bridge/sdk-core/core-api/Cargo.toml +31 -0
  90. data/bridge/sdk-core/core-api/LICENSE.txt +23 -0
  91. data/bridge/sdk-core/core-api/src/errors.rs +95 -0
  92. data/bridge/sdk-core/core-api/src/lib.rs +151 -0
  93. data/bridge/sdk-core/core-api/src/worker.rs +135 -0
  94. data/bridge/sdk-core/etc/deps.svg +187 -0
  95. data/bridge/sdk-core/etc/dynamic-config.yaml +2 -0
  96. data/bridge/sdk-core/etc/otel-collector-config.yaml +36 -0
  97. data/bridge/sdk-core/etc/prometheus.yaml +6 -0
  98. data/bridge/sdk-core/fsm/Cargo.toml +18 -0
  99. data/bridge/sdk-core/fsm/LICENSE.txt +23 -0
  100. data/bridge/sdk-core/fsm/README.md +3 -0
  101. data/bridge/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +27 -0
  102. data/bridge/sdk-core/fsm/rustfsm_procmacro/LICENSE.txt +23 -0
  103. data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +647 -0
  104. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/progress.rs +8 -0
  105. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.rs +18 -0
  106. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.stderr +12 -0
  107. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dynamic_dest_pass.rs +41 -0
  108. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.rs +14 -0
  109. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.stderr +11 -0
  110. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_arg_pass.rs +32 -0
  111. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_pass.rs +31 -0
  112. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/medium_complex_pass.rs +46 -0
  113. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.rs +29 -0
  114. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +12 -0
  115. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/simple_pass.rs +32 -0
  116. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.rs +18 -0
  117. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.stderr +5 -0
  118. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.rs +11 -0
  119. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.stderr +5 -0
  120. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.rs +11 -0
  121. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.stderr +5 -0
  122. data/bridge/sdk-core/fsm/rustfsm_trait/Cargo.toml +14 -0
  123. data/bridge/sdk-core/fsm/rustfsm_trait/LICENSE.txt +23 -0
  124. data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +249 -0
  125. data/bridge/sdk-core/fsm/src/lib.rs +2 -0
  126. data/bridge/sdk-core/histories/fail_wf_task.bin +0 -0
  127. data/bridge/sdk-core/histories/timer_workflow_history.bin +0 -0
  128. data/bridge/sdk-core/integ-with-otel.sh +7 -0
  129. data/bridge/sdk-core/protos/api_upstream/README.md +9 -0
  130. data/bridge/sdk-core/protos/api_upstream/api-linter.yaml +40 -0
  131. data/bridge/sdk-core/protos/api_upstream/buf.yaml +12 -0
  132. data/bridge/sdk-core/protos/api_upstream/dependencies/gogoproto/gogo.proto +141 -0
  133. data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +86 -0
  134. data/bridge/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +83 -0
  135. data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +259 -0
  136. data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +112 -0
  137. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +46 -0
  138. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/cluster.proto +40 -0
  139. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +57 -0
  140. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +55 -0
  141. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +168 -0
  142. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +97 -0
  143. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +51 -0
  144. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +50 -0
  145. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +41 -0
  146. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +60 -0
  147. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +59 -0
  148. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +51 -0
  149. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +122 -0
  150. data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +108 -0
  151. data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +114 -0
  152. data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +56 -0
  153. data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +751 -0
  154. data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +97 -0
  155. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +161 -0
  156. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +99 -0
  157. data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +61 -0
  158. data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +55 -0
  159. data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +300 -0
  160. data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +108 -0
  161. data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +46 -0
  162. data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +59 -0
  163. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +145 -0
  164. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +1124 -0
  165. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +401 -0
  166. data/bridge/sdk-core/protos/grpc/health/v1/health.proto +63 -0
  167. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +78 -0
  168. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +79 -0
  169. data/bridge/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +210 -0
  170. data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +77 -0
  171. data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +15 -0
  172. data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +30 -0
  173. data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +30 -0
  174. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +261 -0
  175. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +297 -0
  176. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +29 -0
  177. data/bridge/sdk-core/protos/testsrv_upstream/api-linter.yaml +38 -0
  178. data/bridge/sdk-core/protos/testsrv_upstream/buf.yaml +13 -0
  179. data/bridge/sdk-core/protos/testsrv_upstream/dependencies/gogoproto/gogo.proto +141 -0
  180. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +63 -0
  181. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +90 -0
  182. data/bridge/sdk-core/rustfmt.toml +1 -0
  183. data/bridge/sdk-core/sdk/Cargo.toml +47 -0
  184. data/bridge/sdk-core/sdk/LICENSE.txt +23 -0
  185. data/bridge/sdk-core/sdk/src/activity_context.rs +230 -0
  186. data/bridge/sdk-core/sdk/src/app_data.rs +37 -0
  187. data/bridge/sdk-core/sdk/src/conversions.rs +8 -0
  188. data/bridge/sdk-core/sdk/src/interceptors.rs +17 -0
  189. data/bridge/sdk-core/sdk/src/lib.rs +792 -0
  190. data/bridge/sdk-core/sdk/src/payload_converter.rs +11 -0
  191. data/bridge/sdk-core/sdk/src/workflow_context/options.rs +295 -0
  192. data/bridge/sdk-core/sdk/src/workflow_context.rs +683 -0
  193. data/bridge/sdk-core/sdk/src/workflow_future.rs +503 -0
  194. data/bridge/sdk-core/sdk-core-protos/Cargo.toml +30 -0
  195. data/bridge/sdk-core/sdk-core-protos/LICENSE.txt +23 -0
  196. data/bridge/sdk-core/sdk-core-protos/build.rs +108 -0
  197. data/bridge/sdk-core/sdk-core-protos/src/constants.rs +7 -0
  198. data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +497 -0
  199. data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +230 -0
  200. data/bridge/sdk-core/sdk-core-protos/src/lib.rs +1910 -0
  201. data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +38 -0
  202. data/bridge/sdk-core/sdk-core-protos/src/utilities.rs +14 -0
  203. data/bridge/sdk-core/test-utils/Cargo.toml +35 -0
  204. data/bridge/sdk-core/test-utils/src/canned_histories.rs +1579 -0
  205. data/bridge/sdk-core/test-utils/src/histfetch.rs +28 -0
  206. data/bridge/sdk-core/test-utils/src/lib.rs +598 -0
  207. data/bridge/sdk-core/tests/integ_tests/client_tests.rs +36 -0
  208. data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +128 -0
  209. data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +218 -0
  210. data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +146 -0
  211. data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +437 -0
  212. data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +93 -0
  213. data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +878 -0
  214. data/bridge/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +61 -0
  215. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +59 -0
  216. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +58 -0
  217. data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +50 -0
  218. data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +60 -0
  219. data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +54 -0
  220. data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +634 -0
  221. data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +113 -0
  222. data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +137 -0
  223. data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +93 -0
  224. data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +167 -0
  225. data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +99 -0
  226. data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +131 -0
  227. data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +75 -0
  228. data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +587 -0
  229. data/bridge/sdk-core/tests/load_tests.rs +191 -0
  230. data/bridge/sdk-core/tests/main.rs +111 -0
  231. data/bridge/sdk-core/tests/runner.rs +93 -0
  232. data/bridge/src/connection.rs +167 -0
  233. data/bridge/src/lib.rs +180 -0
  234. data/bridge/src/runtime.rs +47 -0
  235. data/bridge/src/worker.rs +73 -0
  236. data/ext/Rakefile +9 -0
  237. data/lib/bridge.so +0 -0
  238. data/lib/gen/dependencies/gogoproto/gogo_pb.rb +14 -0
  239. data/lib/gen/temporal/api/batch/v1/message_pb.rb +48 -0
  240. data/lib/gen/temporal/api/cluster/v1/message_pb.rb +67 -0
  241. data/lib/gen/temporal/api/command/v1/message_pb.rb +166 -0
  242. data/lib/gen/temporal/api/common/v1/message_pb.rb +69 -0
  243. data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +32 -0
  244. data/lib/gen/temporal/api/enums/v1/cluster_pb.rb +26 -0
  245. data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +37 -0
  246. data/lib/gen/temporal/api/enums/v1/common_pb.rb +41 -0
  247. data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +67 -0
  248. data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +71 -0
  249. data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +37 -0
  250. data/lib/gen/temporal/api/enums/v1/query_pb.rb +31 -0
  251. data/lib/gen/temporal/api/enums/v1/reset_pb.rb +24 -0
  252. data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +28 -0
  253. data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +30 -0
  254. data/lib/gen/temporal/api/enums/v1/update_pb.rb +28 -0
  255. data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +89 -0
  256. data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +84 -0
  257. data/lib/gen/temporal/api/failure/v1/message_pb.rb +83 -0
  258. data/lib/gen/temporal/api/filter/v1/message_pb.rb +40 -0
  259. data/lib/gen/temporal/api/history/v1/message_pb.rb +489 -0
  260. data/lib/gen/temporal/api/namespace/v1/message_pb.rb +63 -0
  261. data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +125 -0
  262. data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +20 -0
  263. data/lib/gen/temporal/api/query/v1/message_pb.rb +38 -0
  264. data/lib/gen/temporal/api/replication/v1/message_pb.rb +37 -0
  265. data/lib/gen/temporal/api/schedule/v1/message_pb.rb +128 -0
  266. data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +73 -0
  267. data/lib/gen/temporal/api/update/v1/message_pb.rb +26 -0
  268. data/lib/gen/temporal/api/version/v1/message_pb.rb +41 -0
  269. data/lib/gen/temporal/api/workflow/v1/message_pb.rb +110 -0
  270. data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +771 -0
  271. data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +20 -0
  272. data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +58 -0
  273. data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +57 -0
  274. data/lib/gen/temporal/sdk/core/bridge/bridge_pb.rb +222 -0
  275. data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +57 -0
  276. data/lib/gen/temporal/sdk/core/common/common_pb.rb +22 -0
  277. data/lib/gen/temporal/sdk/core/core_interface_pb.rb +34 -0
  278. data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +27 -0
  279. data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +164 -0
  280. data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +192 -0
  281. data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +34 -0
  282. data/lib/temporal/bridge.rb +14 -0
  283. data/lib/temporal/client/implementation.rb +339 -0
  284. data/lib/temporal/client/workflow_handle.rb +243 -0
  285. data/lib/temporal/client.rb +144 -0
  286. data/lib/temporal/connection.rb +736 -0
  287. data/lib/temporal/data_converter.rb +150 -0
  288. data/lib/temporal/error/failure.rb +194 -0
  289. data/lib/temporal/error/workflow_failure.rb +17 -0
  290. data/lib/temporal/errors.rb +22 -0
  291. data/lib/temporal/failure_converter/base.rb +26 -0
  292. data/lib/temporal/failure_converter/basic.rb +313 -0
  293. data/lib/temporal/failure_converter.rb +8 -0
  294. data/lib/temporal/interceptor/chain.rb +27 -0
  295. data/lib/temporal/interceptor/client.rb +102 -0
  296. data/lib/temporal/payload_codec/base.rb +32 -0
  297. data/lib/temporal/payload_converter/base.rb +24 -0
  298. data/lib/temporal/payload_converter/bytes.rb +26 -0
  299. data/lib/temporal/payload_converter/composite.rb +47 -0
  300. data/lib/temporal/payload_converter/encoding_base.rb +35 -0
  301. data/lib/temporal/payload_converter/json.rb +25 -0
  302. data/lib/temporal/payload_converter/nil.rb +25 -0
  303. data/lib/temporal/payload_converter.rb +14 -0
  304. data/lib/temporal/retry_policy.rb +82 -0
  305. data/lib/temporal/retry_state.rb +35 -0
  306. data/lib/temporal/runtime.rb +22 -0
  307. data/lib/temporal/timeout_type.rb +29 -0
  308. data/lib/temporal/version.rb +3 -0
  309. data/lib/temporal/workflow/execution_info.rb +54 -0
  310. data/lib/temporal/workflow/execution_status.rb +36 -0
  311. data/lib/temporal/workflow/id_reuse_policy.rb +36 -0
  312. data/lib/temporal/workflow/query_reject_condition.rb +33 -0
  313. data/lib/temporal.rb +8 -0
  314. data/lib/temporalio.rb +3 -0
  315. data/lib/thermite_patch.rb +23 -0
  316. data/temporalio.gemspec +41 -0
  317. metadata +583 -0
@@ -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
+ }