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
  # Sun Jun 14 13:33:17 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 EftForgetTest < Test::Unit::TestCase
@@ -22,13 +22,11 @@ class EftForgetTest < Test::Unit::TestCase
22
22
  end
23
23
  end
24
24
 
25
- @engine.register_participant :alpha do
26
- @tracer << "alpha\n"
25
+ @dashboard.register_participant :alpha do
26
+ tracer << "alpha\n"
27
27
  end
28
28
 
29
- #noisy
30
-
31
- wfid = @engine.launch(pdef)
29
+ wfid = @dashboard.launch(pdef)
32
30
 
33
31
  wait_for(:alpha)
34
32
  wait_for(:alpha)
@@ -37,25 +35,29 @@ class EftForgetTest < Test::Unit::TestCase
37
35
 
38
36
  assert_equal "alpha\nalpha", @tracer.to_s
39
37
 
40
- #logger.log.each { |e| puts e['action'] }
41
38
  assert_equal 1, logger.log.select { |e| e['action'] == 'ceased' }.size
42
39
  assert_equal 1, logger.log.select { |e| e['action'] == 'terminated' }.size
43
40
  end
44
41
 
45
- #def test_variables
46
- # pdef = Ruote.process_definition do
47
- # set :var => 'a', :value => 0
48
- # concurrence do
49
- # set :var => 'a', :value => 1
50
- # forget do
51
- # echo '0_${v:a}'
52
- # end
53
- # echo '1_${v:a}'
54
- # end
55
- # echo '2_${v:a}'
56
- # end
57
- # noisy
58
- # assert_trace %w[ 1_1 0_0 2_1 ], pdef
59
- #end
42
+ def test_multi
43
+
44
+ pdef = Ruote.define do
45
+ forget do
46
+ alpha
47
+ bravo
48
+ end
49
+ charly
50
+ end
51
+
52
+ @dashboard.register_participant '.+' do |wi|
53
+ context.tracer << wi.participant_name + "\n"
54
+ end
55
+
56
+ wfid = @dashboard.launch(pdef)
57
+
58
+ 3.times { @dashboard.wait_for('dispatched') }
59
+
60
+ assert_equal %w[ alpha bravo charly ], @tracer.to_a.sort
61
+ end
60
62
  end
61
63
 
@@ -5,7 +5,7 @@
5
5
  # Sun Jun 14 14:48:03 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
  require 'ruote/participant'
11
11
 
@@ -15,25 +15,34 @@ class EftUndoTest < Test::Unit::TestCase
15
15
 
16
16
  def test_undo_ref
17
17
 
18
- pdef = Ruote.process_definition do
18
+ pdef = Ruote.define do
19
19
  concurrence do
20
20
  alpha :tag => 'kilroy'
21
21
  undo :ref => 'kilroy'
22
22
  end
23
- echo 'over'
23
+ echo 'over.'
24
24
  end
25
25
 
26
- alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
26
+ alpha = @dashboard.register(:alpha, Ruote::StorageParticipant)
27
27
 
28
- #noisy
28
+ wfid = @dashboard.launch(pdef)
29
+ r = @engine.wait_for(wfid)
29
30
 
30
- assert_trace %w[ over ], pdef
31
+ assert_equal 'terminated', r['action']
32
+ assert_equal 'over.', @tracer.to_s
31
33
 
32
34
  assert_equal 0, alpha.size
33
35
 
34
36
  assert_equal 1, logger.log.select { |e| e['action'] == 'entered_tag' }.size
35
37
  assert_equal 1, logger.log.select { |e| e['action'] == 'cancel' }.size
36
38
  assert_equal 1, logger.log.select { |e| e['action'] == 'left_tag' }.size
39
+
40
+ assert_equal 1, r['variables']['__past_tags__'].size
41
+
42
+ kilroy = r['variables']['__past_tags__'].first
43
+
44
+ assert_equal 'kilroy', kilroy[0]
45
+ assert_equal 'cancelled', kilroy[2]
37
46
  end
38
47
 
39
48
  def test_undo
@@ -47,9 +56,7 @@ class EftUndoTest < Test::Unit::TestCase
47
56
  echo 'over'
48
57
  end
49
58
 
50
- alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
51
-
52
- #noisy
59
+ alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
53
60
 
54
61
  assert_trace %w[ over ], pdef
55
62
 
@@ -70,8 +77,6 @@ class EftUndoTest < Test::Unit::TestCase
70
77
  echo '.'
71
78
  end
72
79
 
73
- #noisy
74
-
75
80
  assert_trace '.', pdef
76
81
  end
77
82
 
@@ -93,8 +98,6 @@ class EftUndoTest < Test::Unit::TestCase
93
98
  echo '.'
94
99
  end
95
100
 
96
- #@engine.noisy = true
97
-
98
101
  assert_trace '.', pdef
99
102
  end
100
103
 
@@ -106,9 +109,43 @@ class EftUndoTest < Test::Unit::TestCase
106
109
  echo '.'
107
110
  end
108
111
 
109
- #@engine.noisy = true
110
-
111
112
  assert_trace '.', pdef
112
113
  end
114
+
115
+ def test_undo_no_tag
116
+
117
+ pdef = Ruote.process_definition do
118
+ cancel
119
+ echo 'x'
120
+ end
121
+
122
+ wfid = @dashboard.launch(pdef)
123
+ r = @dashboard.wait_for(wfid)
124
+
125
+ assert_equal 'terminated', r['action']
126
+ assert_equal 'x', @tracer.to_s
127
+ end
128
+
129
+ def test_kill
130
+
131
+ @dashboard.register :alpha, Ruote::StorageParticipant
132
+
133
+ pdef = Ruote.define do
134
+ concurrence do
135
+ alpha :tag => :kilroy, :on_cancel => :report
136
+ kill :kilroy
137
+ end
138
+ echo 'over.'
139
+ define 'report' do
140
+ echo 'xxx'
141
+ end
142
+ end
143
+
144
+ wfid = @dashboard.launch(pdef)
145
+ r = @dashboard.wait_for(wfid)
146
+
147
+ assert_equal 'terminated', r['action']
148
+ assert_equal 'over.', @tracer.to_s
149
+ end
113
150
  end
114
151
 
@@ -5,7 +5,7 @@
5
5
  # Mon Jun 15 12:58:12 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
  require 'ruote/participant'
11
11
 
@@ -22,25 +22,25 @@ class EftRedoTest < Test::Unit::TestCase
22
22
  end
23
23
  end
24
24
 
25
- alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
25
+ alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
26
26
 
27
27
  #noisy
28
28
 
29
- wfid = @engine.launch(pdef)
29
+ wfid = @dashboard.launch(pdef)
30
30
  wait_for(:alpha)
31
31
 
32
- alpha.reply(alpha.first)
32
+ alpha.proceed(alpha.first)
33
33
  wait_for(:alpha)
34
34
 
35
- alpha.reply(alpha.first)
35
+ alpha.proceed(alpha.first)
36
36
  wait_for(:alpha)
37
37
 
38
- ps = @engine.process(wfid)
38
+ ps = @dashboard.process(wfid)
39
39
 
40
40
  assert_equal 0, ps.errors.size
41
41
  assert_equal 3, ps.expressions.size
42
42
 
43
- assert_equal 3, logger.log.select { |e| e['action'] == 'entered_tag' }.size
43
+ assert_equal 1, logger.log.select { |e| e['action'] == 'entered_tag' }.size
44
44
  end
45
45
 
46
46
  def test_redo_missing_tag
@@ -61,7 +61,7 @@ class EftRedoTest < Test::Unit::TestCase
61
61
  echo '.'
62
62
  end
63
63
 
64
- #@engine.noisy = true
64
+ #@dashboard.noisy = true
65
65
 
66
66
  assert_trace '.', pdef
67
67
  end
@@ -74,7 +74,7 @@ class EftRedoTest < Test::Unit::TestCase
74
74
  echo '.'
75
75
  end
76
76
 
77
- #@engine.noisy = true
77
+ #@dashboard.noisy = true
78
78
 
79
79
  assert_trace '.', pdef
80
80
  end
@@ -90,16 +90,16 @@ class EftRedoTest < Test::Unit::TestCase
90
90
 
91
91
  #noisy
92
92
 
93
- @engine.register 'alpha', Ruote::StorageParticipant
93
+ @dashboard.register 'alpha', Ruote::StorageParticipant
94
94
 
95
- wfid = @engine.launch(pdef)
95
+ wfid = @dashboard.launch(pdef)
96
96
 
97
- while @engine.storage_participant.size < 2
97
+ while @dashboard.storage_participant.size < 2
98
98
  sleep 0.350
99
99
  end
100
100
 
101
- assert_not_nil @engine.process(wfid)
102
- assert_equal [], @engine.errors
101
+ assert_not_nil @dashboard.process(wfid)
102
+ assert_equal [], @dashboard.errors
103
103
  end
104
104
 
105
105
  class Alpha
@@ -115,7 +115,7 @@ class EftRedoTest < Test::Unit::TestCase
115
115
 
116
116
  def test_redo__blank_workitem
117
117
 
118
- @engine.register do
118
+ @dashboard.register do
119
119
  alpha Alpha
120
120
  end
121
121
 
@@ -126,12 +126,10 @@ class EftRedoTest < Test::Unit::TestCase
126
126
  end
127
127
  end
128
128
 
129
- #noisy
130
-
131
- wfid = @engine.launch(pdef)
132
-
133
- r = @engine.wait_for(wfid)
129
+ wfid = @dashboard.launch(pdef)
130
+ r = @dashboard.wait_for(wfid)
134
131
 
132
+ assert_equal 'terminated', r['action']
135
133
  assert_equal %w[ x ], r['workitem']['fields']['alpha']
136
134
  end
137
135
  end
@@ -5,9 +5,7 @@
5
5
  # Fri May 15 09:51:28 JST 2009
6
6
  #
7
7
 
8
- require File.join(File.dirname(__FILE__), 'base')
9
-
10
- require 'ruote/part/null_participant'
8
+ require File.expand_path('../base', __FILE__)
11
9
 
12
10
 
13
11
  class FtWorkerTest < Test::Unit::TestCase
@@ -15,12 +13,13 @@ class FtWorkerTest < Test::Unit::TestCase
15
13
 
16
14
  def test_launch_terminate
17
15
 
18
- #noisy
19
-
20
16
  pdef = Ruote.process_definition do
21
17
  end
22
18
 
23
- assert_trace '', pdef
19
+ wfid = @dashboard.launch(pdef)
20
+ r = @dashboard.wait_for(wfid)
21
+
22
+ assert_equal 'terminated', r['action']
24
23
 
25
24
  #puts; logger.log.each { |e| p e }; puts
26
25
  assert_equal %w[ launch terminated ], logger.log.map { |e| e['action'] }
@@ -30,24 +29,27 @@ class FtWorkerTest < Test::Unit::TestCase
30
29
 
31
30
  sleep 0.010 # warm up time
32
31
 
33
- assert_equal true, @engine.context.worker.running
32
+ assert_equal 'running', @dashboard.context.worker.state
34
33
 
35
- @engine.shutdown
34
+ @dashboard.shutdown
36
35
 
37
- assert_equal false, @engine.context.worker.running
36
+ assert_equal 'stopped', @dashboard.context.worker.state
38
37
 
39
38
  pdef = Ruote.process_definition do; end
40
39
 
41
- @engine.launch(pdef)
40
+ @dashboard.launch(pdef)
42
41
 
43
42
  Thread.pass
44
43
 
45
- assert_equal 1, @engine.storage.get_many('msgs').size
44
+ #assert_equal 1, @dashboard.storage.get_many('msgs').size
45
+ # won't work with the latest ruote-redis implementations
46
+
47
+ assert_equal 1, @dashboard.storage.get_msgs.size
46
48
  end
47
49
 
48
50
  def test_remaining_messages
49
51
 
50
- @engine.register_participant :alfred, Ruote::NullParticipant
52
+ @dashboard.register_participant :alfred, Ruote::NullParticipant
51
53
 
52
54
  pdef = Ruote.process_definition do
53
55
  end
@@ -56,7 +58,114 @@ class FtWorkerTest < Test::Unit::TestCase
56
58
 
57
59
  sleep 0.300
58
60
 
59
- assert_equal [], @engine.storage.get_msgs
61
+ assert_equal 0, @dashboard.storage.get_msgs.size
62
+ end
63
+
64
+ def test_stop_workers_not_enabled
65
+
66
+ assert_raise(RuntimeError) do
67
+ @dashboard.worker_state = 'stopped'
68
+ end
69
+ end
70
+
71
+ def test_pause_workers
72
+
73
+ @dashboard.context['worker_state_enabled'] = true
74
+
75
+ pdef = Ruote.define do
76
+ 10.times { echo 'a' }
77
+ end
78
+
79
+ wfid = @dashboard.launch(pdef)
80
+
81
+ @dashboard.worker_state = 'paused'
82
+
83
+ s = @tracer.to_a.size
84
+ assert s < 10
85
+
86
+ sleep 0.500
87
+
88
+ assert @tracer.to_a.size < 10
89
+ assert_equal s, @tracer.to_a.size
90
+
91
+ assert_equal 'paused', @dashboard.worker_state
92
+
93
+ @dashboard.worker_state = 'running'
94
+
95
+ @dashboard.wait_for('terminated')
96
+
97
+ assert_equal 10, @tracer.to_a.size
98
+ assert_equal 'running', @dashboard.worker_state
99
+ end
100
+
101
+ def test_stop_workers
102
+
103
+ @dashboard.context['worker_state_enabled'] = true
104
+
105
+ pdef = Ruote.define do
106
+ 10.times { echo 'a' }
107
+ end
108
+
109
+ assert_equal 'running', @dashboard.context.worker.state
110
+
111
+ wfid = @dashboard.launch(pdef)
112
+
113
+ @dashboard.worker_state = 'stopped'
114
+
115
+ s = @tracer.to_a.size
116
+ assert s < 10
117
+
118
+ sleep 0.500
119
+
120
+ assert @tracer.to_a.size < 10
121
+ assert_equal s, @tracer.to_a.size
122
+
123
+ assert_equal 'stopped', @dashboard.worker_state
124
+ assert_equal 'stopped', @dashboard.context.worker.state
125
+ end
126
+
127
+ def test_worker_thread_ruote_worker
128
+
129
+ assert_equal @dashboard.worker, @dashboard.worker.run_thread['ruote_worker']
130
+ end
131
+
132
+ def test_handle_step_error_and_error_handler
133
+
134
+ $err = nil
135
+ $msg = nil
136
+
137
+ class << @dashboard.worker
138
+
139
+ def handle_step_error(err, msg)
140
+ $err = err
141
+ $msg = msg
142
+ end
143
+ end
144
+
145
+ class << @dashboard.storage
146
+
147
+ alias original_put_msg put_msg
148
+
149
+ def put_msg(action, details)
150
+ raise 'out of order' if action == 'error_intercepted'
151
+ original_put_msg(action, details)
152
+ end
153
+ end
154
+
155
+ wfid = @dashboard.launch(Ruote.define do
156
+ error 'pure fail'
157
+ end)
158
+
159
+ 77.times { break if $msg; sleep 0.100 }
160
+
161
+ assert_equal 'error_intercepted', $msg['action']
162
+ assert_equal 'Ruote::ForcedError', $msg['error']['class']
163
+ assert_equal 'pure fail', $msg['error']['message']
164
+ assert_equal wfid, $msg['wfid']
165
+ assert_equal '0_0', $msg['fei']['expid']
166
+
167
+ assert_equal RuntimeError, $err.class
168
+ assert_equal 'out of order', $err.message
60
169
  end
61
170
  end
62
171