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,259 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Tue Feb 8 12:39:35 JST 2011
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+
11
+ class FtFilterAttributeTest < Test::Unit::TestCase
12
+ include FunctionalBase
13
+
14
+ class AlphaParticipant
15
+ include Ruote::LocalParticipant
16
+
17
+ def consume(workitem)
18
+
19
+ @context.tracer << 'fields: ' + workitem.fields.keys.sort.join(' ') + "\n"
20
+
21
+ reply_to_engine(workitem)
22
+ end
23
+ end
24
+
25
+ def test_filter_in_variable
26
+
27
+ pdef = Ruote.define do
28
+ set 'v:f' => {
29
+ :in => [ { :fields => '/^private_/', :remove => true } ],
30
+ :out => [ { :fields => '/^~~.private_/', :merge_to => '.' } ]
31
+ }
32
+ alpha :filter => 'f'
33
+ alpha
34
+ end
35
+
36
+ @engine.register :alpha, AlphaParticipant
37
+
38
+ #noisy
39
+
40
+ wfid = @engine.launch(
41
+ pdef,
42
+ 'private_a' => 'x', 'a' => 'y')
43
+
44
+ @engine.wait_for(wfid)
45
+
46
+ assert_equal(
47
+ "fields: a dispatched_at params\n" +
48
+ "fields: a dispatched_at params private_a",
49
+ @tracer.to_s)
50
+ end
51
+
52
+ def test_filter_restore
53
+
54
+ pdef = Ruote.define do
55
+ set 'v:f' => {
56
+ :in => [],
57
+ :out => [
58
+ { :fields => '/^protected_/', :restore => true },
59
+ { :fields => '__result__', :del => true }
60
+ ]
61
+ }
62
+ sequence :filter => 'f' do
63
+ bravo
64
+ echo '${f:protected_thing}'
65
+ end
66
+ end
67
+
68
+ @engine.register :bravo do |wi|
69
+ wi.fields['protected_thing'] = 'stolen'
70
+ wi.fields['other_thing'] = 'stolen'
71
+ end
72
+
73
+ #noisy
74
+
75
+ wfid = @engine.launch(
76
+ pdef,
77
+ 'protected_thing' => 'here', 'other_thing' => 'here')
78
+
79
+ r = @engine.wait_for(wfid)
80
+
81
+ assert_equal(
82
+ { 'protected_thing' => 'here', 'other_thing' => 'stolen' },
83
+ r['workitem']['fields'])
84
+ end
85
+
86
+ def test_broken_filter_apply
87
+
88
+ pdef = Ruote.define do
89
+ alpha :filter => 'f'
90
+ end
91
+
92
+ @engine.register :alpha, Ruote::NoOpParticipant
93
+
94
+ #noisy
95
+
96
+ wfid = @engine.launch(pdef)
97
+
98
+ r = @engine.wait_for(wfid)
99
+
100
+ assert_not_nil r['error']
101
+ assert_equal 'ArgumentError', r['error']['class']
102
+ end
103
+
104
+ def test_broken_filter_reply
105
+
106
+ pdef = Ruote.define do
107
+ set 'v:f' => {
108
+ :in => [],
109
+ :out => 'nada'
110
+ }
111
+ alpha :filter => 'f'
112
+ end
113
+
114
+ @engine.register :alpha, AlphaParticipant
115
+
116
+ #noisy
117
+
118
+ wfid = @engine.launch(pdef)
119
+
120
+ r = @engine.wait_for(wfid)
121
+
122
+ assert_not_nil r['error']
123
+ assert_equal 'ArgumentError', r['error']['class']
124
+ end
125
+
126
+ class AaFilterParticipant
127
+ def consume(wi)
128
+ (wi.fields['seen'] ||= []) << wi.fields['__filter_direction__']
129
+ end
130
+ end
131
+
132
+ def test_filter_participant__consume
133
+
134
+ pdef = Ruote.define do
135
+ alpha :filter => 'filter_a'
136
+ end
137
+
138
+ @engine.register :alpha, AlphaParticipant
139
+ @engine.register :filter_a, AaFilterParticipant
140
+
141
+ #noisy
142
+
143
+ wfid = @engine.launch(pdef)
144
+
145
+ r = @engine.wait_for(wfid)
146
+
147
+ assert_nil r['workitem']['fields']['__filter_direction__']
148
+ assert_equal %w[ in out ], r['workitem']['fields']['seen']
149
+ assert_equal 'fields: dispatched_at params seen', @tracer.to_s
150
+ end
151
+
152
+ class BbFilterParticipant
153
+ def filter(fields, direction)
154
+ (fields['seen'] ||= []) << direction
155
+ fields
156
+ end
157
+ end
158
+
159
+ def test_filter_participant__filter
160
+
161
+ pdef = Ruote.define do
162
+ alpha :filter => 'filter_b'
163
+ end
164
+
165
+ @engine.register :alpha, AlphaParticipant
166
+ @engine.register :filter_b, BbFilterParticipant
167
+
168
+ #noisy
169
+
170
+ wfid = @engine.launch(pdef)
171
+
172
+ r = @engine.wait_for(wfid)
173
+
174
+ assert_equal %w[ in out ], r['workitem']['fields']['seen']
175
+ assert_equal 'fields: dispatched_at params seen', @tracer.to_s
176
+ end
177
+
178
+ class CcFilterParticipant
179
+ def consume(wi)
180
+ raise 'something goes horribly wrong'
181
+ end
182
+ end
183
+
184
+ def test_filter_participant_with_error
185
+
186
+ pdef = Ruote.define do
187
+ alpha :filter => 'filter_c'
188
+ end
189
+
190
+ @engine.register :alpha, AlphaParticipant
191
+ @engine.register :filter_c, CcFilterParticipant
192
+
193
+ #noisy
194
+
195
+ wfid = @engine.launch(pdef)
196
+
197
+ @engine.wait_for(wfid)
198
+
199
+ assert_equal 1, @engine.ps(wfid).errors.size
200
+ assert_equal '', @tracer.to_s
201
+ end
202
+
203
+ class DdFilterParticipant
204
+ def consume(workitem)
205
+ workitem.fields[workitem.participant_name] =
206
+ workitem.fields['__filter_direction__']
207
+ end
208
+ end
209
+
210
+ def test_filter_participant__in_and_out
211
+
212
+ pdef = Ruote.define do
213
+ alpha :filter => { :in => 'f0', :out => 'f1' }
214
+ end
215
+
216
+ @engine.register :alpha, AlphaParticipant
217
+ @engine.register :f0, DdFilterParticipant
218
+ @engine.register :f1, DdFilterParticipant
219
+
220
+ #noisy
221
+
222
+ wfid = @engine.launch(pdef)
223
+
224
+ r = @engine.wait_for(wfid)
225
+
226
+ assert_equal({ 'f0' => 'in', 'f1' => 'out' }, r['workitem']['fields'])
227
+ assert_equal('fields: dispatched_at f0 params', @tracer.to_s)
228
+ end
229
+
230
+ # def test_filter_record
231
+ #
232
+ # pdef = Ruote.define do
233
+ # set 'v:f' => {
234
+ # :in => [ { :fields => 'x', :type => 'number' } ],
235
+ # :out => []
236
+ # }
237
+ # alpha :filter => 'f'
238
+ # end
239
+ #
240
+ # @engine.register :alpha, AlphaParticipant
241
+ #
242
+ # #noisy
243
+ #
244
+ # wfid = @engine.launch(
245
+ # pdef,
246
+ # 'x' => 'not a number')
247
+ #
248
+ # @engine.wait_for(wfid)
249
+ #
250
+ # assert_equal(
251
+ # "fields: a dispatched_at params\n" +
252
+ # "fields: a dispatched_at params private_a",
253
+ # @tracer.to_s)
254
+ # end
255
+ #
256
+ # in the fridge for now
257
+
258
+ end
259
+
@@ -0,0 +1,252 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Wed Apr 6 06:52:53 JST 2011
6
+ #
7
+ # Santa Barbara
8
+ #
9
+
10
+ require File.join(File.dirname(__FILE__), 'base')
11
+
12
+ require 'ruote'
13
+ #require 'ruote/participant'
14
+
15
+
16
+ class FtRevParticipantTest < Test::Unit::TestCase
17
+ include FunctionalBase
18
+
19
+ def test_consume
20
+
21
+ dir = compute_dir_name
22
+
23
+ FileUtils.mkdir(dir)
24
+
25
+ File.open(dir + '/alpha.rb', 'wb') do |f|
26
+ f.write(%{
27
+ def consume(workitem)
28
+ (workitem.fields['seen'] ||= []) << 'alpha'
29
+ reply_to_engine(workitem)
30
+ end
31
+ })
32
+ end
33
+ File.open(dir + '/alpha__z.rb', 'wb') do |f|
34
+ f.write(%{
35
+ def consume(workitem)
36
+ (workitem.fields['seen'] ||= []) << 'alpha__z'
37
+ reply_to_engine(workitem)
38
+ end
39
+ })
40
+ end
41
+
42
+ @engine.register do
43
+ catchall Ruote::RevParticipant, :dir => dir
44
+ end
45
+
46
+ pdef = Ruote.process_definition 'x', :revision => 'y' do
47
+ alpha :rev => 'z'
48
+ alpha
49
+ end
50
+
51
+ #@engine.noisy = true
52
+
53
+ wfid = @engine.launch(pdef)
54
+
55
+ r = @engine.wait_for(wfid)
56
+
57
+ assert_equal %w[ alpha__z alpha ], r['workitem']['fields']['seen']
58
+
59
+ ensure
60
+ FileUtils.rm_rf(dir)
61
+ end
62
+
63
+ def test_cancel
64
+
65
+ dir = compute_dir_name
66
+
67
+ FileUtils.mkdir(dir)
68
+
69
+ $seen = false
70
+
71
+ File.open(dir + '/alpha.rb', 'wb') do |f|
72
+ f.write(%{
73
+ def consume(workitem)
74
+ # do nothing
75
+ end
76
+ def cancel(fei, flavour)
77
+ $seen = true
78
+ end
79
+ })
80
+ end
81
+
82
+ @engine.register do
83
+ catchall Ruote::RevParticipant, :dir => dir
84
+ end
85
+
86
+ pdef = Ruote.process_definition do
87
+ alpha
88
+ end
89
+
90
+ #@engine.noisy = true
91
+
92
+ wfid = @engine.launch(pdef)
93
+
94
+ @engine.wait_for(:alpha)
95
+
96
+ assert_equal false, $seen
97
+
98
+ @engine.cancel(wfid)
99
+
100
+ @engine.wait_for(wfid)
101
+
102
+ assert_equal true, $seen
103
+
104
+ ensure
105
+ FileUtils.rm_rf(dir)
106
+ end
107
+
108
+ def test_accept
109
+
110
+ dir = compute_dir_name
111
+
112
+ FileUtils.mkdir(dir)
113
+
114
+ File.open(dir + '/alpha.rb', 'wb') do |f|
115
+ f.write(%{
116
+ def consume(workitem)
117
+ (workitem.fields['seen'] ||= []) << 'alpha'
118
+ reply_to_engine(workitem)
119
+ end
120
+ })
121
+ end
122
+ File.open(dir + '/alpha__z.rb', 'wb') do |f|
123
+ f.write(%{
124
+ def consume(workitem)
125
+ raise "I should never get raised !"
126
+ end
127
+ def accept?(workitem)
128
+ false
129
+ end
130
+ })
131
+ end
132
+
133
+ @engine.register do
134
+ catchall Ruote::RevParticipant, :dir => dir
135
+ end
136
+
137
+ pdef = Ruote.process_definition do
138
+ alpha :rev => 'z'
139
+ end
140
+
141
+ #@engine.noisy = true
142
+
143
+ wfid = @engine.launch(pdef)
144
+
145
+ r = @engine.wait_for(wfid)
146
+
147
+ assert_equal %w[ alpha ], r['workitem']['fields']['seen']
148
+
149
+ ensure
150
+ FileUtils.rm_rf(dir)
151
+ end
152
+
153
+ def test_on_reply
154
+
155
+ dir = compute_dir_name
156
+
157
+ FileUtils.mkdir(dir)
158
+
159
+ File.open(dir + '/alpha.rb', 'wb') do |f|
160
+ f.write(%{
161
+ def consume(workitem)
162
+ reply_to_engine(workitem)
163
+ end
164
+ def on_reply(workitem)
165
+ (workitem.fields['seen'] ||= []) << 'on_reply'
166
+ end
167
+ })
168
+ end
169
+
170
+ @engine.register do
171
+ catchall Ruote::RevParticipant, :dir => dir
172
+ end
173
+
174
+ pdef = Ruote.process_definition do
175
+ alpha
176
+ end
177
+
178
+ #@engine.noisy = true
179
+
180
+ wfid = @engine.launch(pdef)
181
+
182
+ r = @engine.wait_for(wfid)
183
+
184
+ assert_equal %w[ on_reply ], r['workitem']['fields']['seen']
185
+
186
+ ensure
187
+ FileUtils.rm_rf(dir)
188
+ end
189
+
190
+ def test_rtimeout
191
+
192
+ dir = compute_dir_name
193
+
194
+ FileUtils.mkdir(dir)
195
+
196
+ File.open(dir + '/alpha.rb', 'wb') do |f|
197
+ f.write(%{
198
+ def consume(workitem)
199
+ #reply_to_engine(workitem)
200
+ end
201
+ })
202
+ end
203
+ File.open(dir + '/bravo.rb', 'wb') do |f|
204
+ f.write(%{
205
+ def consume(workitem)
206
+ #reply_to_engine(workitem)
207
+ end
208
+ def rtimeout(workitem)
209
+ '2d'
210
+ end
211
+ })
212
+ end
213
+
214
+ @engine.register do
215
+ catchall Ruote::RevParticipant, :dir => dir
216
+ end
217
+
218
+ pdef = Ruote.process_definition do
219
+ alpha
220
+ bravo
221
+ end
222
+
223
+ #@engine.noisy = true
224
+
225
+ wfid = @engine.launch(pdef)
226
+
227
+ r = @engine.wait_for(:alpha)
228
+ sleep 0.350
229
+
230
+ assert_equal 0, @engine.storage.get_many('schedules').size
231
+
232
+ wi = @engine.ps(wfid).workitems.first
233
+
234
+ @engine.receive(wi)
235
+
236
+ r = @engine.wait_for(:bravo)
237
+ sleep 0.350
238
+
239
+ assert_equal 1, @engine.storage.get_many('schedules').size
240
+
241
+ ensure
242
+ FileUtils.rm_rf(dir)
243
+ end
244
+
245
+ protected
246
+
247
+ def compute_dir_name
248
+
249
+ [ 'rev_participant', $$, Time.now.to_f ].collect { |e| e.to_s }.join('_')
250
+ end
251
+ end
252
+