ruote 2.2.0 → 2.3.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 (305) hide show
  1. data/CHANGELOG.txt +166 -1
  2. data/CREDITS.txt +36 -17
  3. data/LICENSE.txt +1 -1
  4. data/README.rdoc +1 -7
  5. data/Rakefile +38 -29
  6. data/TODO.txt +93 -52
  7. data/lib/ruote-fs.rb +3 -0
  8. data/lib/ruote.rb +5 -1
  9. data/lib/ruote/context.rb +140 -35
  10. data/lib/ruote/dashboard.rb +1247 -0
  11. data/lib/ruote/{engine → dboard}/process_error.rb +22 -2
  12. data/lib/ruote/dboard/process_status.rb +587 -0
  13. data/lib/ruote/engine.rb +6 -871
  14. data/lib/ruote/exp/command.rb +7 -2
  15. data/lib/ruote/exp/commanded.rb +2 -2
  16. data/lib/ruote/exp/condition.rb +38 -13
  17. data/lib/ruote/exp/fe_add_branches.rb +1 -1
  18. data/lib/ruote/exp/fe_apply.rb +1 -1
  19. data/lib/ruote/exp/fe_await.rb +357 -0
  20. data/lib/ruote/exp/fe_cancel_process.rb +17 -3
  21. data/lib/ruote/exp/fe_command.rb +8 -4
  22. data/lib/ruote/exp/fe_concurrence.rb +218 -18
  23. data/lib/ruote/exp/fe_concurrent_iterator.rb +71 -10
  24. data/lib/ruote/exp/fe_cron.rb +3 -10
  25. data/lib/ruote/exp/fe_cursor.rb +14 -4
  26. data/lib/ruote/exp/fe_define.rb +3 -1
  27. data/lib/ruote/exp/fe_echo.rb +1 -1
  28. data/lib/ruote/exp/fe_equals.rb +1 -1
  29. data/lib/ruote/exp/fe_error.rb +1 -1
  30. data/lib/ruote/exp/fe_filter.rb +163 -4
  31. data/lib/ruote/exp/fe_forget.rb +21 -4
  32. data/lib/ruote/exp/fe_given.rb +1 -1
  33. data/lib/ruote/exp/fe_if.rb +1 -1
  34. data/lib/ruote/exp/fe_inc.rb +102 -35
  35. data/lib/ruote/exp/fe_iterator.rb +47 -12
  36. data/lib/ruote/exp/fe_listen.rb +96 -11
  37. data/lib/ruote/exp/fe_lose.rb +31 -4
  38. data/lib/ruote/exp/fe_noop.rb +1 -1
  39. data/lib/ruote/exp/fe_on_error.rb +109 -0
  40. data/lib/ruote/exp/fe_once.rb +10 -19
  41. data/lib/ruote/exp/fe_participant.rb +90 -28
  42. data/lib/ruote/exp/fe_read.rb +69 -0
  43. data/lib/ruote/exp/fe_redo.rb +3 -2
  44. data/lib/ruote/exp/fe_ref.rb +57 -27
  45. data/lib/ruote/exp/fe_registerp.rb +1 -3
  46. data/lib/ruote/exp/fe_reserve.rb +1 -1
  47. data/lib/ruote/exp/fe_restore.rb +6 -6
  48. data/lib/ruote/exp/fe_save.rb +12 -19
  49. data/lib/ruote/exp/fe_sequence.rb +38 -2
  50. data/lib/ruote/exp/fe_set.rb +143 -40
  51. data/lib/ruote/exp/{fe_let.rb → fe_stall.rb} +7 -38
  52. data/lib/ruote/exp/fe_subprocess.rb +8 -2
  53. data/lib/ruote/exp/fe_that.rb +1 -1
  54. data/lib/ruote/exp/fe_undo.rb +40 -4
  55. data/lib/ruote/exp/fe_unregisterp.rb +1 -3
  56. data/lib/ruote/exp/fe_wait.rb +12 -25
  57. data/lib/ruote/exp/{flowexpression.rb → flow_expression.rb} +375 -229
  58. data/lib/ruote/exp/iterator.rb +2 -2
  59. data/lib/ruote/exp/merge.rb +78 -17
  60. data/lib/ruote/exp/ro_attributes.rb +46 -36
  61. data/lib/ruote/exp/ro_filters.rb +34 -8
  62. data/lib/ruote/exp/ro_on_x.rb +431 -0
  63. data/lib/ruote/exp/ro_persist.rb +19 -7
  64. data/lib/ruote/exp/ro_timers.rb +123 -0
  65. data/lib/ruote/exp/ro_variables.rb +90 -29
  66. data/lib/ruote/fei.rb +57 -3
  67. data/lib/ruote/fs.rb +3 -0
  68. data/lib/ruote/id/mnemo_wfid_generator.rb +30 -7
  69. data/lib/ruote/id/wfid_generator.rb +17 -38
  70. data/lib/ruote/log/default_history.rb +23 -9
  71. data/lib/ruote/log/fancy_printing.rb +265 -0
  72. data/lib/ruote/log/storage_history.rb +23 -13
  73. data/lib/ruote/log/wait_logger.rb +224 -17
  74. data/lib/ruote/observer.rb +82 -0
  75. data/lib/ruote/part/block_participant.rb +65 -28
  76. data/lib/ruote/part/code_participant.rb +81 -0
  77. data/lib/ruote/part/engine_participant.rb +7 -2
  78. data/lib/ruote/part/local_participant.rb +221 -21
  79. data/lib/ruote/part/no_op_participant.rb +1 -1
  80. data/lib/ruote/part/null_participant.rb +1 -1
  81. data/lib/ruote/part/participant.rb +50 -0
  82. data/lib/ruote/part/rev_participant.rb +178 -0
  83. data/lib/ruote/part/smtp_participant.rb +2 -2
  84. data/lib/ruote/part/storage_participant.rb +228 -60
  85. data/lib/ruote/part/template.rb +1 -1
  86. data/lib/ruote/participant.rb +2 -0
  87. data/lib/ruote/reader.rb +205 -68
  88. data/lib/ruote/reader/json.rb +49 -0
  89. data/lib/ruote/reader/radial.rb +303 -0
  90. data/lib/ruote/reader/ruby_dsl.rb +44 -9
  91. data/lib/ruote/reader/xml.rb +11 -8
  92. data/lib/ruote/receiver/base.rb +98 -45
  93. data/lib/ruote/storage/base.rb +104 -35
  94. data/lib/ruote/storage/composite_storage.rb +50 -60
  95. data/lib/ruote/storage/fs_storage.rb +25 -34
  96. data/lib/ruote/storage/hash_storage.rb +38 -36
  97. data/lib/ruote/svc/dispatch_pool.rb +104 -35
  98. data/lib/ruote/svc/dollar_sub.rb +10 -8
  99. data/lib/ruote/svc/error_handler.rb +108 -52
  100. data/lib/ruote/svc/expression_map.rb +3 -3
  101. data/lib/ruote/svc/participant_list.rb +160 -55
  102. data/lib/ruote/svc/tracker.rb +31 -31
  103. data/lib/ruote/svc/treechecker.rb +28 -16
  104. data/lib/ruote/tree_dot.rb +1 -1
  105. data/lib/ruote/util/deep.rb +143 -0
  106. data/lib/ruote/util/filter.rb +125 -18
  107. data/lib/ruote/util/hashdot.rb +15 -13
  108. data/lib/ruote/util/look.rb +1 -1
  109. data/lib/ruote/util/lookup.rb +60 -22
  110. data/lib/ruote/util/misc.rb +63 -18
  111. data/lib/ruote/util/mpatch.rb +53 -0
  112. data/lib/ruote/util/ometa.rb +1 -2
  113. data/lib/ruote/util/process_observer.rb +177 -0
  114. data/lib/ruote/util/subprocess.rb +1 -1
  115. data/lib/ruote/util/time.rb +2 -2
  116. data/lib/ruote/util/tree.rb +64 -2
  117. data/lib/ruote/version.rb +3 -2
  118. data/lib/ruote/worker.rb +421 -92
  119. data/lib/ruote/workitem.rb +157 -22
  120. data/ruote.gemspec +15 -9
  121. data/test/bm/ci.rb +0 -2
  122. data/test/bm/ici.rb +0 -2
  123. data/test/bm/load_26c.rb +0 -3
  124. data/test/bm/mega.rb +0 -2
  125. data/test/functional/base.rb +57 -43
  126. data/test/functional/concurrent_base.rb +16 -13
  127. data/test/functional/ct_0_concurrence.rb +7 -11
  128. data/test/functional/ct_1_iterator.rb +9 -11
  129. data/test/functional/ct_2_cancel.rb +28 -17
  130. data/test/functional/eft_0_flow_expression.rb +35 -0
  131. data/test/functional/eft_10_cancel_process.rb +1 -1
  132. data/test/functional/eft_11_wait.rb +13 -13
  133. data/test/functional/eft_12_listen.rb +199 -66
  134. data/test/functional/eft_13_iterator.rb +95 -29
  135. data/test/functional/eft_14_cursor.rb +74 -24
  136. data/test/functional/eft_15_loop.rb +7 -7
  137. data/test/functional/eft_16_if.rb +1 -1
  138. data/test/functional/eft_17_equals.rb +1 -1
  139. data/test/functional/eft_18_concurrent_iterator.rb +156 -68
  140. data/test/functional/eft_19_reserve.rb +15 -15
  141. data/test/functional/eft_1_echo.rb +1 -1
  142. data/test/functional/eft_20_save.rb +51 -9
  143. data/test/functional/eft_21_restore.rb +1 -1
  144. data/test/functional/eft_22_noop.rb +1 -1
  145. data/test/functional/eft_23_apply.rb +1 -1
  146. data/test/functional/eft_24_add_branches.rb +7 -8
  147. data/test/functional/eft_25_command.rb +1 -1
  148. data/test/functional/eft_26_error.rb +11 -11
  149. data/test/functional/eft_27_inc.rb +111 -67
  150. data/test/functional/eft_28_once.rb +16 -16
  151. data/test/functional/eft_29_cron.rb +9 -9
  152. data/test/functional/eft_2_sequence.rb +23 -4
  153. data/test/functional/eft_30_ref.rb +36 -24
  154. data/test/functional/eft_31_registerp.rb +24 -24
  155. data/test/functional/eft_32_lose.rb +46 -20
  156. data/test/functional/eft_34_given.rb +1 -1
  157. data/test/functional/eft_35_filter.rb +161 -7
  158. data/test/functional/eft_36_read.rb +97 -0
  159. data/test/functional/{eft_0_process_definition.rb → eft_37_process_definition.rb} +4 -4
  160. data/test/functional/eft_38_on_error.rb +195 -0
  161. data/test/functional/eft_39_stall.rb +35 -0
  162. data/test/functional/eft_3_participant.rb +77 -22
  163. data/test/functional/eft_40_await.rb +297 -0
  164. data/test/functional/eft_4_set.rb +110 -11
  165. data/test/functional/eft_5_subprocess.rb +27 -5
  166. data/test/functional/eft_6_concurrence.rb +299 -60
  167. data/test/functional/eft_7_forget.rb +24 -22
  168. data/test/functional/eft_8_undo.rb +52 -15
  169. data/test/functional/eft_9_redo.rb +18 -20
  170. data/test/functional/ft_0_worker.rb +122 -13
  171. data/test/functional/ft_10_dollar.rb +77 -16
  172. data/test/functional/ft_11_recursion.rb +9 -9
  173. data/test/functional/ft_12_launchitem.rb +7 -9
  174. data/test/functional/ft_13_variables.rb +125 -22
  175. data/test/functional/ft_14_re_apply.rb +112 -56
  176. data/test/functional/ft_15_timeout.rb +64 -33
  177. data/test/functional/ft_16_participant_params.rb +59 -6
  178. data/test/functional/ft_17_conditional.rb +68 -2
  179. data/test/functional/ft_18_kill.rb +48 -30
  180. data/test/functional/ft_19_participant_code.rb +67 -0
  181. data/test/functional/ft_1_process_status.rb +222 -150
  182. data/test/functional/ft_20_storage_participant.rb +445 -44
  183. data/test/functional/ft_21_forget.rb +21 -26
  184. data/test/functional/ft_22_process_definitions.rb +8 -6
  185. data/test/functional/ft_23_load_defs.rb +29 -5
  186. data/test/functional/ft_24_block_participant.rb +199 -20
  187. data/test/functional/ft_25_receiver.rb +98 -46
  188. data/test/functional/ft_26_participant_rtimeout.rb +34 -26
  189. data/test/functional/ft_27_var_indirection.rb +40 -5
  190. data/test/functional/ft_28_null_noop_participants.rb +5 -5
  191. data/test/functional/ft_29_part_template.rb +2 -2
  192. data/test/functional/ft_2_errors.rb +106 -74
  193. data/test/functional/ft_30_smtp_participant.rb +7 -7
  194. data/test/functional/ft_31_part_blocking.rb +11 -11
  195. data/test/functional/ft_32_scope.rb +50 -0
  196. data/test/functional/ft_33_participant_subprocess_priority.rb +3 -3
  197. data/test/functional/ft_34_cursor_rewind.rb +14 -14
  198. data/test/functional/ft_35_add_service.rb +67 -9
  199. data/test/functional/ft_36_storage_history.rb +92 -24
  200. data/test/functional/ft_37_default_history.rb +35 -23
  201. data/test/functional/ft_38_participant_more.rb +189 -32
  202. data/test/functional/ft_39_wait_for.rb +25 -25
  203. data/test/functional/ft_3_participant_registration.rb +235 -107
  204. data/test/functional/ft_40_wait_logger.rb +105 -18
  205. data/test/functional/ft_41_participants.rb +13 -12
  206. data/test/functional/ft_42_storage_copy.rb +12 -12
  207. data/test/functional/ft_43_participant_on_reply.rb +85 -11
  208. data/test/functional/ft_44_var_participant.rb +5 -5
  209. data/test/functional/ft_45_participant_accept.rb +3 -3
  210. data/test/functional/ft_46_launch_single.rb +17 -17
  211. data/test/functional/ft_47_wfids.rb +41 -0
  212. data/test/functional/ft_48_lose.rb +19 -25
  213. data/test/functional/ft_49_engine_on_error.rb +54 -70
  214. data/test/functional/ft_4_cancel.rb +84 -26
  215. data/test/functional/ft_50_engine_config.rb +4 -4
  216. data/test/functional/ft_51_misc.rb +12 -12
  217. data/test/functional/ft_52_case.rb +17 -17
  218. data/test/functional/ft_53_engine_on_terminate.rb +18 -21
  219. data/test/functional/ft_54_patterns.rb +18 -16
  220. data/test/functional/ft_55_engine_participant.rb +55 -55
  221. data/test/functional/ft_56_filter_attribute.rb +90 -52
  222. data/test/functional/ft_57_rev_participant.rb +252 -0
  223. data/test/functional/ft_58_workitem.rb +150 -0
  224. data/test/functional/ft_59_pause.rb +329 -0
  225. data/test/functional/ft_5_on_error.rb +430 -77
  226. data/test/functional/ft_60_code_participant.rb +65 -0
  227. data/test/functional/ft_61_trailing_fields.rb +34 -0
  228. data/test/functional/ft_62_exp_name_and_dollar_substitution.rb +35 -0
  229. data/test/functional/ft_63_participants_221.rb +458 -0
  230. data/test/functional/ft_64_stash.rb +41 -0
  231. data/test/functional/ft_65_timers.rb +313 -0
  232. data/test/functional/ft_66_flank.rb +133 -0
  233. data/test/functional/ft_67_radial_misc.rb +34 -0
  234. data/test/functional/ft_68_reput.rb +72 -0
  235. data/test/functional/ft_69_worker_info.rb +56 -0
  236. data/test/functional/ft_6_on_cancel.rb +189 -36
  237. data/test/functional/ft_70_take_and_discard_attributes.rb +94 -0
  238. data/test/functional/ft_71_retries.rb +144 -0
  239. data/test/functional/ft_72_on_terminate.rb +60 -0
  240. data/test/functional/ft_73_raise_msg.rb +107 -0
  241. data/test/functional/ft_74_respark.rb +106 -0
  242. data/test/functional/ft_75_context.rb +66 -0
  243. data/test/functional/ft_76_observer.rb +53 -0
  244. data/test/functional/ft_77_process_observer.rb +157 -0
  245. data/test/functional/ft_78_part_participant.rb +37 -0
  246. data/test/functional/ft_7_tags.rb +238 -50
  247. data/test/functional/ft_8_participant_consumption.rb +27 -21
  248. data/test/functional/ft_9_subprocesses.rb +48 -18
  249. data/test/functional/restart_base.rb +4 -6
  250. data/test/functional/rt_0_wait.rb +10 -10
  251. data/test/functional/rt_1_listen.rb +6 -6
  252. data/test/functional/rt_2_errors.rb +12 -12
  253. data/test/functional/rt_3_once.rb +17 -12
  254. data/test/functional/rt_4_cron.rb +17 -17
  255. data/test/functional/rt_5_timeout.rb +13 -13
  256. data/test/functional/signals.rb +103 -0
  257. data/test/functional/storage.rb +730 -0
  258. data/test/functional/storage_helper.rb +48 -35
  259. data/test/functional/test.rb +6 -2
  260. data/test/misc/idle.rb +21 -0
  261. data/test/misc/light.rb +29 -0
  262. data/test/path_helper.rb +1 -1
  263. data/test/test.rb +2 -5
  264. data/test/test_helper.rb +13 -0
  265. data/test/unit/test.rb +1 -4
  266. data/test/unit/ut_0_ruby_reader.rb +25 -9
  267. data/test/unit/ut_10_participants.rb +47 -0
  268. data/test/unit/ut_11_lookup.rb +59 -2
  269. data/test/unit/ut_12_wait_logger.rb +123 -0
  270. data/test/unit/ut_14_is_uri.rb +1 -1
  271. data/test/unit/ut_15_util.rb +1 -1
  272. data/test/unit/ut_16_reader.rb +136 -14
  273. data/test/unit/ut_17_merge.rb +155 -0
  274. data/test/unit/ut_19_part_template.rb +1 -1
  275. data/test/unit/ut_1_fei.rb +11 -2
  276. data/test/unit/ut_20_composite_storage.rb +27 -1
  277. data/test/unit/{ut_21_participant_list.rb → ut_21_svc_participant_list.rb} +2 -3
  278. data/test/unit/ut_22_filter.rb +231 -10
  279. data/test/unit/ut_23_svc_tracker.rb +48 -0
  280. data/test/unit/ut_24_radial_reader.rb +458 -0
  281. data/test/unit/ut_25_process_status.rb +143 -0
  282. data/test/unit/ut_26_deep.rb +131 -0
  283. data/test/unit/ut_2_dashboard.rb +114 -0
  284. data/test/unit/ut_3_worker.rb +54 -0
  285. data/test/unit/ut_4_expmap.rb +1 -1
  286. data/test/unit/ut_5_tree.rb +23 -23
  287. data/test/unit/ut_6_condition.rb +71 -29
  288. data/test/unit/ut_7_workitem.rb +18 -4
  289. data/test/unit/ut_8_tree_to_dot.rb +1 -1
  290. data/test/unit/ut_9_xml_reader.rb +1 -1
  291. metadata +142 -63
  292. data/jruby_issue.txt +0 -32
  293. data/lib/ruote/engine/process_status.rb +0 -403
  294. data/lib/ruote/log/pretty.rb +0 -165
  295. data/lib/ruote/log/test_logger.rb +0 -204
  296. data/lib/ruote/util/serializer.rb +0 -103
  297. data/phil.txt +0 -14
  298. data/test/functional/eft_33_let.rb +0 -31
  299. data/test/functional/ft_19_alias.rb +0 -33
  300. data/test/functional/ft_47_wfid_generator.rb +0 -54
  301. data/test/unit/storage.rb +0 -403
  302. data/test/unit/storages.rb +0 -37
  303. data/test/unit/ut_13_serializer.rb +0 -65
  304. data/test/unit/ut_18_engine.rb +0 -47
  305. data/test/unit/ut_3_wait_logger.rb +0 -39
@@ -5,7 +5,7 @@
5
5
  # Wed Jul 21 13:37:59 JST 2010
6
6
  #
7
7
 
8
- require File.join(File.dirname(__FILE__), 'base')
8
+ require File.expand_path('../base', __FILE__)
9
9
 
10
10
  require 'ruote/part/local_participant'
11
11
 
@@ -53,8 +53,8 @@ class FtParticipantAcceptTest < Test::Unit::TestCase
53
53
  end
54
54
  end
55
55
 
56
- @engine.register_participant 'a.+', MyParticipant, 'filter' => '^ab'
57
- @engine.register_participant '.+', MyOtherParticipant
56
+ @dashboard.register_participant 'a.+', MyParticipant, 'filter' => '^ab'
57
+ @dashboard.register_participant '.+', MyOtherParticipant
58
58
 
59
59
  #noisy
60
60
 
@@ -5,7 +5,7 @@
5
5
  # Sat Sep 25 23:24:16 JST 2010
6
6
  #
7
7
 
8
- require File.join(File.dirname(__FILE__), 'base')
8
+ require File.expand_path('../base', __FILE__)
9
9
 
10
10
 
11
11
  class FtLaunchSingleTest < Test::Unit::TestCase
@@ -14,7 +14,7 @@ class FtLaunchSingleTest < Test::Unit::TestCase
14
14
  def test_no_name_singles_are_rejected
15
15
 
16
16
  assert_raise ArgumentError do
17
- @engine.launch_single(Ruote.process_definition do
17
+ @dashboard.launch_single(Ruote.process_definition do
18
18
  wait '2y'
19
19
  echo 'over.'
20
20
  end)
@@ -30,22 +30,22 @@ class FtLaunchSingleTest < Test::Unit::TestCase
30
30
 
31
31
  #noisy
32
32
 
33
- wfid = @engine.launch_single(pdef)
33
+ wfid = @dashboard.launch_single(pdef)
34
34
 
35
35
  assert_equal(
36
36
  wfid,
37
- @engine.storage.get('variables', 'singles')['h']['unique_process'].first)
37
+ @dashboard.storage.get('variables', 'singles')['h']['unique_process'].first)
38
38
 
39
- @engine.wait_for(2)
39
+ @dashboard.wait_for(2)
40
40
 
41
- assert_not_nil @engine.process(wfid)
41
+ assert_not_nil @dashboard.process(wfid)
42
42
 
43
- wfid1 = @engine.launch_single(pdef)
43
+ wfid1 = @dashboard.launch_single(pdef)
44
44
 
45
45
  sleep 1
46
46
 
47
47
  assert_equal wfid, wfid1
48
- assert_equal 1, @engine.processes.size
48
+ assert_equal 1, @dashboard.processes.size
49
49
  end
50
50
 
51
51
  # Fighting the issue reported by Gonzalo in
@@ -60,24 +60,24 @@ class FtLaunchSingleTest < Test::Unit::TestCase
60
60
 
61
61
  #noisy
62
62
 
63
- wfid0 = @engine.launch_single(pdef)
63
+ wfid0 = @dashboard.launch_single(pdef)
64
64
 
65
65
  sleep 0.700
66
- assert_not_nil @engine.process(wfid0)
66
+ assert_not_nil @dashboard.process(wfid0)
67
67
 
68
- @engine.cancel(wfid0)
68
+ @dashboard.cancel(wfid0)
69
69
 
70
- @engine.wait_for(6)
71
- assert_nil @engine.process(wfid0)
70
+ @dashboard.wait_for('terminated')
71
+ assert_nil @dashboard.process(wfid0)
72
72
 
73
73
  sleep 0.700
74
- wfid1 = @engine.launch_single(pdef)
74
+ wfid1 = @dashboard.launch_single(pdef)
75
75
 
76
- @engine.wait_for(2)
76
+ @dashboard.wait_for('apply')
77
77
 
78
78
  assert_not_equal wfid0, wfid1
79
- assert_nil @engine.process(wfid0)
80
- assert_not_nil @engine.process(wfid1)
79
+ assert_nil @dashboard.process(wfid0)
80
+ assert_not_nil @dashboard.process(wfid1)
81
81
  end
82
82
  end
83
83
 
@@ -0,0 +1,41 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Sat Oct 23 14:22:15 JST 2010
6
+ #
7
+
8
+ require File.expand_path('../base', __FILE__)
9
+ require_json
10
+
11
+
12
+ class FtWfidGeneratorTest < Test::Unit::TestCase
13
+ include FunctionalBase
14
+
15
+ # an old test, brought back
16
+ #
17
+ def test_generate_unique_ids
18
+
19
+ n = 10_000
20
+
21
+ wfids = (1..n).collect { @dashboard.context.wfidgen.generate }
22
+
23
+ assert_equal n, wfids.uniq.size
24
+ end
25
+
26
+ def test_launcher_decides_wfid
27
+
28
+ Rufus::Json.detect_backend
29
+
30
+ i = '20120315-0557-nada'
31
+
32
+ wfid = @dashboard.launch(Ruote.define { echo 'a' }, :wfid => i)
33
+ r = @dashboard.wait_for(wfid)
34
+
35
+ assert_equal i, wfid
36
+ assert_equal [ 'wfid' ], r['workitem']['fields'].keys
37
+
38
+ assert_equal 'terminated', r['action']
39
+ end
40
+ end
41
+
@@ -5,7 +5,7 @@
5
5
  # Thu Nov 25 11:20:04 JST 2010
6
6
  #
7
7
 
8
- require File.join(File.dirname(__FILE__), 'base')
8
+ require File.expand_path('../base', __FILE__)
9
9
 
10
10
  #require 'ruote/part/storage_participant'
11
11
 
@@ -22,21 +22,19 @@ class FtLoseTest < Test::Unit::TestCase
22
22
  end
23
23
  end
24
24
 
25
- @engine.register_participant '.+' do |wi|
26
- @tracer << wi.participant_name + "\n"
25
+ @dashboard.register_participant '.+' do |wi|
26
+ tracer << wi.participant_name + "\n"
27
27
  end
28
28
 
29
- #@engine.noisy = true
29
+ wfid = @dashboard.launch(pdef)
30
30
 
31
- wfid = @engine.launch(pdef)
32
-
33
- @engine.wait_for(6)
31
+ @dashboard.wait_for(6)
34
32
 
35
33
  #sleep 0.500
36
34
 
37
35
  assert_equal 'alpha', @tracer.to_s
38
36
 
39
- ps = @engine.process(wfid)
37
+ ps = @dashboard.process(wfid)
40
38
 
41
39
  assert_equal 3, ps.expressions.size
42
40
  assert_equal 0, ps.errors.size
@@ -54,20 +52,18 @@ class FtLoseTest < Test::Unit::TestCase
54
52
  end
55
53
  end
56
54
 
57
- @engine.register_participant '.+' do |wi|
58
- @tracer << wi.participant_name + "\n"
55
+ @dashboard.register_participant '.+' do |wi|
56
+ tracer << wi.participant_name + "\n"
59
57
  end
60
58
 
61
- #@engine.noisy = true
62
-
63
- wfid = @engine.launch(pdef)
59
+ wfid = @dashboard.launch(pdef)
64
60
 
65
- @engine.wait_for(12)
61
+ 2.times { @dashboard.wait_for('dispatched') }
66
62
 
67
63
  assert_match /alpha/, @tracer.to_s
68
64
  assert_match /bravo/, @tracer.to_s
69
65
 
70
- ps = @engine.process(wfid)
66
+ ps = @dashboard.process(wfid)
71
67
 
72
68
  assert_equal 3, ps.expressions.size
73
69
  assert_equal 0, ps.errors.size
@@ -84,29 +80,27 @@ class FtLoseTest < Test::Unit::TestCase
84
80
  end
85
81
  end
86
82
 
87
- @engine.register_participant '.+' do |wi|
88
- @tracer << wi.participant_name + "\n"
83
+ @dashboard.register_participant '.+' do |wi|
84
+ tracer << wi.participant_name + "\n"
89
85
  end
90
86
 
91
- #@engine.noisy = true
92
-
93
- wfid = @engine.launch(pdef)
87
+ wfid = @dashboard.launch(pdef)
94
88
 
95
- @engine.wait_for(12)
89
+ @dashboard.wait_for(12)
96
90
  # until bravo is reached
97
91
 
98
92
  #sleep 0.500
99
93
 
100
94
  assert_equal "alpha\nbravo", @tracer.to_s
101
95
 
102
- bravo = @engine.process(wfid).expressions.last
96
+ bravo = @dashboard.process(wfid).expressions.last
103
97
 
104
- @engine.cancel_expression(bravo.fei)
98
+ @dashboard.cancel_expression(bravo.fei)
105
99
 
106
- @engine.wait_for(wfid)
100
+ @dashboard.wait_for(wfid)
107
101
 
108
102
  assert_equal "alpha\nbravo\ncharly", @tracer.to_s
109
- assert_nil @engine.process(wfid)
103
+ assert_nil @dashboard.process(wfid)
110
104
  end
111
105
  end
112
106
 
@@ -5,7 +5,7 @@
5
5
  # Mon Dec 6 10:02:56 JST 2010
6
6
  #
7
7
 
8
- require File.join(File.dirname(__FILE__), 'base')
8
+ require File.expand_path('../base', __FILE__)
9
9
 
10
10
  require 'ruote/participant'
11
11
 
@@ -15,21 +15,21 @@ class FtEngineOnErrorTest < Test::Unit::TestCase
15
15
 
16
16
  def setup
17
17
  super
18
- @engine.context.stash[:seen] = []
18
+ @dashboard.context.stash[:seen] = []
19
19
  end
20
20
 
21
21
  def test_no_on_error
22
22
 
23
- assert_nil @engine.on_error
23
+ assert_nil @dashboard.on_error
24
24
  end
25
25
 
26
26
  def test_on_error
27
27
 
28
- @engine.on_error = 'supervisor'
28
+ @dashboard.on_error = 'supervisor'
29
29
 
30
30
  assert_equal(
31
31
  [ 'define', {}, [ [ 'supervisor', {}, [] ] ] ],
32
- @engine.on_error)
32
+ @dashboard.on_error)
33
33
  end
34
34
 
35
35
  class Supervisor
@@ -50,58 +50,54 @@ class FtEngineOnErrorTest < Test::Unit::TestCase
50
50
 
51
51
  def test_on_error_participant
52
52
 
53
- @engine.register 'supervisor', Supervisor, 'flavour' => 'vanilla'
54
- @engine.on_error = 'supervisor'
53
+ @dashboard.register 'supervisor', Supervisor, 'flavour' => 'vanilla'
54
+ @dashboard.on_error = 'supervisor'
55
55
 
56
- #@engine.noisy = true
56
+ #@dashboard.noisy = true
57
57
 
58
- wfid = @engine.launch(WRONGY, 'colour' => 'yellow')
58
+ wfid = @dashboard.launch(WRONGY, 'colour' => 'yellow')
59
59
 
60
- @engine.wait_for(wfid)
61
- @engine.wait_for(:supervisor)
60
+ @dashboard.wait_for(wfid)
61
+ @dashboard.wait_for(:supervisor)
62
+ @dashboard.wait_for(1)
62
63
 
63
- sleep 0.350
64
- # unfortunately waiting for a participant triggers right
65
- # before the consume
66
-
67
- assert_equal 1, @engine.context.stash[:seen].size
68
- assert_equal 'yellow', @engine.context.stash[:seen].first.fields['colour']
69
- assert_equal 'vanilla', @engine.context.stash[:seen].first.fields['flavour']
70
- assert_not_nil @engine.context.stash[:seen].first.fei.subid
64
+ assert_equal 1, @dashboard.context.stash[:seen].size
65
+ assert_equal 'yellow', @dashboard.context.stash[:seen].first.fields['colour']
66
+ assert_equal 'vanilla', @dashboard.context.stash[:seen].first.fields['flavour']
67
+ assert_not_nil @dashboard.context.stash[:seen].first.fei.subid
71
68
 
72
69
  # TODO : look for error message and such
73
70
 
74
- @engine.wait_for(@engine.context.stash[:seen].first.wfid)
71
+ @dashboard.wait_for(@dashboard.context.stash[:seen].first.wfid)
75
72
 
76
- assert_equal 1, @engine.processes.size
73
+ assert_equal 1, @dashboard.processes.size
77
74
  end
78
75
 
79
76
  def test_on_error_engine_subprocess_name
80
77
 
81
- @engine.variables['trigger_alarm'] = Ruote.define do
78
+ @dashboard.variables['trigger_alarm'] = Ruote.define do
82
79
  echo '${colour} seen'
83
80
  end
84
- @engine.on_error = 'trigger_alarm'
85
-
86
- #@engine.noisy = true
81
+ @dashboard.on_error = 'trigger_alarm'
87
82
 
88
- wfid = @engine.launch(WRONGY, 'colour' => 'red')
83
+ #@dashboard.noisy = true
89
84
 
90
- @engine.wait_for(wfid)
85
+ wfid = @dashboard.launch(WRONGY, 'colour' => 'red')
91
86
 
92
- sleep 0.700
93
- # letting the subprocess getting triggered
87
+ @dashboard.wait_for(11)
94
88
 
95
89
  assert_equal 'red seen', @tracer.to_s
96
- assert_equal 1, @engine.processes.size
90
+ assert_equal 1, @dashboard.processes.size
97
91
  end
98
92
 
99
93
  def test_on_error_local_subprocess_name
100
94
 
101
- @engine.variables['trigger_alarm'] = Ruote.define do
95
+ @dashboard.variables['trigger_alarm'] = Ruote.define do
102
96
  echo '${colour} seen'
103
97
  end
104
- @engine.on_error = 'trigger_alarm'
98
+ @dashboard.on_error = 'trigger_alarm'
99
+
100
+ #@dashboard.noisy = true
105
101
 
106
102
  pdef = Ruote.define do
107
103
  error 'still wrong'
@@ -110,70 +106,59 @@ class FtEngineOnErrorTest < Test::Unit::TestCase
110
106
  end
111
107
  end
112
108
 
113
- wfid = @engine.launch(pdef, 'colour' => 'green')
114
-
115
- @engine.wait_for(wfid)
109
+ wfid = @dashboard.launch(pdef, 'colour' => 'green')
116
110
 
117
- sleep 0.700
118
- # letting the subprocess getting triggered
111
+ @dashboard.wait_for(14)
119
112
 
120
113
  assert_equal 'saw green', @tracer.to_s
121
- assert_equal 1, @engine.processes.size
114
+ assert_equal 1, @dashboard.processes.size
122
115
  end
123
116
 
124
117
  def test_on_error_subprocess_tree
125
118
 
126
- @engine.on_error = Ruote.define do
119
+ @dashboard.on_error = Ruote.define do
127
120
  echo 'case ${colour}'
128
121
  end
129
122
 
130
- wfid = @engine.launch(WRONGY, 'colour' => 'blue')
123
+ #@dashboard.noisy = true
131
124
 
132
- @engine.wait_for(wfid)
125
+ wfid = @dashboard.launch(WRONGY, 'colour' => 'blue')
133
126
 
134
- sleep 0.700
135
- # letting the subprocess getting triggered
127
+ @dashboard.wait_for(7)
136
128
 
137
129
  assert_equal 'case blue', @tracer.to_s
138
- assert_equal 1, @engine.processes.size
130
+ assert_equal 1, @dashboard.processes.size
139
131
  end
140
132
 
141
133
  def test_on_error_workitem
142
134
 
143
- @engine.register 'supervisor', Supervisor
144
- @engine.on_error = 'supervisor'
135
+ @dashboard.register 'supervisor', Supervisor
136
+ @dashboard.on_error = 'supervisor'
145
137
 
146
- #@engine.noisy = true
138
+ #@dashboard.noisy = true
147
139
 
148
- wfid = @engine.launch(WRONGY, 'colour' => 'crimson')
140
+ wfid = @dashboard.launch(WRONGY, 'colour' => 'crimson')
149
141
 
150
- @engine.wait_for(wfid)
151
- @engine.wait_for(:supervisor)
142
+ @dashboard.wait_for(wfid)
143
+ @dashboard.wait_for(:supervisor)
144
+ @dashboard.wait_for(1)
152
145
 
153
- sleep 0.350
154
- # unfortunately waiting for a participant triggers right
155
- # before the consume
156
-
157
- wi = @engine.context.stash[:seen].first
146
+ wi = @dashboard.context.stash[:seen].first
158
147
 
159
148
  assert_not_nil wi.error
160
149
  end
161
150
 
162
151
  def test_cascade_prevention
163
152
 
164
- @engine.on_error = Ruote.define { error "nada" }
165
-
166
- #@engine.noisy = true
153
+ @dashboard.on_error = Ruote.define { error "nada" }
167
154
 
168
- wfid = @engine.launch(WRONGY, 'colour' => 'purple')
155
+ #@dashboard.noisy = true
169
156
 
170
- @engine.wait_for(wfid)
171
- @engine.wait_for(wfid)
157
+ wfid = @dashboard.launch(WRONGY, 'colour' => 'purple')
172
158
 
173
- sleep 0.700
174
- # give it a bit of time, to make sure no supplementary errors crop up
159
+ @dashboard.wait_for(6)
175
160
 
176
- assert_equal 2, @engine.process(wfid).errors.size
161
+ assert_equal 2, @dashboard.process(wfid).errors.size
177
162
  end
178
163
 
179
164
  def test_doesnt_trigger_for_checked_error
@@ -182,17 +167,16 @@ class FtEngineOnErrorTest < Test::Unit::TestCase
182
167
  nemo :on_error => 'pass'
183
168
  end
184
169
 
185
- @engine.on_error = Ruote.define do
170
+ @dashboard.on_error = Ruote.define do
186
171
  echo 'seen'
187
172
  end
188
173
 
189
- wfid = @engine.launch(pdef)
190
-
191
- #noisy
174
+ wfid = @dashboard.launch(pdef)
192
175
 
193
- @engine.wait_for(wfid)
176
+ #@dashboard.noisy = true
194
177
 
195
- sleep 0.700
178
+ @dashboard.wait_for(wfid)
179
+ sleep 2.0
196
180
  # give it a bit of time, to make sure no supplementary errors crop up
197
181
 
198
182
  assert_equal '', @tracer.to_s