dynflow 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
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])