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
  # Thu Jun 25 13:31:26 JST 2009
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 FtReApplyTest < Test::Unit::TestCase
@@ -20,29 +20,29 @@ class FtReApplyTest < Test::Unit::TestCase
20
20
 
21
21
  def test_re_apply
22
22
 
23
- alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
23
+ alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
24
24
 
25
25
  #noisy
26
26
 
27
- wfid = @engine.launch(PDEF)
27
+ wfid = @dashboard.launch(PDEF)
28
28
  wait_for(:alpha)
29
29
 
30
30
  id0 = alpha.first.object_id
31
31
 
32
32
  # ... flow stalled ...
33
33
 
34
- ps = @engine.process(wfid)
34
+ ps = @dashboard.process(wfid)
35
35
 
36
36
  stalled_exp = ps.expressions.find { |fexp| fexp.fei.expid == '0_0_0' }
37
37
 
38
- @engine.re_apply(stalled_exp.fei)
38
+ @dashboard.re_apply(stalled_exp.fei)
39
39
 
40
40
  wait_for(:alpha)
41
41
 
42
42
  assert_equal 1, alpha.size
43
43
  assert_not_equal id0, alpha.first.object_id
44
44
 
45
- alpha.reply(alpha.first)
45
+ alpha.proceed(alpha.first)
46
46
 
47
47
  wait_for(wfid)
48
48
 
@@ -51,29 +51,29 @@ class FtReApplyTest < Test::Unit::TestCase
51
51
 
52
52
  def test_cancel_and_re_apply
53
53
 
54
- alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
54
+ alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
55
55
 
56
56
  #noisy
57
57
 
58
- wfid = @engine.launch(PDEF)
58
+ wfid = @dashboard.launch(PDEF)
59
59
  wait_for(:alpha)
60
60
 
61
61
  id0 = alpha.first.object_id
62
62
 
63
63
  # ... flow stalled ...
64
64
 
65
- ps = @engine.process(wfid)
65
+ ps = @dashboard.process(wfid)
66
66
 
67
67
  stalled_exp = ps.expressions.find { |fexp| fexp.fei.expid == '0_0_0' }
68
68
 
69
- @engine.re_apply(stalled_exp.fei)
69
+ @dashboard.re_apply(stalled_exp.fei)
70
70
 
71
71
  wait_for(:alpha)
72
72
 
73
73
  assert_equal 1, alpha.size
74
74
  assert_not_equal id0, alpha.first.object_id
75
75
 
76
- alpha.reply(alpha.first)
76
+ alpha.proceed(alpha.first)
77
77
 
78
78
  wait_for(wfid)
79
79
 
@@ -82,11 +82,11 @@ class FtReApplyTest < Test::Unit::TestCase
82
82
 
83
83
  def test_update_expression_and_re_apply
84
84
 
85
- alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
85
+ alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
86
86
 
87
87
  #noisy
88
88
 
89
- wfid = @engine.launch(PDEF)
89
+ wfid = @dashboard.launch(PDEF)
90
90
  wait_for(:alpha)
91
91
 
92
92
  sleep 0.350 # threaded dispatch
@@ -95,7 +95,7 @@ class FtReApplyTest < Test::Unit::TestCase
95
95
 
96
96
  # ... flow stalled ...
97
97
 
98
- ps = @engine.process(wfid)
98
+ ps = @dashboard.process(wfid)
99
99
 
100
100
  stalled_exp = ps.expressions.find { |fexp| fexp.fei.expid == '0_0_0' }
101
101
 
@@ -104,13 +104,13 @@ class FtReApplyTest < Test::Unit::TestCase
104
104
  #p [ :stalled, stalled_exp.h['_rev'] ]
105
105
  stalled_exp.persist
106
106
 
107
- @engine.re_apply(stalled_exp.fei)
107
+ @dashboard.re_apply(stalled_exp.fei)
108
108
 
109
109
  wait_for(:alpha)
110
110
 
111
111
  assert_equal 'mow lawn', alpha.first.fields['params']['activity']
112
112
 
113
- alpha.reply(alpha.first)
113
+ alpha.proceed(alpha.first)
114
114
 
115
115
  wait_for(wfid)
116
116
 
@@ -126,29 +126,29 @@ class FtReApplyTest < Test::Unit::TestCase
126
126
  end
127
127
  end
128
128
 
129
- alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
129
+ alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
130
130
 
131
131
  #noisy
132
132
 
133
- wfid = @engine.launch(pdef)
133
+ wfid = @dashboard.launch(pdef)
134
134
  wait_for(:alpha)
135
135
 
136
136
  id0 = alpha.first.object_id
137
137
 
138
138
  # ... flow stalled ...
139
139
 
140
- ps = @engine.process(wfid)
140
+ ps = @dashboard.process(wfid)
141
141
 
142
142
  stalled_exp = ps.expressions.find { |fexp| fexp.fei.expid == '0_0_0' }
143
143
 
144
- @engine.re_apply(stalled_exp.fei, :fields => { 'x' => 'nada' })
144
+ @dashboard.re_apply(stalled_exp.fei, :fields => { 'x' => 'nada' })
145
145
 
146
146
  wait_for(:alpha)
147
147
 
148
148
  assert_equal 1, alpha.size
149
149
  assert_not_equal id0, alpha.first.object_id
150
150
 
151
- alpha.reply(alpha.first)
151
+ alpha.proceed(alpha.first)
152
152
 
153
153
  wait_for(wfid)
154
154
 
@@ -164,29 +164,29 @@ class FtReApplyTest < Test::Unit::TestCase
164
164
  end
165
165
  end
166
166
 
167
- alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
167
+ alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
168
168
 
169
169
  #noisy
170
170
 
171
- wfid = @engine.launch(pdef, { 'y' => 'nemo' })
171
+ wfid = @dashboard.launch(pdef, { 'y' => 'nemo' })
172
172
  wait_for(:alpha)
173
173
 
174
174
  id0 = alpha.first.object_id
175
175
 
176
176
  # ... flow stalled ...
177
177
 
178
- ps = @engine.process(wfid)
178
+ ps = @dashboard.process(wfid)
179
179
 
180
180
  stalled_exp = ps.expressions.find { |fexp| fexp.fei.expid == '0_0_0' }
181
181
 
182
- @engine.re_apply(stalled_exp.fei, :merge_in_fields => { 'x' => 'nada' })
182
+ @dashboard.re_apply(stalled_exp.fei, :merge_in_fields => { 'x' => 'nada' })
183
183
 
184
184
  wait_for(:alpha)
185
185
 
186
186
  assert_equal 1, alpha.size
187
187
  assert_not_equal id0, alpha.first.object_id
188
188
 
189
- alpha.reply(alpha.first)
189
+ alpha.proceed(alpha.first)
190
190
 
191
191
  wait_for(wfid)
192
192
 
@@ -195,22 +195,22 @@ class FtReApplyTest < Test::Unit::TestCase
195
195
 
196
196
  def test_re_apply_with_new_tree
197
197
 
198
- alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
198
+ alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
199
199
 
200
200
  #noisy
201
201
 
202
- wfid = @engine.launch(PDEF)
202
+ wfid = @dashboard.launch(PDEF)
203
203
  wait_for(:alpha)
204
204
 
205
205
  id0 = alpha.first.object_id
206
206
 
207
207
  # ... flow stalled ...
208
208
 
209
- ps = @engine.process(wfid)
209
+ ps = @dashboard.process(wfid)
210
210
 
211
211
  stalled_exp = ps.expressions.find { |fexp| fexp.fei.expid == '0_0_0' }
212
212
 
213
- @engine.re_apply(
213
+ @dashboard.re_apply(
214
214
  stalled_exp.fei, :tree => [ 'echo', { 're_applied' => nil }, [] ])
215
215
 
216
216
  wait_for(wfid)
@@ -220,77 +220,133 @@ class FtReApplyTest < Test::Unit::TestCase
220
220
 
221
221
  def test_new_tree_and_process_status_current_tree
222
222
 
223
- @engine.register_participant '.+', Ruote::StorageParticipant
223
+ #@dashboard.noisy = true
224
224
 
225
- wfid = @engine.launch(Ruote.define { alpha })
225
+ @dashboard.register_participant '.+', Ruote::StorageParticipant
226
226
 
227
- @engine.wait_for(:alpha)
227
+ wfid = @dashboard.launch(Ruote.define { alpha })
228
+
229
+ @dashboard.wait_for(:alpha)
228
230
 
229
231
  assert_equal(
230
232
  [ 'define', {}, [ [ 'participant', { 'ref' => 'alpha' }, [] ] ] ],
231
- @engine.process(wfid).current_tree)
233
+ @dashboard.process(wfid).current_tree)
232
234
 
233
- fei = @engine.storage_participant.first.fei
235
+ fei = @dashboard.storage_participant.first.fei
234
236
 
235
- @engine.re_apply(fei, :tree => [ 'bravo', {}, [] ])
237
+ @dashboard.re_apply(fei, :tree => [ 'bravo', {}, [] ])
236
238
 
237
- @engine.wait_for(:bravo)
239
+ @dashboard.wait_for(:bravo)
238
240
 
239
241
  assert_equal(
240
242
  'bravo',
241
- @engine.storage_participant.first.participant_name)
243
+ @dashboard.storage_participant.first.participant_name)
242
244
 
243
245
  assert_equal(
244
246
  [ 'participant', { 'ref' => 'bravo', '_triggered' => 'on_re_apply' }, [] ],
245
- @engine.process(wfid).expressions.last.tree)
247
+ @dashboard.process(wfid).expressions.last.tree)
246
248
 
247
249
  assert_equal(
248
250
  [ 'define', {}, [ [ 'participant', { 'ref' => 'bravo', '_triggered' => 'on_re_apply' }, [] ] ] ],
249
- @engine.process(wfid).current_tree)
251
+ @dashboard.process(wfid).current_tree)
250
252
  end
251
253
 
252
254
  # Issue reported by Brett Anthoine
253
255
  #
254
256
  def test_re_apply_root
255
257
 
256
- @engine.register_participant '.+', Ruote::StorageParticipant
258
+ @dashboard.register_participant '.+', Ruote::StorageParticipant
257
259
 
258
- wfid = @engine.launch(Ruote.define { alpha })
260
+ wfid = @dashboard.launch(Ruote.define { alpha })
259
261
 
260
- @engine.wait_for(:alpha)
261
- at0 = @engine.storage_participant.first.dispatched_at
262
+ @dashboard.wait_for(:alpha)
263
+ at0 = @dashboard.storage_participant.first.dispatched_at
262
264
 
263
- root = @engine.process(wfid).root_expression
264
- @engine.re_apply(root.fei)
265
+ root = @dashboard.process(wfid).root_expression
266
+ @dashboard.re_apply(root.fei)
265
267
 
266
- @engine.wait_for(:alpha)
267
- at1 = @engine.storage_participant.first.dispatched_at
268
+ @dashboard.wait_for(:alpha)
269
+ at1 = @dashboard.storage_participant.first.dispatched_at
268
270
 
269
271
  assert at1 > at0
270
272
  end
271
273
 
272
274
  def test_re_apply_define
273
275
 
274
- @engine.register_participant '.+', Ruote::StorageParticipant
276
+ @dashboard.register_participant '.+', Ruote::StorageParticipant
275
277
 
276
- wfid = @engine.launch(Ruote.define do
278
+ wfid = @dashboard.launch(Ruote.define do
277
279
  sub0
278
280
  define 'sub0' do
279
281
  alpha
280
282
  end
281
283
  end)
282
284
 
283
- @engine.wait_for(:alpha)
284
- at0 = @engine.storage_participant.first.dispatched_at
285
+ @dashboard.wait_for(:alpha)
286
+ at0 = @dashboard.storage_participant.first.dispatched_at
285
287
 
286
- exp = @engine.process(wfid).expressions[1]
288
+ exp = @dashboard.process(wfid).expressions[1]
287
289
 
288
- @engine.re_apply(exp.fei)
290
+ @dashboard.re_apply(exp.fei)
289
291
 
290
- @engine.wait_for(:alpha)
291
- at1 = @engine.storage_participant.first.dispatched_at
292
+ @dashboard.wait_for(:alpha)
293
+ at1 = @dashboard.storage_participant.first.dispatched_at
292
294
 
293
295
  assert at1 > at0
294
296
  end
297
+
298
+ def test_re_apply_chunk
299
+
300
+ @dashboard.register_participant '.+', Ruote::StorageParticipant
301
+
302
+ wfid = @dashboard.launch(Ruote.define do
303
+ alpha
304
+ end)
305
+
306
+ @dashboard.wait_for(:alpha)
307
+
308
+ at0 = @dashboard.storage_participant.first.dispatched_at
309
+
310
+ exp = @dashboard.process(wfid).expressions.last
311
+
312
+ t = Ruote.tree do
313
+ alpha :take => two
314
+ end
315
+
316
+ @dashboard.re_apply(exp)
317
+ @dashboard.wait_for(:alpha)
318
+
319
+ wi1 = @dashboard.storage_participant.first
320
+ at1 = wi1.dispatched_at
321
+
322
+ assert at1 > at0
323
+ assert_equal 'on_re_apply', wi1.params['_triggered']
324
+ end
325
+
326
+ # Making sure re_apply nukes errors
327
+ #
328
+ def test_re_apply_error
329
+
330
+ #@dashboard.noisy = true
331
+
332
+ @dashboard.register_participant '.+', Ruote::StorageParticipant
333
+
334
+ wfid = @dashboard.launch(Ruote.define do
335
+ error "X"
336
+ end)
337
+
338
+ @dashboard.wait_for(wfid)
339
+
340
+ fei = @dashboard.ps(wfid).expressions.last.fei
341
+
342
+ @dashboard.re_apply(fei, :tree => [ 'alpha', {}, [] ])
343
+
344
+ @dashboard.wait_for(:alpha)
345
+
346
+ ps = @dashboard.ps(wfid)
347
+
348
+ assert_equal 0, ps.errors.size
349
+ assert_equal Ruote::Exp::ParticipantExpression, ps.expressions.last.class
350
+ end
295
351
  end
296
352
 
@@ -5,7 +5,7 @@
5
5
  # Sun Jun 28 16:45:57 JST 2009
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 FtTimeoutTest < Test::Unit::TestCase
@@ -20,21 +20,27 @@ class FtTimeoutTest < Test::Unit::TestCase
20
20
  end
21
21
  end
22
22
 
23
- @engine.register_participant :alpha, Ruote::StorageParticipant
24
- sto = @engine.register_participant :bravo, Ruote::StorageParticipant
23
+ @dashboard.register_participant :alpha, Ruote::StorageParticipant
24
+ sto = @dashboard.register_participant :bravo, Ruote::StorageParticipant
25
25
 
26
26
  #noisy
27
27
 
28
- wfid = @engine.launch(pdef)
28
+ wfid = @dashboard.launch(pdef)
29
29
  wait_for(:bravo)
30
30
 
31
31
  assert_equal 1, sto.size
32
32
  assert_equal 'bravo', sto.first.participant_name
33
33
 
34
34
  assert_equal 2, logger.log.select { |e| e['flavour'] == 'timeout' }.size
35
- assert_equal 0, @engine.storage.get_many('schedules').size
35
+ assert_equal 0, @dashboard.storage.get_many('schedules').size
36
36
 
37
- assert_not_nil sto.first.fields['__timed_out__']
37
+ assert_equal wfid, sto.first.fields['__timed_out__'][0]['wfid']
38
+ assert_equal '0_0_0', sto.first.fields['__timed_out__'][0]['expid']
39
+ assert_equal 'participant', sto.first.fields['__timed_out__'][2]
40
+
41
+ assert_equal(
42
+ { 'timeout' => '1.1', 'ref' => 'alpha' },
43
+ sto.first.fields['__timed_out__'][3])
38
44
  end
39
45
 
40
46
  def test_cancel_timeout
@@ -46,24 +52,24 @@ class FtTimeoutTest < Test::Unit::TestCase
46
52
  end
47
53
  end
48
54
 
49
- @engine.register_participant :alpha, Ruote::StorageParticipant
50
- sto = @engine.register_participant :bravo, Ruote::StorageParticipant
55
+ @dashboard.register_participant :alpha, Ruote::StorageParticipant
56
+ sto = @dashboard.register_participant :bravo, Ruote::StorageParticipant
51
57
 
52
58
  #noisy
53
59
 
54
- wfid = @engine.launch(pdef)
60
+ wfid = @dashboard.launch(pdef)
55
61
  wait_for(6)
56
62
 
57
63
  assert_equal 1, sto.size
58
64
  assert_equal 'alpha', sto.first.participant_name
59
65
 
60
- @engine.cancel_expression(sto.first.fei)
66
+ @dashboard.cancel_expression(sto.first.fei)
61
67
 
62
68
  wait_for(:bravo)
63
69
 
64
70
  assert_equal 1, sto.size
65
71
  assert_equal 'bravo', sto.first.participant_name
66
- assert_equal 0, @engine.storage.get_many('schedules').size
72
+ assert_equal 0, @dashboard.storage.get_many('schedules').size
67
73
  end
68
74
 
69
75
  def test_on_timeout_redo
@@ -82,11 +88,11 @@ class FtTimeoutTest < Test::Unit::TestCase
82
88
  alpha :timeout => '1.1', :on_timeout => 'redo'
83
89
  end
84
90
 
85
- alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
91
+ alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
86
92
 
87
93
  #noisy
88
94
 
89
- wfid = @engine.launch(pdef)
95
+ wfid = @dashboard.launch(pdef)
90
96
  wait_for(8)
91
97
 
92
98
  #logger.log.each { |e| p e['flavour'] }
@@ -94,12 +100,12 @@ class FtTimeoutTest < Test::Unit::TestCase
94
100
 
95
101
  3.times do
96
102
  Thread.pass
97
- @engine.cancel_process(wfid)
103
+ @dashboard.cancel_process(wfid)
98
104
  end
99
105
 
100
106
  wait_for(wfid)
101
107
 
102
- assert_nil @engine.process(wfid)
108
+ assert_nil @dashboard.process(wfid)
103
109
  end
104
110
 
105
111
  def test_on_timeout_cancel_nested
@@ -113,16 +119,16 @@ class FtTimeoutTest < Test::Unit::TestCase
113
119
  end
114
120
  end
115
121
 
116
- alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
122
+ alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
117
123
 
118
124
  #noisy
119
125
 
120
- wfid = @engine.launch(pdef)
126
+ wfid = @dashboard.launch(pdef)
121
127
  wait_for(wfid)
122
128
 
123
- assert_nil @engine.process(wfid)
129
+ assert_nil @dashboard.process(wfid)
124
130
  assert_equal 'timed out', @tracer.to_s
125
- assert_equal 0, @engine.context.storage.get_many('expressions').size
131
+ assert_equal 0, @dashboard.context.storage.get_many('expressions').size
126
132
  assert_equal 0, alpha.size
127
133
  end
128
134
 
@@ -132,21 +138,21 @@ class FtTimeoutTest < Test::Unit::TestCase
132
138
  alpha :timeout => '1.1', :on_timeout => 'error'
133
139
  end
134
140
 
135
- alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
141
+ alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
136
142
 
137
143
  #noisy
138
144
 
139
- wfid = @engine.launch(pdef)
145
+ wfid = @dashboard.launch(pdef)
140
146
  wait_for(wfid)
141
147
 
142
- ps = @engine.process(wfid)
148
+ ps = @dashboard.process(wfid)
143
149
 
144
150
  assert_equal 1, ps.errors.size
145
151
 
146
152
  err = ps.errors.first
147
153
  err.tree = [ 'alpha', {}, [] ]
148
154
 
149
- @engine.replay_at_error(err)
155
+ @dashboard.replay_at_error(err)
150
156
  wait_for(:alpha)
151
157
 
152
158
  assert_equal 1, alpha.size
@@ -161,18 +167,43 @@ class FtTimeoutTest < Test::Unit::TestCase
161
167
  end
162
168
  end
163
169
 
164
- alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
170
+ alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
165
171
 
166
- wfid = @engine.launch(pdef)
172
+ wfid = @dashboard.launch(pdef)
167
173
  wait_for(wfid)
168
174
 
169
- ps = @engine.process(wfid)
175
+ ps = @dashboard.process(wfid)
170
176
 
171
177
  assert_equal 1, ps.errors.size
172
178
  assert_equal 0, alpha.size
173
179
  assert_equal 2, ps.expressions.size
174
180
  end
175
181
 
182
+ def test_on_timeout_jump
183
+
184
+ pdef = Ruote.define do
185
+ cursor do
186
+ alpha :timeout => '1.1', :on_timeout => 'jump to charly'
187
+ bravo
188
+ charly
189
+ end
190
+ end
191
+
192
+ @dashboard.register_participant 'alpha' do |wi|
193
+ sleep 60
194
+ end
195
+ @dashboard.register_participant '.+' do |wi|
196
+ tracer << wi.participant_name + "\n"
197
+ end
198
+
199
+ #@dashboard.noisy = true
200
+
201
+ wfid = @dashboard.launch(pdef)
202
+ @dashboard.wait_for(wfid)
203
+
204
+ assert_equal 'charly', @tracer.to_s
205
+ end
206
+
176
207
  def test_timeout_then_error
177
208
 
178
209
  pdef = Ruote.process_definition do
@@ -183,14 +214,14 @@ class FtTimeoutTest < Test::Unit::TestCase
183
214
 
184
215
  #noisy
185
216
 
186
- wfid = @engine.launch(pdef)
217
+ wfid = @dashboard.launch(pdef)
187
218
 
188
219
  wait_for(4)
189
220
 
190
- ps = @engine.process(wfid)
221
+ ps = @dashboard.process(wfid)
191
222
 
192
223
  assert_equal 1, ps.errors.size
193
- assert_equal 0, @engine.storage.get_many('schedules').size
224
+ assert_equal 0, @dashboard.storage.get_many('schedules').size
194
225
  end
195
226
 
196
227
  def test_timeout_at
@@ -203,18 +234,18 @@ class FtTimeoutTest < Test::Unit::TestCase
203
234
  end
204
235
  end
205
236
 
206
- alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
237
+ alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
207
238
 
208
239
  #noisy
209
240
 
210
- wfid = @engine.launch(pdef)
241
+ wfid = @dashboard.launch(pdef)
211
242
 
212
243
  #wait_for(9)
213
244
  wait_for(wfid)
214
245
 
215
- assert_nil @engine.process(wfid)
246
+ assert_nil @dashboard.process(wfid)
216
247
  assert_equal 0, alpha.size
217
- assert_equal 0, @engine.storage.get_many('schedules').size
248
+ assert_equal 0, @dashboard.storage.get_many('schedules').size
218
249
  end
219
250
  end
220
251