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
@@ -7,7 +7,7 @@
7
7
  # By David Goldhirsch
8
8
  #
9
9
 
10
- require File.join(File.dirname(__FILE__), 'base')
10
+ require File.expand_path('../base', __FILE__)
11
11
 
12
12
  class FtPartBlockingTest < Test::Unit::TestCase
13
13
  include FunctionalBase
@@ -32,11 +32,11 @@ class FtPartBlockingTest < Test::Unit::TestCase
32
32
 
33
33
  def run_engine(options={})
34
34
 
35
- @engine.context.stash[:first_time] = options[:first_time] || 0.0
36
- @engine.context.stash[:second_time] = options[:second_time] || 0.0
35
+ @dashboard.context.stash[:first_time] = options[:first_time] || 0.0
36
+ @dashboard.context.stash[:second_time] = options[:second_time] || 0.0
37
37
 
38
- if @engine.context.stash[:first_time] == @engine.context.stash[:second_time]
39
- @engine.context.stash[:second_time] = @engine.context.stash[:first_time] + 0.1
38
+ if @dashboard.context.stash[:first_time] == @dashboard.context.stash[:second_time]
39
+ @dashboard.context.stash[:second_time] = @dashboard.context.stash[:first_time] + 0.1
40
40
  end
41
41
 
42
42
  pdef = Ruote.process_definition :name => 'simple' do
@@ -49,22 +49,22 @@ class FtPartBlockingTest < Test::Unit::TestCase
49
49
  end
50
50
  end
51
51
 
52
- @engine.register_participant :first do |wi|
52
+ @dashboard.register_participant :first do |wi|
53
53
  sleep stash[:first_time]
54
54
  wi.fields['result'] = 'first'
55
55
  end
56
56
 
57
- @engine.register_participant :second do |wi|
57
+ @dashboard.register_participant :second do |wi|
58
58
  sleep stash[:second_time]
59
59
  wi.fields['result'] = 'second'
60
60
  end
61
61
 
62
- @engine.register_participant :trace do |wi|
63
- @tracer << "#{wi.fields['result']}"
62
+ @dashboard.register_participant :trace do |wi|
63
+ tracer << "#{wi.fields['result']}"
64
64
  end
65
65
 
66
- wfid = @engine.launch(pdef)
67
- @engine.wait_for(wfid)
66
+ wfid = @dashboard.launch(pdef)
67
+ @dashboard.wait_for(wfid)
68
68
 
69
69
  wfid
70
70
  end
@@ -0,0 +1,50 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Fri Dec 23 14:11:13 JST 2011
6
+ #
7
+
8
+ require File.expand_path('../base', __FILE__)
9
+
10
+
11
+ class FtScopeTest < Test::Unit::TestCase
12
+ include FunctionalBase
13
+
14
+ def test_let_like
15
+
16
+ pdef = Ruote.process_definition do
17
+ set 'v:var' => 'val'
18
+ echo "out:${v:var}"
19
+ sequence :scope => true do
20
+ set 'v:var' => 'val1'
21
+ echo "in:${v:var}"
22
+ end
23
+ echo "out:${v:var}"
24
+ end
25
+
26
+ #noisy
27
+
28
+ assert_trace %w[ out:val in:val1 out:val ], pdef
29
+ end
30
+
31
+ def test_vars_to_f
32
+
33
+ pdef = Ruote.define do
34
+ sequence :vars_to_f => 'f0' do
35
+ set 'v:v0' => 'x'
36
+ end
37
+ sequence :vars_to_f => 'f1', :scope => true do
38
+ set 'v:v1' => 'y'
39
+ end
40
+ end
41
+
42
+ wfid = @dashboard.launch(pdef)
43
+ r = @dashboard.wait_for(wfid)
44
+
45
+ assert_equal(
46
+ { 'f0' => nil, 'f1' => { 'v1' => 'y' }, '__result__' => 'y' },
47
+ r['workitem']['fields'])
48
+ end
49
+ end
50
+
@@ -5,7 +5,7 @@
5
5
  # Wed Oct 21 05:35:29 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 FtParticipantSubprocessPriorityTest < Test::Unit::TestCase
@@ -20,8 +20,8 @@ class FtParticipantSubprocessPriorityTest < Test::Unit::TestCase
20
20
  end
21
21
  end
22
22
 
23
- @engine.register_participant '.+' do
24
- @tracer << 'participant'
23
+ @dashboard.register_participant '.+' do
24
+ tracer << 'participant'
25
25
  end
26
26
 
27
27
  #noisy
@@ -5,7 +5,7 @@
5
5
  # Fri Nov 13 10:30:32 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
 
@@ -25,19 +25,19 @@ class FtCursorRewindTest < Test::Unit::TestCase
25
25
  end
26
26
  end
27
27
 
28
- alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
29
- bravo = @engine.register_participant :bravo, Ruote::StorageParticipant
30
- charly = @engine.register_participant :charly, Ruote::StorageParticipant
28
+ alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
29
+ bravo = @dashboard.register_participant :bravo, Ruote::StorageParticipant
30
+ charly = @dashboard.register_participant :charly, Ruote::StorageParticipant
31
31
 
32
32
  #noisy
33
33
 
34
34
  #
35
35
  # reaching initial situation...
36
36
 
37
- wfid = @engine.launch(pdef)
37
+ wfid = @dashboard.launch(pdef)
38
38
  wait_for(:alpha)
39
39
 
40
- alpha.reply(alpha.first)
40
+ alpha.proceed(alpha.first)
41
41
  wait_for(:bravo)
42
42
 
43
43
  #
@@ -46,7 +46,7 @@ class FtCursorRewindTest < Test::Unit::TestCase
46
46
  wi = bravo.first
47
47
  wi.fields['__command__'] = [ 'back', 2 ]
48
48
 
49
- @engine.reply(wi)
49
+ @dashboard.reply(wi)
50
50
 
51
51
  #
52
52
  # workitem is back to alpha
@@ -64,19 +64,19 @@ class FtCursorRewindTest < Test::Unit::TestCase
64
64
  end
65
65
  end
66
66
 
67
- @engine.register_participant :alpha, Ruote::StorageParticipant
68
- @engine.register_participant :bravo, Ruote::StorageParticipant
69
- sto = @engine.register_participant :charly, Ruote::StorageParticipant
67
+ @dashboard.register_participant :alpha, Ruote::StorageParticipant
68
+ @dashboard.register_participant :bravo, Ruote::StorageParticipant
69
+ sto = @dashboard.register_participant :charly, Ruote::StorageParticipant
70
70
 
71
71
  #noisy
72
72
 
73
73
  #
74
74
  # reaching initial situation...
75
75
 
76
- wfid = @engine.launch(pdef)
76
+ wfid = @dashboard.launch(pdef)
77
77
  wait_for(:alpha)
78
78
 
79
- sto.reply(sto.first)
79
+ sto.proceed(sto.first)
80
80
  wait_for(:bravo)
81
81
 
82
82
  #
@@ -84,13 +84,13 @@ class FtCursorRewindTest < Test::Unit::TestCase
84
84
 
85
85
  wi = sto.first
86
86
 
87
- exp = @engine.process(wfid).expressions.find { |e| e.name == 'cursor' }
87
+ exp = @dashboard.process(wfid).expressions.find { |e| e.name == 'cursor' }
88
88
  wi.h['fei'] = exp.h.fei
89
89
  wi.fields['__command__'] = [ 'jump', 'alpha' ]
90
90
  #
91
91
  # passing the "jump alpha" command to the cursor directly
92
92
 
93
- @engine.reply(wi)
93
+ @dashboard.reply(wi)
94
94
 
95
95
  #
96
96
  # workitem is back to alpha
@@ -5,7 +5,7 @@
5
5
  # Thu Dec 24 18:05:39 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 FtAddServiceTest < Test::Unit::TestCase
@@ -24,33 +24,91 @@ class FtAddServiceTest < Test::Unit::TestCase
24
24
 
25
25
  def test_as_path_class
26
26
 
27
- @engine.add_service('toto', 'ruote', 'FtAddServiceTest::MyService')
27
+ @dashboard.add_service('toto', 'ruote', 'FtAddServiceTest::MyService')
28
28
 
29
- assert_equal MyService, @engine.context.toto.class
29
+ assert_equal MyService, @dashboard.context.toto.class
30
30
  end
31
31
 
32
32
  def test_as_instance
33
33
 
34
- @engine.add_service('toto', MyService.new(nil))
34
+ @dashboard.add_service('toto', MyService.new(nil))
35
35
 
36
- assert_equal MyService, @engine.context.toto.class
36
+ assert_equal MyService, @dashboard.context.toto.class
37
+ end
38
+
39
+ def test_as_class
40
+
41
+ @dashboard.add_service('toto', MyService)
42
+
43
+ assert_equal MyService, @dashboard.context.toto.class
37
44
  end
38
45
 
39
46
  def test_as_path_class_options
40
47
 
41
- @engine.add_service(
48
+ @dashboard.add_service(
42
49
  'toto', 'ruote', 'FtAddServiceTest::MyService', 'colour' => 'blue')
43
50
 
44
- assert_equal MyService, @engine.context.toto.class
45
- assert_equal 'blue', @engine.context.toto.options['colour']
51
+ assert_equal MyService, @dashboard.context.toto.class
52
+ assert_equal 'blue', @dashboard.context.toto.options['colour']
46
53
  end
47
54
 
48
55
  def test_add_service_returns_service
49
56
 
50
- toto = @engine.add_service(
57
+ toto = @dashboard.add_service(
51
58
  'toto', 'ruote', 'FtAddServiceTest::MyService', 'colour' => 'blue')
52
59
 
53
60
  assert_equal MyService, toto.class
54
61
  end
62
+
63
+ # Fighting https://github.com/jmettraux/ruote/issues/28
64
+ #
65
+ def test_add_history
66
+
67
+ assert_equal Ruote::DefaultHistory, @dashboard.context.history.class
68
+
69
+ @dashboard.add_service(
70
+ 'history', 'ruote/log/storage_history', 'Ruote::StorageHistory')
71
+
72
+ assert_equal Ruote::StorageHistory, @dashboard.context.history.class
73
+
74
+ engine = Ruote::Engine.new(@dashboard.storage)
75
+
76
+ assert_equal Ruote::StorageHistory, engine.context.history.class
77
+ end
78
+
79
+ # Fighting https://github.com/jmettraux/ruote/issues/28
80
+ #
81
+ def test_add_history
82
+
83
+ assert_equal Ruote::DefaultHistory, @dashboard.history.class
84
+
85
+ @dashboard.add_service(
86
+ 'history', 'ruote/log/storage_history', 'Ruote::StorageHistory')
87
+
88
+ assert_equal Ruote::StorageHistory, @dashboard.history.class
89
+
90
+ engine = Ruote::Engine.new(@dashboard.storage)
91
+
92
+ assert_equal Ruote::StorageHistory, engine.history.class
93
+ end
94
+
95
+ # Fighting https://github.com/jmettraux/ruote/issues/28
96
+ #
97
+ def test_add_history_and_log
98
+
99
+ #@dashboard.noisy = true
100
+
101
+ #previous_history = @dashboard.history
102
+
103
+ @dashboard.add_service(
104
+ 'history', 'ruote/log/storage_history', 'Ruote::StorageHistory')
105
+
106
+ @dashboard.storage.put_msg('noop', 'nada' => true)
107
+
108
+ sleep 0.500
109
+
110
+ assert_equal(
111
+ 'noop', @dashboard.history.by_date(Time.now.utc.to_s).first['action'])
112
+ end
55
113
  end
56
114
 
@@ -5,9 +5,9 @@
5
5
  # Tue Jan 5 17:51:10 JST 2010
6
6
  #
7
7
 
8
- require File.join(File.dirname(__FILE__), 'base')
8
+ require File.expand_path('../base', __FILE__)
9
9
 
10
- #require 'ruote/log/fs_history'
10
+ require 'ruote/log/storage_history'
11
11
  require 'ruote/part/no_op_participant'
12
12
 
13
13
 
@@ -21,10 +21,10 @@ class FtStorageHistoryTest < Test::Unit::TestCase
21
21
  echo 'done.'
22
22
  end
23
23
 
24
- history = @engine.add_service(
24
+ history = @dashboard.add_service(
25
25
  'history', 'ruote/log/storage_history', 'Ruote::StorageHistory')
26
26
 
27
- @engine.register_participant :alpha, Ruote::NoOpParticipant
27
+ @dashboard.register_participant :alpha, Ruote::NoOpParticipant
28
28
 
29
29
  #noisy
30
30
 
@@ -33,51 +33,51 @@ class FtStorageHistoryTest < Test::Unit::TestCase
33
33
 
34
34
  sleep 0.100
35
35
 
36
- assert_equal 19, @engine.storage.get_many('history').size
36
+ assert_equal 19, @dashboard.storage.get_many('history').size
37
37
 
38
- h = @engine.context.history.by_process(wfid0)
38
+ h = @dashboard.context.history.by_process(wfid0)
39
39
  #h.each { |r| p r }
40
40
  assert_equal 9, h.size
41
41
 
42
42
  # testing record.to_h
43
43
 
44
- h = @engine.context.history.by_process(wfid1)
44
+ h = @dashboard.context.history.by_process(wfid1)
45
45
  #h.each { |r| p r }
46
46
  assert_equal 9, h.size
47
47
 
48
48
  history.clear!
49
49
 
50
- assert_equal 0, @engine.storage.get_many('history').size
50
+ assert_equal 0, @dashboard.storage.get_many('history').size
51
51
  end
52
52
 
53
53
  def test_by_date
54
54
 
55
- @engine.add_service(
55
+ @dashboard.add_service(
56
56
  'history', 'ruote/log/storage_history', 'Ruote::StorageHistory')
57
57
 
58
58
  6.times do |i|
59
- @engine.storage.put(
60
- '_id' => "!2010-01-06!11414#{i}!0!!20100106-bichisosupo",
59
+ @dashboard.storage.put(
60
+ '_id' => "!2010-01-06!11414#{i}!0!!20100106-bichisosupa",
61
61
  'type' => 'history')
62
62
  end
63
63
  7.times do |i|
64
- @engine.storage.put(
64
+ @dashboard.storage.put(
65
65
  '_id' => "!2010-01-07!11414#{i}!0!!20100107-bichitehoni",
66
66
  'type' => 'history')
67
67
  end
68
68
 
69
- assert_equal 6, @engine.context.history.by_date('2010-01-06').size
70
- assert_equal 7, @engine.context.history.by_date('2010-01-07').size
69
+ assert_equal 6, @dashboard.context.history.by_date('2010-01-06').size
70
+ assert_equal 7, @dashboard.context.history.by_date('2010-01-07').size
71
71
  end
72
72
 
73
73
  def test_range
74
74
 
75
- @engine.add_service(
75
+ @dashboard.add_service(
76
76
  'history', 'ruote/log/storage_history', 'Ruote::StorageHistory')
77
77
 
78
78
  7.times do |i|
79
79
  i = i + 1
80
- @engine.storage.put(
80
+ @dashboard.storage.put(
81
81
  '_id' => "!2010-01-0#{i}!114147!0!!2010010#{i}-bichisosupo",
82
82
  'type' => 'history')
83
83
  end
@@ -85,30 +85,98 @@ class FtStorageHistoryTest < Test::Unit::TestCase
85
85
  assert_equal(
86
86
  [ Time.parse('2010-01-01 00:00:00 UTC'),
87
87
  Time.parse('2010-01-08 00:00:00 UTC') ],
88
- @engine.context.history.range)
88
+ @dashboard.context.history.range)
89
89
  end
90
90
 
91
91
  def test_engine_dot_history
92
92
 
93
- @engine.add_service(
93
+ @dashboard.add_service(
94
94
  'history', 'ruote/log/storage_history', 'Ruote::StorageHistory')
95
95
 
96
- assert_equal Ruote::StorageHistory, @engine.history.class
96
+ assert_equal Ruote::StorageHistory, @dashboard.history.class
97
97
  end
98
98
 
99
99
  def test_wfids
100
100
 
101
- @engine.add_service(
101
+ @dashboard.add_service(
102
102
  'history', 'ruote/log/storage_history', 'Ruote::StorageHistory')
103
103
 
104
- @engine.register_participant 'alpha', Ruote::NullParticipant
104
+ @dashboard.register_participant 'alpha', Ruote::NullParticipant
105
105
 
106
106
  3.times do
107
- @engine.launch(Ruote.define { alpha })
108
- @engine.wait_for(:alpha)
107
+ @dashboard.launch(Ruote.define { alpha })
108
+ @dashboard.wait_for(:alpha)
109
109
  end
110
110
 
111
- assert_equal 3, @engine.history.wfids.size
111
+ assert_equal 3, @dashboard.history.wfids.size
112
+ end
113
+
114
+ # Cf
115
+ # https://github.com/jmettraux/ruote/issues/29
116
+ # http://ruote-irclogs.s3.amazonaws.com/log_2011-06-06.html
117
+ #
118
+ def test_concurrence_replies
119
+
120
+ @dashboard.add_service(
121
+ 'history', 'ruote/log/storage_history', 'Ruote::StorageHistory')
122
+
123
+ pdef = Ruote.define do
124
+ concurrence :count => 1 do
125
+ alpha
126
+ bravo
127
+ end
128
+ end
129
+
130
+ @dashboard.register_participant :alpha, Ruote::NullParticipant
131
+ @dashboard.register_participant :bravo, Ruote::NoOpParticipant
132
+
133
+ #@dashboard.noisy = true
134
+
135
+ wfid = @dashboard.launch(pdef)
136
+ @dashboard.wait_for(wfid)
137
+
138
+ repliers = []
139
+
140
+ @dashboard.context.history.by_wfid(wfid).each do |record|
141
+ if record['action'] == 'reply'
142
+ wi = record['workitem']
143
+ repliers << [ wi['fei']['expid'], wi['participant_name'] ]
144
+ end
145
+ end
146
+
147
+ assert_equal [ %w[ 0_0_1 bravo ], %w[ 0_0 bravo ] ], repliers[0, 2]
148
+ end
149
+
150
+ class MyStorageHistory < Ruote::StorageHistory
151
+
152
+ # Only accept 'dispatched' messages.
153
+ #
154
+ def accept?(msg)
155
+
156
+ msg['action'] == 'dispatched'
157
+ end
158
+ end
159
+
160
+ def test_accept
161
+
162
+ @dashboard.add_service('history', MyStorageHistory)
163
+
164
+ @dashboard.register_participant '.+', Ruote::NoOpParticipant
165
+
166
+ pdef = Ruote.define do
167
+ alpha
168
+ bravo
169
+ charly
170
+ end
171
+
172
+ wfid = @dashboard.launch(pdef)
173
+ r = @dashboard.wait_for(wfid)
174
+
175
+ assert_equal 'terminated', r['action']
176
+
177
+ msgs = @dashboard.history.by_process(wfid)
178
+
179
+ assert_equal %w[ dispatched ] * 3, msgs.collect { |m| m['action'] }
112
180
  end
113
181
  end
114
182