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,122 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Tue Sep 15 09:04:36 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+ require 'ruote/part/smtp_participant'
11
+
12
+
13
+ class NftSmtpParticipantTest < Test::Unit::TestCase
14
+ include FunctionalBase
15
+
16
+ unless Ruote::JAVA
17
+
18
+ require 'mailtrap' # sudo gem install mailtrap
19
+
20
+ class Trap < ::Mailtrap
21
+ def puts(s)
22
+ # silent night...
23
+ end
24
+ end
25
+ end
26
+
27
+ # def test_smtp
28
+ #
29
+ # return if Ruote::JAVA
30
+ #
31
+ # pdef = Ruote.process_definition :name => 'test' do
32
+ # sequence do
33
+ # set 'f:item' => 'cat food'
34
+ # alpha
35
+ # end
36
+ # end
37
+ #
38
+ # trapfile = Ruote::WIN ? 'ruote_mailtrap.txt' : '/tmp/ruote_mailtrap.txt'
39
+ # FileUtils.rm_f(trapfile)
40
+ #
41
+ # t = Thread.new do
42
+ # Trap.new('127.0.0.1', 2525, true, trapfile)
43
+ # end
44
+ # sleep 0.040
45
+ # # give it some time to start listening
46
+ #
47
+ # @engine.register_participant(
48
+ # :alpha,
49
+ # Ruote::SmtpParticipant.new(
50
+ # :server => '127.0.0.1',
51
+ # :port => 2525,
52
+ # :to => 'toto@cloudwhatever.ch',
53
+ # :from => 'john@outoftheblue.ch',
54
+ # :notification => true,
55
+ # :template => %{
56
+ # Hello, do you want ${f:item} ?
57
+ # }))
58
+ #
59
+ # #noisy
60
+ #
61
+ # wfid = @engine.launch(pdef)
62
+ #
63
+ # #sleep 0.450
64
+ # wait_for(wfid)
65
+ #
66
+ # assert_match(/cat food/, File.read(trapfile))
67
+ # assert_nil @engine.process(wfid)
68
+ #
69
+ # t.kill
70
+ # end
71
+
72
+ def test_smtp_non_instance_participant
73
+
74
+ return if Ruote::JAVA
75
+
76
+ pdef = Ruote.process_definition :name => 'test' do
77
+ sequence do
78
+ set 'f:item' => 'cat food'
79
+ alpha
80
+ end
81
+ end
82
+
83
+ trapfile = "ruote_mailtrap_#{$$}_#{Time.now.to_f}.txt"
84
+
85
+ trapfile = Ruote::WIN ? trapfile : "/tmp/#{trapfile}"
86
+ FileUtils.rm_f(trapfile)
87
+
88
+ t = Thread.new do
89
+ Trap.new('127.0.0.1', 2525, true, trapfile)
90
+ end
91
+ sleep 0.040
92
+ # give it some time to start listening
93
+
94
+ @engine.register_participant(
95
+ :alpha,
96
+ Ruote::SmtpParticipant,
97
+ :server => '127.0.0.1',
98
+ :port => 2525,
99
+ :to => 'toto@cloudwhatever.ch',
100
+ :from => 'john@outoftheblue.ch',
101
+ :notification => true,
102
+ :template => %{
103
+ Hello, do you want ${f:item} ?
104
+ })
105
+
106
+ #noisy
107
+
108
+ wfid = @engine.launch(pdef)
109
+
110
+ #sleep 0.450
111
+ wait_for(wfid)
112
+
113
+ trapped = File.read(trapfile)
114
+ FileUtils.rm_f(trapfile)
115
+
116
+ assert_match /want cat food/, trapped
117
+ assert_nil @engine.process(wfid)
118
+
119
+ t.kill
120
+ end
121
+ end
122
+
@@ -0,0 +1,72 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Fri Sep 25 16:15:57 JST 2009
6
+ #
7
+ # By David Goldhirsch
8
+ #
9
+
10
+ require File.join(File.dirname(__FILE__), 'base')
11
+
12
+ class FtPartBlockingTest < Test::Unit::TestCase
13
+ include FunctionalBase
14
+
15
+ def test_equal_time_favors_first
16
+ run_engine
17
+ assert_equal 'first', @tracer.to_s
18
+ end
19
+
20
+ def test_second_is_faster
21
+ #noisy
22
+ run_engine :first_time => 0.5
23
+ assert_equal 'second', @tracer.to_s
24
+ end
25
+
26
+ def test_first_is_faster
27
+ run_engine :second_time => 0.5
28
+ assert_equal 'first', @tracer.to_s
29
+ end
30
+
31
+ protected
32
+
33
+ def run_engine(options={})
34
+
35
+ @engine.context.stash[:first_time] = options[:first_time] || 0.0
36
+ @engine.context.stash[:second_time] = options[:second_time] || 0.0
37
+
38
+ if @engine.context.stash[:first_time] == @engine.context.stash[:second_time]
39
+ @engine.context.stash[:second_time] = @engine.context.stash[:first_time] + 0.1
40
+ end
41
+
42
+ pdef = Ruote.process_definition :name => 'simple' do
43
+ sequence do
44
+ concurrence do # spec says this is equivalent to :count => 1
45
+ participant :ref => 'first'
46
+ participant :ref => 'second'
47
+ end
48
+ participant :ref => 'trace'
49
+ end
50
+ end
51
+
52
+ @engine.register_participant :first do |wi|
53
+ sleep stash[:first_time]
54
+ wi.fields['result'] = 'first'
55
+ end
56
+
57
+ @engine.register_participant :second do |wi|
58
+ sleep stash[:second_time]
59
+ wi.fields['result'] = 'second'
60
+ end
61
+
62
+ @engine.register_participant :trace do |wi|
63
+ @tracer << "#{wi.fields['result']}"
64
+ end
65
+
66
+ wfid = @engine.launch(pdef)
67
+ @engine.wait_for(wfid)
68
+
69
+ wfid
70
+ end
71
+ end
72
+
@@ -0,0 +1,32 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Wed Oct 21 05:35:29 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+
11
+ class FtParticipantSubprocessPriorityTest < Test::Unit::TestCase
12
+ include FunctionalBase
13
+
14
+ def test_priority
15
+
16
+ pdef = Ruote.process_definition do
17
+ sub0
18
+ define 'sub0' do
19
+ echo 'sub0'
20
+ end
21
+ end
22
+
23
+ @engine.register_participant '.+' do
24
+ @tracer << 'participant'
25
+ end
26
+
27
+ #noisy
28
+
29
+ assert_trace 'sub0', pdef
30
+ end
31
+ end
32
+
@@ -0,0 +1,101 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Fri Nov 13 10:30:32 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+ require 'ruote/participant'
11
+
12
+ #
13
+ # testing forced rewinding
14
+ #
15
+ class FtCursorRewindTest < Test::Unit::TestCase
16
+ include FunctionalBase
17
+
18
+ def test_cursor_forced_back
19
+
20
+ pdef = Ruote.process_definition do
21
+ cursor do
22
+ alpha
23
+ bravo
24
+ charly
25
+ end
26
+ end
27
+
28
+ alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
29
+ bravo = @engine.register_participant :bravo, Ruote::StorageParticipant
30
+ charly = @engine.register_participant :charly, Ruote::StorageParticipant
31
+
32
+ #noisy
33
+
34
+ #
35
+ # reaching initial situation...
36
+
37
+ wfid = @engine.launch(pdef)
38
+ wait_for(:alpha)
39
+
40
+ alpha.proceed(alpha.first)
41
+ wait_for(:bravo)
42
+
43
+ #
44
+ # rewinding...
45
+
46
+ wi = bravo.first
47
+ wi.fields['__command__'] = [ 'back', 2 ]
48
+
49
+ @engine.reply(wi)
50
+
51
+ #
52
+ # workitem is back to alpha
53
+
54
+ wait_for(:alpha)
55
+ end
56
+
57
+ def test_cursor_forced_jump
58
+
59
+ pdef = Ruote.process_definition do
60
+ cursor do
61
+ alpha
62
+ bravo
63
+ charly
64
+ end
65
+ end
66
+
67
+ @engine.register_participant :alpha, Ruote::StorageParticipant
68
+ @engine.register_participant :bravo, Ruote::StorageParticipant
69
+ sto = @engine.register_participant :charly, Ruote::StorageParticipant
70
+
71
+ #noisy
72
+
73
+ #
74
+ # reaching initial situation...
75
+
76
+ wfid = @engine.launch(pdef)
77
+ wait_for(:alpha)
78
+
79
+ sto.proceed(sto.first)
80
+ wait_for(:bravo)
81
+
82
+ #
83
+ # rewinding...
84
+
85
+ wi = sto.first
86
+
87
+ exp = @engine.process(wfid).expressions.find { |e| e.name == 'cursor' }
88
+ wi.h['fei'] = exp.h.fei
89
+ wi.fields['__command__'] = [ 'jump', 'alpha' ]
90
+ #
91
+ # passing the "jump alpha" command to the cursor directly
92
+
93
+ @engine.reply(wi)
94
+
95
+ #
96
+ # workitem is back to alpha
97
+
98
+ wait_for(:alpha)
99
+ end
100
+ end
101
+
@@ -0,0 +1,56 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Thu Dec 24 18:05:39 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+
11
+ class FtAddServiceTest < Test::Unit::TestCase
12
+ include FunctionalBase
13
+
14
+ class MyService
15
+
16
+ attr_reader :context, :options
17
+
18
+ def initialize(context, options={})
19
+
20
+ @context = context
21
+ @options = options
22
+ end
23
+ end
24
+
25
+ def test_as_path_class
26
+
27
+ @engine.add_service('toto', 'ruote', 'FtAddServiceTest::MyService')
28
+
29
+ assert_equal MyService, @engine.context.toto.class
30
+ end
31
+
32
+ def test_as_instance
33
+
34
+ @engine.add_service('toto', MyService.new(nil))
35
+
36
+ assert_equal MyService, @engine.context.toto.class
37
+ end
38
+
39
+ def test_as_path_class_options
40
+
41
+ @engine.add_service(
42
+ 'toto', 'ruote', 'FtAddServiceTest::MyService', 'colour' => 'blue')
43
+
44
+ assert_equal MyService, @engine.context.toto.class
45
+ assert_equal 'blue', @engine.context.toto.options['colour']
46
+ end
47
+
48
+ def test_add_service_returns_service
49
+
50
+ toto = @engine.add_service(
51
+ 'toto', 'ruote', 'FtAddServiceTest::MyService', 'colour' => 'blue')
52
+
53
+ assert_equal MyService, toto.class
54
+ end
55
+ end
56
+
@@ -0,0 +1,150 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Tue Jan 5 17:51:10 JST 2010
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
10
+ #require 'ruote/log/fs_history'
11
+ require 'ruote/part/no_op_participant'
12
+
13
+
14
+ class FtStorageHistoryTest < Test::Unit::TestCase
15
+ include FunctionalBase
16
+
17
+ def test_by_wfid
18
+
19
+ pdef = Ruote.process_definition do
20
+ alpha
21
+ echo 'done.'
22
+ end
23
+
24
+ history = @engine.add_service(
25
+ 'history', 'ruote/log/storage_history', 'Ruote::StorageHistory')
26
+
27
+ @engine.register_participant :alpha, Ruote::NoOpParticipant
28
+
29
+ #noisy
30
+
31
+ wfid0 = assert_trace('done.', pdef)
32
+ wfid1 = assert_trace("done.\ndone.", pdef)
33
+
34
+ sleep 0.100
35
+
36
+ assert_equal 21, @engine.storage.get_many('history').size
37
+
38
+ h = @engine.context.history.by_process(wfid0)
39
+ #h.each { |r| p r }
40
+ assert_equal 9, h.size
41
+
42
+ # testing record.to_h
43
+
44
+ h = @engine.context.history.by_process(wfid1)
45
+ #h.each { |r| p r }
46
+ assert_equal 9, h.size
47
+
48
+ history.clear!
49
+
50
+ assert_equal 0, @engine.storage.get_many('history').size
51
+ end
52
+
53
+ def test_by_date
54
+
55
+ @engine.add_service(
56
+ 'history', 'ruote/log/storage_history', 'Ruote::StorageHistory')
57
+
58
+ 6.times do |i|
59
+ @engine.storage.put(
60
+ '_id' => "!2010-01-06!11414#{i}!0!!20100106-bichisosupo",
61
+ 'type' => 'history')
62
+ end
63
+ 7.times do |i|
64
+ @engine.storage.put(
65
+ '_id' => "!2010-01-07!11414#{i}!0!!20100107-bichitehoni",
66
+ 'type' => 'history')
67
+ end
68
+
69
+ assert_equal 6, @engine.context.history.by_date('2010-01-06').size
70
+ assert_equal 7, @engine.context.history.by_date('2010-01-07').size
71
+ end
72
+
73
+ def test_range
74
+
75
+ @engine.add_service(
76
+ 'history', 'ruote/log/storage_history', 'Ruote::StorageHistory')
77
+
78
+ 7.times do |i|
79
+ i = i + 1
80
+ @engine.storage.put(
81
+ '_id' => "!2010-01-0#{i}!114147!0!!2010010#{i}-bichisosupo",
82
+ 'type' => 'history')
83
+ end
84
+
85
+ assert_equal(
86
+ [ Time.parse('2010-01-01 00:00:00 UTC'),
87
+ Time.parse('2010-01-08 00:00:00 UTC') ],
88
+ @engine.context.history.range)
89
+ end
90
+
91
+ def test_engine_dot_history
92
+
93
+ @engine.add_service(
94
+ 'history', 'ruote/log/storage_history', 'Ruote::StorageHistory')
95
+
96
+ assert_equal Ruote::StorageHistory, @engine.history.class
97
+ end
98
+
99
+ def test_wfids
100
+
101
+ @engine.add_service(
102
+ 'history', 'ruote/log/storage_history', 'Ruote::StorageHistory')
103
+
104
+ @engine.register_participant 'alpha', Ruote::NullParticipant
105
+
106
+ 3.times do
107
+ @engine.launch(Ruote.define { alpha })
108
+ @engine.wait_for(:alpha)
109
+ end
110
+
111
+ assert_equal 3, @engine.history.wfids.size
112
+ end
113
+
114
+ # Cf
115
+ # https://github.com/jmettraux/ruote/issues/29
116
+ # http://ruote-irclogs.s3.amazonaws.com/log_2011-06-06.html
117
+ #
118
+ def test_concurrence_replies
119
+
120
+ @engine.add_service(
121
+ 'history', 'ruote/log/storage_history', 'Ruote::StorageHistory')
122
+
123
+ pdef = Ruote.define do
124
+ concurrence :count => 1 do
125
+ alpha
126
+ bravo
127
+ end
128
+ end
129
+
130
+ @engine.register_participant :alpha, Ruote::NullParticipant
131
+ @engine.register_participant :bravo, Ruote::NoOpParticipant
132
+
133
+ #@engine.noisy = true
134
+
135
+ wfid = @engine.launch(pdef)
136
+ @engine.wait_for(wfid)
137
+
138
+ repliers = []
139
+
140
+ @engine.context.history.by_wfid(wfid).each do |record|
141
+ if record['action'] == 'reply'
142
+ wi = record['workitem']
143
+ repliers << [ wi['fei']['expid'], wi['participant_name'] ]
144
+ end
145
+ end
146
+
147
+ assert_equal [ %w[ 0_0_1 bravo ], %w[ 0_0 bravo ] ], repliers[0, 2]
148
+ end
149
+ end
150
+