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
  # Mon Sep 14 19:11:45 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/part/no_op_participant'
11
11
  require 'ruote/part/null_participant'
@@ -20,15 +20,15 @@ class FtNullNoopParticipantsTest < Test::Unit::TestCase
20
20
  alpha
21
21
  end
22
22
 
23
- alpha = @engine.register_participant :alpha, Ruote::NullParticipant
23
+ alpha = @dashboard.register_participant :alpha, Ruote::NullParticipant
24
24
 
25
25
  #noisy
26
26
 
27
- wfid = @engine.launch(pdef)
27
+ wfid = @dashboard.launch(pdef)
28
28
 
29
29
  wait_for(4)
30
30
 
31
- ps = @engine.process(wfid)
31
+ ps = @dashboard.process(wfid)
32
32
 
33
33
  assert_not_nil ps
34
34
  assert_equal [], ps.errors
@@ -41,7 +41,7 @@ class FtNullNoopParticipantsTest < Test::Unit::TestCase
41
41
  echo 'done.'
42
42
  end
43
43
 
44
- @engine.register_participant :alpha, Ruote::NoOpParticipant
44
+ @dashboard.register_participant :alpha, Ruote::NoOpParticipant
45
45
 
46
46
  #noisy
47
47
 
@@ -5,7 +5,7 @@
5
5
  # Mon Sep 14 19:31:37 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
  require 'ruote/part/template'
@@ -49,7 +49,7 @@ class FtPartTemplateTest < Test::Unit::TestCase
49
49
 
50
50
  #noisy
51
51
 
52
- @engine.register_participant(
52
+ @dashboard.register_participant(
53
53
  :alpha,
54
54
  MyParticipant,
55
55
  :template => "0:${v:var0}\n1:${f:field0}")
@@ -5,7 +5,7 @@
5
5
  # Fri May 15 09:51:28 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
 
@@ -19,14 +19,14 @@ class FtErrorsTest < Test::Unit::TestCase
19
19
  nada
20
20
  end
21
21
 
22
- wfid = @engine.launch(pdef)
23
- wait_for(wfid)
22
+ wfid = @dashboard.launch(pdef)
23
+ @dashboard.wait_for(wfid)
24
24
 
25
- ps = @engine.process(wfid)
25
+ ps = @dashboard.process(wfid)
26
26
 
27
27
  assert_equal 1, ps.errors.size
28
28
 
29
- pss = @engine.processes
29
+ pss = @dashboard.processes
30
30
 
31
31
  assert_equal 1, pss.size
32
32
  assert_equal 1, pss.first.errors.size
@@ -40,27 +40,25 @@ class FtErrorsTest < Test::Unit::TestCase
40
40
  nada
41
41
  end
42
42
 
43
- #noisy
44
-
45
- wfid = @engine.launch(pdef)
43
+ wfid = @dashboard.launch(pdef)
46
44
  wait_for(wfid)
47
45
 
48
- ps = @engine.process(wfid)
46
+ ps = @dashboard.process(wfid)
49
47
 
50
48
  exp = ps.expressions.find { |fe| fe.class == Ruote::Exp::RefExpression }
51
49
 
52
50
  assert_not_nil exp
53
51
 
54
- @engine.register_participant :nada do |workitem|
55
- @tracer << 'done.'
52
+ @dashboard.register_participant :nada do |workitem|
53
+ tracer << 'done.'
56
54
  end
57
55
 
58
- @engine.re_apply(exp.fei)
56
+ @dashboard.re_apply(exp.fei)
59
57
  wait_for(wfid)
60
58
 
61
59
  assert_equal 'done.', @tracer.to_s
62
60
 
63
- assert_equal 0, @engine.storage.get_many('errors').size
61
+ assert_equal 0, @dashboard.storage.get_many('errors').size
64
62
  end
65
63
 
66
64
  def test_error_replay
@@ -69,19 +67,17 @@ class FtErrorsTest < Test::Unit::TestCase
69
67
  nada
70
68
  end
71
69
 
72
- #noisy
73
-
74
- wfid = @engine.launch(pdef)
70
+ wfid = @dashboard.launch(pdef)
75
71
  wait_for(wfid)
76
72
 
77
- ps = @engine.process(wfid)
73
+ ps = @dashboard.process(wfid)
78
74
 
79
75
  err = ps.errors.first
80
76
 
81
- @engine.replay_at_error(err)
77
+ @dashboard.replay_at_error(err)
82
78
 
83
79
  wait_for(wfid)
84
- ps = @engine.process(wfid)
80
+ ps = @dashboard.process(wfid)
85
81
 
86
82
  #p ps
87
83
 
@@ -93,7 +89,7 @@ class FtErrorsTest < Test::Unit::TestCase
93
89
  assert_not_equal err.at, err1.at
94
90
  # not the same error
95
91
 
96
- assert_equal 1, @engine.storage.get_many('errors').size
92
+ assert_equal 1, @dashboard.storage.get_many('errors').size
97
93
  end
98
94
 
99
95
  def test_error_fix_then_replay
@@ -102,30 +98,28 @@ class FtErrorsTest < Test::Unit::TestCase
102
98
  nada
103
99
  end
104
100
 
105
- @engine.register_participant :alpha do
106
- @tracer << "alpha\n"
101
+ @dashboard.register_participant :alpha do
102
+ tracer << "alpha\n"
107
103
  end
108
104
 
109
- #noisy
110
-
111
- wfid = @engine.launch(pdef)
105
+ wfid = @dashboard.launch(pdef)
112
106
  wait_for(wfid)
113
- ps = @engine.process(wfid)
107
+ ps = @dashboard.process(wfid)
114
108
 
115
109
  err = ps.errors.first
116
110
  assert_equal [ 'nada', { 'ref' => 'nada' }, [] ], err.tree
117
111
 
118
112
  err.tree = [ 'alpha', {}, [] ]
119
- @engine.replay_at_error(err)
113
+ @dashboard.replay_at_error(err)
120
114
  wait_for(wfid)
121
115
 
122
- assert_nil @engine.process(wfid)
116
+ assert_nil @dashboard.process(wfid)
123
117
 
124
118
  assert_equal 'alpha', @tracer.to_s
125
119
 
126
120
  # check if error is really gone from error journal...
127
121
 
128
- assert_equal [], @engine.storage.get_many('errors')
122
+ assert_equal [], @dashboard.storage.get_many('errors')
129
123
  end
130
124
 
131
125
  def test_error_in_participant
@@ -137,27 +131,25 @@ class FtErrorsTest < Test::Unit::TestCase
137
131
  end
138
132
  end
139
133
 
140
- @engine.context.stash[:count] = 0
134
+ @dashboard.context.stash[:count] = 0
141
135
 
142
- @engine.register_participant :alpha do
136
+ @dashboard.register_participant :alpha do
143
137
  stash[:count] += 1
144
- @tracer << "alpha\n"
138
+ tracer << "alpha\n"
145
139
  raise "something went wrong" if stash[:count] == 1
146
140
  end
147
141
 
148
- #noisy
149
-
150
- wfid = @engine.launch(pdef)
142
+ wfid = @dashboard.launch(pdef)
151
143
 
152
144
  wait_for(wfid)
153
145
 
154
146
  sleep 0.250 # grrr...
155
147
 
156
- ps = @engine.process(wfid)
148
+ ps = @dashboard.process(wfid)
157
149
 
158
150
  assert_equal 1, ps.errors.size
159
151
 
160
- @engine.replay_at_error(ps.errors.first)
152
+ @dashboard.replay_at_error(ps.errors.first)
161
153
 
162
154
  wait_for(wfid)
163
155
 
@@ -173,25 +165,23 @@ class FtErrorsTest < Test::Unit::TestCase
173
165
  end
174
166
  end
175
167
 
176
- @engine.context.stash[:count] = 0
168
+ @dashboard.context.stash[:count] = 0
177
169
 
178
- alpha = @engine.register_participant :alpha, 'do_not_thread' => true do
170
+ alpha = @dashboard.register_participant :alpha, 'do_not_thread' => true do
179
171
  stash[:count] += 1
180
- @tracer << "alpha\n"
172
+ tracer << "alpha\n"
181
173
  raise "something went wrong" if stash[:count] == 1
182
174
  end
183
175
 
184
- #noisy
185
-
186
- wfid = @engine.launch(pdef)
176
+ wfid = @dashboard.launch(pdef)
187
177
 
188
178
  wait_for(wfid)
189
179
 
190
- ps = @engine.process(wfid)
180
+ ps = @dashboard.process(wfid)
191
181
 
192
182
  assert_equal 1, ps.errors.size
193
183
 
194
- @engine.replay_at_error(ps.errors.first)
184
+ @dashboard.replay_at_error(ps.errors.first)
195
185
 
196
186
  wait_for(wfid)
197
187
 
@@ -220,29 +210,27 @@ class FtErrorsTest < Test::Unit::TestCase
220
210
  alpha
221
211
  end
222
212
 
223
- @engine.register_participant 'alpha', WeakCancelParticipant
213
+ @dashboard.register_participant 'alpha', WeakCancelParticipant
224
214
 
225
- #noisy
226
-
227
- wfid = @engine.launch(pdef)
215
+ wfid = @dashboard.launch(pdef)
228
216
 
229
217
  wait_for(:alpha)
230
218
 
231
- @engine.cancel_process(wfid)
219
+ @dashboard.cancel_process(wfid)
232
220
 
233
221
  wait_for(wfid)
234
222
 
235
- ps = @engine.process(wfid)
223
+ ps = @dashboard.process(wfid)
236
224
 
237
225
  #puts ps.errors.first.trace
238
226
  assert_equal 1, ps.errors.size
239
227
  assert_equal 2, ps.expressions.size
240
228
 
241
- @engine.kill_process(wfid)
229
+ @dashboard.kill_process(wfid)
242
230
 
243
231
  wait_for(wfid)
244
232
 
245
- assert_nil @engine.process(wfid)
233
+ assert_nil @dashboard.process(wfid)
246
234
  end
247
235
 
248
236
  def test_errors_and_subprocesses
@@ -257,21 +245,19 @@ class FtErrorsTest < Test::Unit::TestCase
257
245
  end
258
246
  end
259
247
 
260
- @engine.context.stash[:count] = 0
248
+ @dashboard.context.stash[:count] = 0
261
249
 
262
- alpha = @engine.register_participant :alpha, :do_not_thread => true do
250
+ alpha = @dashboard.register_participant :alpha, :do_not_thread => true do
263
251
  stash[:count] += 1
264
- @tracer << "alpha\n"
252
+ tracer << "alpha\n"
265
253
  raise "something went wrong" if stash[:count] == 1
266
254
  end
267
255
 
268
- #noisy
269
-
270
- wfid = @engine.launch(pdef)
256
+ wfid = @dashboard.launch(pdef)
271
257
 
272
258
  wait_for(wfid)
273
259
 
274
- ps = @engine.process(wfid)
260
+ ps = @dashboard.process(wfid)
275
261
 
276
262
  assert_equal 1, ps.errors.size
277
263
 
@@ -280,7 +266,7 @@ class FtErrorsTest < Test::Unit::TestCase
280
266
  assert_equal wfid, err.fei.wfid
281
267
  assert_not_nil err.fei.subid
282
268
 
283
- @engine.replay_at_error(err)
269
+ @dashboard.replay_at_error(err)
284
270
 
285
271
  wait_for(wfid)
286
272
 
@@ -293,20 +279,18 @@ class FtErrorsTest < Test::Unit::TestCase
293
279
  nada
294
280
  end
295
281
 
296
- #noisy
297
-
298
- wfid = @engine.launch(pdef)
282
+ wfid = @dashboard.launch(pdef)
299
283
 
300
284
  wait_for(wfid)
301
285
 
302
- assert_equal 1, @engine.process(wfid).errors.size
286
+ assert_equal 1, @dashboard.process(wfid).errors.size
303
287
 
304
- @engine.cancel_process(wfid)
288
+ @dashboard.cancel_process(wfid)
305
289
 
306
290
  wait_for(wfid)
307
291
 
308
- assert_nil @engine.process(wfid)
309
- assert_equal [], @engine.storage.get_many('errors')
292
+ assert_nil @dashboard.process(wfid)
293
+ assert_equal [], @dashboard.storage.get_many('errors')
310
294
  end
311
295
 
312
296
  def test_forgotten_subprocess
@@ -321,20 +305,20 @@ class FtErrorsTest < Test::Unit::TestCase
321
305
  end
322
306
  end
323
307
 
324
- wfid = @engine.launch(pdef)
308
+ wfid = @dashboard.launch(pdef)
325
309
  wait_for(wfid)
326
310
  wait_for(wfid)
327
311
 
328
312
  assert_equal 'done.', @tracer.to_s
329
313
 
330
- ps = @engine.process(wfid)
314
+ ps = @dashboard.process(wfid)
331
315
  assert_equal 3, ps.expressions.size
332
316
  assert_equal 1, ps.errors.size
333
317
 
334
- @engine.replay_at_error(ps.errors.first)
318
+ @dashboard.replay_at_error(ps.errors.first)
335
319
  wait_for(wfid)
336
320
 
337
- assert_nil @engine.process(wfid)
321
+ assert_nil @dashboard.process(wfid)
338
322
  end
339
323
 
340
324
  def test_error_intercepted
@@ -343,13 +327,61 @@ class FtErrorsTest < Test::Unit::TestCase
343
327
  nada
344
328
  end
345
329
 
346
- wfid = @engine.launch(pdef)
330
+ wfid = @dashboard.launch(pdef)
347
331
 
348
- r = @engine.wait_for(wfid)
332
+ r = @dashboard.wait_for(wfid)
349
333
 
334
+ assert_equal 'error_intercepted', r['action']
350
335
  assert_equal 'RuntimeError', r['error']['class']
351
336
  assert_equal "unknown participant or subprocess 'nada'", r['error']['message']
352
337
  assert_equal Array, r['error']['trace'].class
338
+ assert_equal [ 'nada', { 'ref' => 'nada' }, [] ], r['error']['tree']
339
+ end
340
+
341
+ def test_replay_at_error_fei
342
+
343
+ @dashboard.register { catchall }
344
+
345
+ wfid = @dashboard.launch(Ruote.define do
346
+ error 'alpha'
347
+ error 'bravo'
348
+ end)
349
+
350
+ @dashboard.wait_for(wfid)
351
+
352
+ err = @dashboard.ps(wfid).errors.first
353
+ assert_match /alpha/, err.message
354
+ fei = err.fei
355
+
356
+ @dashboard.replay_at_error(fei)
357
+
358
+ @dashboard.wait_for(wfid)
359
+
360
+ err = @dashboard.ps(wfid).errors.first
361
+ assert_match /bravo/, err.message
362
+ end
363
+
364
+ class MyError < RuntimeError
365
+ def ruote_details
366
+ 'where the devil is'
367
+ end
368
+ end
369
+
370
+ def test_error_details
371
+
372
+ @dashboard.register :alpha do |workitem|
373
+ raise FtErrorsTest::MyError
374
+ end
375
+
376
+ wfid = @dashboard.launch(Ruote.define do
377
+ alpha
378
+ end)
379
+
380
+ @dashboard.wait_for('error_intercepted')
381
+
382
+ assert_equal 'where the devil is', @dashboard.ps(wfid).errors.first.details
383
+
384
+ #p @dashboard.ps(wfid)
353
385
  end
354
386
  end
355
387
 
@@ -5,7 +5,7 @@
5
5
  # Tue Sep 15 09:04:36 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/part/smtp_participant'
11
11
 
@@ -44,7 +44,7 @@ class NftSmtpParticipantTest < Test::Unit::TestCase
44
44
  # sleep 0.040
45
45
  # # give it some time to start listening
46
46
  #
47
- # @engine.register_participant(
47
+ # @dashboard.register_participant(
48
48
  # :alpha,
49
49
  # Ruote::SmtpParticipant.new(
50
50
  # :server => '127.0.0.1',
@@ -58,13 +58,13 @@ class NftSmtpParticipantTest < Test::Unit::TestCase
58
58
  #
59
59
  # #noisy
60
60
  #
61
- # wfid = @engine.launch(pdef)
61
+ # wfid = @dashboard.launch(pdef)
62
62
  #
63
63
  # #sleep 0.450
64
64
  # wait_for(wfid)
65
65
  #
66
66
  # assert_match(/cat food/, File.read(trapfile))
67
- # assert_nil @engine.process(wfid)
67
+ # assert_nil @dashboard.process(wfid)
68
68
  #
69
69
  # t.kill
70
70
  # end
@@ -91,7 +91,7 @@ class NftSmtpParticipantTest < Test::Unit::TestCase
91
91
  sleep 0.040
92
92
  # give it some time to start listening
93
93
 
94
- @engine.register_participant(
94
+ @dashboard.register_participant(
95
95
  :alpha,
96
96
  Ruote::SmtpParticipant,
97
97
  :server => '127.0.0.1',
@@ -105,7 +105,7 @@ class NftSmtpParticipantTest < Test::Unit::TestCase
105
105
 
106
106
  #noisy
107
107
 
108
- wfid = @engine.launch(pdef)
108
+ wfid = @dashboard.launch(pdef)
109
109
 
110
110
  #sleep 0.450
111
111
  wait_for(wfid)
@@ -114,7 +114,7 @@ class NftSmtpParticipantTest < Test::Unit::TestCase
114
114
  FileUtils.rm_f(trapfile)
115
115
 
116
116
  assert_match /want cat food/, trapped
117
- assert_nil @engine.process(wfid)
117
+ assert_nil @dashboard.process(wfid)
118
118
 
119
119
  t.kill
120
120
  end