ruote 2.2.0 → 2.3.0

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 (305) hide show
  1. data/CHANGELOG.txt +166 -1
  2. data/CREDITS.txt +36 -17
  3. data/LICENSE.txt +1 -1
  4. data/README.rdoc +1 -7
  5. data/Rakefile +38 -29
  6. data/TODO.txt +93 -52
  7. data/lib/ruote-fs.rb +3 -0
  8. data/lib/ruote.rb +5 -1
  9. data/lib/ruote/context.rb +140 -35
  10. data/lib/ruote/dashboard.rb +1247 -0
  11. data/lib/ruote/{engine → dboard}/process_error.rb +22 -2
  12. data/lib/ruote/dboard/process_status.rb +587 -0
  13. data/lib/ruote/engine.rb +6 -871
  14. data/lib/ruote/exp/command.rb +7 -2
  15. data/lib/ruote/exp/commanded.rb +2 -2
  16. data/lib/ruote/exp/condition.rb +38 -13
  17. data/lib/ruote/exp/fe_add_branches.rb +1 -1
  18. data/lib/ruote/exp/fe_apply.rb +1 -1
  19. data/lib/ruote/exp/fe_await.rb +357 -0
  20. data/lib/ruote/exp/fe_cancel_process.rb +17 -3
  21. data/lib/ruote/exp/fe_command.rb +8 -4
  22. data/lib/ruote/exp/fe_concurrence.rb +218 -18
  23. data/lib/ruote/exp/fe_concurrent_iterator.rb +71 -10
  24. data/lib/ruote/exp/fe_cron.rb +3 -10
  25. data/lib/ruote/exp/fe_cursor.rb +14 -4
  26. data/lib/ruote/exp/fe_define.rb +3 -1
  27. data/lib/ruote/exp/fe_echo.rb +1 -1
  28. data/lib/ruote/exp/fe_equals.rb +1 -1
  29. data/lib/ruote/exp/fe_error.rb +1 -1
  30. data/lib/ruote/exp/fe_filter.rb +163 -4
  31. data/lib/ruote/exp/fe_forget.rb +21 -4
  32. data/lib/ruote/exp/fe_given.rb +1 -1
  33. data/lib/ruote/exp/fe_if.rb +1 -1
  34. data/lib/ruote/exp/fe_inc.rb +102 -35
  35. data/lib/ruote/exp/fe_iterator.rb +47 -12
  36. data/lib/ruote/exp/fe_listen.rb +96 -11
  37. data/lib/ruote/exp/fe_lose.rb +31 -4
  38. data/lib/ruote/exp/fe_noop.rb +1 -1
  39. data/lib/ruote/exp/fe_on_error.rb +109 -0
  40. data/lib/ruote/exp/fe_once.rb +10 -19
  41. data/lib/ruote/exp/fe_participant.rb +90 -28
  42. data/lib/ruote/exp/fe_read.rb +69 -0
  43. data/lib/ruote/exp/fe_redo.rb +3 -2
  44. data/lib/ruote/exp/fe_ref.rb +57 -27
  45. data/lib/ruote/exp/fe_registerp.rb +1 -3
  46. data/lib/ruote/exp/fe_reserve.rb +1 -1
  47. data/lib/ruote/exp/fe_restore.rb +6 -6
  48. data/lib/ruote/exp/fe_save.rb +12 -19
  49. data/lib/ruote/exp/fe_sequence.rb +38 -2
  50. data/lib/ruote/exp/fe_set.rb +143 -40
  51. data/lib/ruote/exp/{fe_let.rb → fe_stall.rb} +7 -38
  52. data/lib/ruote/exp/fe_subprocess.rb +8 -2
  53. data/lib/ruote/exp/fe_that.rb +1 -1
  54. data/lib/ruote/exp/fe_undo.rb +40 -4
  55. data/lib/ruote/exp/fe_unregisterp.rb +1 -3
  56. data/lib/ruote/exp/fe_wait.rb +12 -25
  57. data/lib/ruote/exp/{flowexpression.rb → flow_expression.rb} +375 -229
  58. data/lib/ruote/exp/iterator.rb +2 -2
  59. data/lib/ruote/exp/merge.rb +78 -17
  60. data/lib/ruote/exp/ro_attributes.rb +46 -36
  61. data/lib/ruote/exp/ro_filters.rb +34 -8
  62. data/lib/ruote/exp/ro_on_x.rb +431 -0
  63. data/lib/ruote/exp/ro_persist.rb +19 -7
  64. data/lib/ruote/exp/ro_timers.rb +123 -0
  65. data/lib/ruote/exp/ro_variables.rb +90 -29
  66. data/lib/ruote/fei.rb +57 -3
  67. data/lib/ruote/fs.rb +3 -0
  68. data/lib/ruote/id/mnemo_wfid_generator.rb +30 -7
  69. data/lib/ruote/id/wfid_generator.rb +17 -38
  70. data/lib/ruote/log/default_history.rb +23 -9
  71. data/lib/ruote/log/fancy_printing.rb +265 -0
  72. data/lib/ruote/log/storage_history.rb +23 -13
  73. data/lib/ruote/log/wait_logger.rb +224 -17
  74. data/lib/ruote/observer.rb +82 -0
  75. data/lib/ruote/part/block_participant.rb +65 -28
  76. data/lib/ruote/part/code_participant.rb +81 -0
  77. data/lib/ruote/part/engine_participant.rb +7 -2
  78. data/lib/ruote/part/local_participant.rb +221 -21
  79. data/lib/ruote/part/no_op_participant.rb +1 -1
  80. data/lib/ruote/part/null_participant.rb +1 -1
  81. data/lib/ruote/part/participant.rb +50 -0
  82. data/lib/ruote/part/rev_participant.rb +178 -0
  83. data/lib/ruote/part/smtp_participant.rb +2 -2
  84. data/lib/ruote/part/storage_participant.rb +228 -60
  85. data/lib/ruote/part/template.rb +1 -1
  86. data/lib/ruote/participant.rb +2 -0
  87. data/lib/ruote/reader.rb +205 -68
  88. data/lib/ruote/reader/json.rb +49 -0
  89. data/lib/ruote/reader/radial.rb +303 -0
  90. data/lib/ruote/reader/ruby_dsl.rb +44 -9
  91. data/lib/ruote/reader/xml.rb +11 -8
  92. data/lib/ruote/receiver/base.rb +98 -45
  93. data/lib/ruote/storage/base.rb +104 -35
  94. data/lib/ruote/storage/composite_storage.rb +50 -60
  95. data/lib/ruote/storage/fs_storage.rb +25 -34
  96. data/lib/ruote/storage/hash_storage.rb +38 -36
  97. data/lib/ruote/svc/dispatch_pool.rb +104 -35
  98. data/lib/ruote/svc/dollar_sub.rb +10 -8
  99. data/lib/ruote/svc/error_handler.rb +108 -52
  100. data/lib/ruote/svc/expression_map.rb +3 -3
  101. data/lib/ruote/svc/participant_list.rb +160 -55
  102. data/lib/ruote/svc/tracker.rb +31 -31
  103. data/lib/ruote/svc/treechecker.rb +28 -16
  104. data/lib/ruote/tree_dot.rb +1 -1
  105. data/lib/ruote/util/deep.rb +143 -0
  106. data/lib/ruote/util/filter.rb +125 -18
  107. data/lib/ruote/util/hashdot.rb +15 -13
  108. data/lib/ruote/util/look.rb +1 -1
  109. data/lib/ruote/util/lookup.rb +60 -22
  110. data/lib/ruote/util/misc.rb +63 -18
  111. data/lib/ruote/util/mpatch.rb +53 -0
  112. data/lib/ruote/util/ometa.rb +1 -2
  113. data/lib/ruote/util/process_observer.rb +177 -0
  114. data/lib/ruote/util/subprocess.rb +1 -1
  115. data/lib/ruote/util/time.rb +2 -2
  116. data/lib/ruote/util/tree.rb +64 -2
  117. data/lib/ruote/version.rb +3 -2
  118. data/lib/ruote/worker.rb +421 -92
  119. data/lib/ruote/workitem.rb +157 -22
  120. data/ruote.gemspec +15 -9
  121. data/test/bm/ci.rb +0 -2
  122. data/test/bm/ici.rb +0 -2
  123. data/test/bm/load_26c.rb +0 -3
  124. data/test/bm/mega.rb +0 -2
  125. data/test/functional/base.rb +57 -43
  126. data/test/functional/concurrent_base.rb +16 -13
  127. data/test/functional/ct_0_concurrence.rb +7 -11
  128. data/test/functional/ct_1_iterator.rb +9 -11
  129. data/test/functional/ct_2_cancel.rb +28 -17
  130. data/test/functional/eft_0_flow_expression.rb +35 -0
  131. data/test/functional/eft_10_cancel_process.rb +1 -1
  132. data/test/functional/eft_11_wait.rb +13 -13
  133. data/test/functional/eft_12_listen.rb +199 -66
  134. data/test/functional/eft_13_iterator.rb +95 -29
  135. data/test/functional/eft_14_cursor.rb +74 -24
  136. data/test/functional/eft_15_loop.rb +7 -7
  137. data/test/functional/eft_16_if.rb +1 -1
  138. data/test/functional/eft_17_equals.rb +1 -1
  139. data/test/functional/eft_18_concurrent_iterator.rb +156 -68
  140. data/test/functional/eft_19_reserve.rb +15 -15
  141. data/test/functional/eft_1_echo.rb +1 -1
  142. data/test/functional/eft_20_save.rb +51 -9
  143. data/test/functional/eft_21_restore.rb +1 -1
  144. data/test/functional/eft_22_noop.rb +1 -1
  145. data/test/functional/eft_23_apply.rb +1 -1
  146. data/test/functional/eft_24_add_branches.rb +7 -8
  147. data/test/functional/eft_25_command.rb +1 -1
  148. data/test/functional/eft_26_error.rb +11 -11
  149. data/test/functional/eft_27_inc.rb +111 -67
  150. data/test/functional/eft_28_once.rb +16 -16
  151. data/test/functional/eft_29_cron.rb +9 -9
  152. data/test/functional/eft_2_sequence.rb +23 -4
  153. data/test/functional/eft_30_ref.rb +36 -24
  154. data/test/functional/eft_31_registerp.rb +24 -24
  155. data/test/functional/eft_32_lose.rb +46 -20
  156. data/test/functional/eft_34_given.rb +1 -1
  157. data/test/functional/eft_35_filter.rb +161 -7
  158. data/test/functional/eft_36_read.rb +97 -0
  159. data/test/functional/{eft_0_process_definition.rb → eft_37_process_definition.rb} +4 -4
  160. data/test/functional/eft_38_on_error.rb +195 -0
  161. data/test/functional/eft_39_stall.rb +35 -0
  162. data/test/functional/eft_3_participant.rb +77 -22
  163. data/test/functional/eft_40_await.rb +297 -0
  164. data/test/functional/eft_4_set.rb +110 -11
  165. data/test/functional/eft_5_subprocess.rb +27 -5
  166. data/test/functional/eft_6_concurrence.rb +299 -60
  167. data/test/functional/eft_7_forget.rb +24 -22
  168. data/test/functional/eft_8_undo.rb +52 -15
  169. data/test/functional/eft_9_redo.rb +18 -20
  170. data/test/functional/ft_0_worker.rb +122 -13
  171. data/test/functional/ft_10_dollar.rb +77 -16
  172. data/test/functional/ft_11_recursion.rb +9 -9
  173. data/test/functional/ft_12_launchitem.rb +7 -9
  174. data/test/functional/ft_13_variables.rb +125 -22
  175. data/test/functional/ft_14_re_apply.rb +112 -56
  176. data/test/functional/ft_15_timeout.rb +64 -33
  177. data/test/functional/ft_16_participant_params.rb +59 -6
  178. data/test/functional/ft_17_conditional.rb +68 -2
  179. data/test/functional/ft_18_kill.rb +48 -30
  180. data/test/functional/ft_19_participant_code.rb +67 -0
  181. data/test/functional/ft_1_process_status.rb +222 -150
  182. data/test/functional/ft_20_storage_participant.rb +445 -44
  183. data/test/functional/ft_21_forget.rb +21 -26
  184. data/test/functional/ft_22_process_definitions.rb +8 -6
  185. data/test/functional/ft_23_load_defs.rb +29 -5
  186. data/test/functional/ft_24_block_participant.rb +199 -20
  187. data/test/functional/ft_25_receiver.rb +98 -46
  188. data/test/functional/ft_26_participant_rtimeout.rb +34 -26
  189. data/test/functional/ft_27_var_indirection.rb +40 -5
  190. data/test/functional/ft_28_null_noop_participants.rb +5 -5
  191. data/test/functional/ft_29_part_template.rb +2 -2
  192. data/test/functional/ft_2_errors.rb +106 -74
  193. data/test/functional/ft_30_smtp_participant.rb +7 -7
  194. data/test/functional/ft_31_part_blocking.rb +11 -11
  195. data/test/functional/ft_32_scope.rb +50 -0
  196. data/test/functional/ft_33_participant_subprocess_priority.rb +3 -3
  197. data/test/functional/ft_34_cursor_rewind.rb +14 -14
  198. data/test/functional/ft_35_add_service.rb +67 -9
  199. data/test/functional/ft_36_storage_history.rb +92 -24
  200. data/test/functional/ft_37_default_history.rb +35 -23
  201. data/test/functional/ft_38_participant_more.rb +189 -32
  202. data/test/functional/ft_39_wait_for.rb +25 -25
  203. data/test/functional/ft_3_participant_registration.rb +235 -107
  204. data/test/functional/ft_40_wait_logger.rb +105 -18
  205. data/test/functional/ft_41_participants.rb +13 -12
  206. data/test/functional/ft_42_storage_copy.rb +12 -12
  207. data/test/functional/ft_43_participant_on_reply.rb +85 -11
  208. data/test/functional/ft_44_var_participant.rb +5 -5
  209. data/test/functional/ft_45_participant_accept.rb +3 -3
  210. data/test/functional/ft_46_launch_single.rb +17 -17
  211. data/test/functional/ft_47_wfids.rb +41 -0
  212. data/test/functional/ft_48_lose.rb +19 -25
  213. data/test/functional/ft_49_engine_on_error.rb +54 -70
  214. data/test/functional/ft_4_cancel.rb +84 -26
  215. data/test/functional/ft_50_engine_config.rb +4 -4
  216. data/test/functional/ft_51_misc.rb +12 -12
  217. data/test/functional/ft_52_case.rb +17 -17
  218. data/test/functional/ft_53_engine_on_terminate.rb +18 -21
  219. data/test/functional/ft_54_patterns.rb +18 -16
  220. data/test/functional/ft_55_engine_participant.rb +55 -55
  221. data/test/functional/ft_56_filter_attribute.rb +90 -52
  222. data/test/functional/ft_57_rev_participant.rb +252 -0
  223. data/test/functional/ft_58_workitem.rb +150 -0
  224. data/test/functional/ft_59_pause.rb +329 -0
  225. data/test/functional/ft_5_on_error.rb +430 -77
  226. data/test/functional/ft_60_code_participant.rb +65 -0
  227. data/test/functional/ft_61_trailing_fields.rb +34 -0
  228. data/test/functional/ft_62_exp_name_and_dollar_substitution.rb +35 -0
  229. data/test/functional/ft_63_participants_221.rb +458 -0
  230. data/test/functional/ft_64_stash.rb +41 -0
  231. data/test/functional/ft_65_timers.rb +313 -0
  232. data/test/functional/ft_66_flank.rb +133 -0
  233. data/test/functional/ft_67_radial_misc.rb +34 -0
  234. data/test/functional/ft_68_reput.rb +72 -0
  235. data/test/functional/ft_69_worker_info.rb +56 -0
  236. data/test/functional/ft_6_on_cancel.rb +189 -36
  237. data/test/functional/ft_70_take_and_discard_attributes.rb +94 -0
  238. data/test/functional/ft_71_retries.rb +144 -0
  239. data/test/functional/ft_72_on_terminate.rb +60 -0
  240. data/test/functional/ft_73_raise_msg.rb +107 -0
  241. data/test/functional/ft_74_respark.rb +106 -0
  242. data/test/functional/ft_75_context.rb +66 -0
  243. data/test/functional/ft_76_observer.rb +53 -0
  244. data/test/functional/ft_77_process_observer.rb +157 -0
  245. data/test/functional/ft_78_part_participant.rb +37 -0
  246. data/test/functional/ft_7_tags.rb +238 -50
  247. data/test/functional/ft_8_participant_consumption.rb +27 -21
  248. data/test/functional/ft_9_subprocesses.rb +48 -18
  249. data/test/functional/restart_base.rb +4 -6
  250. data/test/functional/rt_0_wait.rb +10 -10
  251. data/test/functional/rt_1_listen.rb +6 -6
  252. data/test/functional/rt_2_errors.rb +12 -12
  253. data/test/functional/rt_3_once.rb +17 -12
  254. data/test/functional/rt_4_cron.rb +17 -17
  255. data/test/functional/rt_5_timeout.rb +13 -13
  256. data/test/functional/signals.rb +103 -0
  257. data/test/functional/storage.rb +730 -0
  258. data/test/functional/storage_helper.rb +48 -35
  259. data/test/functional/test.rb +6 -2
  260. data/test/misc/idle.rb +21 -0
  261. data/test/misc/light.rb +29 -0
  262. data/test/path_helper.rb +1 -1
  263. data/test/test.rb +2 -5
  264. data/test/test_helper.rb +13 -0
  265. data/test/unit/test.rb +1 -4
  266. data/test/unit/ut_0_ruby_reader.rb +25 -9
  267. data/test/unit/ut_10_participants.rb +47 -0
  268. data/test/unit/ut_11_lookup.rb +59 -2
  269. data/test/unit/ut_12_wait_logger.rb +123 -0
  270. data/test/unit/ut_14_is_uri.rb +1 -1
  271. data/test/unit/ut_15_util.rb +1 -1
  272. data/test/unit/ut_16_reader.rb +136 -14
  273. data/test/unit/ut_17_merge.rb +155 -0
  274. data/test/unit/ut_19_part_template.rb +1 -1
  275. data/test/unit/ut_1_fei.rb +11 -2
  276. data/test/unit/ut_20_composite_storage.rb +27 -1
  277. data/test/unit/{ut_21_participant_list.rb → ut_21_svc_participant_list.rb} +2 -3
  278. data/test/unit/ut_22_filter.rb +231 -10
  279. data/test/unit/ut_23_svc_tracker.rb +48 -0
  280. data/test/unit/ut_24_radial_reader.rb +458 -0
  281. data/test/unit/ut_25_process_status.rb +143 -0
  282. data/test/unit/ut_26_deep.rb +131 -0
  283. data/test/unit/ut_2_dashboard.rb +114 -0
  284. data/test/unit/ut_3_worker.rb +54 -0
  285. data/test/unit/ut_4_expmap.rb +1 -1
  286. data/test/unit/ut_5_tree.rb +23 -23
  287. data/test/unit/ut_6_condition.rb +71 -29
  288. data/test/unit/ut_7_workitem.rb +18 -4
  289. data/test/unit/ut_8_tree_to_dot.rb +1 -1
  290. data/test/unit/ut_9_xml_reader.rb +1 -1
  291. metadata +142 -63
  292. data/jruby_issue.txt +0 -32
  293. data/lib/ruote/engine/process_status.rb +0 -403
  294. data/lib/ruote/log/pretty.rb +0 -165
  295. data/lib/ruote/log/test_logger.rb +0 -204
  296. data/lib/ruote/util/serializer.rb +0 -103
  297. data/phil.txt +0 -14
  298. data/test/functional/eft_33_let.rb +0 -31
  299. data/test/functional/ft_19_alias.rb +0 -33
  300. data/test/functional/ft_47_wfid_generator.rb +0 -54
  301. data/test/unit/storage.rb +0 -403
  302. data/test/unit/storages.rb +0 -37
  303. data/test/unit/ut_13_serializer.rb +0 -65
  304. data/test/unit/ut_18_engine.rb +0 -47
  305. data/test/unit/ut_3_wait_logger.rb +0 -39
@@ -7,8 +7,10 @@
7
7
  # between Denpasar and Singapore
8
8
  #
9
9
 
10
- require File.join(File.dirname(__FILE__), 'base')
10
+ require File.expand_path('../base', __FILE__)
11
11
 
12
+ require_json
13
+ Rufus::Json.detect_backend
12
14
  require 'ruote'
13
15
  require 'ruote/storage/fs_storage'
14
16
  require 'ruote/participant'
@@ -19,37 +21,33 @@ class FtEngineParticipantTest < Test::Unit::TestCase
19
21
 
20
22
  def setup
21
23
 
22
- @dir0 = "work0_#{$$}_#{self.object_id}_#{Time.now.to_f}"
23
- @dir1 = "work1_#{$$}_#{self.object_id}_#{Time.now.to_f}"
24
+ @dir0 = "work_0_#{$$}_#{self.object_id}_#{Time.now.to_f}"
25
+ @dir1 = "work_1_#{$$}_#{self.object_id}_#{Time.now.to_f}"
24
26
 
25
- @engine0 =
27
+ @dashboard0 =
26
28
  Ruote::Engine.new(
27
29
  Ruote::Worker.new(
28
30
  Ruote::FsStorage.new(
29
- @dir0,
30
- 'engine_id' => 'engine0',
31
- 's_logger' => [ 'ruote/log/test_logger', 'Ruote::TestLogger' ])))
32
- @engine1 =
31
+ @dir0, 'engine_id' => 'engine0')))
32
+ @dashboard1 =
33
33
  Ruote::Engine.new(
34
34
  Ruote::Worker.new(
35
35
  Ruote::FsStorage.new(
36
- @dir1,
37
- 'engine_id' => 'engine1',
38
- 's_logger' => [ 'ruote/log/test_logger', 'Ruote::TestLogger' ])))
36
+ @dir1, 'engine_id' => 'engine1')))
39
37
 
40
38
  @tracer0 = Tracer.new
41
- @engine0.add_service('tracer', @tracer0)
39
+ @dashboard0.add_service('tracer', @tracer0)
42
40
 
43
41
  @tracer1 = Tracer.new
44
- @engine1.add_service('tracer', @tracer1)
42
+ @dashboard1.add_service('tracer', @tracer1)
45
43
 
46
- @engine0.register_participant(
44
+ @dashboard0.register_participant(
47
45
  'engine1',
48
46
  Ruote::EngineParticipant,
49
47
  'storage_class' => Ruote::FsStorage,
50
48
  'storage_path' => 'ruote/storage/fs_storage',
51
49
  'storage_args' => @dir1)
52
- @engine1.register_participant(
50
+ @dashboard1.register_participant(
53
51
  'engine0',
54
52
  Ruote::EngineParticipant,
55
53
  'storage_class' => Ruote::FsStorage,
@@ -59,18 +57,19 @@ class FtEngineParticipantTest < Test::Unit::TestCase
59
57
 
60
58
  def teardown
61
59
 
62
- @engine0.shutdown
63
- @engine1.shutdown
60
+ @dashboard0.shutdown
61
+ @dashboard1.shutdown
64
62
 
63
+ ensure
65
64
  FileUtils.rm_rf(@dir0)
66
65
  FileUtils.rm_rf(@dir1)
67
66
  end
68
67
 
69
68
  def noisy
70
69
 
71
- @engine0.context.logger.noisy = true
72
- @engine1.context.logger.noisy = true
73
- @engine1.context.logger.color = '32' # green
70
+ @dashboard0.context.logger.noisy = true
71
+ @dashboard1.context.logger.noisy = true
72
+ @dashboard1.context.logger.color = '32' # green
74
73
  end
75
74
 
76
75
  def test_as_participant
@@ -88,8 +87,8 @@ class FtEngineParticipantTest < Test::Unit::TestCase
88
87
 
89
88
  #noisy
90
89
 
91
- wfid = @engine0.launch(pdef)
92
- @engine0.wait_for(wfid)
90
+ wfid = @dashboard0.launch(pdef)
91
+ @dashboard0.wait_for(wfid)
93
92
 
94
93
  assert_equal "a\nc", @tracer0.to_s
95
94
  assert_equal "b", @tracer1.to_s
@@ -110,8 +109,8 @@ class FtEngineParticipantTest < Test::Unit::TestCase
110
109
 
111
110
  #noisy
112
111
 
113
- wfid = @engine0.launch(pdef)
114
- @engine0.wait_for(wfid)
112
+ wfid = @dashboard0.launch(pdef)
113
+ @dashboard0.wait_for(wfid)
115
114
 
116
115
  assert_equal "a\nc", @tracer0.to_s
117
116
  assert_equal "b", @tracer1.to_s
@@ -132,8 +131,8 @@ class FtEngineParticipantTest < Test::Unit::TestCase
132
131
 
133
132
  #noisy
134
133
 
135
- wfid = @engine0.launch(pdef)
136
- @engine0.wait_for(wfid)
134
+ wfid = @dashboard0.launch(pdef)
135
+ @dashboard0.wait_for(wfid)
137
136
 
138
137
  assert_equal "a\nc", @tracer0.to_s
139
138
  assert_equal "b", @tracer1.to_s
@@ -154,19 +153,19 @@ class FtEngineParticipantTest < Test::Unit::TestCase
154
153
 
155
154
  #noisy
156
155
 
157
- alpha = @engine1.register_participant :alpha, Ruote::StorageParticipant
156
+ alpha = @dashboard1.register_participant :alpha, Ruote::StorageParticipant
158
157
 
159
- wfid = @engine0.launch(pdef)
158
+ wfid = @dashboard0.launch(pdef)
160
159
 
161
- @engine1.wait_for(:alpha)
160
+ @dashboard1.wait_for(:alpha)
162
161
 
163
162
  assert_equal 1, alpha.size
164
163
  assert_not_nil alpha.first.fei.subid
165
164
 
166
- @engine0.cancel_process(wfid)
167
- @engine0.wait_for(wfid)
165
+ @dashboard0.cancel_process(wfid)
166
+ @dashboard0.wait_for(wfid)
168
167
 
169
- #@engine0.wait_for(1) # since dispatch_cancel is asynchronous now
168
+ #@dashboard0.wait_for(1) # since dispatch_cancel is asynchronous now
170
169
  sleep 0.777 # but well sometimes the dispatch is too fast
171
170
 
172
171
  assert_equal 0, alpha.size
@@ -189,18 +188,18 @@ class FtEngineParticipantTest < Test::Unit::TestCase
189
188
  end
190
189
  end
191
190
 
192
- @engine1.context['ruby_eval_allowed'] = true
191
+ @dashboard1.context['ruby_eval_allowed'] = true
193
192
  # just for ${r:engine_id}
194
193
 
195
194
  #noisy
196
195
 
197
- wfid = @engine0.launch(pdef)
198
- @engine0.wait_for(wfid)
196
+ wfid = @dashboard0.launch(pdef)
197
+ @dashboard0.wait_for(wfid)
199
198
 
200
199
  assert_equal "a\nc", @tracer0.to_s
201
200
  assert_equal "engine1:b", @tracer1.to_s
202
201
 
203
- assert_nil @engine0.process(wfid)
202
+ assert_nil @dashboard0.process(wfid)
204
203
  end
205
204
 
206
205
  def test_with_uri
@@ -213,13 +212,13 @@ class FtEngineParticipantTest < Test::Unit::TestCase
213
212
 
214
213
  #noisy
215
214
 
216
- wfid = @engine0.launch(pdef)
217
- @engine0.wait_for(wfid)
215
+ wfid = @dashboard0.launch(pdef)
216
+ @dashboard0.wait_for(wfid)
218
217
 
219
218
  assert_equal "", @tracer0.to_s
220
219
  assert_equal "a\nb", @tracer1.to_s
221
220
 
222
- assert_nil @engine0.process(wfid)
221
+ assert_nil @dashboard0.process(wfid)
223
222
  end
224
223
 
225
224
  def test_forget
@@ -235,28 +234,29 @@ class FtEngineParticipantTest < Test::Unit::TestCase
235
234
  end
236
235
  end
237
236
 
238
- bravo = @engine1.register_participant :bravo, Ruote::StorageParticipant
237
+ bravo = @dashboard1.register_participant :bravo, Ruote::StorageParticipant
239
238
 
240
239
  #noisy
241
240
 
242
- wfid = @engine0.launch(pdef)
243
- @engine0.wait_for(wfid) # terminated
241
+ wfid = @dashboard0.launch(pdef)
242
+ @dashboard0.wait_for(wfid) # terminated
243
+ sleep 0.100
244
244
 
245
- assert_equal [], @engine0.processes
245
+ assert_equal [], @dashboard0.processes
246
246
 
247
- @engine1.wait_for(:bravo)
247
+ @dashboard1.wait_for(:bravo)
248
248
 
249
- bravo.reply(bravo.first)
249
+ bravo.proceed(bravo.first)
250
250
 
251
- @engine1.wait_for(wfid) # ceased
251
+ @dashboard1.wait_for(wfid) # ceased
252
252
 
253
- assert_equal [], @engine0.processes
254
- assert_equal [], @engine1.processes
253
+ assert_equal [], @dashboard0.processes
254
+ assert_equal [], @dashboard1.processes
255
255
  end
256
256
 
257
257
  def test_replay_gone_engine_participant
258
258
 
259
- @engine1.unregister_participant('engine0')
259
+ @dashboard1.unregister_participant('engine0')
260
260
 
261
261
  pdef = Ruote.process_definition do
262
262
  sequence do
@@ -271,16 +271,16 @@ class FtEngineParticipantTest < Test::Unit::TestCase
271
271
 
272
272
  #noisy
273
273
 
274
- wfid = @engine0.launch(pdef)
275
- @engine1.wait_for(wfid) # error
274
+ wfid = @dashboard0.launch(pdef)
275
+ @dashboard1.wait_for(wfid) # error
276
276
 
277
- errs = @engine1.process(wfid).errors
277
+ errs = @dashboard1.process(wfid).errors
278
278
 
279
279
  assert_equal 1, errs.size
280
280
 
281
281
  # fix error cause
282
282
 
283
- @engine1.register_participant(
283
+ @dashboard1.register_participant(
284
284
  'engine0',
285
285
  Ruote::EngineParticipant,
286
286
  'storage_class' => Ruote::FsStorage,
@@ -289,9 +289,9 @@ class FtEngineParticipantTest < Test::Unit::TestCase
289
289
 
290
290
  # replay
291
291
 
292
- @engine1.replay_at_error(errs.first)
292
+ @dashboard1.replay_at_error(errs.first)
293
293
 
294
- @engine0.wait_for(wfid)
294
+ @dashboard0.wait_for(wfid)
295
295
 
296
296
  assert_equal "a\nc", @tracer0.to_s
297
297
  assert_equal "b", @tracer1.to_s
@@ -5,7 +5,7 @@
5
5
  # Tue Feb 8 12:39:35 JST 2011
6
6
  #
7
7
 
8
- require File.join(File.dirname(__FILE__), 'base')
8
+ require File.expand_path('../base', __FILE__)
9
9
 
10
10
 
11
11
  class FtFilterAttributeTest < Test::Unit::TestCase
@@ -33,15 +33,13 @@ class FtFilterAttributeTest < Test::Unit::TestCase
33
33
  alpha
34
34
  end
35
35
 
36
- @engine.register :alpha, AlphaParticipant
36
+ @dashboard.register :alpha, AlphaParticipant
37
37
 
38
- #noisy
39
-
40
- wfid = @engine.launch(
38
+ wfid = @dashboard.launch(
41
39
  pdef,
42
40
  'private_a' => 'x', 'a' => 'y')
43
41
 
44
- @engine.wait_for(wfid)
42
+ @dashboard.wait_for(wfid)
45
43
 
46
44
  assert_equal(
47
45
  "fields: a dispatched_at params\n" +
@@ -65,18 +63,16 @@ class FtFilterAttributeTest < Test::Unit::TestCase
65
63
  end
66
64
  end
67
65
 
68
- @engine.register :bravo do |wi|
66
+ @dashboard.register :bravo do |wi|
69
67
  wi.fields['protected_thing'] = 'stolen'
70
68
  wi.fields['other_thing'] = 'stolen'
71
69
  end
72
70
 
73
- #noisy
74
-
75
- wfid = @engine.launch(
71
+ wfid = @dashboard.launch(
76
72
  pdef,
77
73
  'protected_thing' => 'here', 'other_thing' => 'here')
78
74
 
79
- r = @engine.wait_for(wfid)
75
+ r = @dashboard.wait_for(wfid)
80
76
 
81
77
  assert_equal(
82
78
  { 'protected_thing' => 'here', 'other_thing' => 'stolen' },
@@ -89,13 +85,11 @@ class FtFilterAttributeTest < Test::Unit::TestCase
89
85
  alpha :filter => 'f'
90
86
  end
91
87
 
92
- @engine.register :alpha, Ruote::NoOpParticipant
93
-
94
- #noisy
88
+ @dashboard.register :alpha, Ruote::NoOpParticipant
95
89
 
96
- wfid = @engine.launch(pdef)
90
+ wfid = @dashboard.launch(pdef)
97
91
 
98
- r = @engine.wait_for(wfid)
92
+ r = @dashboard.wait_for(wfid)
99
93
 
100
94
  assert_not_nil r['error']
101
95
  assert_equal 'ArgumentError', r['error']['class']
@@ -111,13 +105,11 @@ class FtFilterAttributeTest < Test::Unit::TestCase
111
105
  alpha :filter => 'f'
112
106
  end
113
107
 
114
- @engine.register :alpha, AlphaParticipant
108
+ @dashboard.register :alpha, AlphaParticipant
115
109
 
116
- #noisy
110
+ wfid = @dashboard.launch(pdef)
117
111
 
118
- wfid = @engine.launch(pdef)
119
-
120
- r = @engine.wait_for(wfid)
112
+ r = @dashboard.wait_for(wfid)
121
113
 
122
114
  assert_not_nil r['error']
123
115
  assert_equal 'ArgumentError', r['error']['class']
@@ -135,14 +127,12 @@ class FtFilterAttributeTest < Test::Unit::TestCase
135
127
  alpha :filter => 'filter_a'
136
128
  end
137
129
 
138
- @engine.register :alpha, AlphaParticipant
139
- @engine.register :filter_a, AaFilterParticipant
140
-
141
- #noisy
130
+ @dashboard.register :alpha, AlphaParticipant
131
+ @dashboard.register :filter_a, AaFilterParticipant
142
132
 
143
- wfid = @engine.launch(pdef)
133
+ wfid = @dashboard.launch(pdef)
144
134
 
145
- r = @engine.wait_for(wfid)
135
+ r = @dashboard.wait_for(wfid)
146
136
 
147
137
  assert_nil r['workitem']['fields']['__filter_direction__']
148
138
  assert_equal %w[ in out ], r['workitem']['fields']['seen']
@@ -162,14 +152,12 @@ class FtFilterAttributeTest < Test::Unit::TestCase
162
152
  alpha :filter => 'filter_b'
163
153
  end
164
154
 
165
- @engine.register :alpha, AlphaParticipant
166
- @engine.register :filter_b, BbFilterParticipant
155
+ @dashboard.register :alpha, AlphaParticipant
156
+ @dashboard.register :filter_b, BbFilterParticipant
167
157
 
168
- #noisy
158
+ wfid = @dashboard.launch(pdef)
169
159
 
170
- wfid = @engine.launch(pdef)
171
-
172
- r = @engine.wait_for(wfid)
160
+ r = @dashboard.wait_for(wfid)
173
161
 
174
162
  assert_equal %w[ in out ], r['workitem']['fields']['seen']
175
163
  assert_equal 'fields: dispatched_at params seen', @tracer.to_s
@@ -187,16 +175,14 @@ class FtFilterAttributeTest < Test::Unit::TestCase
187
175
  alpha :filter => 'filter_c'
188
176
  end
189
177
 
190
- @engine.register :alpha, AlphaParticipant
191
- @engine.register :filter_c, CcFilterParticipant
192
-
193
- #noisy
178
+ @dashboard.register :alpha, AlphaParticipant
179
+ @dashboard.register :filter_c, CcFilterParticipant
194
180
 
195
- wfid = @engine.launch(pdef)
181
+ wfid = @dashboard.launch(pdef)
196
182
 
197
- @engine.wait_for(wfid)
183
+ @dashboard.wait_for(wfid)
198
184
 
199
- assert_equal 1, @engine.ps(wfid).errors.size
185
+ assert_equal 1, @dashboard.ps(wfid).errors.size
200
186
  assert_equal '', @tracer.to_s
201
187
  end
202
188
 
@@ -213,20 +199,74 @@ class FtFilterAttributeTest < Test::Unit::TestCase
213
199
  alpha :filter => { :in => 'f0', :out => 'f1' }
214
200
  end
215
201
 
216
- @engine.register :alpha, AlphaParticipant
217
- @engine.register :f0, DdFilterParticipant
218
- @engine.register :f1, DdFilterParticipant
219
-
220
- #noisy
202
+ @dashboard.register :alpha, AlphaParticipant
203
+ @dashboard.register :f0, DdFilterParticipant
204
+ @dashboard.register :f1, DdFilterParticipant
221
205
 
222
- wfid = @engine.launch(pdef)
206
+ wfid = @dashboard.launch(pdef)
223
207
 
224
- r = @engine.wait_for(wfid)
208
+ r = @dashboard.wait_for(wfid)
225
209
 
226
210
  assert_equal({ 'f0' => 'in', 'f1' => 'out' }, r['workitem']['fields'])
227
211
  assert_equal('fields: dispatched_at f0 params', @tracer.to_s)
228
212
  end
229
213
 
214
+ def test_filter_empty
215
+
216
+ @dashboard.register '.+' do |workitem|
217
+ context.tracer << workitem.participant_name + "\n"
218
+ end
219
+
220
+ pdef = Ruote.define do
221
+ alpha :filter => {}
222
+ bravo :filter => { 'in' => [] }
223
+ charly :filter => { 'out' => [] }
224
+ end
225
+
226
+ wfid = @dashboard.launch(pdef)
227
+ r = @dashboard.wait_for(wfid)
228
+
229
+ assert_equal %w[ alpha bravo charly ], @tracer.to_a
230
+ end
231
+
232
+ def test_cancel_after_error
233
+
234
+ @dashboard.register :alpha, Ruote::NoOpParticipant
235
+
236
+ pdef = Ruote.define do
237
+ alpha :filter => { :in => [ { :field => 'x', :type => :number } ] }
238
+ end
239
+
240
+ wfid = @dashboard.launch(pdef)
241
+
242
+ @dashboard.wait_for('error_intercepted')
243
+
244
+ @dashboard.cancel(wfid)
245
+
246
+ @dashboard.wait_for('terminated')
247
+
248
+ assert_nil @dashboard.ps(wfid)
249
+ end
250
+
251
+ def test_cancel_after_error_out
252
+
253
+ @dashboard.register :alpha, Ruote::NoOpParticipant
254
+
255
+ pdef = Ruote.define do
256
+ alpha :filter => { :out => [ { :field => 'x', :type => :number } ] }
257
+ end
258
+
259
+ wfid = @dashboard.launch(pdef)
260
+
261
+ @dashboard.wait_for('error_intercepted')
262
+
263
+ @dashboard.cancel(wfid)
264
+
265
+ @dashboard.wait_for('terminated')
266
+
267
+ assert_nil @dashboard.ps(wfid)
268
+ end
269
+
230
270
  # def test_filter_record
231
271
  #
232
272
  # pdef = Ruote.define do
@@ -237,15 +277,13 @@ class FtFilterAttributeTest < Test::Unit::TestCase
237
277
  # alpha :filter => 'f'
238
278
  # end
239
279
  #
240
- # @engine.register :alpha, AlphaParticipant
241
- #
242
- # #noisy
280
+ # @dashboard.register :alpha, AlphaParticipant
243
281
  #
244
- # wfid = @engine.launch(
282
+ # wfid = @dashboard.launch(
245
283
  # pdef,
246
284
  # 'x' => 'not a number')
247
285
  #
248
- # @engine.wait_for(wfid)
286
+ # @dashboard.wait_for(wfid)
249
287
  #
250
288
  # assert_equal(
251
289
  # "fields: a dispatched_at params\n" +