ruote 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. data/CHANGELOG.txt +166 -1
  2. data/CREDITS.txt +36 -17
  3. data/LICENSE.txt +1 -1
  4. data/README.rdoc +1 -7
  5. data/Rakefile +38 -29
  6. data/TODO.txt +93 -52
  7. data/lib/ruote-fs.rb +3 -0
  8. data/lib/ruote.rb +5 -1
  9. data/lib/ruote/context.rb +140 -35
  10. data/lib/ruote/dashboard.rb +1247 -0
  11. data/lib/ruote/{engine → dboard}/process_error.rb +22 -2
  12. data/lib/ruote/dboard/process_status.rb +587 -0
  13. data/lib/ruote/engine.rb +6 -871
  14. data/lib/ruote/exp/command.rb +7 -2
  15. data/lib/ruote/exp/commanded.rb +2 -2
  16. data/lib/ruote/exp/condition.rb +38 -13
  17. data/lib/ruote/exp/fe_add_branches.rb +1 -1
  18. data/lib/ruote/exp/fe_apply.rb +1 -1
  19. data/lib/ruote/exp/fe_await.rb +357 -0
  20. data/lib/ruote/exp/fe_cancel_process.rb +17 -3
  21. data/lib/ruote/exp/fe_command.rb +8 -4
  22. data/lib/ruote/exp/fe_concurrence.rb +218 -18
  23. data/lib/ruote/exp/fe_concurrent_iterator.rb +71 -10
  24. data/lib/ruote/exp/fe_cron.rb +3 -10
  25. data/lib/ruote/exp/fe_cursor.rb +14 -4
  26. data/lib/ruote/exp/fe_define.rb +3 -1
  27. data/lib/ruote/exp/fe_echo.rb +1 -1
  28. data/lib/ruote/exp/fe_equals.rb +1 -1
  29. data/lib/ruote/exp/fe_error.rb +1 -1
  30. data/lib/ruote/exp/fe_filter.rb +163 -4
  31. data/lib/ruote/exp/fe_forget.rb +21 -4
  32. data/lib/ruote/exp/fe_given.rb +1 -1
  33. data/lib/ruote/exp/fe_if.rb +1 -1
  34. data/lib/ruote/exp/fe_inc.rb +102 -35
  35. data/lib/ruote/exp/fe_iterator.rb +47 -12
  36. data/lib/ruote/exp/fe_listen.rb +96 -11
  37. data/lib/ruote/exp/fe_lose.rb +31 -4
  38. data/lib/ruote/exp/fe_noop.rb +1 -1
  39. data/lib/ruote/exp/fe_on_error.rb +109 -0
  40. data/lib/ruote/exp/fe_once.rb +10 -19
  41. data/lib/ruote/exp/fe_participant.rb +90 -28
  42. data/lib/ruote/exp/fe_read.rb +69 -0
  43. data/lib/ruote/exp/fe_redo.rb +3 -2
  44. data/lib/ruote/exp/fe_ref.rb +57 -27
  45. data/lib/ruote/exp/fe_registerp.rb +1 -3
  46. data/lib/ruote/exp/fe_reserve.rb +1 -1
  47. data/lib/ruote/exp/fe_restore.rb +6 -6
  48. data/lib/ruote/exp/fe_save.rb +12 -19
  49. data/lib/ruote/exp/fe_sequence.rb +38 -2
  50. data/lib/ruote/exp/fe_set.rb +143 -40
  51. data/lib/ruote/exp/{fe_let.rb → fe_stall.rb} +7 -38
  52. data/lib/ruote/exp/fe_subprocess.rb +8 -2
  53. data/lib/ruote/exp/fe_that.rb +1 -1
  54. data/lib/ruote/exp/fe_undo.rb +40 -4
  55. data/lib/ruote/exp/fe_unregisterp.rb +1 -3
  56. data/lib/ruote/exp/fe_wait.rb +12 -25
  57. data/lib/ruote/exp/{flowexpression.rb → flow_expression.rb} +375 -229
  58. data/lib/ruote/exp/iterator.rb +2 -2
  59. data/lib/ruote/exp/merge.rb +78 -17
  60. data/lib/ruote/exp/ro_attributes.rb +46 -36
  61. data/lib/ruote/exp/ro_filters.rb +34 -8
  62. data/lib/ruote/exp/ro_on_x.rb +431 -0
  63. data/lib/ruote/exp/ro_persist.rb +19 -7
  64. data/lib/ruote/exp/ro_timers.rb +123 -0
  65. data/lib/ruote/exp/ro_variables.rb +90 -29
  66. data/lib/ruote/fei.rb +57 -3
  67. data/lib/ruote/fs.rb +3 -0
  68. data/lib/ruote/id/mnemo_wfid_generator.rb +30 -7
  69. data/lib/ruote/id/wfid_generator.rb +17 -38
  70. data/lib/ruote/log/default_history.rb +23 -9
  71. data/lib/ruote/log/fancy_printing.rb +265 -0
  72. data/lib/ruote/log/storage_history.rb +23 -13
  73. data/lib/ruote/log/wait_logger.rb +224 -17
  74. data/lib/ruote/observer.rb +82 -0
  75. data/lib/ruote/part/block_participant.rb +65 -28
  76. data/lib/ruote/part/code_participant.rb +81 -0
  77. data/lib/ruote/part/engine_participant.rb +7 -2
  78. data/lib/ruote/part/local_participant.rb +221 -21
  79. data/lib/ruote/part/no_op_participant.rb +1 -1
  80. data/lib/ruote/part/null_participant.rb +1 -1
  81. data/lib/ruote/part/participant.rb +50 -0
  82. data/lib/ruote/part/rev_participant.rb +178 -0
  83. data/lib/ruote/part/smtp_participant.rb +2 -2
  84. data/lib/ruote/part/storage_participant.rb +228 -60
  85. data/lib/ruote/part/template.rb +1 -1
  86. data/lib/ruote/participant.rb +2 -0
  87. data/lib/ruote/reader.rb +205 -68
  88. data/lib/ruote/reader/json.rb +49 -0
  89. data/lib/ruote/reader/radial.rb +303 -0
  90. data/lib/ruote/reader/ruby_dsl.rb +44 -9
  91. data/lib/ruote/reader/xml.rb +11 -8
  92. data/lib/ruote/receiver/base.rb +98 -45
  93. data/lib/ruote/storage/base.rb +104 -35
  94. data/lib/ruote/storage/composite_storage.rb +50 -60
  95. data/lib/ruote/storage/fs_storage.rb +25 -34
  96. data/lib/ruote/storage/hash_storage.rb +38 -36
  97. data/lib/ruote/svc/dispatch_pool.rb +104 -35
  98. data/lib/ruote/svc/dollar_sub.rb +10 -8
  99. data/lib/ruote/svc/error_handler.rb +108 -52
  100. data/lib/ruote/svc/expression_map.rb +3 -3
  101. data/lib/ruote/svc/participant_list.rb +160 -55
  102. data/lib/ruote/svc/tracker.rb +31 -31
  103. data/lib/ruote/svc/treechecker.rb +28 -16
  104. data/lib/ruote/tree_dot.rb +1 -1
  105. data/lib/ruote/util/deep.rb +143 -0
  106. data/lib/ruote/util/filter.rb +125 -18
  107. data/lib/ruote/util/hashdot.rb +15 -13
  108. data/lib/ruote/util/look.rb +1 -1
  109. data/lib/ruote/util/lookup.rb +60 -22
  110. data/lib/ruote/util/misc.rb +63 -18
  111. data/lib/ruote/util/mpatch.rb +53 -0
  112. data/lib/ruote/util/ometa.rb +1 -2
  113. data/lib/ruote/util/process_observer.rb +177 -0
  114. data/lib/ruote/util/subprocess.rb +1 -1
  115. data/lib/ruote/util/time.rb +2 -2
  116. data/lib/ruote/util/tree.rb +64 -2
  117. data/lib/ruote/version.rb +3 -2
  118. data/lib/ruote/worker.rb +421 -92
  119. data/lib/ruote/workitem.rb +157 -22
  120. data/ruote.gemspec +15 -9
  121. data/test/bm/ci.rb +0 -2
  122. data/test/bm/ici.rb +0 -2
  123. data/test/bm/load_26c.rb +0 -3
  124. data/test/bm/mega.rb +0 -2
  125. data/test/functional/base.rb +57 -43
  126. data/test/functional/concurrent_base.rb +16 -13
  127. data/test/functional/ct_0_concurrence.rb +7 -11
  128. data/test/functional/ct_1_iterator.rb +9 -11
  129. data/test/functional/ct_2_cancel.rb +28 -17
  130. data/test/functional/eft_0_flow_expression.rb +35 -0
  131. data/test/functional/eft_10_cancel_process.rb +1 -1
  132. data/test/functional/eft_11_wait.rb +13 -13
  133. data/test/functional/eft_12_listen.rb +199 -66
  134. data/test/functional/eft_13_iterator.rb +95 -29
  135. data/test/functional/eft_14_cursor.rb +74 -24
  136. data/test/functional/eft_15_loop.rb +7 -7
  137. data/test/functional/eft_16_if.rb +1 -1
  138. data/test/functional/eft_17_equals.rb +1 -1
  139. data/test/functional/eft_18_concurrent_iterator.rb +156 -68
  140. data/test/functional/eft_19_reserve.rb +15 -15
  141. data/test/functional/eft_1_echo.rb +1 -1
  142. data/test/functional/eft_20_save.rb +51 -9
  143. data/test/functional/eft_21_restore.rb +1 -1
  144. data/test/functional/eft_22_noop.rb +1 -1
  145. data/test/functional/eft_23_apply.rb +1 -1
  146. data/test/functional/eft_24_add_branches.rb +7 -8
  147. data/test/functional/eft_25_command.rb +1 -1
  148. data/test/functional/eft_26_error.rb +11 -11
  149. data/test/functional/eft_27_inc.rb +111 -67
  150. data/test/functional/eft_28_once.rb +16 -16
  151. data/test/functional/eft_29_cron.rb +9 -9
  152. data/test/functional/eft_2_sequence.rb +23 -4
  153. data/test/functional/eft_30_ref.rb +36 -24
  154. data/test/functional/eft_31_registerp.rb +24 -24
  155. data/test/functional/eft_32_lose.rb +46 -20
  156. data/test/functional/eft_34_given.rb +1 -1
  157. data/test/functional/eft_35_filter.rb +161 -7
  158. data/test/functional/eft_36_read.rb +97 -0
  159. data/test/functional/{eft_0_process_definition.rb → eft_37_process_definition.rb} +4 -4
  160. data/test/functional/eft_38_on_error.rb +195 -0
  161. data/test/functional/eft_39_stall.rb +35 -0
  162. data/test/functional/eft_3_participant.rb +77 -22
  163. data/test/functional/eft_40_await.rb +297 -0
  164. data/test/functional/eft_4_set.rb +110 -11
  165. data/test/functional/eft_5_subprocess.rb +27 -5
  166. data/test/functional/eft_6_concurrence.rb +299 -60
  167. data/test/functional/eft_7_forget.rb +24 -22
  168. data/test/functional/eft_8_undo.rb +52 -15
  169. data/test/functional/eft_9_redo.rb +18 -20
  170. data/test/functional/ft_0_worker.rb +122 -13
  171. data/test/functional/ft_10_dollar.rb +77 -16
  172. data/test/functional/ft_11_recursion.rb +9 -9
  173. data/test/functional/ft_12_launchitem.rb +7 -9
  174. data/test/functional/ft_13_variables.rb +125 -22
  175. data/test/functional/ft_14_re_apply.rb +112 -56
  176. data/test/functional/ft_15_timeout.rb +64 -33
  177. data/test/functional/ft_16_participant_params.rb +59 -6
  178. data/test/functional/ft_17_conditional.rb +68 -2
  179. data/test/functional/ft_18_kill.rb +48 -30
  180. data/test/functional/ft_19_participant_code.rb +67 -0
  181. data/test/functional/ft_1_process_status.rb +222 -150
  182. data/test/functional/ft_20_storage_participant.rb +445 -44
  183. data/test/functional/ft_21_forget.rb +21 -26
  184. data/test/functional/ft_22_process_definitions.rb +8 -6
  185. data/test/functional/ft_23_load_defs.rb +29 -5
  186. data/test/functional/ft_24_block_participant.rb +199 -20
  187. data/test/functional/ft_25_receiver.rb +98 -46
  188. data/test/functional/ft_26_participant_rtimeout.rb +34 -26
  189. data/test/functional/ft_27_var_indirection.rb +40 -5
  190. data/test/functional/ft_28_null_noop_participants.rb +5 -5
  191. data/test/functional/ft_29_part_template.rb +2 -2
  192. data/test/functional/ft_2_errors.rb +106 -74
  193. data/test/functional/ft_30_smtp_participant.rb +7 -7
  194. data/test/functional/ft_31_part_blocking.rb +11 -11
  195. data/test/functional/ft_32_scope.rb +50 -0
  196. data/test/functional/ft_33_participant_subprocess_priority.rb +3 -3
  197. data/test/functional/ft_34_cursor_rewind.rb +14 -14
  198. data/test/functional/ft_35_add_service.rb +67 -9
  199. data/test/functional/ft_36_storage_history.rb +92 -24
  200. data/test/functional/ft_37_default_history.rb +35 -23
  201. data/test/functional/ft_38_participant_more.rb +189 -32
  202. data/test/functional/ft_39_wait_for.rb +25 -25
  203. data/test/functional/ft_3_participant_registration.rb +235 -107
  204. data/test/functional/ft_40_wait_logger.rb +105 -18
  205. data/test/functional/ft_41_participants.rb +13 -12
  206. data/test/functional/ft_42_storage_copy.rb +12 -12
  207. data/test/functional/ft_43_participant_on_reply.rb +85 -11
  208. data/test/functional/ft_44_var_participant.rb +5 -5
  209. data/test/functional/ft_45_participant_accept.rb +3 -3
  210. data/test/functional/ft_46_launch_single.rb +17 -17
  211. data/test/functional/ft_47_wfids.rb +41 -0
  212. data/test/functional/ft_48_lose.rb +19 -25
  213. data/test/functional/ft_49_engine_on_error.rb +54 -70
  214. data/test/functional/ft_4_cancel.rb +84 -26
  215. data/test/functional/ft_50_engine_config.rb +4 -4
  216. data/test/functional/ft_51_misc.rb +12 -12
  217. data/test/functional/ft_52_case.rb +17 -17
  218. data/test/functional/ft_53_engine_on_terminate.rb +18 -21
  219. data/test/functional/ft_54_patterns.rb +18 -16
  220. data/test/functional/ft_55_engine_participant.rb +55 -55
  221. data/test/functional/ft_56_filter_attribute.rb +90 -52
  222. data/test/functional/ft_57_rev_participant.rb +252 -0
  223. data/test/functional/ft_58_workitem.rb +150 -0
  224. data/test/functional/ft_59_pause.rb +329 -0
  225. data/test/functional/ft_5_on_error.rb +430 -77
  226. data/test/functional/ft_60_code_participant.rb +65 -0
  227. data/test/functional/ft_61_trailing_fields.rb +34 -0
  228. data/test/functional/ft_62_exp_name_and_dollar_substitution.rb +35 -0
  229. data/test/functional/ft_63_participants_221.rb +458 -0
  230. data/test/functional/ft_64_stash.rb +41 -0
  231. data/test/functional/ft_65_timers.rb +313 -0
  232. data/test/functional/ft_66_flank.rb +133 -0
  233. data/test/functional/ft_67_radial_misc.rb +34 -0
  234. data/test/functional/ft_68_reput.rb +72 -0
  235. data/test/functional/ft_69_worker_info.rb +56 -0
  236. data/test/functional/ft_6_on_cancel.rb +189 -36
  237. data/test/functional/ft_70_take_and_discard_attributes.rb +94 -0
  238. data/test/functional/ft_71_retries.rb +144 -0
  239. data/test/functional/ft_72_on_terminate.rb +60 -0
  240. data/test/functional/ft_73_raise_msg.rb +107 -0
  241. data/test/functional/ft_74_respark.rb +106 -0
  242. data/test/functional/ft_75_context.rb +66 -0
  243. data/test/functional/ft_76_observer.rb +53 -0
  244. data/test/functional/ft_77_process_observer.rb +157 -0
  245. data/test/functional/ft_78_part_participant.rb +37 -0
  246. data/test/functional/ft_7_tags.rb +238 -50
  247. data/test/functional/ft_8_participant_consumption.rb +27 -21
  248. data/test/functional/ft_9_subprocesses.rb +48 -18
  249. data/test/functional/restart_base.rb +4 -6
  250. data/test/functional/rt_0_wait.rb +10 -10
  251. data/test/functional/rt_1_listen.rb +6 -6
  252. data/test/functional/rt_2_errors.rb +12 -12
  253. data/test/functional/rt_3_once.rb +17 -12
  254. data/test/functional/rt_4_cron.rb +17 -17
  255. data/test/functional/rt_5_timeout.rb +13 -13
  256. data/test/functional/signals.rb +103 -0
  257. data/test/functional/storage.rb +730 -0
  258. data/test/functional/storage_helper.rb +48 -35
  259. data/test/functional/test.rb +6 -2
  260. data/test/misc/idle.rb +21 -0
  261. data/test/misc/light.rb +29 -0
  262. data/test/path_helper.rb +1 -1
  263. data/test/test.rb +2 -5
  264. data/test/test_helper.rb +13 -0
  265. data/test/unit/test.rb +1 -4
  266. data/test/unit/ut_0_ruby_reader.rb +25 -9
  267. data/test/unit/ut_10_participants.rb +47 -0
  268. data/test/unit/ut_11_lookup.rb +59 -2
  269. data/test/unit/ut_12_wait_logger.rb +123 -0
  270. data/test/unit/ut_14_is_uri.rb +1 -1
  271. data/test/unit/ut_15_util.rb +1 -1
  272. data/test/unit/ut_16_reader.rb +136 -14
  273. data/test/unit/ut_17_merge.rb +155 -0
  274. data/test/unit/ut_19_part_template.rb +1 -1
  275. data/test/unit/ut_1_fei.rb +11 -2
  276. data/test/unit/ut_20_composite_storage.rb +27 -1
  277. data/test/unit/{ut_21_participant_list.rb → ut_21_svc_participant_list.rb} +2 -3
  278. data/test/unit/ut_22_filter.rb +231 -10
  279. data/test/unit/ut_23_svc_tracker.rb +48 -0
  280. data/test/unit/ut_24_radial_reader.rb +458 -0
  281. data/test/unit/ut_25_process_status.rb +143 -0
  282. data/test/unit/ut_26_deep.rb +131 -0
  283. data/test/unit/ut_2_dashboard.rb +114 -0
  284. data/test/unit/ut_3_worker.rb +54 -0
  285. data/test/unit/ut_4_expmap.rb +1 -1
  286. data/test/unit/ut_5_tree.rb +23 -23
  287. data/test/unit/ut_6_condition.rb +71 -29
  288. data/test/unit/ut_7_workitem.rb +18 -4
  289. data/test/unit/ut_8_tree_to_dot.rb +1 -1
  290. data/test/unit/ut_9_xml_reader.rb +1 -1
  291. metadata +142 -63
  292. data/jruby_issue.txt +0 -32
  293. data/lib/ruote/engine/process_status.rb +0 -403
  294. data/lib/ruote/log/pretty.rb +0 -165
  295. data/lib/ruote/log/test_logger.rb +0 -204
  296. data/lib/ruote/util/serializer.rb +0 -103
  297. data/phil.txt +0 -14
  298. data/test/functional/eft_33_let.rb +0 -31
  299. data/test/functional/ft_19_alias.rb +0 -33
  300. data/test/functional/ft_47_wfid_generator.rb +0 -54
  301. data/test/unit/storage.rb +0 -403
  302. data/test/unit/storages.rb +0 -37
  303. data/test/unit/ut_13_serializer.rb +0 -65
  304. data/test/unit/ut_18_engine.rb +0 -47
  305. data/test/unit/ut_3_wait_logger.rb +0 -39
@@ -5,7 +5,7 @@
5
5
  # Wed Aug 12 23:24:16 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
 
@@ -24,7 +24,7 @@ class FtReceiverTest < Test::Unit::TestCase
24
24
  end
25
25
  end
26
26
 
27
- @engine.register_participant 'alpha', MyParticipant
27
+ @dashboard.register_participant 'alpha', MyParticipant
28
28
  end
29
29
 
30
30
  class MyParticipant
@@ -52,50 +52,48 @@ class FtReceiverTest < Test::Unit::TestCase
52
52
 
53
53
  def test_my_receiver_init
54
54
 
55
- cid = @engine.context.object_id
55
+ cid = @dashboard.context.object_id
56
56
 
57
- receiver = MyReceiver.new(@engine)
57
+ receiver = MyReceiver.new(@dashboard)
58
58
  assert_equal cid, receiver.context.object_id
59
59
  assert_not_nil receiver.context.storage
60
60
 
61
- receiver = MyReceiver.new(@engine.context)
61
+ receiver = MyReceiver.new(@dashboard.context)
62
62
  assert_equal cid, receiver.context.object_id
63
63
  assert_not_nil receiver.context.storage
64
64
 
65
- receiver = MyReceiver.new(@engine.worker)
65
+ receiver = MyReceiver.new(@dashboard.worker)
66
66
  assert_equal cid, receiver.context.object_id
67
67
  assert_not_nil receiver.context.storage
68
68
 
69
- receiver = MyReceiver.new(@engine.storage)
69
+ receiver = MyReceiver.new(@dashboard.storage)
70
70
  assert_equal cid, receiver.context.object_id
71
71
  assert_not_nil receiver.context.storage
72
72
 
73
- @engine.storage.instance_variable_set(:@context, nil)
74
- receiver = MyReceiver.new(@engine.storage)
73
+ @dashboard.storage.instance_variable_set(:@context, nil)
74
+ receiver = MyReceiver.new(@dashboard.storage)
75
75
  assert_not_equal cid, receiver.context.object_id
76
76
  assert_not_nil receiver.context.storage
77
77
  end
78
78
 
79
79
  def test_my_receiver
80
80
 
81
- receiver = MyReceiver.new(@engine.context)
81
+ receiver = MyReceiver.new(@dashboard.context)
82
82
 
83
- #noisy
84
-
85
- wfid = @engine.launch(@pdef)
83
+ wfid = @dashboard.launch(@pdef)
86
84
 
87
85
  wait_for(:alpha)
88
- while @engine.context.stash[:wi].nil? do
86
+ while @dashboard.context.stash[:wi].nil? do
89
87
  Thread.pass
90
88
  end
91
89
 
92
- assert_equal 3, @engine.process(wfid).expressions.size
90
+ assert_equal 3, @dashboard.process(wfid).expressions.size
93
91
 
94
- receiver.receive(@engine.context.stash[:wi])
92
+ receiver.receive(@dashboard.context.stash[:wi])
95
93
 
96
94
  wait_for(wfid)
97
95
 
98
- assert_nil @engine.process(wfid)
96
+ assert_nil @dashboard.process(wfid)
99
97
 
100
98
  rcv = logger.log.select { |e| e['action'] == 'receive' }.first
101
99
  assert_equal 'FtReceiverTest::MyReceiver', rcv['receiver']
@@ -103,18 +101,18 @@ class FtReceiverTest < Test::Unit::TestCase
103
101
 
104
102
  def test_engine_receive
105
103
 
106
- wfid = @engine.launch(@pdef)
104
+ wfid = @dashboard.launch(@pdef)
107
105
 
108
106
  wait_for(:alpha)
109
107
 
110
- @engine.receive(@engine.context.stash[:wi])
108
+ @dashboard.receive(@dashboard.context.stash[:wi])
111
109
 
112
110
  wait_for(wfid)
113
111
 
114
- assert_nil @engine.process(wfid)
112
+ assert_nil @dashboard.process(wfid)
115
113
 
116
114
  rcv = logger.log.select { |e| e['action'] == 'receive' }.first
117
- assert_equal 'Ruote::Engine', rcv['receiver']
115
+ assert_equal 'Ruote::Dashboard', rcv['receiver']
118
116
  end
119
117
 
120
118
  class MyOtherParticipant
@@ -141,67 +139,121 @@ class FtReceiverTest < Test::Unit::TestCase
141
139
 
142
140
  def test_receiver_triggered_dispatch_error
143
141
 
144
- class << @engine.context
142
+ class << @dashboard.context
145
143
  def receiver
146
144
  @rcv ||= MyOtherReceiver.new(engine)
147
145
  end
148
146
  end
149
147
 
150
- @engine.register_participant :alpha, MyOtherParticipant
148
+ @dashboard.register_participant :alpha, MyOtherParticipant
151
149
 
152
150
  pdef = Ruote.process_definition do
153
151
  alpha
154
152
  end
155
153
 
156
- #noisy
157
-
158
- wfid = @engine.launch(pdef)
154
+ wfid = @dashboard.launch(pdef)
159
155
 
160
156
  wait_for(wfid)
161
157
 
162
- ps = @engine.process(wfid)
158
+ ps = @dashboard.process(wfid)
163
159
  err = ps.errors.first
164
160
 
161
+ assert_equal 2, ps.expressions.size
165
162
  assert_equal 1, ps.errors.size
166
163
  assert_equal '#<RuntimeError: something went wrong>', err.message
164
+ assert_equal String, err.msg['put_at'].class
167
165
 
168
- @engine.replay_at_error(err)
166
+ @dashboard.replay_at_error(err)
169
167
 
170
168
  wait_for(wfid)
171
169
 
172
- ps = @engine.process(wfid)
170
+ ps = @dashboard.process(wfid)
173
171
 
174
172
  assert_nil ps
175
173
  end
176
174
 
177
175
  def test_receiver_fexp_and_wi
178
176
 
179
- #@engine.register do
180
- # catchall Ruote::StorageParticipant
181
- #end
182
- @engine.register_participant :alpha, Ruote::StorageParticipant
183
-
184
- #noisy
177
+ @dashboard.register_participant :alpha, Ruote::StorageParticipant
185
178
 
186
- wfid = @engine.launch(Ruote.define do
179
+ wfid = @dashboard.launch(Ruote.define do
187
180
  alpha
188
181
  end)
189
182
 
190
- @engine.wait_for(:alpha)
191
- @engine.wait_for(1)
183
+ @dashboard.wait_for('dispatched')
192
184
 
193
- wi = @engine.storage_participant.first
185
+ wi = @dashboard.storage_participant.first
194
186
 
195
187
  assert_equal wfid, wi.fei.wfid
196
188
 
197
- assert_equal wfid, @engine.fexp(wi).fei.wfid
198
- assert_equal wfid, @engine.fexp(wi.fei).fei.wfid
199
- assert_equal wfid, @engine.fexp(wi.fei.sid).fei.wfid
200
- assert_equal wfid, @engine.fexp(wi.fei.sid).h.applied_workitem['fei']['wfid']
189
+ assert_equal wfid, @dashboard.fexp(wi).fei.wfid
190
+ assert_equal wfid, @dashboard.fexp(wi.fei).fei.wfid
191
+ assert_equal wfid, @dashboard.fexp(wi.fei.sid).fei.wfid
192
+ assert_equal wfid, @dashboard.fexp(wi.fei.sid).h.applied_workitem['fei']['wfid']
193
+
194
+ assert_equal wfid, @dashboard.workitem(wi).wfid
195
+ assert_equal wfid, @dashboard.workitem(wi.fei).wfid
196
+ assert_equal wfid, @dashboard.workitem(wi.fei.sid).wfid
197
+ end
198
+
199
+ class FlunkParticipant
200
+ include Ruote::LocalParticipant
201
+
202
+ # Since LocalParticipant extends ReceiverMixin, we can call #flunk
203
+ #
204
+ def on_workitem
205
+ flunk(workitem, ArgumentError, 'out of order')
206
+ end
207
+
208
+ def on_cancel
209
+ # ...
210
+ end
211
+ end
212
+
213
+ class StringFlunkParticipant
214
+ include Ruote::LocalParticipant
215
+
216
+ # Since LocalParticipant extends ReceiverMixin, we can call #flunk
217
+ #
218
+ def on_workitem
219
+ flunk(workitem, 'out of order')
220
+ end
221
+
222
+ def on_cancel
223
+ # ...
224
+ end
225
+ end
226
+
227
+ def test_flunk
228
+
229
+ @dashboard.register :alpha, FlunkParticipant
230
+
231
+ wfid = @dashboard.launch(Ruote.define do
232
+ alpha
233
+ end)
234
+
235
+ r = @dashboard.wait_for(wfid)
236
+
237
+ assert_equal 'error_intercepted', r['action']
238
+ assert_equal 'ArgumentError', r['error']['class']
239
+ assert_equal 'out of order', r['error']['message']
240
+ assert_match __FILE__, r['error']['trace'].first
241
+ end
242
+
243
+ def test_string_flunk
244
+
245
+ @dashboard.register :alpha, StringFlunkParticipant
246
+
247
+ wfid = @dashboard.launch(Ruote.define do
248
+ alpha
249
+ end)
250
+
251
+ r = @dashboard.wait_for(wfid)
201
252
 
202
- assert_equal wfid, @engine.workitem(wi).wfid
203
- assert_equal wfid, @engine.workitem(wi.fei).wfid
204
- assert_equal wfid, @engine.workitem(wi.fei.sid).wfid
253
+ assert_equal 'error_intercepted', r['action']
254
+ assert_equal 'RuntimeError', r['error']['class']
255
+ assert_equal 'out of order', r['error']['message']
256
+ assert_match __FILE__, r['error']['trace'].first
205
257
  end
206
258
  end
207
259
 
@@ -5,7 +5,7 @@
5
5
  # Sun Aug 16 14:25:35 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
 
@@ -28,20 +28,22 @@ class FtParticipantTimeoutTest < Test::Unit::TestCase
28
28
  end
29
29
  end
30
30
 
31
- @engine.register_participant :alpha, AlphaParticipant
32
- sto = @engine.register_participant :bravo, Ruote::StorageParticipant
31
+ @dashboard.register_participant :alpha, AlphaParticipant
32
+ sto = @dashboard.register_participant :bravo, Ruote::StorageParticipant
33
33
 
34
- #noisy
34
+ #@dashboard.noisy = true
35
+
36
+ wfid = @dashboard.launch(pdef)
35
37
 
36
- wfid = @engine.launch(pdef)
37
- wait_for(13)
38
+ @dashboard.wait_for('dispatched')
39
+ @dashboard.wait_for('dispatched')
38
40
 
39
41
  assert_equal 1, sto.size
40
42
  assert_equal 'bravo', sto.first.participant_name
41
43
 
42
44
  #logger.log.each { |l| p l }
43
45
  assert_equal 2, logger.log.select { |e| e['flavour'] == 'timeout' }.size
44
- assert_equal 0, @engine.storage.get_many('schedules').size
46
+ assert_equal 0, @dashboard.storage.get_many('schedules').size
45
47
 
46
48
  assert_not_nil sto.first.fields['__timed_out__']
47
49
  end
@@ -69,13 +71,13 @@ class FtParticipantTimeoutTest < Test::Unit::TestCase
69
71
  echo 'done.'
70
72
  end
71
73
 
72
- @engine.register_participant :alpha, MyParticipant
74
+ @dashboard.register_participant :alpha, MyParticipant
73
75
 
74
76
  #noisy
75
77
 
76
- wfid = @engine.launch(pdef)
78
+ wfid = @dashboard.launch(pdef)
77
79
 
78
- @engine.wait_for(wfid)
80
+ @dashboard.wait_for(wfid)
79
81
 
80
82
  assert_equal 'done.', @tracer.to_s
81
83
  assert_equal 2, logger.log.select { |e| e['flavour'] == 'timeout' }.size
@@ -85,20 +87,20 @@ class FtParticipantTimeoutTest < Test::Unit::TestCase
85
87
 
86
88
  # process definition cancels timeout given by participant
87
89
 
90
+ #@dashboard.noisy = true
91
+
88
92
  pdef = Ruote.define do
89
93
  alpha :timeout => ''
90
94
  echo 'done.'
91
95
  end
92
96
 
93
- @engine.register_participant :alpha, MyParticipant
97
+ @dashboard.register_participant :alpha, MyParticipant
94
98
 
95
- wfid = @engine.launch(pdef)
99
+ wfid = @dashboard.launch(pdef)
96
100
 
97
- @engine.wait_for(:alpha)
101
+ @dashboard.wait_for('dispatched')
98
102
 
99
- sleep 0.350
100
-
101
- assert_equal 0, @engine.storage.get_many('schedules').size
103
+ assert_equal 0, @dashboard.storage.get_many('schedules').size
102
104
  assert_equal '', @tracer.to_s
103
105
  end
104
106
 
@@ -126,16 +128,16 @@ class FtParticipantTimeoutTest < Test::Unit::TestCase
126
128
  echo 'done.'
127
129
  end
128
130
 
129
- @engine.register_participant :alpha, MyOtherParticipant, 'timeout' => '1s'
130
- @engine.register_participant :bravo, MyOtherParticipant
131
+ @dashboard.register_participant :alpha, MyOtherParticipant, 'timeout' => '1s'
132
+ @dashboard.register_participant :bravo, MyOtherParticipant
131
133
 
132
134
  #noisy
133
135
 
134
- wfid = @engine.launch(pdef)
136
+ wfid = @dashboard.launch(pdef)
135
137
 
136
- @engine.wait_for(:bravo)
138
+ @dashboard.wait_for(:bravo)
137
139
 
138
- assert_equal 0, @engine.storage.get_many('schedules').size
140
+ assert_equal 0, @dashboard.storage.get_many('schedules').size
139
141
  # no timeout for participant :bravo
140
142
  end
141
143
 
@@ -161,19 +163,25 @@ class FtParticipantTimeoutTest < Test::Unit::TestCase
161
163
  alpha
162
164
  end
163
165
 
164
- @engine.register_participant :alpha, YetAnotherParticipant
166
+ @dashboard.register_participant :alpha, YetAnotherParticipant
165
167
 
166
168
  #noisy
167
169
 
168
- wfid = @engine.launch(pdef, 'timeout' => 60)
170
+ wfid = @dashboard.launch(pdef, 'timeout' => 60)
169
171
 
170
- @engine.wait_for(:alpha)
171
- @engine.wait_for(1)
172
+ @dashboard.wait_for(:alpha)
173
+ @dashboard.wait_for(1)
172
174
 
173
- schedules = @engine.storage.get_many('schedules')
175
+ schedules = @dashboard.storage.get_many('schedules')
174
176
 
175
177
  assert_equal 1, schedules.size
176
178
  assert_equal '120s', schedules.first['original']
179
+
180
+ ps = @dashboard.ps(wfid)
181
+
182
+ assert_not_nil ps.expressions.last.h.timers
183
+ assert_equal 1, ps.expressions.last.h.timers.size
184
+ assert_equal 'timeout', ps.expressions.last.h.timers.first.last
177
185
  end
178
186
  end
179
187
 
@@ -5,12 +5,31 @@
5
5
  # Sun Aug 23 16:59:07 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 FtVarIndirectionTest < Test::Unit::TestCase
12
12
  include FunctionalBase
13
13
 
14
+ def test_var_alias
15
+
16
+ pdef = Ruote.process_definition :name => 'def0' do
17
+ set :v => 'alpha', :val => 'bravo'
18
+ sequence do
19
+ alpha
20
+ bravo
21
+ end
22
+ end
23
+
24
+ alpha = @dashboard.register_participant :bravo do |workitem|
25
+ tracer << "b:#{workitem.fields['params']['original_ref']}\n"
26
+ end
27
+
28
+ #noisy
29
+
30
+ assert_trace(%w[ b:alpha b: ], pdef)
31
+ end
32
+
14
33
  def test_participant_indirection
15
34
 
16
35
  pdef = Ruote.process_definition do
@@ -21,8 +40,8 @@ class FtVarIndirectionTest < Test::Unit::TestCase
21
40
  end
22
41
  end
23
42
 
24
- @engine.register_participant :alpha do |workitem|
25
- @tracer << "alpha\n"
43
+ @dashboard.register_participant :alpha do |workitem|
44
+ tracer << "alpha\n"
26
45
  end
27
46
 
28
47
  #noisy
@@ -71,7 +90,7 @@ class FtVarIndirectionTest < Test::Unit::TestCase
71
90
 
72
91
  #noisy
73
92
 
74
- @engine.variables['v'] = File.join(File.dirname(__FILE__), '..', 'pdef.xml')
93
+ @dashboard.variables['v'] = File.join(File.dirname(__FILE__), '..', 'pdef.xml')
75
94
 
76
95
  assert_trace %w[ a b ], pdef
77
96
  end
@@ -84,10 +103,26 @@ class FtVarIndirectionTest < Test::Unit::TestCase
84
103
 
85
104
  #noisy
86
105
 
87
- @engine.variables['v'] = File.expand_path(
106
+ @dashboard.variables['v'] = File.expand_path(
88
107
  File.join(File.dirname(__FILE__), '..', 'pdef.xml'))
89
108
 
90
109
  assert_trace %w[ a b ], pdef
91
110
  end
111
+
112
+ def test_engine_variable_for_expression_aliases
113
+
114
+ pdef = Ruote.define do
115
+ output "nada"
116
+ end
117
+
118
+ @dashboard.variables['output'] = 'echo'
119
+
120
+ #@dashboard.noisy = true
121
+
122
+ wfid = @dashboard.launch(pdef)
123
+ @dashboard.wait_for(wfid)
124
+
125
+ assert_equal 'nada', @tracer.to_s
126
+ end
92
127
  end
93
128