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,70 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Tue Oct 27 01:36:52 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+ require File.join(File.dirname(__FILE__), 'restart_base')
10
+
11
+
12
+ class RtWhenTest < Test::Unit::TestCase
13
+ include FunctionalBase
14
+ include RestartBase
15
+
16
+ def test_once_and_restart
17
+
18
+ do_test('1s')
19
+ end
20
+
21
+ def test_once_cron_and_restart
22
+
23
+ do_test('* * * * * *')
24
+ end
25
+
26
+ protected
27
+
28
+ def do_test(freq)
29
+
30
+ start_new_engine
31
+
32
+ pdef = Ruote.process_definition :name => 'test' do
33
+ sequence do
34
+ echo 'in'
35
+ once '${v:resume}', :freq => freq
36
+ echo 'out.'
37
+ end
38
+ end
39
+
40
+ #noisy
41
+
42
+ wfid = @engine.launch(pdef)
43
+
44
+ wait_for(5)
45
+
46
+ assert_equal 1, @engine.processes.size
47
+ assert_equal 1, @engine.storage.get_many('schedules').size
48
+
49
+ @engine.shutdown
50
+
51
+ # restart...
52
+
53
+ start_new_engine
54
+
55
+ #noisy
56
+
57
+ assert_equal 1, @engine.processes.size
58
+ assert_equal 1, @engine.storage.get_many('schedules').size
59
+
60
+ @engine.variables['resume'] = true
61
+
62
+ wait_for(wfid)
63
+
64
+ assert_equal "in\nout.", @tracer.to_s
65
+
66
+ assert_equal 0, @engine.processes.size
67
+ assert_equal 0, @engine.storage.get_many('schedules').size
68
+ end
69
+ end
70
+
@@ -0,0 +1,64 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Wed Oct 28 12:51:04 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+ require File.join(File.dirname(__FILE__), 'restart_base')
10
+
11
+
12
+ class RtCronTest < Test::Unit::TestCase
13
+ include FunctionalBase
14
+ include RestartBase
15
+
16
+ def test_cron_restart
17
+
18
+ start_new_engine
19
+
20
+ pdef = Ruote.process_definition :name => 'test' do
21
+ cron '* * * * * *' do # every second
22
+ echo '${v:text}'
23
+ end
24
+ end
25
+
26
+ @engine.variables['text'] = 'pre'
27
+
28
+ #noisy
29
+
30
+ wfid = @engine.launch(pdef)
31
+
32
+ wait_for(3)
33
+
34
+ assert_equal 1, @engine.processes.size
35
+ assert_equal 1, @engine.storage.get_many('schedules').size
36
+
37
+ @engine.shutdown
38
+
39
+ # restart...
40
+
41
+ start_new_engine
42
+
43
+ #noisy
44
+
45
+ @engine.variables['text'] = 'post'
46
+
47
+ assert_equal 1, @engine.processes.size
48
+ assert_equal 1, @engine.storage.get_many('schedules').size
49
+
50
+ wait_for(4)
51
+
52
+ assert_match /pre\npost/, @tracer.to_s
53
+
54
+ @engine.cancel_process(wfid)
55
+
56
+ while msg = wait_for(wfid)
57
+ break if msg['action'] == 'terminated'
58
+ end
59
+
60
+ assert_equal 0, @engine.processes.size
61
+ assert_equal 0, @engine.storage.get_many('schedules').size
62
+ end
63
+ end
64
+
@@ -0,0 +1,60 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Wed Oct 28 14:51:07 JST 2009
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+ require File.join(File.dirname(__FILE__), 'restart_base')
10
+
11
+ require 'ruote/part/null_participant'
12
+
13
+
14
+ class RtTimeoutTest < Test::Unit::TestCase
15
+ include FunctionalBase
16
+ include RestartBase
17
+
18
+ # Vanilla case, no need to reload.
19
+ #
20
+ def test_restart
21
+
22
+ start_new_engine
23
+
24
+ pdef = Ruote.process_definition :name => 'test' do
25
+ participant 'alpha', :timeout => '2d'
26
+ end
27
+
28
+ @engine.register_participant 'alpha', Ruote::NullParticipant
29
+
30
+ #noisy
31
+
32
+ wfid = @engine.launch(pdef)
33
+
34
+ wait_for(3)
35
+
36
+ assert_equal 1, @engine.processes.size
37
+ assert_equal 1, @engine.storage.get_many('schedules').size
38
+
39
+ @engine.shutdown
40
+
41
+ # restart...
42
+
43
+ start_new_engine
44
+
45
+ #noisy
46
+
47
+ @engine.register_participant 'alpha', Ruote::NullParticipant
48
+
49
+ assert_equal 1, @engine.processes.size
50
+ assert_equal 1, @engine.storage.get_many('schedules').size
51
+
52
+ @engine.cancel_process(wfid)
53
+
54
+ wait_for(wfid)
55
+
56
+ assert_equal 0, @engine.processes.size
57
+ assert_equal 0, @engine.storage.get_many('schedules').size
58
+ end
59
+ end
60
+
@@ -0,0 +1,8 @@
1
+
2
+ #
3
+ # firing all the 'restart' tests (rt_)
4
+ #
5
+
6
+ Dir.glob(File.join(File.dirname(__FILE__), 'rt_*.rb')).sort.each { |t| load(t) }
7
+ # restart tests, start sthing, stop engine, restart, expect thing to resume
8
+
@@ -0,0 +1,93 @@
1
+
2
+ #
3
+ # testing Ruote
4
+ #
5
+ # since Mon Oct 9 22:19:44 JST 2006
6
+ #
7
+
8
+ require 'ruote/storage/hash_storage'
9
+ require 'ruote/storage/fs_storage'
10
+
11
+
12
+ def locate_storage_impl (arg)
13
+
14
+ pers = arg[2..-1]
15
+
16
+ path = Dir[File.expand_path(
17
+ File.join(File.dirname(__FILE__), %w[ .. .. .. ], "ruote-#{pers}*"))].first
18
+
19
+ File.directory?(path) ? [ pers, path ] : nil
20
+ end
21
+
22
+ # Returns an instance of the storage to use (the ARGV determines which
23
+ # storage to use).
24
+ #
25
+ def determine_storage(opts)
26
+
27
+ if ARGV.include?('--help')
28
+ puts %{
29
+
30
+ ARGUMENTS for functional tests :
31
+
32
+ --fs : uses Ruote::FsStorage
33
+
34
+ else uses the in-memory Ruote::Engine (fastest, but no persistence at all)
35
+
36
+ }
37
+ exit 0
38
+ end
39
+
40
+ ps = ARGV.select { |a| a.match(/^--[a-z]/) }
41
+ ps.delete('--split')
42
+
43
+ persistent = opts.delete(:persistent)
44
+
45
+ if ps.include?('--fs')
46
+
47
+ require_json
48
+ Rufus::Json.detect_backend
49
+
50
+ Ruote::FsStorage.new('work', opts)
51
+
52
+ elsif not ps.empty?
53
+
54
+ pers = nil
55
+ ps.find { |a| pers = locate_storage_impl(a) }
56
+
57
+ raise "no persistence found (#{ps.inspect})" unless pers
58
+
59
+ lib, path = pers
60
+ $:.unshift(File.join(path, 'lib'))
61
+
62
+ begin
63
+ load 'test/functional_connection.rb'
64
+ rescue LoadError => le
65
+ begin
66
+ load File.join(path, %w[ test functional_connection.rb ])
67
+ rescue LoadError => lee
68
+ begin
69
+ load File.join(path, %w[ test integration_connection.rb ])
70
+ rescue LoadError => leee
71
+ p le
72
+ p lee
73
+ p leee
74
+ raise leee
75
+ end
76
+ end
77
+ end
78
+
79
+ new_storage(opts)
80
+
81
+ elsif persistent
82
+
83
+ require_json
84
+ Rufus::Json.detect_backend
85
+
86
+ Ruote::FsStorage.new('work', opts)
87
+
88
+ else
89
+
90
+ Ruote::HashStorage.new(opts)
91
+ end
92
+ end
93
+
@@ -0,0 +1,44 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # since Mon Oct 9 22:19:44 JST 2006
6
+ #
7
+
8
+ def l (t)
9
+
10
+ if ARGV.include?('--split')
11
+
12
+ puts
13
+ puts "=== #{t} :"
14
+ puts `ruby -I. #{t} #{ARGV.join(' ')}`
15
+
16
+ es = $?.exitstatus
17
+ es = es.nil? ? 66 : es.to_s.to_i
18
+
19
+ exit(es) if es != 0
20
+ else
21
+ load(t)
22
+ end
23
+ end
24
+
25
+
26
+ unless RUBY_PLATFORM.match(/mswin|mingw/)
27
+ #
28
+ # sorry but no more than 1 worker on windows !
29
+ #
30
+ # so no need to run those 2 workers tests
31
+ #
32
+ Dir.glob(File.join(File.dirname(__FILE__), 'ct_*.rb')).sort.each { |t| l(t) }
33
+ # concurrence/collision tests, tests about 2+ instances of ruote colliding
34
+ end
35
+
36
+ Dir.glob(File.join(File.dirname(__FILE__), 'ft_*.rb')).sort.each { |t| l(t) }
37
+ # functional tests targetting features rather than expressions
38
+
39
+ Dir.glob(File.join(File.dirname(__FILE__), 'rt_*.rb')).sort.each { |t| l(t) }
40
+ # restart tests, start sthing, stop engine, restart, expect thing to resume
41
+
42
+ Dir.glob(File.join(File.dirname(__FILE__), 'eft_*.rb')).sort.each { |t| l(t) }
43
+ # functional tests targetting specifing expressions
44
+
@@ -0,0 +1,46 @@
1
+
2
+ #require 'open3'
3
+
4
+ TEST = ARGV[0]
5
+
6
+ STORAGES = %w[ fs dm couch redis beanstalk ].unshift(nil)
7
+
8
+ unless TEST
9
+ puts %{
10
+
11
+ USAGE :
12
+
13
+ ruby test/functional/vertical.rb path/to/test.rb
14
+
15
+ will run the given test with against all the storage implementations.
16
+
17
+ #{STORAGES}
18
+
19
+ }
20
+ exit 0
21
+ end
22
+
23
+ STORAGES.each do |storage|
24
+
25
+ dashdash = `ruby -v`.match(/^ruby 1\.9\./) ? '' : '--'
26
+ storage = storage.nil? ? '' : "--#{storage}"
27
+
28
+ command = "ruby #{TEST} #{dashdash} #{storage}"
29
+ puts('-' * 80)
30
+ puts("#{command}")
31
+
32
+ #Open3.popen3("#{command} 2>&1") do |_, stdout, _|
33
+ # loop do
34
+ # s = stdout.read(7)
35
+ # break unless s
36
+ # $stdout.print(s)
37
+ # $stdout.flush
38
+ # end
39
+ #end
40
+ # popen3 is nice, but it doesn't set $?
41
+
42
+ puts `#{command} 2>&1`
43
+
44
+ puts("\nFAILED\n\n") if $?.exitstatus.to_i != 0
45
+ end
46
+
@@ -0,0 +1,15 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # since Mon Oct 9 22:19:44 JST 2006
6
+ #
7
+
8
+ # making sure the tests see ruote
9
+
10
+ puts `ruby -v`
11
+ puts Time.now.to_s
12
+
13
+ ruotelib = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $:.unshift(ruotelib) unless $:.include?(ruotelib)
15
+
@@ -0,0 +1,13 @@
1
+
2
+ #
3
+ # testing Ruote
4
+ #
5
+ # since Mon Oct 9 22:19:44 JST 2006
6
+ #
7
+
8
+ load File.dirname(__FILE__) + '/unit/test.rb'
9
+ load File.dirname(__FILE__) + '/functional/test.rb'
10
+
11
+ #load File.dirname(__FILE__) + '/extras/test.rb'
12
+ # special tests that require external stuff
13
+
@@ -0,0 +1,28 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # since Mon Oct 9 22:19:44 JST 2006
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'path_helper')
9
+
10
+ require 'test/unit'
11
+ require 'rubygems'
12
+
13
+
14
+ def require_json
15
+
16
+ return if $json_lib_loaded
17
+
18
+ begin
19
+ require 'yajl'
20
+ require 'yajl/version'
21
+ puts "using yajl #{Yajl::VERSION}"
22
+ rescue LoadError
23
+ require 'json'
24
+ puts "using json #{JSON::VERSION}"
25
+ end
26
+ $json_lib_loaded = true
27
+ end
28
+