dynflow 1.3.0 → 1.4.0

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 (225) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/.travis.yml +3 -4
  4. data/Dockerfile +9 -0
  5. data/Gemfile +6 -0
  6. data/Rakefile +1 -0
  7. data/doc/pages/Gemfile +1 -0
  8. data/doc/pages/Rakefile +1 -0
  9. data/doc/pages/plugins/alert_block.rb +1 -0
  10. data/doc/pages/plugins/div_tag.rb +1 -0
  11. data/doc/pages/plugins/graphviz.rb +1 -0
  12. data/doc/pages/plugins/plantuml.rb +1 -0
  13. data/doc/pages/plugins/play.rb +1 -0
  14. data/doc/pages/plugins/tags.rb +1 -0
  15. data/doc/pages/plugins/toc.rb +1 -0
  16. data/docker-compose.yml +41 -0
  17. data/dynflow.gemspec +1 -0
  18. data/examples/clock_benchmark.rb +1 -0
  19. data/examples/example_helper.rb +19 -2
  20. data/examples/future_execution.rb +2 -1
  21. data/examples/memory_limit_watcher.rb +1 -0
  22. data/examples/orchestrate.rb +4 -5
  23. data/examples/orchestrate_evented.rb +3 -2
  24. data/examples/remote_executor.rb +68 -0
  25. data/examples/singletons.rb +4 -3
  26. data/examples/sub_plan_concurrency_control.rb +2 -1
  27. data/examples/sub_plans.rb +3 -2
  28. data/examples/termination.rb +1 -0
  29. data/lib/dynflow.rb +20 -0
  30. data/lib/dynflow/action.rb +28 -3
  31. data/lib/dynflow/action/cancellable.rb +1 -0
  32. data/lib/dynflow/action/format.rb +1 -0
  33. data/lib/dynflow/action/missing.rb +1 -0
  34. data/lib/dynflow/action/polling.rb +3 -1
  35. data/lib/dynflow/action/progress.rb +1 -0
  36. data/lib/dynflow/action/rescue.rb +1 -0
  37. data/lib/dynflow/action/singleton.rb +1 -0
  38. data/lib/dynflow/action/suspended.rb +9 -2
  39. data/lib/dynflow/action/timeouts.rb +2 -1
  40. data/lib/dynflow/action/with_bulk_sub_plans.rb +2 -1
  41. data/lib/dynflow/action/with_polling_sub_plans.rb +7 -5
  42. data/lib/dynflow/action/with_sub_plans.rb +1 -0
  43. data/lib/dynflow/active_job/queue_adapter.rb +1 -0
  44. data/lib/dynflow/actor.rb +13 -5
  45. data/lib/dynflow/actors.rb +1 -0
  46. data/lib/dynflow/actors/execution_plan_cleaner.rb +1 -0
  47. data/lib/dynflow/clock.rb +27 -47
  48. data/lib/dynflow/config.rb +11 -2
  49. data/lib/dynflow/connectors.rb +1 -0
  50. data/lib/dynflow/connectors/abstract.rb +1 -0
  51. data/lib/dynflow/connectors/database.rb +1 -0
  52. data/lib/dynflow/connectors/direct.rb +1 -0
  53. data/lib/dynflow/coordinator.rb +1 -0
  54. data/lib/dynflow/coordinator_adapters.rb +1 -0
  55. data/lib/dynflow/coordinator_adapters/abstract.rb +1 -0
  56. data/lib/dynflow/coordinator_adapters/sequel.rb +1 -0
  57. data/lib/dynflow/dead_letter_silencer.rb +2 -0
  58. data/lib/dynflow/debug/telemetry/persistence.rb +1 -0
  59. data/lib/dynflow/delayed_executors.rb +1 -0
  60. data/lib/dynflow/delayed_executors/abstract.rb +1 -0
  61. data/lib/dynflow/delayed_executors/abstract_core.rb +1 -0
  62. data/lib/dynflow/delayed_executors/polling.rb +1 -0
  63. data/lib/dynflow/delayed_plan.rb +1 -0
  64. data/lib/dynflow/director.rb +80 -15
  65. data/lib/dynflow/director/execution_plan_manager.rb +17 -3
  66. data/lib/dynflow/director/flow_manager.rb +1 -0
  67. data/lib/dynflow/director/{work_queue.rb → queue_hash.rb} +9 -8
  68. data/lib/dynflow/director/running_steps_manager.rb +55 -18
  69. data/lib/dynflow/director/sequence_cursor.rb +1 -0
  70. data/lib/dynflow/director/sequential_manager.rb +12 -2
  71. data/lib/dynflow/dispatcher.rb +4 -2
  72. data/lib/dynflow/dispatcher/abstract.rb +1 -0
  73. data/lib/dynflow/dispatcher/client_dispatcher.rb +6 -4
  74. data/lib/dynflow/dispatcher/executor_dispatcher.rb +13 -1
  75. data/lib/dynflow/errors.rb +1 -0
  76. data/lib/dynflow/execution_history.rb +1 -0
  77. data/lib/dynflow/execution_plan.rb +3 -2
  78. data/lib/dynflow/execution_plan/dependency_graph.rb +1 -0
  79. data/lib/dynflow/execution_plan/hooks.rb +1 -0
  80. data/lib/dynflow/execution_plan/output_reference.rb +2 -1
  81. data/lib/dynflow/execution_plan/steps.rb +1 -0
  82. data/lib/dynflow/execution_plan/steps/abstract.rb +10 -5
  83. data/lib/dynflow/execution_plan/steps/abstract_flow_step.rb +2 -0
  84. data/lib/dynflow/execution_plan/steps/error.rb +1 -0
  85. data/lib/dynflow/execution_plan/steps/finalize_step.rb +1 -0
  86. data/lib/dynflow/execution_plan/steps/plan_step.rb +1 -0
  87. data/lib/dynflow/execution_plan/steps/run_step.rb +1 -0
  88. data/lib/dynflow/executors.rb +1 -1
  89. data/lib/dynflow/executors/abstract/core.rb +132 -0
  90. data/lib/dynflow/executors/parallel.rb +24 -11
  91. data/lib/dynflow/executors/parallel/core.rb +10 -91
  92. data/lib/dynflow/executors/parallel/pool.rb +4 -2
  93. data/lib/dynflow/executors/parallel/worker.rb +2 -1
  94. data/lib/dynflow/executors/sidekiq/core.rb +121 -0
  95. data/lib/dynflow/executors/sidekiq/internal_job_base.rb +24 -0
  96. data/lib/dynflow/executors/sidekiq/orchestrator_jobs.rb +60 -0
  97. data/lib/dynflow/executors/sidekiq/redis_locking.rb +69 -0
  98. data/lib/dynflow/executors/sidekiq/serialization.rb +33 -0
  99. data/lib/dynflow/executors/sidekiq/worker_jobs.rb +42 -0
  100. data/lib/dynflow/flows.rb +1 -0
  101. data/lib/dynflow/flows/abstract.rb +1 -0
  102. data/lib/dynflow/flows/abstract_composed.rb +1 -0
  103. data/lib/dynflow/flows/atom.rb +1 -0
  104. data/lib/dynflow/flows/concurrence.rb +1 -0
  105. data/lib/dynflow/flows/sequence.rb +1 -0
  106. data/lib/dynflow/logger_adapters.rb +1 -0
  107. data/lib/dynflow/logger_adapters/abstract.rb +1 -0
  108. data/lib/dynflow/logger_adapters/delegator.rb +1 -0
  109. data/lib/dynflow/logger_adapters/formatters.rb +1 -0
  110. data/lib/dynflow/logger_adapters/formatters/abstract.rb +1 -0
  111. data/lib/dynflow/logger_adapters/formatters/exception.rb +1 -0
  112. data/lib/dynflow/logger_adapters/simple.rb +1 -0
  113. data/lib/dynflow/middleware.rb +1 -0
  114. data/lib/dynflow/middleware/common/singleton.rb +1 -0
  115. data/lib/dynflow/middleware/common/transaction.rb +1 -0
  116. data/lib/dynflow/middleware/register.rb +1 -0
  117. data/lib/dynflow/middleware/resolver.rb +1 -0
  118. data/lib/dynflow/middleware/stack.rb +1 -0
  119. data/lib/dynflow/middleware/world.rb +1 -0
  120. data/lib/dynflow/persistence.rb +3 -2
  121. data/lib/dynflow/persistence_adapters.rb +1 -0
  122. data/lib/dynflow/persistence_adapters/abstract.rb +1 -0
  123. data/lib/dynflow/persistence_adapters/sequel.rb +10 -7
  124. data/lib/dynflow/persistence_adapters/sequel_migrations/001_initial.rb +1 -0
  125. data/lib/dynflow/persistence_adapters/sequel_migrations/002_incremental_progress.rb +1 -0
  126. data/lib/dynflow/persistence_adapters/sequel_migrations/003_parent_action.rb +1 -0
  127. data/lib/dynflow/persistence_adapters/sequel_migrations/004_coordinator_records.rb +1 -0
  128. data/lib/dynflow/persistence_adapters/sequel_migrations/005_envelopes.rb +1 -0
  129. data/lib/dynflow/persistence_adapters/sequel_migrations/006_fix_data_length.rb +1 -0
  130. data/lib/dynflow/persistence_adapters/sequel_migrations/007_future_execution.rb +1 -0
  131. data/lib/dynflow/persistence_adapters/sequel_migrations/008_rename_scheduled_plans_to_delayed_plans.rb +1 -0
  132. data/lib/dynflow/persistence_adapters/sequel_migrations/009_fix_mysql_data_length.rb +1 -0
  133. data/lib/dynflow/persistence_adapters/sequel_migrations/010_add_execution_plans_label.rb +1 -0
  134. data/lib/dynflow/persistence_adapters/sequel_migrations/011_placeholder.rb +1 -0
  135. data/lib/dynflow/persistence_adapters/sequel_migrations/012_add_delayed_plans_serialized_args.rb +1 -0
  136. data/lib/dynflow/persistence_adapters/sequel_migrations/013_add_action_columns.rb +1 -0
  137. data/lib/dynflow/persistence_adapters/sequel_migrations/014_add_step_columns.rb +1 -0
  138. data/lib/dynflow/persistence_adapters/sequel_migrations/015_add_execution_plan_columns.rb +1 -0
  139. data/lib/dynflow/persistence_adapters/sequel_migrations/016_add_step_queue.rb +1 -0
  140. data/lib/dynflow/persistence_adapters/sequel_migrations/017_add_delayed_plan_frozen.rb +1 -0
  141. data/lib/dynflow/persistence_adapters/sequel_migrations/018_add_uuid_column.rb +1 -0
  142. data/lib/dynflow/persistence_adapters/sequel_migrations/019_update_mysql_time_precision.rb +48 -0
  143. data/lib/dynflow/rails.rb +1 -0
  144. data/lib/dynflow/rails/configuration.rb +6 -3
  145. data/lib/dynflow/rails/daemon.rb +1 -0
  146. data/lib/dynflow/round_robin.rb +1 -0
  147. data/lib/dynflow/semaphores.rb +1 -0
  148. data/lib/dynflow/semaphores/abstract.rb +1 -0
  149. data/lib/dynflow/semaphores/aggregating.rb +1 -0
  150. data/lib/dynflow/semaphores/dummy.rb +1 -0
  151. data/lib/dynflow/semaphores/stateful.rb +1 -0
  152. data/lib/dynflow/serializable.rb +13 -4
  153. data/lib/dynflow/serializer.rb +24 -0
  154. data/lib/dynflow/serializers.rb +1 -0
  155. data/lib/dynflow/serializers/abstract.rb +1 -0
  156. data/lib/dynflow/serializers/noop.rb +1 -0
  157. data/lib/dynflow/stateful.rb +1 -0
  158. data/lib/dynflow/telemetry.rb +1 -0
  159. data/lib/dynflow/telemetry_adapters/abstract.rb +1 -0
  160. data/lib/dynflow/telemetry_adapters/dummy.rb +1 -0
  161. data/lib/dynflow/telemetry_adapters/statsd.rb +1 -0
  162. data/lib/dynflow/testing.rb +1 -0
  163. data/lib/dynflow/testing/assertions.rb +6 -5
  164. data/lib/dynflow/testing/dummy_execution_plan.rb +1 -0
  165. data/lib/dynflow/testing/dummy_executor.rb +19 -2
  166. data/lib/dynflow/testing/dummy_planned_action.rb +1 -0
  167. data/lib/dynflow/testing/dummy_step.rb +3 -1
  168. data/lib/dynflow/testing/dummy_world.rb +9 -0
  169. data/lib/dynflow/testing/factories.rb +6 -1
  170. data/lib/dynflow/testing/in_thread_executor.rb +22 -3
  171. data/lib/dynflow/testing/in_thread_world.rb +9 -0
  172. data/lib/dynflow/testing/managed_clock.rb +1 -0
  173. data/lib/dynflow/testing/mimic.rb +1 -0
  174. data/lib/dynflow/throttle_limiter.rb +1 -0
  175. data/lib/dynflow/transaction_adapters.rb +1 -0
  176. data/lib/dynflow/transaction_adapters/abstract.rb +1 -0
  177. data/lib/dynflow/transaction_adapters/active_record.rb +1 -0
  178. data/lib/dynflow/transaction_adapters/none.rb +1 -0
  179. data/lib/dynflow/utils.rb +1 -0
  180. data/lib/dynflow/utils/indifferent_hash.rb +1 -0
  181. data/lib/dynflow/utils/priority_queue.rb +1 -0
  182. data/lib/dynflow/version.rb +2 -1
  183. data/lib/dynflow/watchers/memory_consumption_watcher.rb +1 -0
  184. data/lib/dynflow/web.rb +1 -0
  185. data/lib/dynflow/web/console.rb +1 -0
  186. data/lib/dynflow/web/console_helpers.rb +1 -0
  187. data/lib/dynflow/web/filtering_helpers.rb +1 -0
  188. data/lib/dynflow/web/world_helpers.rb +1 -0
  189. data/lib/dynflow/web_console.rb +1 -0
  190. data/lib/dynflow/world.rb +11 -1
  191. data/lib/dynflow/world/invalidation.rb +7 -1
  192. data/test/abnormal_states_recovery_test.rb +41 -40
  193. data/test/action_test.rb +160 -110
  194. data/test/activejob_adapter_test.rb +1 -0
  195. data/test/batch_sub_tasks_test.rb +12 -11
  196. data/test/clock_test.rb +2 -1
  197. data/test/concurrency_control_test.rb +20 -19
  198. data/test/coordinator_test.rb +20 -21
  199. data/test/daemon_test.rb +2 -1
  200. data/test/dead_letter_silencer_test.rb +9 -7
  201. data/test/dispatcher_test.rb +2 -1
  202. data/test/execution_plan_cleaner_test.rb +13 -12
  203. data/test/execution_plan_hooks_test.rb +3 -2
  204. data/test/execution_plan_test.rb +33 -32
  205. data/test/executor_test.rb +533 -489
  206. data/test/future_execution_test.rb +45 -44
  207. data/test/memory_cosumption_watcher_test.rb +5 -4
  208. data/test/middleware_test.rb +55 -54
  209. data/test/persistence_test.rb +56 -53
  210. data/test/rescue_test.rb +36 -35
  211. data/test/round_robin_test.rb +13 -12
  212. data/test/semaphores_test.rb +31 -30
  213. data/test/support/code_workflow_example.rb +1 -0
  214. data/test/support/dummy_example.rb +14 -1
  215. data/test/support/middleware_example.rb +2 -1
  216. data/test/support/rails/config/environment.rb +1 -0
  217. data/test/support/rescue_example.rb +1 -0
  218. data/test/support/test_execution_log.rb +1 -0
  219. data/test/test_helper.rb +18 -17
  220. data/test/testing_test.rb +45 -44
  221. data/test/utils_test.rb +18 -17
  222. data/test/web_console_test.rb +1 -0
  223. data/test/world_test.rb +7 -6
  224. metadata +13 -4
  225. data/lib/dynflow/executors/abstract.rb +0 -40
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require_relative 'test_helper'
2
3
 
3
4
  module Dynflow
@@ -17,7 +18,7 @@ module Dynflow
17
18
  let(:world) { WorldFactory.create_world }
18
19
  let(:delayed_plan) do
19
20
  delayed_plan = world.delay(::Support::DummyExample::Dummy, { :start_at => @start_at })
20
- delayed_plan.must_be :scheduled?
21
+ _(delayed_plan).must_be :scheduled?
21
22
  world.persistence.load_delayed_plan(delayed_plan.execution_plan_id)
22
23
  end
23
24
  let(:history_names) do
@@ -31,40 +32,40 @@ module Dynflow
31
32
  it 'handles wrong plan state' do
32
33
  delayed_plan.execution_plan.state = :planning
33
34
  abstract_delayed_executor.send(:process, [delayed_plan], @start_at)
34
- delayed_plan.execution_plan.state.must_equal :planned
35
+ _(delayed_plan.execution_plan.state).must_equal :planned
35
36
 
36
37
  delayed_plan.execution_plan.set_state(:running, true)
37
38
  abstract_delayed_executor.send(:process, [delayed_plan], @start_at)
38
- delayed_plan.execution_plan.state.must_equal :running
39
+ _(delayed_plan.execution_plan.state).must_equal :running
39
40
  end
40
41
  end
41
42
 
42
43
  it 'returns the progress as 0' do
43
- execution_plan.progress.must_equal 0
44
+ _(execution_plan.progress).must_equal 0
44
45
  end
45
46
 
46
47
  it 'marks the plan as failed when issues in serialied phase' do
47
48
  world.persistence.delete_execution_plans({})
48
- e = proc { world.delay(::Support::DummyExample::DummyCustomDelaySerializer, { :start_at => @start_at }, :fail) }.must_raise RuntimeError
49
- e.message.must_equal 'Enforced serializer failure'
49
+ e = _(proc { world.delay(::Support::DummyExample::DummyCustomDelaySerializer, { :start_at => @start_at }, :fail) }).must_raise RuntimeError
50
+ _(e.message).must_equal 'Enforced serializer failure'
50
51
  plan = world.persistence.find_execution_plans(page: 0, per_page: 1, order_by: :ended_at, desc: true).first
51
- plan.state.must_equal :stopped
52
- plan.result.must_equal :error
52
+ _(plan.state).must_equal :stopped
53
+ _(plan.result).must_equal :error
53
54
  end
54
55
 
55
56
  it 'delays the action' do
56
- execution_plan.steps.count.must_equal 1
57
- delayed_plan.start_at.inspect.must_equal (@start_at).inspect
58
- history_names.call(execution_plan).must_equal ['delay']
57
+ _(execution_plan.steps.count).must_equal 1
58
+ _(delayed_plan.start_at.inspect).must_equal (@start_at).inspect
59
+ _(history_names.call(execution_plan)).must_equal ['delay']
59
60
  end
60
61
 
61
62
  it 'allows cancelling the delayed plan' do
62
- execution_plan.state.must_equal :scheduled
63
- execution_plan.cancellable?.must_equal true
63
+ _(execution_plan.state).must_equal :scheduled
64
+ _(execution_plan.cancellable?).must_equal true
64
65
  execution_plan.cancel.each(&:wait)
65
66
  execution_plan = world.persistence.load_execution_plan(self.execution_plan.id)
66
- execution_plan.state.must_equal :stopped
67
- execution_plan.result.must_equal :cancelled
67
+ _(execution_plan.state).must_equal :stopped
68
+ _(execution_plan.result).must_equal :cancelled
68
69
  assert_nil execution_plan.delay_record
69
70
  end
70
71
 
@@ -72,30 +73,30 @@ module Dynflow
72
73
  @start_at = Time.now.utc - 100
73
74
  delayed_plan
74
75
  past_delayed_plans = world.persistence.find_past_delayed_plans(@start_at + 10)
75
- past_delayed_plans.length.must_equal 1
76
- past_delayed_plans.first.execution_plan_uuid.must_equal execution_plan.id
76
+ _(past_delayed_plans.length).must_equal 1
77
+ _(past_delayed_plans.first.execution_plan_uuid).must_equal execution_plan.id
77
78
  end
78
79
 
79
80
  it 'delayed plans can be planned and executed' do
80
- execution_plan.state.must_equal :scheduled
81
+ _(execution_plan.state).must_equal :scheduled
81
82
  delayed_plan.plan
82
- execution_plan.state.must_equal :planned
83
- execution_plan.result.must_equal :pending
83
+ _(execution_plan.state).must_equal :planned
84
+ _(execution_plan.result).must_equal :pending
84
85
  assert_planning_success execution_plan
85
- history_names.call(execution_plan).must_equal ['delay']
86
+ _(history_names.call(execution_plan)).must_equal ['delay']
86
87
  delayed_plan.execute.future.wait
87
88
  executed = world.persistence.load_execution_plan(delayed_plan.execution_plan_uuid)
88
- executed.state.must_equal :stopped
89
- executed.result.must_equal :success
90
- executed.execution_history.count.must_equal 3
89
+ _(executed.state).must_equal :stopped
90
+ _(executed.result).must_equal :success
91
+ _(executed.execution_history.count).must_equal 3
91
92
  end
92
93
 
93
94
  it 'expired plans can be failed' do
94
95
  delayed_plan.timeout
95
- execution_plan.state.must_equal :stopped
96
- execution_plan.result.must_equal :error
97
- execution_plan.errors.first.message.must_match /could not be started before set time/
98
- history_names.call(execution_plan).must_equal %W(delay timeout)
96
+ _(execution_plan.state).must_equal :stopped
97
+ _(execution_plan.result).must_equal :error
98
+ _(execution_plan.errors.first.message).must_match /could not be started before set time/
99
+ _(history_names.call(execution_plan)).must_equal %W(delay timeout)
99
100
  end
100
101
 
101
102
  end
@@ -112,18 +113,18 @@ module Dynflow
112
113
  persistence.expect(:find_past_delayed_plans, [], [start_time])
113
114
  persistence.expect(:find_past_delayed_plans, [], [start_time + options[:poll_interval]])
114
115
  dummy_world.stub :persistence, persistence do
115
- klok.pending_pings.length.must_equal 0
116
+ _(klok.pending_pings.length).must_equal 0
116
117
  delayed_executor.start.wait
117
- klok.pending_pings.length.must_equal 1
118
- klok.pending_pings.first.who.ref.must_be_same_as delayed_executor.core
119
- klok.pending_pings.first.when.must_equal start_time + options[:poll_interval]
118
+ _(klok.pending_pings.length).must_equal 1
119
+ _(klok.pending_pings.first.who.ref).must_be_same_as delayed_executor.core
120
+ _(klok.pending_pings.first.when).must_equal start_time + options[:poll_interval]
120
121
  klok.progress
121
122
  delayed_executor.terminate.wait
122
- klok.pending_pings.length.must_equal 1
123
- klok.pending_pings.first.who.ref.must_be_same_as delayed_executor.core
124
- klok.pending_pings.first.when.must_equal start_time + 2 * options[:poll_interval]
123
+ _(klok.pending_pings.length).must_equal 1
124
+ _(klok.pending_pings.first.who.ref).must_be_same_as delayed_executor.core
125
+ _(klok.pending_pings.first.when).must_equal start_time + 2 * options[:poll_interval]
125
126
  klok.progress
126
- klok.pending_pings.length.must_equal 0
127
+ _(klok.pending_pings.length).must_equal 0
127
128
  end
128
129
  end
129
130
  end
@@ -149,27 +150,27 @@ module Dynflow
149
150
 
150
151
  it 'noop serializer [de]serializes correctly for simple types' do
151
152
  input = [1, 2.0, 'three', ['four-1', 'four-2'], { 'five' => 5 }]
152
- simulated_use.call(Dynflow::Serializers::Noop, input).must_equal input
153
+ _(simulated_use.call(Dynflow::Serializers::Noop, input)).must_equal input
153
154
  end
154
155
 
155
156
  it 'args! raises if not deserialized' do
156
- proc { serialized_serializer.args! }.must_raise RuntimeError
157
+ _(proc { serialized_serializer.args! }).must_raise RuntimeError
157
158
  deserialized_serializer.args! # Must not raise
158
159
  end
159
160
 
160
161
  it 'serialized_args! raises if not serialized' do
161
- proc { deserialized_serializer.serialized_args! }.must_raise RuntimeError
162
+ _(proc { deserialized_serializer.serialized_args! }).must_raise RuntimeError
162
163
  serialized_serializer.serialized_args! # Must not raise
163
164
  end
164
165
 
165
166
  it 'performs_serialization!' do
166
167
  deserialized_serializer.perform_serialization!
167
- deserialized_serializer.serialized_args!.must_equal args
168
+ _(deserialized_serializer.serialized_args!).must_equal args
168
169
  end
169
170
 
170
171
  it 'performs_deserialization!' do
171
172
  serialized_serializer.perform_deserialization!
172
- serialized_serializer.args.must_equal args
173
+ _(serialized_serializer.args).must_equal args
173
174
  end
174
175
  end
175
176
 
@@ -181,9 +182,9 @@ module Dynflow
181
182
  end
182
183
 
183
184
  it "allows access to serializer's args" do
184
- serializer.args.must_be :nil?
185
- delayed_plan.args.must_equal args
186
- serializer.args.must_equal args
185
+ _(serializer.args).must_be :nil?
186
+ _(delayed_plan.args).must_equal args
187
+ _(serializer.args).must_equal args
187
188
  end
188
189
  end
189
190
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require_relative 'test_helper'
2
3
  require 'fileutils'
3
4
  require 'dynflow/watchers/memory_consumption_watcher'
@@ -12,7 +13,7 @@ module Dynflow
12
13
  world.expect(:clock, clock)
13
14
  init_interval = 1000
14
15
  clock.expect(:ping, true) do |clock_who, clock_when, _|
15
- clock_when.must_equal init_interval
16
+ _(clock_when).must_equal init_interval
16
17
  end
17
18
 
18
19
  Dynflow::Watchers::MemoryConsumptionWatcher.new world, 1, initial_wait: init_interval
@@ -30,11 +31,11 @@ module Dynflow
30
31
  init_interval = 1000
31
32
  polling_interval = 2000
32
33
  clock.expect(:ping, true) do |clock_who, clock_when, _|
33
- clock_when.must_equal init_interval
34
+ _(clock_when).must_equal init_interval
34
35
  true
35
36
  end
36
37
  clock.expect(:ping, true) do |clock_who, clock_when, _|
37
- clock_when.must_equal polling_interval
38
+ _(clock_when).must_equal polling_interval
38
39
  true
39
40
  end
40
41
  memory_info_provider.expect(:bytes, 0)
@@ -63,7 +64,7 @@ module Dynflow
63
64
 
64
65
  init_interval = 1000
65
66
  clock.expect(:ping, true) do |clock_who, clock_when, _|
66
- clock_when.must_equal init_interval
67
+ _(clock_when).must_equal init_interval
67
68
  true
68
69
  end
69
70
  memory_info_provider.expect(:bytes, 10)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require_relative 'test_helper'
2
3
 
3
4
  module Dynflow
@@ -16,31 +17,31 @@ module Dynflow
16
17
  plan = world.persistence.load_delayed_plan delay.execution_plan_id
17
18
  plan.plan
18
19
  plan.execute.future.wait
19
- log.must_equal %w[LogMiddleware::before_delay
20
- delay
21
- LogMiddleware::after_delay
22
- LogMiddleware::before_plan_phase
23
- LogMiddleware::before_plan
24
- plan
25
- LogMiddleware::after_plan
26
- LogMiddleware::after_plan_phase
27
- LogMiddleware::before_run
28
- run
29
- LogMiddleware::after_run
30
- LogMiddleware::before_finalize_phase
31
- LogMiddleware::before_finalize
32
- finalize
33
- LogMiddleware::after_finalize
34
- LogMiddleware::after_finalize_phase]
20
+ _(log).must_equal %w[LogMiddleware::before_delay
21
+ delay
22
+ LogMiddleware::after_delay
23
+ LogMiddleware::before_plan_phase
24
+ LogMiddleware::before_plan
25
+ plan
26
+ LogMiddleware::after_plan
27
+ LogMiddleware::after_plan_phase
28
+ LogMiddleware::before_run
29
+ run
30
+ LogMiddleware::after_run
31
+ LogMiddleware::before_finalize_phase
32
+ LogMiddleware::before_finalize
33
+ finalize
34
+ LogMiddleware::after_finalize
35
+ LogMiddleware::after_finalize_phase]
35
36
  end
36
37
 
37
38
  it "inherits the middleware" do
38
39
  world.trigger(Support::MiddlewareExample::SubAction, {}).finished.wait
39
- log.must_equal %w[LogRunMiddleware::before_run
40
- AnotherLogRunMiddleware::before_run
41
- run
42
- AnotherLogRunMiddleware::after_run
43
- LogRunMiddleware::after_run]
40
+ _(log).must_equal %w[LogRunMiddleware::before_run
41
+ AnotherLogRunMiddleware::before_run
42
+ run
43
+ AnotherLogRunMiddleware::after_run
44
+ LogRunMiddleware::after_run]
44
45
  end
45
46
 
46
47
  describe "world.middleware" do
@@ -52,11 +53,11 @@ module Dynflow
52
53
 
53
54
  it "puts the middleware to the beginning of the stack" do
54
55
  world_with_middleware.trigger(Support::MiddlewareExample::Action, {}).finished.wait
55
- log.must_equal %w[AnotherLogRunMiddleware::before_run
56
- LogRunMiddleware::before_run
57
- run
58
- LogRunMiddleware::after_run
59
- AnotherLogRunMiddleware::after_run]
56
+ _(log).must_equal %w[AnotherLogRunMiddleware::before_run
57
+ LogRunMiddleware::before_run
58
+ run
59
+ LogRunMiddleware::after_run
60
+ AnotherLogRunMiddleware::after_run]
60
61
  end
61
62
  end
62
63
 
@@ -64,11 +65,11 @@ module Dynflow
64
65
  describe "before" do
65
66
  specify do
66
67
  world.trigger(Support::MiddlewareExample::SubActionBeforeRule, {}).finished.wait
67
- log.must_equal %w[AnotherLogRunMiddleware::before_run
68
- LogRunMiddleware::before_run
69
- run
70
- LogRunMiddleware::after_run
71
- AnotherLogRunMiddleware::after_run]
68
+ _(log).must_equal %w[AnotherLogRunMiddleware::before_run
69
+ LogRunMiddleware::before_run
70
+ run
71
+ LogRunMiddleware::after_run
72
+ AnotherLogRunMiddleware::after_run]
72
73
  end
73
74
  end
74
75
 
@@ -83,27 +84,27 @@ module Dynflow
83
84
 
84
85
  specify do
85
86
  world_with_middleware.trigger(Support::MiddlewareExample::Action, {}).finished.wait
86
- log.must_equal %w[LogRunMiddleware::before_run
87
- AnotherLogRunMiddleware::before_run
88
- run
89
- AnotherLogRunMiddleware::after_run
90
- LogRunMiddleware::after_run]
87
+ _(log).must_equal %w[LogRunMiddleware::before_run
88
+ AnotherLogRunMiddleware::before_run
89
+ run
90
+ AnotherLogRunMiddleware::after_run
91
+ LogRunMiddleware::after_run]
91
92
  end
92
93
  end
93
94
 
94
95
  describe "replace" do
95
96
  specify do
96
97
  world.trigger(Support::MiddlewareExample::SubActionReplaceRule, {}).finished.wait
97
- log.must_equal %w[AnotherLogRunMiddleware::before_run
98
- run
99
- AnotherLogRunMiddleware::after_run]
98
+ _(log).must_equal %w[AnotherLogRunMiddleware::before_run
99
+ run
100
+ AnotherLogRunMiddleware::after_run]
100
101
  end
101
102
  end
102
103
 
103
104
  describe "remove" do
104
105
  specify do
105
106
  world.trigger(Support::MiddlewareExample::SubActionDoNotUseRule, {}).finished.wait
106
- log.must_equal %w[run]
107
+ _(log).must_equal %w[run]
107
108
  end
108
109
  end
109
110
  end
@@ -113,9 +114,9 @@ module Dynflow
113
114
  world.middleware.use(Support::MiddlewareExample::ObservingMiddleware,
114
115
  replace: Support::MiddlewareExample::LogRunMiddleware)
115
116
  world.trigger(Support::MiddlewareExample::Action, message: 'hello').finished.wait
116
- log.must_equal %w[input#message:hello
117
- run
118
- output#message:finished]
117
+ _(log).must_equal %w[input#message:hello
118
+ run
119
+ output#message:finished]
119
120
  end
120
121
 
121
122
  it "allows modification of the running action when delaying execution" do
@@ -126,11 +127,11 @@ module Dynflow
126
127
  plan = world.persistence.load_delayed_plan delay.execution_plan_id
127
128
  plan.plan
128
129
  plan.execute.future.wait
129
- log.must_equal ["delay#set-input:#{world.id}",
130
- "plan#input:#{world.id}",
131
- "input#message:#{world.id}",
132
- 'run',
133
- 'output#message:finished']
130
+ _(log).must_equal ["delay#set-input:#{world.id}",
131
+ "plan#input:#{world.id}",
132
+ "input#message:#{world.id}",
133
+ 'run',
134
+ 'output#message:finished']
134
135
  end
135
136
 
136
137
  describe 'Presnet middleware' do
@@ -142,13 +143,13 @@ module Dynflow
142
143
 
143
144
  let :execution_plan do
144
145
  result = world.trigger(Support::CodeWorkflowExample::IncomingIssue, issue_data)
145
- result.must_be :planned?
146
+ _(result).must_be :planned?
146
147
  result.finished.value
147
148
  end
148
149
 
149
150
  let :execution_plan_2 do
150
151
  result = world.trigger(Support::MiddlewareExample::SecretAction)
151
- result.must_be :planned?
152
+ _(result).must_be :planned?
152
153
  result.finished.value
153
154
  end
154
155
 
@@ -173,13 +174,13 @@ module Dynflow
173
174
  end
174
175
 
175
176
  it 'filters the data ===' do
176
- presenter.input['text'].must_equal('You-Know-Who is comming')
177
- presenter_2.output['spell'].must_equal('***')
177
+ _(presenter.input['text']).must_equal('You-Know-Who is comming')
178
+ _(presenter_2.output['spell']).must_equal('***')
178
179
  end
179
180
 
180
181
  it "doesn't affect stored data" do
181
- presenter.input['text'].must_equal('You-Know-Who is comming')
182
- presenter_without_middleware.input['text'].must_equal('Lord Voldemort is comming')
182
+ _(presenter.input['text']).must_equal('You-Know-Who is comming')
183
+ _(presenter_without_middleware.input['text']).must_equal('Lord Voldemort is comming')
183
184
  end
184
185
  end
185
186
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require_relative 'test_helper'
2
3
  require 'tmpdir'
3
4
 
@@ -84,11 +85,13 @@ module Dynflow
84
85
  original.each do |key, value|
85
86
  loaded_value = loaded[key.to_s]
86
87
  if value.is_a?(Time)
87
- loaded_value.inspect.must_equal value.inspect
88
+ _(loaded_value.inspect).must_equal value.inspect
88
89
  elsif value.is_a?(Hash)
89
90
  assert_equal_attributes!(value, loaded_value)
91
+ elsif value.nil?
92
+ assert_nil loaded[key.to_s]
90
93
  else
91
- loaded[key.to_s].must_equal value
94
+ _(loaded[key.to_s]).must_equal value
92
95
  end
93
96
  end
94
97
  end
@@ -104,10 +107,10 @@ module Dynflow
104
107
  prepare_and_save_plans
105
108
  if adapter.pagination?
106
109
  loaded_plans = adapter.find_execution_plans(page: 0, per_page: 1)
107
- loaded_plans.map { |h| h[:id] }.must_equal ['plan1']
110
+ _(loaded_plans.map { |h| h[:id] }).must_equal ['plan1']
108
111
 
109
112
  loaded_plans = adapter.find_execution_plans(page: 1, per_page: 1)
110
- loaded_plans.map { |h| h[:id] }.must_equal ['plan2']
113
+ _(loaded_plans.map { |h| h[:id] }).must_equal ['plan2']
111
114
  end
112
115
  end
113
116
 
@@ -115,10 +118,10 @@ module Dynflow
115
118
  prepare_and_save_plans
116
119
  if adapter.ordering_by.include?('state')
117
120
  loaded_plans = adapter.find_execution_plans(order_by: 'state')
118
- loaded_plans.map { |h| h[:id] }.must_equal %w(plan1 plan3 plan4 plan2)
121
+ _(loaded_plans.map { |h| h[:id] }).must_equal %w(plan1 plan3 plan4 plan2)
119
122
 
120
123
  loaded_plans = adapter.find_execution_plans(order_by: 'state', desc: true)
121
- loaded_plans.map { |h| h[:id] }.must_equal %w(plan2 plan1 plan3 plan4)
124
+ _(loaded_plans.map { |h| h[:id] }).must_equal %w(plan2 plan1 plan3 plan4)
122
125
  end
123
126
  end
124
127
 
@@ -126,31 +129,31 @@ module Dynflow
126
129
  prepare_and_save_plans
127
130
  if adapter.ordering_by.include?('state')
128
131
  loaded_plans = adapter.find_execution_plans(filters: { label: ['test1'] })
129
- loaded_plans.map { |h| h[:id] }.must_equal ['plan1']
132
+ _(loaded_plans.map { |h| h[:id] }).must_equal ['plan1']
130
133
  loaded_plans = adapter.find_execution_plans(filters: { state: ['paused'] })
131
- loaded_plans.map { |h| h[:id] }.must_equal ['plan1', 'plan3', 'plan4']
134
+ _(loaded_plans.map { |h| h[:id] }).must_equal ['plan1', 'plan3', 'plan4']
132
135
 
133
136
  loaded_plans = adapter.find_execution_plans(filters: { state: ['stopped'] })
134
- loaded_plans.map { |h| h[:id] }.must_equal ['plan2']
137
+ _(loaded_plans.map { |h| h[:id] }).must_equal ['plan2']
135
138
 
136
139
  loaded_plans = adapter.find_execution_plans(filters: { state: [] })
137
- loaded_plans.map { |h| h[:id] }.must_equal []
140
+ _(loaded_plans.map { |h| h[:id] }).must_equal []
138
141
 
139
142
  loaded_plans = adapter.find_execution_plans(filters: { state: ['stopped', 'paused'] })
140
- loaded_plans.map { |h| h[:id] }.must_equal %w(plan1 plan2 plan3 plan4)
143
+ _(loaded_plans.map { |h| h[:id] }).must_equal %w(plan1 plan2 plan3 plan4)
141
144
 
142
145
  loaded_plans = adapter.find_execution_plans(filters: { 'state' => ['stopped', 'paused'] })
143
- loaded_plans.map { |h| h[:id] }.must_equal %w(plan1 plan2 plan3 plan4)
146
+ _(loaded_plans.map { |h| h[:id] }).must_equal %w(plan1 plan2 plan3 plan4)
144
147
 
145
148
  loaded_plans = adapter.find_execution_plans(filters: { label: ['test1'], :delayed => true })
146
- loaded_plans.must_be_empty
149
+ _(loaded_plans).must_be_empty
147
150
 
148
151
  adapter.save_delayed_plan('plan1',
149
152
  :execution_plan_uuid => 'plan1',
150
153
  :start_at => format_time(Time.now + 60),
151
154
  :start_before => format_time(Time.now - 60))
152
155
  loaded_plans = adapter.find_execution_plans(filters: { label: ['test1'], :delayed => true })
153
- loaded_plans.map { |h| h[:id] }.must_equal ['plan1']
156
+ _(loaded_plans.map { |h| h[:id] }).must_equal ['plan1']
154
157
  end
155
158
  end
156
159
  end
@@ -165,57 +168,57 @@ module Dynflow
165
168
  prepare_and_save_plans
166
169
  if adapter.ordering_by.include?('state')
167
170
  loaded_plans = adapter.find_execution_plan_counts(filters: { label: ['test1'] })
168
- loaded_plans.must_equal 1
171
+ _(loaded_plans).must_equal 1
169
172
  loaded_plans = adapter.find_execution_plan_counts(filters: { state: ['paused'] })
170
- loaded_plans.must_equal 3
173
+ _(loaded_plans).must_equal 3
171
174
 
172
175
  loaded_plans = adapter.find_execution_plan_counts(filters: { state: ['stopped'] })
173
- loaded_plans.must_equal 1
176
+ _(loaded_plans).must_equal 1
174
177
 
175
178
  loaded_plans = adapter.find_execution_plan_counts(filters: { state: [] })
176
- loaded_plans.must_equal 0
179
+ _(loaded_plans).must_equal 0
177
180
 
178
181
  loaded_plans = adapter.find_execution_plan_counts(filters: { state: ['stopped', 'paused'] })
179
- loaded_plans.must_equal 4
182
+ _(loaded_plans).must_equal 4
180
183
 
181
184
  loaded_plans = adapter.find_execution_plan_counts(filters: { 'state' => ['stopped', 'paused'] })
182
- loaded_plans.must_equal 4
185
+ _(loaded_plans).must_equal 4
183
186
 
184
187
  loaded_plans = adapter.find_execution_plan_counts(filters: { label: ['test1'], :delayed => true })
185
- loaded_plans.must_equal 0
188
+ _(loaded_plans).must_equal 0
186
189
 
187
190
  adapter.save_delayed_plan('plan1',
188
191
  :execution_plan_uuid => 'plan1',
189
192
  :start_at => format_time(Time.now + 60),
190
193
  :start_before => format_time(Time.now - 60))
191
194
  loaded_plans = adapter.find_execution_plan_counts(filters: { label: ['test1'], :delayed => true })
192
- loaded_plans.must_equal 1
195
+ _(loaded_plans).must_equal 1
193
196
  end
194
197
  end
195
198
  end
196
199
 
197
200
  describe '#load_execution_plan and #save_execution_plan' do
198
201
  it 'serializes/deserializes the plan data' do
199
- -> { adapter.load_execution_plan('plan1') }.must_raise KeyError
202
+ _(-> { adapter.load_execution_plan('plan1') }).must_raise KeyError
200
203
  plan = prepare_and_save_plans.first
201
204
  loaded_plan = adapter.load_execution_plan('plan1')
202
- loaded_plan[:id].must_equal 'plan1'
203
- loaded_plan['id'].must_equal 'plan1'
205
+ _(loaded_plan[:id]).must_equal 'plan1'
206
+ _(loaded_plan['id']).must_equal 'plan1'
204
207
 
205
208
  assert_equal_attributes!(plan, loaded_plan)
206
209
 
207
210
  adapter.save_execution_plan('plan1', nil)
208
- -> { adapter.load_execution_plan('plan1') }.must_raise KeyError
211
+ _(-> { adapter.load_execution_plan('plan1') }).must_raise KeyError
209
212
  end
210
213
  end
211
214
 
212
215
  describe '#delete_execution_plans' do
213
216
  it 'deletes selected execution plans, including steps and actions' do
214
217
  prepare_plans_with_steps
215
- adapter.delete_execution_plans('uuid' => 'plan1').must_equal 1
216
- -> { adapter.load_execution_plan('plan1') }.must_raise KeyError
217
- -> { adapter.load_action('plan1', action_data[:id]) }.must_raise KeyError
218
- -> { adapter.load_step('plan1', step_data[:id]) }.must_raise KeyError
218
+ _(adapter.delete_execution_plans('uuid' => 'plan1')).must_equal 1
219
+ _(-> { adapter.load_execution_plan('plan1') }).must_raise KeyError
220
+ _(-> { adapter.load_action('plan1', action_data[:id]) }).must_raise KeyError
221
+ _(-> { adapter.load_step('plan1', step_data[:id]) }).must_raise KeyError
219
222
 
220
223
  # testing that no other plans where affected
221
224
  adapter.load_execution_plan('plan2')
@@ -223,16 +226,16 @@ module Dynflow
223
226
  adapter.load_step('plan2', step_data[:id])
224
227
 
225
228
  prepare_plans_with_steps
226
- adapter.delete_execution_plans('state' => 'paused').must_equal 3
227
- -> { adapter.load_execution_plan('plan1') }.must_raise KeyError
229
+ _(adapter.delete_execution_plans('state' => 'paused')).must_equal 3
230
+ _(-> { adapter.load_execution_plan('plan1') }).must_raise KeyError
228
231
  adapter.load_execution_plan('plan2') # nothing raised
229
- -> { adapter.load_execution_plan('plan3') }.must_raise KeyError
232
+ _(-> { adapter.load_execution_plan('plan3') }).must_raise KeyError
230
233
  end
231
234
 
232
235
  it 'creates backup dir and produce backup including steps and actions' do
233
236
  prepare_plans_with_steps
234
237
  Dir.mktmpdir do |backup_dir|
235
- adapter.delete_execution_plans({'uuid' => 'plan1'}, 100, backup_dir).must_equal 1
238
+ _(adapter.delete_execution_plans({'uuid' => 'plan1'}, 100, backup_dir)).must_equal 1
236
239
  plans = CSV.read(backup_dir + "/execution_plans.csv", :headers => true)
237
240
  assert_equal 1, plans.count
238
241
  assert_equal 'plan1', plans.first.to_hash['uuid']
@@ -251,16 +254,16 @@ module Dynflow
251
254
  prepare_and_save_plans
252
255
  action = action_data.dup
253
256
  action_id = action_data[:id]
254
- -> { adapter.load_action('plan1', action_id) }.must_raise KeyError
257
+ _(-> { adapter.load_action('plan1', action_id) }).must_raise KeyError
255
258
 
256
259
  prepare_action('plan1')
257
260
  loaded_action = adapter.load_action('plan1', action_id)
258
- loaded_action[:id].must_equal action_id
261
+ _(loaded_action[:id]).must_equal action_id
259
262
 
260
263
  assert_equal_attributes!(action, loaded_action)
261
264
 
262
265
  adapter.save_action('plan1', action_id, nil)
263
- -> { adapter.load_action('plan1', action_id) }.must_raise KeyError
266
+ _(-> { adapter.load_action('plan1', action_id) }).must_raise KeyError
264
267
 
265
268
  adapter.save_execution_plan('plan1', nil)
266
269
  end
@@ -269,9 +272,9 @@ module Dynflow
269
272
  prepare_and_save_plans
270
273
  prepare_action('plan1')
271
274
  loaded_data = adapter.load_actions_attributes('plan1', [:id, :run_step_id]).first
272
- loaded_data.keys.count.must_equal 2
273
- loaded_data[:id].must_equal action_data[:id]
274
- loaded_data[:run_step_id].must_equal action_data[:run_step_id]
275
+ _(loaded_data.keys.count).must_equal 2
276
+ _(loaded_data[:id]).must_equal action_data[:id]
277
+ _(loaded_data[:run_step_id]).must_equal action_data[:run_step_id]
275
278
  end
276
279
 
277
280
  it 'allows to load actions in bulk using #load_actions' do
@@ -279,7 +282,7 @@ module Dynflow
279
282
  prepare_action('plan1')
280
283
  action = action_data.dup
281
284
  loaded_actions = adapter.load_actions('plan1', [1])
282
- loaded_actions.count.must_equal 1
285
+ _(loaded_actions.count).must_equal 1
283
286
  loaded_action = loaded_actions.first
284
287
 
285
288
  assert_equal_attributes!(action, loaded_action)
@@ -292,7 +295,7 @@ module Dynflow
292
295
  step_id = step_data[:id]
293
296
  prepare_and_save_step('plan1')
294
297
  loaded_step = adapter.load_step('plan1', step_id)
295
- loaded_step[:id].must_equal step_id
298
+ _(loaded_step[:id]).must_equal step_id
296
299
 
297
300
  assert_equal_attributes!(step_data, loaded_step)
298
301
  end
@@ -309,8 +312,8 @@ module Dynflow
309
312
  adapter.save_delayed_plan('plan4', :execution_plan_uuid => 'plan4', :frozen => false, :start_at => format_time(start_time - 60),
310
313
  :start_before => format_time(start_time - 60))
311
314
  plans = adapter.find_past_delayed_plans(start_time)
312
- plans.length.must_equal 3
313
- plans.map { |plan| plan[:execution_plan_uuid] }.must_equal %w(plan2 plan4 plan1)
315
+ _(plans.length).must_equal 3
316
+ _(plans.map { |plan| plan[:execution_plan_uuid] }).must_equal %w(plan2 plan4 plan1)
314
317
  end
315
318
 
316
319
  it 'does not find plans that are frozen' do
@@ -323,8 +326,8 @@ module Dynflow
323
326
  :start_before => format_time(start_time - 60))
324
327
 
325
328
  plans = adapter.find_past_delayed_plans(start_time)
326
- plans.length.must_equal 1
327
- plans.first[:execution_plan_uuid].must_equal 'plan1'
329
+ _(plans.length).must_equal 1
330
+ _(plans.first[:execution_plan_uuid]).must_equal 'plan1'
328
331
  end
329
332
  end
330
333
  end
@@ -342,11 +345,11 @@ module Dynflow
342
345
  adapter.class::META_DATA.fetch(:execution_plan).each do |name|
343
346
  value = original.fetch(name.to_sym)
344
347
  if value.nil?
345
- stored.fetch(name.to_sym).must_be_nil
348
+ assert_nil stored.fetch(name.to_sym)
346
349
  elsif value.is_a?(Time)
347
- stored.fetch(name.to_sym).inspect.must_equal value.inspect
350
+ _(stored.fetch(name.to_sym).inspect).must_equal value.inspect
348
351
  else
349
- stored.fetch(name.to_sym).must_equal value
352
+ _(stored.fetch(name.to_sym)).must_equal value
350
353
  end
351
354
  end
352
355
  end
@@ -356,8 +359,8 @@ module Dynflow
356
359
  client_world_id = '5678'
357
360
  executor_world_id = '1234'
358
361
  envelope_hash = ->(envelope) { Dynflow::Utils.indifferent_hash(Dynflow.serializer.dump(envelope)) }
359
- executor_envelope = envelope_hash.call(Dispatcher::Envelope[123, client_world_id, executor_world_id, Dispatcher::Execution['111']])
360
- client_envelope = envelope_hash.call(Dispatcher::Envelope[123, executor_world_id, client_world_id, Dispatcher::Accepted])
362
+ executor_envelope = envelope_hash.call(Dispatcher::Envelope['123', client_world_id, executor_world_id, Dispatcher::Execution['111']])
363
+ client_envelope = envelope_hash.call(Dispatcher::Envelope['123', executor_world_id, client_world_id, Dispatcher::Accepted])
361
364
  envelopes = [client_envelope, executor_envelope]
362
365
 
363
366
  envelopes.each { |e| adapter.push_envelope(e) }
@@ -418,8 +421,8 @@ module Dynflow
418
421
 
419
422
  # Check the plan has the changed columns populated
420
423
  raw_plan = db[:dynflow_execution_plans].where(:uuid => 'plan1').first
421
- raw_plan[:state].must_equal 'stopped'
422
- raw_plan[:result].must_equal 'success'
424
+ _(raw_plan[:state]).must_equal 'stopped'
425
+ _(raw_plan[:result]).must_equal 'success'
423
426
 
424
427
  # Load the plan and assert it doesn't read attributes from data
425
428
  loaded_plan = adapter.load_execution_plan(plan[:id])