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,207 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Wed Aug 12 23:24:16 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+ require 'ruote/participant'
11
+
12
+
13
+ class FtReceiverTest < Test::Unit::TestCase
14
+ include FunctionalBase
15
+
16
+ def setup
17
+
18
+ super
19
+
20
+ @pdef = Ruote.process_definition :name => 'test' do
21
+ sequence do
22
+ alpha
23
+ echo '.'
24
+ end
25
+ end
26
+
27
+ @engine.register_participant 'alpha', MyParticipant
28
+ end
29
+
30
+ class MyParticipant
31
+ include Ruote::LocalParticipant
32
+
33
+ def consume(workitem)
34
+
35
+ @context.stash[:wi] = workitem
36
+
37
+ # no reply to the engine
38
+ end
39
+
40
+ # do not let the dispatch happen in its own thread, this makes
41
+ # wait_for(:alpha) synchronous.
42
+ #
43
+ def do_not_thread
44
+
45
+ true
46
+ end
47
+ end
48
+
49
+ class MyReceiver < Ruote::Receiver
50
+ attr_reader :context
51
+ end
52
+
53
+ def test_my_receiver_init
54
+
55
+ cid = @engine.context.object_id
56
+
57
+ receiver = MyReceiver.new(@engine)
58
+ assert_equal cid, receiver.context.object_id
59
+ assert_not_nil receiver.context.storage
60
+
61
+ receiver = MyReceiver.new(@engine.context)
62
+ assert_equal cid, receiver.context.object_id
63
+ assert_not_nil receiver.context.storage
64
+
65
+ receiver = MyReceiver.new(@engine.worker)
66
+ assert_equal cid, receiver.context.object_id
67
+ assert_not_nil receiver.context.storage
68
+
69
+ receiver = MyReceiver.new(@engine.storage)
70
+ assert_equal cid, receiver.context.object_id
71
+ assert_not_nil receiver.context.storage
72
+
73
+ @engine.storage.instance_variable_set(:@context, nil)
74
+ receiver = MyReceiver.new(@engine.storage)
75
+ assert_not_equal cid, receiver.context.object_id
76
+ assert_not_nil receiver.context.storage
77
+ end
78
+
79
+ def test_my_receiver
80
+
81
+ receiver = MyReceiver.new(@engine.context)
82
+
83
+ #noisy
84
+
85
+ wfid = @engine.launch(@pdef)
86
+
87
+ wait_for(:alpha)
88
+ while @engine.context.stash[:wi].nil? do
89
+ Thread.pass
90
+ end
91
+
92
+ assert_equal 3, @engine.process(wfid).expressions.size
93
+
94
+ receiver.receive(@engine.context.stash[:wi])
95
+
96
+ wait_for(wfid)
97
+
98
+ assert_nil @engine.process(wfid)
99
+
100
+ rcv = logger.log.select { |e| e['action'] == 'receive' }.first
101
+ assert_equal 'FtReceiverTest::MyReceiver', rcv['receiver']
102
+ end
103
+
104
+ def test_engine_receive
105
+
106
+ wfid = @engine.launch(@pdef)
107
+
108
+ wait_for(:alpha)
109
+
110
+ @engine.receive(@engine.context.stash[:wi])
111
+
112
+ wait_for(wfid)
113
+
114
+ assert_nil @engine.process(wfid)
115
+
116
+ rcv = logger.log.select { |e| e['action'] == 'receive' }.first
117
+ assert_equal 'Ruote::Engine', rcv['receiver']
118
+ end
119
+
120
+ class MyOtherParticipant
121
+ include Ruote::LocalParticipant
122
+ def consume(workitem)
123
+ @context.receiver.pass(workitem.to_h)
124
+ end
125
+ end
126
+ class MyOtherReceiver < Ruote::Receiver
127
+ def initialize(context, opts={})
128
+ super(context, opts)
129
+ @count = 0
130
+ end
131
+ def pass(workitem)
132
+ if @count < 1
133
+ @context.error_handler.action_handle(
134
+ 'dispatch', workitem['fei'], RuntimeError.new('something went wrong'))
135
+ else
136
+ reply(workitem)
137
+ end
138
+ @count = @count + 1
139
+ end
140
+ end
141
+
142
+ def test_receiver_triggered_dispatch_error
143
+
144
+ class << @engine.context
145
+ def receiver
146
+ @rcv ||= MyOtherReceiver.new(engine)
147
+ end
148
+ end
149
+
150
+ @engine.register_participant :alpha, MyOtherParticipant
151
+
152
+ pdef = Ruote.process_definition do
153
+ alpha
154
+ end
155
+
156
+ #noisy
157
+
158
+ wfid = @engine.launch(pdef)
159
+
160
+ wait_for(wfid)
161
+
162
+ ps = @engine.process(wfid)
163
+ err = ps.errors.first
164
+
165
+ assert_equal 1, ps.errors.size
166
+ assert_equal '#<RuntimeError: something went wrong>', err.message
167
+
168
+ @engine.replay_at_error(err)
169
+
170
+ wait_for(wfid)
171
+
172
+ ps = @engine.process(wfid)
173
+
174
+ assert_nil ps
175
+ end
176
+
177
+ def test_receiver_fexp_and_wi
178
+
179
+ #@engine.register do
180
+ # catchall Ruote::StorageParticipant
181
+ #end
182
+ @engine.register_participant :alpha, Ruote::StorageParticipant
183
+
184
+ #noisy
185
+
186
+ wfid = @engine.launch(Ruote.define do
187
+ alpha
188
+ end)
189
+
190
+ @engine.wait_for(:alpha)
191
+ @engine.wait_for(1)
192
+
193
+ wi = @engine.storage_participant.first
194
+
195
+ assert_equal wfid, wi.fei.wfid
196
+
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']
201
+
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
205
+ end
206
+ end
207
+
@@ -0,0 +1,179 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Sun Aug 16 14:25:35 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+ require 'ruote/participant'
11
+
12
+
13
+ class FtParticipantTimeoutTest < Test::Unit::TestCase
14
+ include FunctionalBase
15
+
16
+ class AlphaParticipant < Ruote::StorageParticipant
17
+ def rtimeout(workitem)
18
+ '1s'
19
+ end
20
+ end
21
+
22
+ def test_participant_defined_timeout
23
+
24
+ pdef = Ruote.process_definition do
25
+ sequence do
26
+ alpha
27
+ bravo
28
+ end
29
+ end
30
+
31
+ @engine.register_participant :alpha, AlphaParticipant
32
+ sto = @engine.register_participant :bravo, Ruote::StorageParticipant
33
+
34
+ #noisy
35
+
36
+ wfid = @engine.launch(pdef)
37
+ wait_for(13)
38
+
39
+ assert_equal 1, sto.size
40
+ assert_equal 'bravo', sto.first.participant_name
41
+
42
+ #logger.log.each { |l| p l }
43
+ assert_equal 2, logger.log.select { |e| e['flavour'] == 'timeout' }.size
44
+ assert_equal 0, @engine.storage.get_many('schedules').size
45
+
46
+ assert_not_nil sto.first.fields['__timed_out__']
47
+ end
48
+
49
+ class MyParticipant
50
+ include Ruote::LocalParticipant
51
+ def consume(workitem)
52
+ # do nothing
53
+ end
54
+ def cancel(fei, flavour)
55
+ # do nothing
56
+ end
57
+ def rtimeout
58
+ '1s'
59
+ end
60
+ def do_not_thread
61
+ true
62
+ end
63
+ end
64
+
65
+ def test_participant_class_defined_timeout
66
+
67
+ pdef = Ruote.define do
68
+ alpha
69
+ echo 'done.'
70
+ end
71
+
72
+ @engine.register_participant :alpha, MyParticipant
73
+
74
+ #noisy
75
+
76
+ wfid = @engine.launch(pdef)
77
+
78
+ @engine.wait_for(wfid)
79
+
80
+ assert_equal 'done.', @tracer.to_s
81
+ assert_equal 2, logger.log.select { |e| e['flavour'] == 'timeout' }.size
82
+ end
83
+
84
+ def test_pdef_overriden_timeout
85
+
86
+ # process definition cancels timeout given by participant
87
+
88
+ pdef = Ruote.define do
89
+ alpha :timeout => ''
90
+ echo 'done.'
91
+ end
92
+
93
+ @engine.register_participant :alpha, MyParticipant
94
+
95
+ wfid = @engine.launch(pdef)
96
+
97
+ @engine.wait_for(:alpha)
98
+
99
+ sleep 0.350
100
+
101
+ assert_equal 0, @engine.storage.get_many('schedules').size
102
+ assert_equal '', @tracer.to_s
103
+ end
104
+
105
+ class MyOtherParticipant
106
+ include Ruote::LocalParticipant
107
+ def initialize(opts)
108
+ @opts = opts
109
+ end
110
+ def consume(workitem)
111
+ # do nothing
112
+ end
113
+ def cancel(fei, flavour)
114
+ # do nothing
115
+ end
116
+ def rtimeout(workitem)
117
+ @opts['timeout']
118
+ end
119
+ end
120
+
121
+ def test_participant_option_defined_timeout
122
+
123
+ pdef = Ruote.define do
124
+ alpha
125
+ bravo
126
+ echo 'done.'
127
+ end
128
+
129
+ @engine.register_participant :alpha, MyOtherParticipant, 'timeout' => '1s'
130
+ @engine.register_participant :bravo, MyOtherParticipant
131
+
132
+ #noisy
133
+
134
+ wfid = @engine.launch(pdef)
135
+
136
+ @engine.wait_for(:bravo)
137
+
138
+ assert_equal 0, @engine.storage.get_many('schedules').size
139
+ # no timeout for participant :bravo
140
+ end
141
+
142
+ class YetAnotherParticipant
143
+ include Ruote::LocalParticipant
144
+ def initialize(opts)
145
+ @opts = opts
146
+ end
147
+ def consume(workitem)
148
+ # do nothing
149
+ end
150
+ def cancel(fei, flavour)
151
+ # do nothing
152
+ end
153
+ def rtimeout(workitem)
154
+ "#{workitem.fields['timeout'] * 2}s"
155
+ end
156
+ end
157
+
158
+ def test_participant_rtimeout_workitem
159
+
160
+ pdef = Ruote.process_definition do
161
+ alpha
162
+ end
163
+
164
+ @engine.register_participant :alpha, YetAnotherParticipant
165
+
166
+ #noisy
167
+
168
+ wfid = @engine.launch(pdef, 'timeout' => 60)
169
+
170
+ @engine.wait_for(:alpha)
171
+ @engine.wait_for(1)
172
+
173
+ schedules = @engine.storage.get_many('schedules')
174
+
175
+ assert_equal 1, schedules.size
176
+ assert_equal '120s', schedules.first['original']
177
+ end
178
+ end
179
+
@@ -0,0 +1,128 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Sun Aug 23 16:59:07 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+
11
+ class FtVarIndirectionTest < Test::Unit::TestCase
12
+ include FunctionalBase
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 = @engine.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
+
33
+ def test_participant_indirection
34
+
35
+ pdef = Ruote.process_definition do
36
+ sequence do
37
+ set 'v:v' => 'alpha'
38
+ #participant '${v:v}'
39
+ v
40
+ end
41
+ end
42
+
43
+ @engine.register_participant :alpha do |workitem|
44
+ @tracer << "alpha\n"
45
+ end
46
+
47
+ #noisy
48
+
49
+ assert_trace 'alpha', pdef
50
+ end
51
+
52
+ def test_subprocess_indirection
53
+
54
+ pdef = Ruote.process_definition do
55
+ sequence do
56
+ set 'v:v' => 'sub0'
57
+ #subprocess '${v:v}'
58
+ v
59
+ end
60
+ define 'sub0' do
61
+ echo 'a'
62
+ end
63
+ end
64
+
65
+ #noisy
66
+
67
+ assert_trace 'a', pdef
68
+ end
69
+
70
+ def test_subprocess_indirection_uri
71
+
72
+ pdef = Ruote.process_definition do
73
+ sequence do
74
+ set 'v:v' => File.join(File.dirname(__FILE__), '..', 'pdef.xml')
75
+ #subprocess '${v:v}'
76
+ v
77
+ end
78
+ end
79
+
80
+ #noisy
81
+
82
+ assert_trace %w[ a b ], pdef
83
+ end
84
+
85
+ def test_subprocess_uri_set_as_engine_variable
86
+
87
+ pdef = Ruote.process_definition do
88
+ v
89
+ end
90
+
91
+ #noisy
92
+
93
+ @engine.variables['v'] = File.join(File.dirname(__FILE__), '..', 'pdef.xml')
94
+
95
+ assert_trace %w[ a b ], pdef
96
+ end
97
+
98
+ def test_subprocess_uri_set_as_engine_variable__absolute
99
+
100
+ pdef = Ruote.process_definition do
101
+ v
102
+ end
103
+
104
+ #noisy
105
+
106
+ @engine.variables['v'] = File.expand_path(
107
+ File.join(File.dirname(__FILE__), '..', 'pdef.xml'))
108
+
109
+ assert_trace %w[ a b ], pdef
110
+ end
111
+
112
+ def test_engine_variable_for_expression_aliases
113
+
114
+ pdef = Ruote.define do
115
+ output "nada"
116
+ end
117
+
118
+ @engine.variables['output'] = 'echo'
119
+
120
+ #@engine.noisy = true
121
+
122
+ wfid = @engine.launch(pdef)
123
+ @engine.wait_for(wfid)
124
+
125
+ assert_equal 'nada', @tracer.to_s
126
+ end
127
+ end
128
+