ruote-maestrodev 2.2.1

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 (265) hide show
  1. data/CHANGELOG.txt +290 -0
  2. data/CREDITS.txt +99 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.rdoc +88 -0
  5. data/Rakefile +108 -0
  6. data/TODO.txt +488 -0
  7. data/lib/ruote.rb +7 -0
  8. data/lib/ruote/context.rb +194 -0
  9. data/lib/ruote/engine.rb +1062 -0
  10. data/lib/ruote/engine/process_error.rb +122 -0
  11. data/lib/ruote/engine/process_status.rb +448 -0
  12. data/lib/ruote/exp/command.rb +87 -0
  13. data/lib/ruote/exp/commanded.rb +69 -0
  14. data/lib/ruote/exp/condition.rb +227 -0
  15. data/lib/ruote/exp/fe_add_branches.rb +138 -0
  16. data/lib/ruote/exp/fe_apply.rb +154 -0
  17. data/lib/ruote/exp/fe_cancel_process.rb +78 -0
  18. data/lib/ruote/exp/fe_command.rb +156 -0
  19. data/lib/ruote/exp/fe_concurrence.rb +321 -0
  20. data/lib/ruote/exp/fe_concurrent_iterator.rb +219 -0
  21. data/lib/ruote/exp/fe_cron.rb +141 -0
  22. data/lib/ruote/exp/fe_cursor.rb +324 -0
  23. data/lib/ruote/exp/fe_define.rb +112 -0
  24. data/lib/ruote/exp/fe_echo.rb +60 -0
  25. data/lib/ruote/exp/fe_equals.rb +115 -0
  26. data/lib/ruote/exp/fe_error.rb +82 -0
  27. data/lib/ruote/exp/fe_filter.rb +648 -0
  28. data/lib/ruote/exp/fe_forget.rb +88 -0
  29. data/lib/ruote/exp/fe_given.rb +154 -0
  30. data/lib/ruote/exp/fe_if.rb +127 -0
  31. data/lib/ruote/exp/fe_inc.rb +205 -0
  32. data/lib/ruote/exp/fe_iterator.rb +234 -0
  33. data/lib/ruote/exp/fe_let.rb +75 -0
  34. data/lib/ruote/exp/fe_listen.rb +304 -0
  35. data/lib/ruote/exp/fe_lose.rb +110 -0
  36. data/lib/ruote/exp/fe_noop.rb +45 -0
  37. data/lib/ruote/exp/fe_once.rb +215 -0
  38. data/lib/ruote/exp/fe_participant.rb +287 -0
  39. data/lib/ruote/exp/fe_read.rb +69 -0
  40. data/lib/ruote/exp/fe_redo.rb +82 -0
  41. data/lib/ruote/exp/fe_ref.rb +152 -0
  42. data/lib/ruote/exp/fe_registerp.rb +110 -0
  43. data/lib/ruote/exp/fe_reserve.rb +126 -0
  44. data/lib/ruote/exp/fe_restore.rb +102 -0
  45. data/lib/ruote/exp/fe_save.rb +72 -0
  46. data/lib/ruote/exp/fe_sequence.rb +59 -0
  47. data/lib/ruote/exp/fe_set.rb +154 -0
  48. data/lib/ruote/exp/fe_subprocess.rb +211 -0
  49. data/lib/ruote/exp/fe_that.rb +92 -0
  50. data/lib/ruote/exp/fe_undo.rb +67 -0
  51. data/lib/ruote/exp/fe_unregisterp.rb +69 -0
  52. data/lib/ruote/exp/fe_wait.rb +95 -0
  53. data/lib/ruote/exp/flowexpression.rb +886 -0
  54. data/lib/ruote/exp/iterator.rb +81 -0
  55. data/lib/ruote/exp/merge.rb +118 -0
  56. data/lib/ruote/exp/ro_attributes.rb +212 -0
  57. data/lib/ruote/exp/ro_filters.rb +136 -0
  58. data/lib/ruote/exp/ro_persist.rb +154 -0
  59. data/lib/ruote/exp/ro_variables.rb +189 -0
  60. data/lib/ruote/exp/ro_vf.rb +68 -0
  61. data/lib/ruote/fei.rb +260 -0
  62. data/lib/ruote/id/mnemo_wfid_generator.rb +43 -0
  63. data/lib/ruote/id/wfid_generator.rb +81 -0
  64. data/lib/ruote/log/default_history.rb +122 -0
  65. data/lib/ruote/log/pretty.rb +176 -0
  66. data/lib/ruote/log/storage_history.rb +159 -0
  67. data/lib/ruote/log/test_logger.rb +208 -0
  68. data/lib/ruote/log/wait_logger.rb +64 -0
  69. data/lib/ruote/part/block_participant.rb +137 -0
  70. data/lib/ruote/part/code_participant.rb +81 -0
  71. data/lib/ruote/part/engine_participant.rb +189 -0
  72. data/lib/ruote/part/local_participant.rb +138 -0
  73. data/lib/ruote/part/no_op_participant.rb +60 -0
  74. data/lib/ruote/part/null_participant.rb +54 -0
  75. data/lib/ruote/part/rev_participant.rb +169 -0
  76. data/lib/ruote/part/smtp_participant.rb +116 -0
  77. data/lib/ruote/part/storage_participant.rb +392 -0
  78. data/lib/ruote/part/template.rb +84 -0
  79. data/lib/ruote/participant.rb +7 -0
  80. data/lib/ruote/reader.rb +278 -0
  81. data/lib/ruote/reader/json.rb +49 -0
  82. data/lib/ruote/reader/radial.rb +290 -0
  83. data/lib/ruote/reader/ruby_dsl.rb +186 -0
  84. data/lib/ruote/reader/xml.rb +99 -0
  85. data/lib/ruote/receiver/base.rb +212 -0
  86. data/lib/ruote/storage/base.rb +364 -0
  87. data/lib/ruote/storage/composite_storage.rb +121 -0
  88. data/lib/ruote/storage/fs_storage.rb +139 -0
  89. data/lib/ruote/storage/hash_storage.rb +211 -0
  90. data/lib/ruote/svc/dispatch_pool.rb +158 -0
  91. data/lib/ruote/svc/dollar_sub.rb +298 -0
  92. data/lib/ruote/svc/error_handler.rb +138 -0
  93. data/lib/ruote/svc/expression_map.rb +97 -0
  94. data/lib/ruote/svc/participant_list.rb +397 -0
  95. data/lib/ruote/svc/tracker.rb +172 -0
  96. data/lib/ruote/svc/treechecker.rb +141 -0
  97. data/lib/ruote/tree_dot.rb +85 -0
  98. data/lib/ruote/util/filter.rb +525 -0
  99. data/lib/ruote/util/hashdot.rb +79 -0
  100. data/lib/ruote/util/look.rb +128 -0
  101. data/lib/ruote/util/lookup.rb +127 -0
  102. data/lib/ruote/util/misc.rb +167 -0
  103. data/lib/ruote/util/ometa.rb +71 -0
  104. data/lib/ruote/util/serializer.rb +103 -0
  105. data/lib/ruote/util/subprocess.rb +88 -0
  106. data/lib/ruote/util/time.rb +100 -0
  107. data/lib/ruote/util/tree.rb +58 -0
  108. data/lib/ruote/version.rb +29 -0
  109. data/lib/ruote/worker.rb +386 -0
  110. data/lib/ruote/workitem.rb +394 -0
  111. data/phil.txt +14 -0
  112. data/ruote.gemspec +44 -0
  113. data/test/bm/ci.rb +55 -0
  114. data/test/bm/ici.rb +71 -0
  115. data/test/bm/juuman.rb +54 -0
  116. data/test/bm/launch_bench.rb +37 -0
  117. data/test/bm/load_26c.rb +97 -0
  118. data/test/bm/mega.rb +64 -0
  119. data/test/bm/seq_thousand.rb +31 -0
  120. data/test/bm/t.rb +35 -0
  121. data/test/functional/base.rb +247 -0
  122. data/test/functional/concurrent_base.rb +98 -0
  123. data/test/functional/crunner.rb +31 -0
  124. data/test/functional/ct_0_concurrence.rb +65 -0
  125. data/test/functional/ct_1_iterator.rb +67 -0
  126. data/test/functional/ct_2_cancel.rb +81 -0
  127. data/test/functional/eft_0_process_definition.rb +65 -0
  128. data/test/functional/eft_10_cancel_process.rb +46 -0
  129. data/test/functional/eft_11_wait.rb +109 -0
  130. data/test/functional/eft_12_listen.rb +500 -0
  131. data/test/functional/eft_13_iterator.rb +342 -0
  132. data/test/functional/eft_14_cursor.rb +456 -0
  133. data/test/functional/eft_15_loop.rb +69 -0
  134. data/test/functional/eft_16_if.rb +183 -0
  135. data/test/functional/eft_17_equals.rb +55 -0
  136. data/test/functional/eft_18_concurrent_iterator.rb +410 -0
  137. data/test/functional/eft_19_reserve.rb +136 -0
  138. data/test/functional/eft_1_echo.rb +68 -0
  139. data/test/functional/eft_20_save.rb +116 -0
  140. data/test/functional/eft_21_restore.rb +61 -0
  141. data/test/functional/eft_22_noop.rb +28 -0
  142. data/test/functional/eft_23_apply.rb +168 -0
  143. data/test/functional/eft_24_add_branches.rb +98 -0
  144. data/test/functional/eft_25_command.rb +28 -0
  145. data/test/functional/eft_26_error.rb +77 -0
  146. data/test/functional/eft_27_inc.rb +280 -0
  147. data/test/functional/eft_28_once.rb +135 -0
  148. data/test/functional/eft_29_cron.rb +64 -0
  149. data/test/functional/eft_2_sequence.rb +58 -0
  150. data/test/functional/eft_30_ref.rb +155 -0
  151. data/test/functional/eft_31_registerp.rb +130 -0
  152. data/test/functional/eft_32_lose.rb +93 -0
  153. data/test/functional/eft_33_let.rb +31 -0
  154. data/test/functional/eft_34_given.rb +123 -0
  155. data/test/functional/eft_35_filter.rb +375 -0
  156. data/test/functional/eft_36_read.rb +95 -0
  157. data/test/functional/eft_3_participant.rb +149 -0
  158. data/test/functional/eft_4_set.rb +296 -0
  159. data/test/functional/eft_5_subprocess.rb +163 -0
  160. data/test/functional/eft_6_concurrence.rb +304 -0
  161. data/test/functional/eft_7_forget.rb +61 -0
  162. data/test/functional/eft_8_undo.rb +114 -0
  163. data/test/functional/eft_9_redo.rb +138 -0
  164. data/test/functional/ft_0_worker.rb +65 -0
  165. data/test/functional/ft_10_dollar.rb +304 -0
  166. data/test/functional/ft_11_recursion.rb +109 -0
  167. data/test/functional/ft_12_launchitem.rb +43 -0
  168. data/test/functional/ft_13_variables.rb +151 -0
  169. data/test/functional/ft_14_re_apply.rb +324 -0
  170. data/test/functional/ft_15_timeout.rb +226 -0
  171. data/test/functional/ft_16_participant_params.rb +98 -0
  172. data/test/functional/ft_17_conditional.rb +102 -0
  173. data/test/functional/ft_18_kill.rb +138 -0
  174. data/test/functional/ft_19_participant_code.rb +67 -0
  175. data/test/functional/ft_1_process_status.rb +796 -0
  176. data/test/functional/ft_20_storage_participant.rb +543 -0
  177. data/test/functional/ft_21_forget.rb +153 -0
  178. data/test/functional/ft_22_process_definitions.rb +90 -0
  179. data/test/functional/ft_23_load_defs.rb +79 -0
  180. data/test/functional/ft_24_block_participant.rb +235 -0
  181. data/test/functional/ft_25_receiver.rb +207 -0
  182. data/test/functional/ft_26_participant_rtimeout.rb +179 -0
  183. data/test/functional/ft_27_var_indirection.rb +128 -0
  184. data/test/functional/ft_28_null_noop_participants.rb +51 -0
  185. data/test/functional/ft_29_part_template.rb +60 -0
  186. data/test/functional/ft_2_errors.rb +380 -0
  187. data/test/functional/ft_30_smtp_participant.rb +122 -0
  188. data/test/functional/ft_31_part_blocking.rb +72 -0
  189. data/test/functional/ft_33_participant_subprocess_priority.rb +32 -0
  190. data/test/functional/ft_34_cursor_rewind.rb +101 -0
  191. data/test/functional/ft_35_add_service.rb +56 -0
  192. data/test/functional/ft_36_storage_history.rb +150 -0
  193. data/test/functional/ft_37_default_history.rb +109 -0
  194. data/test/functional/ft_38_participant_more.rb +193 -0
  195. data/test/functional/ft_39_wait_for.rb +136 -0
  196. data/test/functional/ft_3_participant_registration.rb +574 -0
  197. data/test/functional/ft_40_wait_logger.rb +62 -0
  198. data/test/functional/ft_41_participants.rb +91 -0
  199. data/test/functional/ft_42_storage_copy.rb +71 -0
  200. data/test/functional/ft_43_participant_on_reply.rb +87 -0
  201. data/test/functional/ft_44_var_participant.rb +35 -0
  202. data/test/functional/ft_45_participant_accept.rb +64 -0
  203. data/test/functional/ft_46_launch_single.rb +83 -0
  204. data/test/functional/ft_47_wfid_generator.rb +54 -0
  205. data/test/functional/ft_48_lose.rb +112 -0
  206. data/test/functional/ft_49_engine_on_error.rb +201 -0
  207. data/test/functional/ft_4_cancel.rb +132 -0
  208. data/test/functional/ft_50_engine_config.rb +22 -0
  209. data/test/functional/ft_51_misc.rb +67 -0
  210. data/test/functional/ft_52_case.rb +134 -0
  211. data/test/functional/ft_53_engine_on_terminate.rb +95 -0
  212. data/test/functional/ft_54_patterns.rb +104 -0
  213. data/test/functional/ft_55_engine_participant.rb +303 -0
  214. data/test/functional/ft_56_filter_attribute.rb +259 -0
  215. data/test/functional/ft_57_rev_participant.rb +252 -0
  216. data/test/functional/ft_58_workitem.rb +69 -0
  217. data/test/functional/ft_59_pause.rb +343 -0
  218. data/test/functional/ft_5_on_error.rb +384 -0
  219. data/test/functional/ft_60_code_participant.rb +45 -0
  220. data/test/functional/ft_61_trailing_fields.rb +34 -0
  221. data/test/functional/ft_62_exp_name_and_dollar_substitution.rb +35 -0
  222. data/test/functional/ft_6_on_cancel.rb +221 -0
  223. data/test/functional/ft_7_tags.rb +177 -0
  224. data/test/functional/ft_8_participant_consumption.rb +124 -0
  225. data/test/functional/ft_9_subprocesses.rb +146 -0
  226. data/test/functional/restart_base.rb +34 -0
  227. data/test/functional/rt_0_wait.rb +55 -0
  228. data/test/functional/rt_1_listen.rb +56 -0
  229. data/test/functional/rt_2_errors.rb +56 -0
  230. data/test/functional/rt_3_once.rb +70 -0
  231. data/test/functional/rt_4_cron.rb +64 -0
  232. data/test/functional/rt_5_timeout.rb +60 -0
  233. data/test/functional/rtest.rb +8 -0
  234. data/test/functional/storage_helper.rb +93 -0
  235. data/test/functional/test.rb +44 -0
  236. data/test/functional/vertical.rb +46 -0
  237. data/test/path_helper.rb +15 -0
  238. data/test/test.rb +13 -0
  239. data/test/test_helper.rb +28 -0
  240. data/test/unit/storage.rb +428 -0
  241. data/test/unit/storages.rb +37 -0
  242. data/test/unit/test.rb +28 -0
  243. data/test/unit/ut_0_ruby_reader.rb +223 -0
  244. data/test/unit/ut_11_lookup.rb +122 -0
  245. data/test/unit/ut_13_serializer.rb +65 -0
  246. data/test/unit/ut_14_is_uri.rb +28 -0
  247. data/test/unit/ut_15_util.rb +57 -0
  248. data/test/unit/ut_16_reader.rb +225 -0
  249. data/test/unit/ut_18_engine.rb +47 -0
  250. data/test/unit/ut_19_part_template.rb +86 -0
  251. data/test/unit/ut_1_fei.rb +165 -0
  252. data/test/unit/ut_20_composite_storage.rb +74 -0
  253. data/test/unit/ut_21_svc_participant_list.rb +46 -0
  254. data/test/unit/ut_22_filter.rb +1094 -0
  255. data/test/unit/ut_23_svc_tracker.rb +48 -0
  256. data/test/unit/ut_24_radial_reader.rb +332 -0
  257. data/test/unit/ut_25_merge.rb +113 -0
  258. data/test/unit/ut_3_wait_logger.rb +39 -0
  259. data/test/unit/ut_4_expmap.rb +20 -0
  260. data/test/unit/ut_5_tree.rb +54 -0
  261. data/test/unit/ut_6_condition.rb +303 -0
  262. data/test/unit/ut_7_workitem.rb +99 -0
  263. data/test/unit/ut_8_tree_to_dot.rb +72 -0
  264. data/test/unit/ut_9_xml_reader.rb +61 -0
  265. metadata +504 -0
@@ -0,0 +1,45 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Tue Apr 26 03:30:29 JST 2011
6
+ #
7
+ # between Changi and Haneda (JA622A)
8
+ #
9
+
10
+ require File.join(File.dirname(__FILE__), 'base')
11
+
12
+
13
+ class FtCodeParticipantTest < Test::Unit::TestCase
14
+ include FunctionalBase
15
+
16
+ def test_workitems_dispatching_message
17
+
18
+ pdef = Ruote.process_definition do
19
+ set 'v:alpha' => '''
20
+ def consume(wi)
21
+ context.tracer << "#{wi.participant_name}\n"
22
+ end
23
+ def cancel(fei, flavour)
24
+ context.tracer << "cancelled\n"
25
+ end
26
+ '''
27
+ alpha
28
+ end
29
+
30
+ #@engine.noisy = true
31
+
32
+ wfid = @engine.launch(pdef)
33
+
34
+ @engine.wait_for(:alpha)
35
+ @engine.wait_for(1)
36
+
37
+ assert_equal 'alpha', @tracer.to_s
38
+
39
+ @engine.cancel(wfid)
40
+ @engine.wait_for(wfid)
41
+
42
+ assert_equal "alpha\ncancelled", @tracer.to_s
43
+ end
44
+ end
45
+
@@ -0,0 +1,34 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Thu Jun 9 11:37:56 JST 2011
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+
11
+ class FtTrailingFields < Test::Unit::TestCase
12
+ include FunctionalBase
13
+
14
+ def test_t_fields
15
+
16
+ pdef = Ruote.define do
17
+ alpha
18
+ echo 'a', :if => '${t.verbose}'
19
+ bravo
20
+ echo 'b', :if => '${t.verbose}'
21
+ end
22
+
23
+ @engine.register(:alpha) { |wi| wi.t['verbose'] = true }
24
+ @engine.register(:bravo, Ruote::NoOpParticipant)
25
+
26
+ #@engine.noisy = true
27
+
28
+ wfid = @engine.launch(pdef)
29
+ @engine.wait_for(wfid)
30
+
31
+ assert_equal 'a', @tracer.to_s
32
+ end
33
+ end
34
+
@@ -0,0 +1,35 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Sat Jun 25 21:00:57 JST 2011
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+
11
+ class FtExpNameAndDollarSubstitution < Test::Unit::TestCase
12
+ include FunctionalBase
13
+
14
+ def test_t_fields
15
+
16
+ pdef = <<-EOS
17
+ define
18
+ set 'v:x': alpha
19
+ user_${v:x}
20
+ user_${v:nada}
21
+ EOS
22
+
23
+ @engine.register /^user_/ do |wi|
24
+ @tracer << wi.participant_name + "\n"
25
+ end
26
+
27
+ #@engine.noisy = true
28
+
29
+ wfid = @engine.launch(pdef)
30
+ @engine.wait_for(wfid)
31
+
32
+ assert_equal %w[ user_alpha user_ ], @tracer.to_a
33
+ end
34
+ end
35
+
@@ -0,0 +1,221 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Wed Jun 3 21:52:09 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+ require 'ruote/participant'
11
+
12
+
13
+ class FtOnCancelTest < Test::Unit::TestCase
14
+ include FunctionalBase
15
+
16
+ def test_on_cancel
17
+
18
+ pdef = Ruote.process_definition do
19
+ sequence :on_cancel => 'catcher' do
20
+ nemo
21
+ end
22
+ end
23
+
24
+ nemo = @engine.register_participant :nemo, Ruote::StorageParticipant
25
+
26
+ @engine.register_participant :catcher do
27
+ @tracer << "caught\n"
28
+ end
29
+
30
+ #noisy
31
+
32
+ wfid = @engine.launch(pdef)
33
+ wait_for(:nemo)
34
+
35
+ @engine.cancel_process(wfid)
36
+ wait_for(wfid)
37
+
38
+ assert_equal 'caught', @tracer.to_s
39
+ end
40
+
41
+ def test_on_cancel_missing_handler
42
+
43
+ pdef = Ruote.process_definition do
44
+ sequence :on_cancel => 'nada' do
45
+ nemo
46
+ end
47
+ end
48
+
49
+ nemo = @engine.register_participant :nemo, Ruote::StorageParticipant
50
+
51
+ #noisy
52
+
53
+ wfid = @engine.launch(pdef)
54
+ wait_for(:nemo)
55
+
56
+ @engine.cancel_process(wfid)
57
+ wait_for(wfid)
58
+
59
+ ps = @engine.process(wfid)
60
+ assert_not_nil ps
61
+
62
+ #logger.log.each { |e| puts e['action'] }
63
+ assert_equal(
64
+ 1, logger.log.select { |e| e['action'] == 'error_intercepted' }.size)
65
+ end
66
+
67
+ def test_on_cancel_trigger_subprocess
68
+
69
+ pdef = Ruote.process_definition do
70
+ sequence :on_cancel => 'decommission' do
71
+ alpha
72
+ end
73
+ define 'decommission' do
74
+ sequence do
75
+ echo 'd0'
76
+ echo 'd1'
77
+ end
78
+ end
79
+ end
80
+
81
+ alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
82
+
83
+ #noisy
84
+
85
+ wfid = @engine.launch(pdef)
86
+
87
+ wait_for(:alpha)
88
+
89
+ assert_equal '', @tracer.to_s
90
+
91
+ @engine.cancel_process(wfid)
92
+
93
+ wait_for(wfid)
94
+
95
+ assert_nil @engine.process(wfid)
96
+
97
+ assert_equal "d0\nd1", @tracer.to_s
98
+ end
99
+
100
+ def test_on_cancel_expression
101
+
102
+ pdef = Ruote.process_definition do
103
+ sequence :on_cancel => 'decom' do
104
+ alpha
105
+ end
106
+ define 'decom' do
107
+ bravo
108
+ end
109
+ end
110
+
111
+ @engine.register_participant :alpha, Ruote::StorageParticipant
112
+ sto = @engine.register_participant :bravo, Ruote::StorageParticipant
113
+
114
+ #noisy
115
+
116
+ wfid = @engine.launch(pdef)
117
+
118
+ wait_for(:alpha)
119
+
120
+ fei = @engine.process(wfid).expressions.find { |e|
121
+ e.fei.expid == '0_1'
122
+ }.fei
123
+
124
+ @engine.cancel_expression(fei)
125
+
126
+ wait_for(:bravo)
127
+
128
+ assert_equal 1, sto.size
129
+ end
130
+
131
+ def test_on_cancel_subprocess
132
+
133
+ pdef = Ruote.process_definition :name => 'test' do
134
+ sequence :on_cancel => 'sub0' do
135
+ alpha
136
+ end
137
+ define 'sub0' do
138
+ bravo
139
+ end
140
+ end
141
+
142
+ @engine.register_participant :alpha, Ruote::StorageParticipant
143
+ @engine.register_participant :bravo, Ruote::StorageParticipant
144
+
145
+ #noisy
146
+
147
+ wfid = @engine.launch(pdef)
148
+
149
+ wait_for(:alpha)
150
+
151
+ @engine.cancel_process(wfid)
152
+
153
+ wait_for(:bravo)
154
+
155
+ assert_equal(
156
+ ["define", {"name"=>"test"}, [
157
+ ["define", {"sub0"=>nil}, [["bravo", {}, []]]],
158
+ ["sequence", {"on_cancel"=>"sub0"}, [["alpha", {}, []]]]]],
159
+ @engine.process(wfid).original_tree)
160
+ assert_equal(
161
+ ["define", {"name"=>"test"}, [
162
+ ["define", {"sub0"=>nil}, [["participant", {"ref"=>"bravo"}, []]]],
163
+ ["sequence", {"on_cancel"=>"sub0", "_triggered"=>"on_cancel"}, [["alpha", {}, []]]]]],
164
+ @engine.process(wfid).current_tree)
165
+ end
166
+
167
+ def test_on_cancel_participant_resume
168
+
169
+ pdef = Ruote.define do
170
+ sequence do
171
+ alpha :on_cancel => 'bail_out'
172
+ echo 'done.'
173
+ end
174
+ define 'bail_out' do
175
+ echo 'bailed'
176
+ end
177
+ end
178
+
179
+ @engine.register :alpha, Ruote::StorageParticipant
180
+
181
+ #noisy
182
+
183
+ wfid = @engine.launch(pdef)
184
+
185
+ @engine.wait_for(:alpha)
186
+
187
+ @engine.cancel(@engine.storage_participant.first)
188
+
189
+ @engine.wait_for(wfid)
190
+
191
+ assert_equal "bailed\ndone.", @tracer.to_s
192
+ end
193
+
194
+ def test_on_cancel_wait_resume
195
+
196
+ pdef = Ruote.define do
197
+ sequence do
198
+ #alpha :on_cancel => 'bail_out'
199
+ wait '1d', :on_cancel => 'bail_out'
200
+ echo 'done.'
201
+ end
202
+ define 'bail_out' do
203
+ echo 'bailed'
204
+ end
205
+ end
206
+
207
+ #noisy
208
+
209
+ wfid = @engine.launch(pdef)
210
+
211
+ @engine.wait_for(6)
212
+
213
+ @engine.cancel(@engine.process(wfid).expressions.last)
214
+
215
+ @engine.wait_for(wfid)
216
+ sleep 0.350
217
+
218
+ assert_equal "bailed\ndone.", @tracer.to_s
219
+ end
220
+ end
221
+
@@ -0,0 +1,177 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Wed Jun 10 11:03:26 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+ require 'ruote/participant'
11
+
12
+
13
+ class FtTagsTest < Test::Unit::TestCase
14
+ include FunctionalBase
15
+
16
+ def test_tag
17
+
18
+ pdef = Ruote.process_definition do
19
+ sequence :tag => 'main' do
20
+ alpha :tag => 'part'
21
+ end
22
+ end
23
+
24
+ alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
25
+
26
+ #noisy
27
+
28
+ wfid = @engine.launch(pdef)
29
+ wait_for(:alpha)
30
+
31
+ ps = @engine.process(wfid)
32
+
33
+ #p ps.variables
34
+ #ps.expressions.each { |e| p [ e.fei, e.variables ] }
35
+ assert_equal '0_0', ps.variables['main']['expid']
36
+ assert_equal '0_0_0', ps.variables['part']['expid']
37
+
38
+ #logger.log.each { |e| puts e['action'] }
39
+ assert_equal 2, logger.log.select { |e| e['action'] == 'entered_tag' }.size
40
+
41
+ alpha.proceed(alpha.first)
42
+ wait_for(wfid)
43
+
44
+ assert_equal 2, logger.log.select { |e| e['action'] == 'left_tag' }.size
45
+ end
46
+
47
+ # making sure a tag is removed in case of on_cancel
48
+ #
49
+ def test_on_cancel
50
+
51
+ pdef = Ruote.process_definition do
52
+ sequence do
53
+ sequence :tag => 'a', :on_cancel => 'decom' do
54
+ alpha
55
+ end
56
+ alpha
57
+ end
58
+ define 'decom' do
59
+ alpha
60
+ end
61
+ end
62
+
63
+ alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
64
+
65
+ #noisy
66
+
67
+ wfid = @engine.launch(pdef)
68
+
69
+ wait_for(:alpha)
70
+
71
+ assert_equal 1, @engine.process(wfid).tags.size
72
+
73
+ fei = @engine.process(wfid).expressions.find { |e|
74
+ e.fei.expid == '0_1_0'
75
+ }.fei
76
+
77
+ @engine.cancel_expression(fei)
78
+
79
+ wait_for(:alpha)
80
+
81
+ assert_equal 0, @engine.process(wfid).tags.size
82
+
83
+ alpha.proceed(alpha.first)
84
+
85
+ wait_for(:alpha)
86
+
87
+ assert_equal 0, @engine.process(wfid).tags.size
88
+ end
89
+
90
+ def test_unset_tag_when_parent_gone
91
+
92
+ pdef = Ruote.process_definition do
93
+ concurrence :count => 1 do
94
+ alpha :tag => 'main'
95
+ sequence do
96
+ bravo
97
+ undo :ref => 'main'
98
+ end
99
+ end
100
+ end
101
+
102
+ #@engine.noisy = true
103
+
104
+ @engine.register :alpha, Ruote::NullParticipant
105
+ @engine.register :bravo, Ruote::NoOpParticipant
106
+
107
+ wfid = @engine.launch(pdef)
108
+
109
+ @engine.wait_for(23)
110
+
111
+ assert_nil @engine.process(wfid)
112
+ end
113
+
114
+ def test_tags_and_workitems
115
+
116
+ pdef = Ruote.define do
117
+ sequence :tag => 'first-stage' do
118
+ alpha
119
+ end
120
+ sequence :tag => 'second-stage' do
121
+ bravo
122
+ charly :tag => 'third-stage'
123
+ end
124
+ david
125
+ end
126
+
127
+ @engine.register { catchall }
128
+
129
+ wfid = @engine.launch(pdef)
130
+ @engine.wait_for(:alpha)
131
+ wi = @engine.storage_participant.first
132
+
133
+ assert_equal %w[ first-stage ], wi.tags
134
+
135
+ @engine.storage_participant.proceed(wi)
136
+ @engine.wait_for(:bravo)
137
+ wi = @engine.storage_participant.first
138
+
139
+ assert_equal %w[ second-stage ], wi.tags
140
+
141
+ @engine.storage_participant.proceed(wi)
142
+ @engine.wait_for(:charly)
143
+ wi = @engine.storage_participant.first
144
+
145
+ assert_equal %w[ second-stage third-stage ], wi.tags
146
+
147
+ @engine.storage_participant.proceed(wi)
148
+ @engine.wait_for(:david)
149
+ wi = @engine.storage_participant.first
150
+
151
+ assert_equal [], wi.tags
152
+ end
153
+
154
+ def test_tag_and_define
155
+
156
+ pdef = Ruote.define :tag => 'nada' do
157
+ alpha
158
+ end
159
+
160
+ @engine.register 'alpha', Ruote::StorageParticipant
161
+
162
+ #noisy
163
+
164
+ wfid = @engine.launch(pdef)
165
+ @engine.wait_for(:alpha)
166
+
167
+ assert_equal 1, logger.log.select { |e| e['action'] == 'entered_tag' }.size
168
+
169
+ wi = @engine.storage_participant.first
170
+ @engine.storage_participant.proceed(wi)
171
+
172
+ @engine.wait_for(wfid)
173
+
174
+ assert_equal 1, logger.log.select { |e| e['action'] == 'left_tag' }.size
175
+ end
176
+ end
177
+