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,58 +5,145 @@
5
5
  # Tue Apr 20 12:32:44 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
 
12
12
 
13
+ # Storage dependent WaitLogger tests. For storage independent test see
14
+ # test/unit/ut_3_wait_logger.rb
15
+ #
13
16
  class FtWaitLoggerTest < Test::Unit::TestCase
14
17
 
15
18
  def teardown
16
19
 
17
- @engine.shutdown
18
- @engine.context.storage.purge!
20
+ @dashboard.shutdown
21
+ @dashboard.context.storage.purge!
19
22
  end
20
23
 
21
24
  def test_wait_logger
22
25
 
23
- @engine = Ruote::Engine.new(Ruote::Worker.new(determine_storage({})))
26
+ @dashboard = Ruote::Engine.new(Ruote::Worker.new(determine_storage({})))
24
27
 
25
- sp = @engine.register_participant :alpha, Ruote::StorageParticipant
28
+ sp = @dashboard.register_participant :alpha, Ruote::StorageParticipant
26
29
 
27
30
  pdef = Ruote.process_definition { alpha }
28
31
 
29
- wfid = @engine.launch(pdef)
32
+ wfid = @dashboard.launch(pdef)
30
33
 
31
- r = @engine.wait_for(:alpha)
34
+ r = @dashboard.wait_for(:alpha)
32
35
  assert_equal 'dispatch', r['action']
33
36
 
34
- sp.reply(sp.first)
37
+ sp.proceed(sp.first)
35
38
 
36
- r = @engine.wait_for(wfid)
39
+ r = @dashboard.wait_for(wfid)
37
40
 
38
41
  assert_equal 'terminated', r['action']
39
42
  end
40
43
 
41
44
  def test_wait_logger_seen
42
45
 
43
- @engine = Ruote::Engine.new(Ruote::Worker.new(determine_storage({})))
46
+ @dashboard = Ruote::Engine.new(Ruote::Worker.new(determine_storage({})))
47
+ #@dashboard.noisy = true
48
+
49
+ counter = Object.new
50
+ class << counter
51
+ attr_reader :count
52
+ def on_msg(msg)
53
+ @count = (@count || 0) + 1
54
+ end
55
+ def wait_for(i)
56
+ loop { sleep 0.100; break if (@count || 0) >= i }
57
+ end
58
+ end
44
59
 
45
- #@engine.noisy = true
60
+ @dashboard.add_service('counter', counter)
46
61
 
47
- pdef = Ruote.process_definition { }
62
+ pdef = Ruote.process_definition {}
48
63
 
49
- wfid = @engine.launch(pdef)
64
+ wfid = @dashboard.launch(pdef)
50
65
 
51
- sleep 0.500
52
- sleep 2.000 if @engine.storage.class.name.match(/Couch/)
66
+ counter.wait_for(2)
53
67
 
54
- assert_equal 2, @engine.context.logger.instance_variable_get(:@seen).size
68
+ seen = @dashboard.context.logger.instance_variable_get(:@seen)
55
69
 
56
- r = @engine.wait_for(wfid)
70
+ assert_equal %w[ launch terminated ], seen.collect { |m| m['action'] }
71
+
72
+ r = @dashboard.wait_for(wfid)
57
73
 
58
74
  assert_equal 'terminated', r['action']
59
- assert_equal 0, @engine.context.logger.instance_variable_get(:@seen).size
75
+ assert_equal 0, seen.size
76
+ end
77
+
78
+ def test_wait_for_goes_last
79
+
80
+ @dashboard = Ruote::Engine.new(Ruote::Worker.new(determine_storage({})))
81
+
82
+ log = []
83
+
84
+ a = Object.new
85
+ class << a
86
+ attr_accessor :log
87
+ def on_msg(msg)
88
+ log << 'a'
89
+ end
90
+ def wait_for
91
+ raise "never called anyway"
92
+ end
93
+ end
94
+ a.log = log
95
+
96
+ b = Object.new
97
+ class << b
98
+ attr_accessor :log
99
+ def on_msg(msg)
100
+ log << 'b'
101
+ end
102
+ end
103
+ b.log = log
104
+
105
+ @dashboard.add_service('a', a)
106
+ @dashboard.add_service('b', b)
107
+
108
+ #@dashboard.noisy = true
109
+
110
+ wfid = @dashboard.launch(Ruote.define do
111
+ end)
112
+ @dashboard.wait_for(wfid)
113
+
114
+ assert_equal %w[ b a b a ], log
115
+ end
116
+
117
+ def test_timeout
118
+
119
+ @dashboard = Ruote::Engine.new(Ruote::Worker.new(determine_storage({})))
120
+
121
+ wfid = @dashboard.launch(Ruote.define { stall })
122
+
123
+ e = nil
124
+
125
+ begin
126
+ @dashboard.wait_for(wfid, :timeout => 1)
127
+ rescue => e
128
+ end
129
+
130
+ assert_equal Ruote::LoggerTimeout, e.class
131
+ assert_equal "waited for [\"#{wfid}\"], timed out after 1s", e.message
132
+ end
133
+
134
+ def _test_fancy_logging
135
+
136
+ @dashboard = Ruote::Engine.new(Ruote::Worker.new(determine_storage({})))
137
+
138
+ @dashboard.register :alpha do |workitem|
139
+ context.storage.put_msg('decision_done', 'nada' => 'creep')
140
+ sleep 0.200
141
+ end
142
+
143
+ @dashboard.noisy = true
144
+
145
+ wfid = @dashboard.launch(Ruote.define { alpha })
146
+ r = @dashboard.wait_for(wfid)
60
147
  end
61
148
  end
62
149
 
@@ -5,7 +5,7 @@
5
5
  # Mon Jun 14 12:02:53 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
 
@@ -34,11 +34,11 @@ class FtParticipantsTest < Test::Unit::TestCase
34
34
 
35
35
  def test_participant_without_initialize
36
36
 
37
- @engine.register_participant :alpha, MyParticipant
37
+ @dashboard.register_participant :alpha, MyParticipant
38
38
 
39
39
  #noisy
40
40
 
41
- wfid = @engine.launch(Ruote.process_definition do
41
+ wfid = @dashboard.launch(Ruote.process_definition do
42
42
  alpha
43
43
  end)
44
44
 
@@ -49,11 +49,11 @@ class FtParticipantsTest < Test::Unit::TestCase
49
49
 
50
50
  def test_participant_with_initialize
51
51
 
52
- @engine.register_participant :bravo, MyMessageParticipant, 'message' => 'hi'
52
+ @dashboard.register_participant :bravo, MyMessageParticipant, 'message' => 'hi'
53
53
 
54
54
  #noisy
55
55
 
56
- wfid = @engine.launch(Ruote.process_definition do
56
+ wfid = @dashboard.launch(Ruote.process_definition do
57
57
  bravo
58
58
  end)
59
59
 
@@ -70,22 +70,23 @@ class FtParticipantsTest < Test::Unit::TestCase
70
70
  end
71
71
  def on_reply(wi)
72
72
  @context.tracer << wi.fields['hello'] + "\n"
73
- @context.tracer << applied_workitem(wi.fei).fields['hello'] + "\n"
74
- @context.tracer << workitem(wi.fei).fields['hello']
73
+ @context.tracer << applied_workitem.fields['hello'] + "\n"
74
+ @context.tracer << fetch_workitem(fei).fields['hello'] + "\n"
75
+ @context.tracer << workitem.fields['hello']
75
76
  end
76
77
  end
77
78
 
78
79
  def test_workitem_method
79
80
 
80
- @engine.register 'alpha', MyOtherParticipant
81
+ @dashboard.register 'alpha', MyOtherParticipant
81
82
 
82
- #noisy
83
+ #@dashboard.noisy = true
83
84
 
84
- wfid = @engine.launch(Ruote.define { alpha }, 'hello' => 'world')
85
+ wfid = @dashboard.launch(Ruote.define { alpha }, 'hello' => 'world')
85
86
 
86
- @engine.wait_for(wfid)
87
+ @dashboard.wait_for(wfid)
87
88
 
88
- assert_equal %w[ kitty world world ], @tracer.to_a
89
+ assert_equal %w[ kitty world world kitty ], @tracer.to_a
89
90
  end
90
91
  end
91
92
 
@@ -5,7 +5,7 @@
5
5
  # Tue Jun 15 09:07:58 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
 
@@ -15,11 +15,11 @@ class FtStorageCopyTest < Test::Unit::TestCase
15
15
 
16
16
  def test_copy_to_hash_storage
17
17
 
18
- @engine.register_participant '.+', Ruote::StorageParticipant
18
+ @dashboard.register_participant '.+', Ruote::StorageParticipant
19
19
 
20
20
  #noisy
21
21
 
22
- wfid = @engine.launch(Ruote.process_definition do
22
+ wfid = @dashboard.launch(Ruote.process_definition do
23
23
  sequence do
24
24
  alpha :timeout => '2d'
25
25
  end
@@ -30,7 +30,7 @@ class FtStorageCopyTest < Test::Unit::TestCase
30
30
  sleep 0.100 # making sure msgs have all been processed
31
31
 
32
32
  target = Ruote::HashStorage.new
33
- source = @engine.context.storage
33
+ source = @dashboard.context.storage
34
34
 
35
35
  #count = source.copy_to(target, :verbose => true)
36
36
  count = source.copy_to(target)
@@ -41,31 +41,31 @@ class FtStorageCopyTest < Test::Unit::TestCase
41
41
 
42
42
  def test_copy_from_hash_storage
43
43
 
44
- engine = Ruote::Engine.new(Ruote::Worker.new(Ruote::HashStorage.new()))
44
+ dash = Ruote::Dashboard.new(Ruote::Worker.new(Ruote::HashStorage.new()))
45
45
 
46
- engine.register_participant '.+', Ruote::StorageParticipant
46
+ #dash.noisy = true
47
47
 
48
- #engine.context.logger.noisy = true
48
+ dash.register_participant '.+', Ruote::StorageParticipant
49
49
 
50
- wfid = engine.launch(Ruote.process_definition do
50
+ wfid = dash.launch(Ruote.process_definition do
51
51
  sequence do
52
52
  alpha :timeout => '2d'
53
53
  end
54
54
  end)
55
55
 
56
- engine.wait_for(:alpha)
56
+ dash.wait_for(:alpha)
57
57
 
58
58
  sleep 0.100 # making sure msgs have all been processed
59
59
 
60
- source = engine.context.storage
61
- target = @engine.context.storage
60
+ source = dash.context.storage
61
+ target = @dashboard.context.storage
62
62
 
63
63
  #count = source.copy_to(target, :verbose => true)
64
64
  count = source.copy_to(target)
65
65
 
66
66
  assert_equal 8, count
67
67
  assert_equal source.ids('expressions'), target.ids('expressions')
68
- assert_not_nil @engine.process(wfid)
68
+ assert_not_nil @dashboard.process(wfid)
69
69
  end
70
70
  end
71
71
 
@@ -5,7 +5,7 @@
5
5
  # Thu Apr 22 14:41:38 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
 
@@ -34,9 +34,7 @@ class FtParticipantOnReplyTest < Test::Unit::TestCase
34
34
  end
35
35
  end
36
36
 
37
- @engine.register_participant :alpha, MyParticipant
38
-
39
- #noisy
37
+ @dashboard.register_participant :alpha, MyParticipant
40
38
 
41
39
  assert_trace('hello', pdef)
42
40
  end
@@ -50,7 +48,7 @@ class FtParticipantOnReplyTest < Test::Unit::TestCase
50
48
  end
51
49
  def on_reply(workitem)
52
50
  return if workitem.fields['pass']
53
- raise "something went wrong"
51
+ raise 'something went wrong'
54
52
  end
55
53
  end
56
54
 
@@ -63,25 +61,101 @@ class FtParticipantOnReplyTest < Test::Unit::TestCase
63
61
  end
64
62
  end
65
63
 
66
- @engine.register_participant :alpha, AwkwardParticipant
67
-
68
- #noisy
64
+ @dashboard.register_participant :alpha, AwkwardParticipant
69
65
 
70
- wfid = @engine.launch(pdef)
66
+ wfid = @dashboard.launch(pdef)
71
67
 
72
68
  wait_for(wfid)
73
69
 
74
- ps = @engine.process(wfid)
70
+ ps = @dashboard.process(wfid)
75
71
 
76
72
  assert_equal 1, ps.errors.size
77
73
 
78
74
  err = ps.errors.first
79
75
  err.fields['pass'] = true
80
- @engine.replay_at_error(err)
76
+ @dashboard.replay_at_error(err)
81
77
 
82
78
  wait_for(wfid)
83
79
 
84
80
  assert_equal 'over.', @tracer.to_s
85
81
  end
82
+
83
+ class MyOtherParticipant
84
+ include Ruote::LocalParticipant
85
+ def initialize(opts)
86
+ end
87
+ def consume(workitem)
88
+ workitem.fields['message'] = (workitem.fields['message'] || '') * 2
89
+ reply(workitem)
90
+ end
91
+ def on_apply(workitem)
92
+ workitem.fields['message'] = 'hello'
93
+ end
94
+ end
95
+
96
+ def test_participant_on_apply
97
+
98
+ @dashboard.register :alpha, MyOtherParticipant
99
+
100
+ pdef = Ruote.process_definition do
101
+ sequence do
102
+ alpha
103
+ echo '${message}'
104
+ end
105
+ end
106
+
107
+ wfid = @dashboard.launch(pdef)
108
+ r = @dashboard.wait_for(wfid)
109
+
110
+ assert_equal 'terminated', r['action']
111
+ assert_equal 'hellohello', @tracer.to_s
112
+ end
113
+
114
+ class MyOtherAwkwardParticipant
115
+ include Ruote::LocalParticipant
116
+ def initialize(opts)
117
+ end
118
+ def consume(workitem)
119
+ reply(workitem)
120
+ end
121
+ def on_apply(workitem)
122
+ return if workitem.fields['pass']
123
+ raise 'something went not right'
124
+ end
125
+ end
126
+
127
+ def test_participant_on_apply_error
128
+
129
+ @dashboard.register :alpha, MyOtherAwkwardParticipant
130
+
131
+ pdef = Ruote.process_definition do
132
+ sequence do
133
+ alpha
134
+ echo 'over.'
135
+ end
136
+ end
137
+
138
+ wfid = @dashboard.launch(pdef)
139
+ r = @dashboard.wait_for(wfid)
140
+
141
+ assert_equal 'error_intercepted', r['action']
142
+
143
+ ps = @dashboard.process(wfid)
144
+
145
+ assert_equal 1, ps.errors.size
146
+
147
+ err = ps.errors.first
148
+
149
+ assert_equal 'apply', err.msg['action']
150
+
151
+ err.fields['pass'] = true
152
+ @dashboard.replay_at_error(err)
153
+
154
+ r = wait_for(wfid)
155
+
156
+ assert_equal 'terminated', r['action']
157
+
158
+ assert_equal 'over.', @tracer.to_s
159
+ end
86
160
  end
87
161
 
@@ -5,7 +5,7 @@
5
5
  # Wed Jul 14 09:43:58 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
 
@@ -24,12 +24,12 @@ class FtVarParticipantTest < Test::Unit::TestCase
24
24
 
25
25
  #noisy
26
26
 
27
- wfid = @engine.launch(pdef)
27
+ wfid = @dashboard.launch(pdef)
28
28
 
29
- @engine.wait_for(:alpha)
29
+ @dashboard.wait_for(:alpha)
30
30
 
31
- assert_equal 1, @engine.storage_participant.size
32
- assert_equal 'alpha', @engine.storage_participant.first.participant_name
31
+ assert_equal 1, @dashboard.storage_participant.size
32
+ assert_equal 'alpha', @dashboard.storage_participant.first.participant_name
33
33
  end
34
34
  end
35
35