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 Jul 27 09:17:51 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,13 +22,13 @@ class FtForgetTest < 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
29
  #noisy
30
30
 
31
- wfid = @engine.launch(pdef)
31
+ wfid = @dashboard.launch(pdef)
32
32
 
33
33
  wait_for(wfid)
34
34
  wait_for(wfid)
@@ -43,7 +43,7 @@ class FtForgetTest < Test::Unit::TestCase
43
43
 
44
44
  def test_forgotten_tree
45
45
 
46
- sp = @engine.register_participant :alpha, Ruote::StorageParticipant
46
+ sp = @dashboard.register_participant :alpha, Ruote::StorageParticipant
47
47
 
48
48
  pdef = Ruote.process_definition do
49
49
  sequence do
@@ -51,11 +51,11 @@ class FtForgetTest < Test::Unit::TestCase
51
51
  end
52
52
  end
53
53
 
54
- wfid = @engine.launch(pdef)
54
+ wfid = @dashboard.launch(pdef)
55
55
 
56
56
  wait_for(wfid)
57
57
 
58
- ps = @engine.process(wfid)
58
+ ps = @dashboard.process(wfid)
59
59
 
60
60
  assert_not_nil ps
61
61
  assert_equal 0, ps.errors.size
@@ -63,10 +63,6 @@ class FtForgetTest < Test::Unit::TestCase
63
63
 
64
64
  fei = ps.expressions.first.fei
65
65
  assert_equal fei, ps.root_expression_for(fei).fei
66
-
67
- #puts "not sure..."
68
- #p ps.original_tree
69
- #p ps.current_tree
70
66
  end
71
67
 
72
68
  def test_forget_true_string
@@ -79,16 +75,15 @@ class FtForgetTest < Test::Unit::TestCase
79
75
  charly
80
76
  end
81
77
 
82
- @engine.register_participant '.+' do |wi|
83
- @tracer << wi.participant_name + "\n"
78
+ @dashboard.register_participant '.+' do |wi|
79
+ tracer << wi.participant_name + "\n"
84
80
  end
85
81
 
86
- wfid = @engine.launch(pdef)
82
+ wfid = @dashboard.launch(pdef)
87
83
 
88
84
  wait_for(wfid)
89
85
  wait_for(wfid)
90
86
 
91
- #assert_equal "alpha\nbravo\ncharly", @tracer.to_s
92
87
  assert_equal %w[ alpha bravo charly ], @tracer.to_a.sort
93
88
  end
94
89
 
@@ -102,20 +97,20 @@ class FtForgetTest < Test::Unit::TestCase
102
97
  end
103
98
  end
104
99
 
105
- @engine.register_participant 'alpha', Ruote::NullParticipant
100
+ @dashboard.register_participant 'alpha', Ruote::NullParticipant
106
101
  # this participant never replies
107
102
 
108
- @engine.register_participant 'bravo', Ruote::NoOpParticipant
103
+ @dashboard.register_participant 'bravo', Ruote::NoOpParticipant
109
104
  # this one simply replies
110
105
 
111
- #@engine.noisy = true
106
+ #@dashboard.noisy = true
112
107
 
113
- wfid = @engine.launch(pdef)
108
+ wfid = @dashboard.launch(pdef)
114
109
 
115
- @engine.wait_for(:bravo)
116
- @engine.wait_for(:bravo)
110
+ @dashboard.wait_for(:bravo)
111
+ @dashboard.wait_for(:bravo)
117
112
 
118
- assert_not_nil @engine.process(wfid)
113
+ assert_not_nil @dashboard.process(wfid)
119
114
  end
120
115
 
121
116
  # As reported by Nando Sola
@@ -135,19 +130,19 @@ class FtForgetTest < Test::Unit::TestCase
135
130
  end
136
131
  end
137
132
 
138
- @engine.register do
133
+ @dashboard.register do
139
134
  catchall Ruote::NoOpParticipant
140
135
  end
141
136
 
142
137
  #noisy
143
138
 
144
- wfid = @engine.launch(pdef)
139
+ wfid = @dashboard.launch(pdef)
145
140
 
146
- @engine.wait_for(wfid)
141
+ @dashboard.wait_for(wfid)
147
142
 
148
143
  assert_equal(
149
144
  [],
150
- @engine.history.all.select { |e| e['action'] == 'error_intercepted' })
145
+ @dashboard.history.all.select { |e| e['action'] == 'error_intercepted' })
151
146
  end
152
147
  end
153
148
 
@@ -7,7 +7,7 @@
7
7
 
8
8
  require 'socket' # just for SocketError
9
9
 
10
- require File.join(File.dirname(__FILE__), 'base')
10
+ require File.expand_path('../base', __FILE__)
11
11
 
12
12
 
13
13
  class FtProcessDefinitionTest < Test::Unit::TestCase
@@ -32,16 +32,16 @@ class FtProcessDefinitionTest < Test::Unit::TestCase
32
32
  def test_remote_definitions_not_allowed
33
33
 
34
34
  assert_raise ArgumentError do
35
- @engine.launch('http://defs.example.com/def0.rb')
35
+ @dashboard.launch('http://defs.example.com/def0.rb')
36
36
  end
37
37
  end
38
38
 
39
39
  def test_remote_definitions_allowed
40
40
 
41
- @engine.context['remote_definition_allowed'] = true
41
+ @dashboard.context['remote_definition_allowed'] = true
42
42
 
43
43
  e = assert_raise SocketError, OpenURI::HTTPError, ArgumentError do
44
- @engine.launch('http://defs.example.com/def0.rb')
44
+ @dashboard.launch('http://defs.example.com/def0.rb')
45
45
  end
46
46
 
47
47
  assert_not_equal 'remote process definitions are not allowed', e.message
@@ -51,8 +51,8 @@ class FtProcessDefinitionTest < Test::Unit::TestCase
51
51
 
52
52
  prev = Rufus::Json.backend
53
53
 
54
- #require 'json' # json 1.4.3 being buggy...
55
- require 'json/pure'
54
+ require 'json' # warning, json 1.4.3 is buggy...
55
+ #require 'json/pure'
56
56
  Rufus::Json.backend = :json
57
57
 
58
58
  #pdef = Ruote.process_definition :name => 'test' do
@@ -69,6 +69,8 @@ class FtProcessDefinitionTest < Test::Unit::TestCase
69
69
 
70
70
  Rufus::Json.backend = prev
71
71
  # back to initial state
72
+ rescue => e
73
+ p e
72
74
  end
73
75
 
74
76
  def test_local_definition
@@ -5,7 +5,7 @@
5
5
  # Wed Aug 5 08:35:38 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 FtLoadDefsTest < Test::Unit::TestCase
@@ -29,8 +29,32 @@ end
29
29
  File.open(fn, 'w') { |f| f.write(pdef) }
30
30
 
31
31
  assert_equal(
32
- ["define", {"name"=>"test"}, [["sequence", {}, [["echo", {"a"=>nil}, []], ["echo", {"b"=>nil}, []]]]]],
33
- @engine.load_definition(fn))
32
+ [ 'define', { 'name' => 'test' }, [
33
+ ['sequence', {}, [
34
+ ['echo', { 'a' => nil }, [] ],
35
+ ['echo', { 'b' => nil}, [] ] ] ] ] ],
36
+ @dashboard.load_definition(fn))
37
+ end
38
+
39
+ def test_load_definition_with_absolute_path
40
+
41
+ pdef = %{
42
+ Ruote.process_definition do
43
+ echo 'a'
44
+ end
45
+ }
46
+
47
+ path = File.join('work', 'tmp')
48
+ fn = File.join(path, 'pdef.rb')
49
+
50
+ FileUtils.mkdir_p(path)
51
+ File.open(fn, 'w') { |f| f.write(pdef) }
52
+
53
+ fn = File.expand_path(fn)
54
+
55
+ assert_equal(
56
+ [ 'define', {}, [ [ 'echo', { 'a' => nil }, [] ] ] ],
57
+ @dashboard.load_definition(fn))
34
58
  end
35
59
 
36
60
  def test_load_illegal_definition
@@ -47,8 +71,8 @@ end
47
71
  FileUtils.mkdir_p(path)
48
72
  File.open(fn, 'w') { |f| f.write(pdef) }
49
73
 
50
- assert_raise ArgumentError do
51
- @engine.load_definition(fn)
74
+ assert_raise Ruote::Reader::Error do
75
+ @dashboard.load_definition(fn)
52
76
  end
53
77
  end
54
78
  end
@@ -5,7 +5,7 @@
5
5
  # Tue Aug 11 13:56: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
 
11
11
  class FtBlockParticipantTest < Test::Unit::TestCase
@@ -23,19 +23,23 @@ class FtBlockParticipantTest < Test::Unit::TestCase
23
23
  end
24
24
  end
25
25
 
26
- @engine.register_participant :alpha do
27
- @tracer << "a\n"
26
+ @dashboard.register_participant :alpha do
27
+ tracer << "a\n"
28
28
  end
29
- @engine.register_participant :bravo do |workitem|
30
- @tracer << "b:f0:#{workitem.fields['f0']}\n"
29
+ @dashboard.register_participant :bravo do |workitem|
30
+ tracer << "b:f0:#{workitem.fields['f0']}\n"
31
31
  end
32
- @engine.register_participant :charly do |workitem, fexp|
33
- @tracer << "c:f0:#{workitem.fields['f0']}:#{fexp.lookup_variable('v0')}\n"
32
+ @dashboard.register_participant :charly do |workitem, fexp|
33
+ tracer << "c:f0:#{workitem.fields['f0']}:#{fexp.lookup_variable('v0')}\n"
34
34
  end
35
35
 
36
- #noisy
36
+ #@dashboard.noisy = true
37
+
38
+ wfid = @dashboard.launch(pdef)
39
+ r = @dashboard.wait_for(wfid)
37
40
 
38
- assert_trace "a\nb:f0:f0val\nc:f0:f0val:v0val", pdef
41
+ assert_equal 'terminated', r['action']
42
+ assert_equal "a\nb:f0:f0val\nc:f0:f0val:v0val", @tracer.to_s
39
43
  end
40
44
 
41
45
  TEST_BLOCK = Ruote.process_definition do
@@ -50,7 +54,7 @@ class FtBlockParticipantTest < Test::Unit::TestCase
50
54
  return if Ruote::WIN or Ruote::JAVA
51
55
  # defective 'json' lib on windows render this test useless
52
56
 
53
- @engine.register_participant :alpha do |workitem|
57
+ @dashboard.register_participant :alpha do |workitem|
54
58
  'seen'
55
59
  end
56
60
 
@@ -64,7 +68,7 @@ class FtBlockParticipantTest < Test::Unit::TestCase
64
68
  return if Ruote::WIN
65
69
  # defective 'json' lib on windows renders this test useless
66
70
 
67
- @engine.register_participant :alpha do |workitem|
71
+ @dashboard.register_participant :alpha do |workitem|
68
72
  Time.now
69
73
  end
70
74
 
@@ -76,9 +80,9 @@ class FtBlockParticipantTest < Test::Unit::TestCase
76
80
  /\b#{Time.now.year}\b/
77
81
  end
78
82
 
79
- wfid = @engine.launch(TEST_BLOCK)
83
+ wfid = @dashboard.launch(TEST_BLOCK)
80
84
 
81
- @engine.wait_for(wfid)
85
+ @dashboard.wait_for(wfid)
82
86
 
83
87
  assert_match match, @tracer.to_s
84
88
  end
@@ -87,21 +91,22 @@ class FtBlockParticipantTest < Test::Unit::TestCase
87
91
 
88
92
  fn = "test/bad.#{Time.now.to_f}.txt"
89
93
 
90
- @engine.participant_list = [
94
+ @dashboard.participant_list = [
91
95
  #[ 'alpha', [ 'Ruote::BlockParticipant', { 'block' => 'exit(3)' } ] ]
92
96
  [ 'alpha', [ 'Ruote::BlockParticipant', { 'block' => "proc { File.open(\"#{fn}\", \"wb\") { |f| f.puts(\"bad\") } }" } ] ]
93
97
  ]
94
98
 
95
- #noisy
99
+ #@dashboard.noisy = true
96
100
 
97
- wfid = @engine.launch(Ruote.define { alpha })
101
+ wfid = @dashboard.launch(Ruote.define { alpha })
98
102
 
99
- @engine.wait_for(wfid)
103
+ @dashboard.wait_for(wfid)
104
+ sleep 0.300
100
105
 
101
106
  assert_equal false, File.exist?(fn), 'security check not enforced'
102
107
 
103
- assert_equal 1, @engine.errors(wfid).size
104
- assert_match /SecurityError/, @engine.errors(wfid).first.message
108
+ assert_equal 1, @dashboard.errors(wfid).size
109
+ assert_match /SecurityError/, @dashboard.errors(wfid).first.message
105
110
 
106
111
  FileUtils.rm(fn) rescue nil
107
112
  end
@@ -110,10 +115,184 @@ class FtBlockParticipantTest < Test::Unit::TestCase
110
115
 
111
116
  assert_raise Rufus::SecurityError do
112
117
 
113
- @engine.register 'rogue' do |workitem|
118
+ @dashboard.register 'rogue' do |workitem|
114
119
  workitem.content = File.read('test/nada.txt')
115
120
  end
116
121
  end
117
122
  end
123
+
124
+ # cf https://github.com/jmettraux/ruote/issues/30
125
+ #
126
+ def test_begin_rescue_end
127
+
128
+ @dashboard.register 'rogue' do |workitem|
129
+ begin
130
+ rescue => e
131
+ end
132
+ end
133
+
134
+ assert true
135
+ end
136
+
137
+ def test_on_cancel_registration
138
+
139
+ @dashboard.register 'nemo',
140
+ :on_workitem => lambda { |wi|
141
+ p wi
142
+ },
143
+ :on_cancel => lambda { |fei, flavour|
144
+ p fei, flavour
145
+ }
146
+
147
+ assert_equal(
148
+ { 'on_cancel' => "proc { |fei, flavour|\n p fei, flavour\n }",
149
+ 'on_workitem' => "proc { |wi|\n p wi\n }" },
150
+ @dashboard.participant_list.first.options)
151
+ end
152
+
153
+ def test_on_cancel
154
+
155
+ @dashboard.register 'sleeper',
156
+ :on_workitem => lambda { |workitem|
157
+ context.tracer << "consumed\n"
158
+ sleep 60 # preventing the implicit reply_to_engine(workitem)
159
+ },
160
+ :on_cancel => lambda { |fei, flavour|
161
+ context.tracer << "cancelled\n"
162
+ }
163
+
164
+ pdef = Ruote.define do
165
+ sleeper
166
+ end
167
+
168
+ #@dashboard.noisy = true
169
+
170
+ wfid = @dashboard.launch(pdef)
171
+
172
+ @dashboard.wait_for(:sleeper)
173
+ sleep 0.350
174
+
175
+ assert_equal 'consumed', @tracer.to_s
176
+
177
+ @dashboard.cancel(wfid)
178
+
179
+ @dashboard.wait_for(wfid)
180
+
181
+ assert_equal "consumed\ncancelled", @tracer.to_s
182
+ end
183
+
184
+ def test_on_reply
185
+
186
+ @dashboard.register 'consumer',
187
+ :on_workitem => lambda { |workitem|
188
+ context.tracer << "consumed\n"
189
+ },
190
+ :on_reply => lambda { |workitem|
191
+ context.tracer << "replied\n"
192
+ }
193
+
194
+ pdef = Ruote.define do
195
+ consumer
196
+ end
197
+
198
+ #@dashboard.noisy = true
199
+
200
+ wfid = @dashboard.launch(pdef)
201
+ @dashboard.wait_for(wfid)
202
+
203
+ assert_equal "consumed\nreplied", @tracer.to_s
204
+ end
205
+
206
+ def test_accept
207
+
208
+ @dashboard.register 'consumer',
209
+ :on_workitem => lambda { |workitem|
210
+ raise 'fail miserably'
211
+ },
212
+ :accept? => lambda { |workitem|
213
+ false
214
+ }
215
+
216
+ pdef = Ruote.define do
217
+ consumer
218
+ end
219
+
220
+ #@dashboard.noisy = true
221
+
222
+ wfid = @dashboard.launch(pdef)
223
+ @dashboard.wait_for(wfid)
224
+
225
+ assert_match /unknown participant/, @dashboard.ps(wfid).errors.first.message
226
+ end
227
+
228
+ def test_do_not_thread
229
+
230
+ @dashboard.register 'consumer',
231
+ :on_workitem => lambda { |workitem|
232
+ context.tracer << "in\n"
233
+ },
234
+ :do_not_thread => lambda { |workitem|
235
+ context.tracer << "dnt\n"
236
+ false
237
+ }
238
+
239
+ pdef = Ruote.define do
240
+ consumer
241
+ end
242
+
243
+ #@dashboard.noisy = true
244
+
245
+ wfid = @dashboard.launch(pdef)
246
+ @dashboard.wait_for(:consumer)
247
+
248
+ sleep 0.350
249
+
250
+ assert_equal "dnt\nin", @tracer.to_s
251
+ end
252
+
253
+ def test_block_with_methods
254
+
255
+ @dashboard.register 'consumer' do
256
+ on_workitem do
257
+ context.tracer << "on_workitem\n"
258
+ end
259
+ on_cancel do
260
+ context.tracer << "on_cancel\n"
261
+ end
262
+ end
263
+
264
+ assert_equal(
265
+ %w[ on_cancel on_workitem ],
266
+ @dashboard.participant_list[0].options.keys.sort)
267
+
268
+ #@dashboard.noisy = true
269
+
270
+ wfid = @dashboard.launch(Ruote.define do
271
+ consumer
272
+ end)
273
+ @dashboard.wait_for(wfid)
274
+
275
+ assert_equal 'on_workitem', @tracer.to_s
276
+ end
277
+
278
+ def test_block_with_methods_2
279
+
280
+ @dashboard.register do
281
+
282
+ consumer do
283
+
284
+ on_workitem do
285
+ context.tracer << "on_workitem\n"
286
+ end
287
+ on_cancel do
288
+ context.tracer << "on_cancel\n"
289
+ end
290
+ end
291
+ end
292
+
293
+ assert_equal(
294
+ %w[ on_cancel on_workitem ],
295
+ @dashboard.participant_list[0].options.keys.sort)
296
+ end
118
297
  end
119
298