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,95 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Fri Apr 15 09:49:10 JST 2011
6
+ #
7
+ # over Canada, between SFO and FRA
8
+ #
9
+
10
+
11
+ require File.join(File.dirname(__FILE__), 'base')
12
+
13
+ require_json
14
+ Rufus::Json.detect_backend
15
+
16
+
17
+ class EftReadTest < Test::Unit::TestCase
18
+ include FunctionalBase
19
+
20
+ def test_read_text_file
21
+
22
+ dir = "t_rtf_#{$$}_#{self.object_id}_#{Time.now.to_f}"
23
+ fname = File.join(dir, 'message.txt')
24
+ FileUtils.mkdir(dir)
25
+
26
+ File.open(fname, 'wb') { |f| f.write('kilroy was here') }
27
+
28
+ pdef = Ruote.process_definition do
29
+ read fname, :to => 'x'
30
+ read :from => fname, :to => 'f:y'
31
+ read fname, :to => 'v:z'
32
+ set 'f:z' => '$v:z'
33
+ end
34
+
35
+ #@engine.noisy = true
36
+
37
+ wfid = @engine.launch(pdef)
38
+
39
+ fields = @engine.wait_for(wfid)['workitem']['fields']
40
+
41
+ assert_equal(
42
+ [ 'kilroy was here' ],
43
+ %w[ x y z ].collect { |k| fields[k] }.uniq)
44
+
45
+ ensure
46
+ FileUtils.rm_rf(dir)
47
+ end
48
+
49
+ def test_read_json_file
50
+
51
+ dir = "t_rjf_#{$$}_#{self.object_id}_#{Time.now.to_f}"
52
+ fname = File.join(dir, 'message.json')
53
+ FileUtils.mkdir(dir)
54
+
55
+ File.open(fname, 'wb') do |f|
56
+ f.puts(Rufus::Json.encode('kilroy' => 'here'))
57
+ end
58
+
59
+ pdef = Ruote.process_definition do
60
+ read fname, :to => 'x'
61
+ read :from => fname, :to => 'f:y'
62
+ read fname, :to => 'v:z'
63
+ set 'f:z' => '$v:z'
64
+ end
65
+
66
+ #@engine.noisy = true
67
+
68
+ wfid = @engine.launch(pdef)
69
+
70
+ fields = @engine.wait_for(wfid)['workitem']['fields']
71
+
72
+ assert_equal(
73
+ [ { 'kilroy' => 'here' } ],
74
+ %w[ x y z ].collect { |k| fields[k] }.uniq)
75
+
76
+ ensure
77
+ FileUtils.rm_rf(dir)
78
+ end
79
+
80
+ def test_read_http
81
+
82
+ pdef = Ruote.process_definition do
83
+ read 'http://ruote.s3.amazonaws.com/eft_36_read.txt', :to => :x
84
+ read 'http://ruote.s3.amazonaws.com/eft_36_read.json', :to => :y
85
+ end
86
+
87
+ wfid = @engine.launch(pdef)
88
+
89
+ fields = @engine.wait_for(wfid)['workitem']['fields']
90
+
91
+ assert_equal("kilroy was here\n", fields['x'])
92
+ assert_equal({ 'kilroy' => 'here' }, fields['y'])
93
+ end
94
+ end
95
+
@@ -0,0 +1,149 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Wed May 13 11:14:08 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+ require 'ruote/participant'
11
+
12
+
13
+ class EftParticipantTest < Test::Unit::TestCase
14
+ include FunctionalBase
15
+
16
+ def test_participant
17
+
18
+ pdef = Ruote.process_definition do
19
+ participant :ref => 'alpha'
20
+ end
21
+
22
+ @engine.register_participant :alpha do |workitem|
23
+ @tracer << 'alpha'
24
+ end
25
+
26
+ #noisy
27
+
28
+ assert_trace 'alpha', pdef
29
+
30
+ assert_log_count(1) { |e| e['action'] == 'dispatch' }
31
+ assert_log_count(1) { |e| e['action'] == 'dispatched' }
32
+ assert_log_count(1) { |e| e['action'] == 'receive' }
33
+ end
34
+
35
+ def test_participant_att_text
36
+
37
+ pdef = Ruote.process_definition do
38
+ participant :bravo
39
+ end
40
+
41
+ @engine.register_participant :bravo do |workitem|
42
+ @tracer << 'bravo'
43
+ end
44
+
45
+ #noisy
46
+
47
+ assert_trace 'bravo', pdef
48
+ end
49
+
50
+ def test_participant_exp_name
51
+
52
+ pdef = Ruote.process_definition do
53
+ charly
54
+ end
55
+
56
+ @engine.register_participant :charly do |workitem|
57
+ @tracer << 'charly'
58
+ end
59
+
60
+ #noisy
61
+
62
+ assert_trace 'charly', pdef
63
+ end
64
+
65
+ def test_participant_exp_name_tree_rewriting
66
+
67
+ pdef = Ruote.process_definition do
68
+ delta :tag => 'whatever'
69
+ end
70
+
71
+ delta = @engine.register_participant :delta, Ruote::StorageParticipant
72
+
73
+ @engine.launch(pdef)
74
+ wait_for(:delta)
75
+
76
+ assert_equal(
77
+ ['participant', {'tag'=>'whatever', 'ref'=>'delta'}, []],
78
+ Ruote::Exp::FlowExpression.fetch(@engine.context, delta.first.h.fei).tree)
79
+ end
80
+
81
+ def test_participant_if
82
+
83
+ pdef = Ruote.process_definition do
84
+ eecho
85
+ fox :if => 'false == true'
86
+ gamma
87
+ end
88
+
89
+ %w[ eecho fox gamma ].each do |pname|
90
+ @engine.register_participant pname do |workitem|
91
+ @tracer << "#{workitem.participant_name}\n"
92
+ end
93
+ end
94
+
95
+ #noisy
96
+
97
+ assert_trace %w[ eecho gamma ], pdef
98
+ end
99
+
100
+ def test_participant_and_att_text
101
+
102
+ pdef = Ruote.process_definition do
103
+ notify 'commander of the left guard', :if => 'true'
104
+ echo 'done.'
105
+ end
106
+
107
+ @engine.register_participant :notify do |wi, fe|
108
+ #p fe.attribute_text
109
+ stash[:atts] = fe.attributes
110
+ end
111
+
112
+ #noisy
113
+
114
+ assert_trace 'done.', pdef
115
+
116
+ assert_equal(
117
+ { "commander of the left guard"=>nil, "if"=>"true", "ref"=>"notify" },
118
+ stash[:atts])
119
+ end
120
+
121
+ def test_dispatched
122
+
123
+ @engine.register_participant :hotel do
124
+ sleep 5
125
+ end
126
+
127
+ pdef = Ruote.process_definition do
128
+ hotel
129
+ end
130
+
131
+ #noisy
132
+
133
+ wfid = @engine.launch(pdef)
134
+
135
+ #wait_for(:hotel)
136
+ sleep 0.777
137
+ sleep 1 # just for ruote-couch :-(
138
+
139
+ ps = @engine.process(wfid)
140
+
141
+ fexp = ps.expressions.find { |fe|
142
+ fe.class == Ruote::Exp::ParticipantExpression
143
+ }
144
+
145
+ assert_equal nil, fexp.dispatched
146
+ # not yet 'dispatched'
147
+ end
148
+ end
149
+
@@ -0,0 +1,296 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Wed May 20 09:23:01 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+
11
+ class EftSetTest < Test::Unit::TestCase
12
+ include FunctionalBase
13
+
14
+ def test_set_var
15
+
16
+ pdef = Ruote.process_definition do
17
+ sequence do
18
+ set :var => 'x', :value => '0'
19
+ echo '-${v:x}-'
20
+ end
21
+ end
22
+
23
+ #noisy
24
+
25
+ assert_trace '-0-', pdef
26
+ end
27
+
28
+ def test_set_to_nil
29
+
30
+ pdef = Ruote.process_definition do
31
+ sequence do
32
+ set :var => 'x', :value => nil
33
+ echo '-${v:x}-'
34
+ end
35
+ end
36
+
37
+ #noisy
38
+
39
+ assert_trace '--', pdef
40
+ end
41
+
42
+ def test_set_var_in_subprocess
43
+
44
+ pdef = Ruote.process_definition do
45
+ sequence do
46
+ echo 'a${v:x}'
47
+ set :var => 'x', :value => '0'
48
+ echo 'b${v:x}'
49
+ sub0
50
+ echo 'e${v:x}'
51
+ end
52
+ define 'sub0' do
53
+ sequence do
54
+ echo 'c${v:x}'
55
+ set :var => 'x', :value => '1'
56
+ echo 'd${v:x}'
57
+ end
58
+ end
59
+ end
60
+
61
+ #noisy
62
+
63
+ assert_trace %w[ a b0 c0 d1 e0 ], pdef
64
+ end
65
+
66
+ def test_unset_var
67
+
68
+ pdef = Ruote.process_definition do
69
+ sequence do
70
+ set :var => 'x', :value => '0'
71
+ echo '-${v:x}-'
72
+ unset :var => 'x'
73
+ echo '-${v:x}-'
74
+ end
75
+ end
76
+
77
+ #noisy
78
+
79
+ assert_trace %w[ -0- -- ], pdef
80
+ end
81
+
82
+ def test_set_field
83
+
84
+ pdef = Ruote.process_definition do
85
+ sequence do
86
+ set :field => 'f', :value => '0'
87
+ echo '-${f:f}-'
88
+ end
89
+ end
90
+
91
+ #noisy
92
+
93
+ assert_trace '-0-', pdef
94
+ end
95
+
96
+ def test_set_field_to_array
97
+
98
+ pdef = Ruote.process_definition do
99
+ sequence do
100
+ set :field => 'f', :value => %w[ a b c ]
101
+ echo '-${f:f.1}-'
102
+ end
103
+ end
104
+
105
+ #noisy
106
+
107
+ assert_trace '-b-', pdef
108
+ end
109
+
110
+ def test_set_field_deep
111
+
112
+ pdef = Ruote.process_definition do
113
+ sequence do
114
+ set :field => 'f', :value => %w[ a b c ]
115
+ set :field => 'f.1', :val => 'B'
116
+ echo '-${f:f.0}${f:f.1}${f:f.2}-'
117
+ end
118
+ end
119
+
120
+ #noisy
121
+
122
+ assert_trace '-aBc-', pdef
123
+ end
124
+
125
+ def test_missing_value
126
+
127
+ pdef = Ruote.process_definition do
128
+ set :field => 'f'
129
+ alpha
130
+ end
131
+
132
+ @engine.register_participant :alpha do |workitem|
133
+ workitem.fields.delete('params')
134
+ workitem.fields.delete('dispatched_at')
135
+ @tracer << workitem.fields.inspect
136
+ end
137
+
138
+ assert_trace '{"f"=>nil}', pdef
139
+ end
140
+
141
+ def test_field_value
142
+
143
+ pdef = Ruote.process_definition do
144
+ sequence do
145
+ set :f => 'f', :value => 'toto'
146
+ set :v => 'v', :field_value => 'f'
147
+ echo '${f:f}:${v:v}'
148
+ end
149
+ end
150
+
151
+ #noisy
152
+
153
+ assert_trace 'toto:toto', pdef
154
+ end
155
+
156
+ def test_escape
157
+
158
+ pdef = Ruote.process_definition do
159
+ sequence do
160
+ set :f => 'f', :val => 'nada:${nada}', :escape => true
161
+ alpha
162
+ set :f => 'ff', :field_value => 'f'
163
+ alpha
164
+ end
165
+ end
166
+
167
+ @engine.register_participant :alpha do |workitem|
168
+ @tracer << workitem.fields['f']
169
+ @tracer << "\n"
170
+ end
171
+
172
+ #noisy
173
+
174
+ assert_trace %w[ nada:${nada} nada:${nada} ], pdef
175
+ end
176
+
177
+ def test_simpler_set
178
+
179
+ pdef = Ruote.process_definition do
180
+ sequence do
181
+
182
+ set 'f0' => '0'
183
+ set 'f:f1' => '1'
184
+ set 'v:v' => '2'
185
+ echo '${f:f0}/${f:f1}/${v:v}'
186
+
187
+ unset 'f0'
188
+ unset 'f:f1'
189
+ unset 'v:v'
190
+ echo '${f:f0}/${f:f1}/${v:v}'
191
+ end
192
+ end
193
+
194
+ #noisy
195
+
196
+ assert_trace %w[ 0/1/2 // ], pdef
197
+ end
198
+
199
+ def test_simpler_and_nested
200
+
201
+ pdef = Ruote.process_definition do
202
+ sequence do
203
+ set 'v:v' => '0'
204
+ set 'v:v${v:v}' => 1
205
+ echo '${v:v}/${v:v0}'
206
+ end
207
+ end
208
+
209
+ #noisy
210
+
211
+ assert_trace '0/1', pdef
212
+ end
213
+
214
+ def test_set_at_engine_level_is_forbidden
215
+
216
+ pdef = Ruote.process_definition do
217
+ set 'v://v' => 'whatever'
218
+ end
219
+
220
+ #noisy
221
+
222
+ wfid = @engine.launch(pdef)
223
+
224
+ wait_for(wfid)
225
+
226
+ assert_nil @engine.process(wfid)
227
+ assert_nil @engine.variables['v']
228
+ end
229
+
230
+ # 'rset' is an alias for 'set'.
231
+ #
232
+ # motivation at http://groups.google.com/group/openwferu-users/browse_thread/thread/9ac606e30ada686e
233
+ #
234
+ def test_rset
235
+
236
+ wfid = @engine.launch(Ruote.define do
237
+ rset 'developer' => 'Rebo'
238
+ end)
239
+
240
+ r = @engine.wait_for(wfid)
241
+
242
+ assert_equal 'Rebo', r['workitem']['fields']['developer']
243
+ end
244
+
245
+ def test_unset_field
246
+
247
+ pdef = Ruote.define do
248
+
249
+ set 'f:alpha' => 'alice'
250
+ set 'f:bravo' => 'bob'
251
+ set 'f:charly' => 'charles'
252
+ set 'f:__timed_out__' => %w[ seriously ]
253
+
254
+ unset 'f:alpha'
255
+ unset :f => 'bravo'
256
+ unset :field => 'charly'
257
+ unset :field => '__timed_out__'
258
+ end
259
+
260
+ wfid = @engine.launch(pdef)
261
+
262
+ r = @engine.wait_for(wfid)
263
+
264
+ assert_equal({}, r['workitem']['fields'])
265
+ end
266
+
267
+ class VarPeek
268
+ include Ruote::LocalParticipant
269
+ def consume(workitem)
270
+ context.tracer << fexp(workitem).compile_variables.inspect
271
+ reply(workitem)
272
+ end
273
+ end
274
+
275
+ def test_unset_var
276
+
277
+ pdef = Ruote.define do
278
+ set 'v:v0' => 'nada'
279
+ set 'v:v1' => 'nada'
280
+ unset 'v:v0'
281
+ unset :v => 'v1'
282
+ peek
283
+ end
284
+
285
+ @engine.register :peek, VarPeek
286
+
287
+ #@engine.noisy = true
288
+
289
+ wfid = @engine.launch(pdef)
290
+
291
+ r = @engine.wait_for(wfid)
292
+
293
+ assert_equal '{}', @tracer.to_s
294
+ end
295
+ end
296
+