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.
- data/CHANGELOG.txt +166 -1
- data/CREDITS.txt +36 -17
- data/LICENSE.txt +1 -1
- data/README.rdoc +1 -7
- data/Rakefile +38 -29
- data/TODO.txt +93 -52
- data/lib/ruote-fs.rb +3 -0
- data/lib/ruote.rb +5 -1
- data/lib/ruote/context.rb +140 -35
- data/lib/ruote/dashboard.rb +1247 -0
- data/lib/ruote/{engine → dboard}/process_error.rb +22 -2
- data/lib/ruote/dboard/process_status.rb +587 -0
- data/lib/ruote/engine.rb +6 -871
- data/lib/ruote/exp/command.rb +7 -2
- data/lib/ruote/exp/commanded.rb +2 -2
- data/lib/ruote/exp/condition.rb +38 -13
- data/lib/ruote/exp/fe_add_branches.rb +1 -1
- data/lib/ruote/exp/fe_apply.rb +1 -1
- data/lib/ruote/exp/fe_await.rb +357 -0
- data/lib/ruote/exp/fe_cancel_process.rb +17 -3
- data/lib/ruote/exp/fe_command.rb +8 -4
- data/lib/ruote/exp/fe_concurrence.rb +218 -18
- data/lib/ruote/exp/fe_concurrent_iterator.rb +71 -10
- data/lib/ruote/exp/fe_cron.rb +3 -10
- data/lib/ruote/exp/fe_cursor.rb +14 -4
- data/lib/ruote/exp/fe_define.rb +3 -1
- data/lib/ruote/exp/fe_echo.rb +1 -1
- data/lib/ruote/exp/fe_equals.rb +1 -1
- data/lib/ruote/exp/fe_error.rb +1 -1
- data/lib/ruote/exp/fe_filter.rb +163 -4
- data/lib/ruote/exp/fe_forget.rb +21 -4
- data/lib/ruote/exp/fe_given.rb +1 -1
- data/lib/ruote/exp/fe_if.rb +1 -1
- data/lib/ruote/exp/fe_inc.rb +102 -35
- data/lib/ruote/exp/fe_iterator.rb +47 -12
- data/lib/ruote/exp/fe_listen.rb +96 -11
- data/lib/ruote/exp/fe_lose.rb +31 -4
- data/lib/ruote/exp/fe_noop.rb +1 -1
- data/lib/ruote/exp/fe_on_error.rb +109 -0
- data/lib/ruote/exp/fe_once.rb +10 -19
- data/lib/ruote/exp/fe_participant.rb +90 -28
- data/lib/ruote/exp/fe_read.rb +69 -0
- data/lib/ruote/exp/fe_redo.rb +3 -2
- data/lib/ruote/exp/fe_ref.rb +57 -27
- data/lib/ruote/exp/fe_registerp.rb +1 -3
- data/lib/ruote/exp/fe_reserve.rb +1 -1
- data/lib/ruote/exp/fe_restore.rb +6 -6
- data/lib/ruote/exp/fe_save.rb +12 -19
- data/lib/ruote/exp/fe_sequence.rb +38 -2
- data/lib/ruote/exp/fe_set.rb +143 -40
- data/lib/ruote/exp/{fe_let.rb → fe_stall.rb} +7 -38
- data/lib/ruote/exp/fe_subprocess.rb +8 -2
- data/lib/ruote/exp/fe_that.rb +1 -1
- data/lib/ruote/exp/fe_undo.rb +40 -4
- data/lib/ruote/exp/fe_unregisterp.rb +1 -3
- data/lib/ruote/exp/fe_wait.rb +12 -25
- data/lib/ruote/exp/{flowexpression.rb → flow_expression.rb} +375 -229
- data/lib/ruote/exp/iterator.rb +2 -2
- data/lib/ruote/exp/merge.rb +78 -17
- data/lib/ruote/exp/ro_attributes.rb +46 -36
- data/lib/ruote/exp/ro_filters.rb +34 -8
- data/lib/ruote/exp/ro_on_x.rb +431 -0
- data/lib/ruote/exp/ro_persist.rb +19 -7
- data/lib/ruote/exp/ro_timers.rb +123 -0
- data/lib/ruote/exp/ro_variables.rb +90 -29
- data/lib/ruote/fei.rb +57 -3
- data/lib/ruote/fs.rb +3 -0
- data/lib/ruote/id/mnemo_wfid_generator.rb +30 -7
- data/lib/ruote/id/wfid_generator.rb +17 -38
- data/lib/ruote/log/default_history.rb +23 -9
- data/lib/ruote/log/fancy_printing.rb +265 -0
- data/lib/ruote/log/storage_history.rb +23 -13
- data/lib/ruote/log/wait_logger.rb +224 -17
- data/lib/ruote/observer.rb +82 -0
- data/lib/ruote/part/block_participant.rb +65 -28
- data/lib/ruote/part/code_participant.rb +81 -0
- data/lib/ruote/part/engine_participant.rb +7 -2
- data/lib/ruote/part/local_participant.rb +221 -21
- data/lib/ruote/part/no_op_participant.rb +1 -1
- data/lib/ruote/part/null_participant.rb +1 -1
- data/lib/ruote/part/participant.rb +50 -0
- data/lib/ruote/part/rev_participant.rb +178 -0
- data/lib/ruote/part/smtp_participant.rb +2 -2
- data/lib/ruote/part/storage_participant.rb +228 -60
- data/lib/ruote/part/template.rb +1 -1
- data/lib/ruote/participant.rb +2 -0
- data/lib/ruote/reader.rb +205 -68
- data/lib/ruote/reader/json.rb +49 -0
- data/lib/ruote/reader/radial.rb +303 -0
- data/lib/ruote/reader/ruby_dsl.rb +44 -9
- data/lib/ruote/reader/xml.rb +11 -8
- data/lib/ruote/receiver/base.rb +98 -45
- data/lib/ruote/storage/base.rb +104 -35
- data/lib/ruote/storage/composite_storage.rb +50 -60
- data/lib/ruote/storage/fs_storage.rb +25 -34
- data/lib/ruote/storage/hash_storage.rb +38 -36
- data/lib/ruote/svc/dispatch_pool.rb +104 -35
- data/lib/ruote/svc/dollar_sub.rb +10 -8
- data/lib/ruote/svc/error_handler.rb +108 -52
- data/lib/ruote/svc/expression_map.rb +3 -3
- data/lib/ruote/svc/participant_list.rb +160 -55
- data/lib/ruote/svc/tracker.rb +31 -31
- data/lib/ruote/svc/treechecker.rb +28 -16
- data/lib/ruote/tree_dot.rb +1 -1
- data/lib/ruote/util/deep.rb +143 -0
- data/lib/ruote/util/filter.rb +125 -18
- data/lib/ruote/util/hashdot.rb +15 -13
- data/lib/ruote/util/look.rb +1 -1
- data/lib/ruote/util/lookup.rb +60 -22
- data/lib/ruote/util/misc.rb +63 -18
- data/lib/ruote/util/mpatch.rb +53 -0
- data/lib/ruote/util/ometa.rb +1 -2
- data/lib/ruote/util/process_observer.rb +177 -0
- data/lib/ruote/util/subprocess.rb +1 -1
- data/lib/ruote/util/time.rb +2 -2
- data/lib/ruote/util/tree.rb +64 -2
- data/lib/ruote/version.rb +3 -2
- data/lib/ruote/worker.rb +421 -92
- data/lib/ruote/workitem.rb +157 -22
- data/ruote.gemspec +15 -9
- data/test/bm/ci.rb +0 -2
- data/test/bm/ici.rb +0 -2
- data/test/bm/load_26c.rb +0 -3
- data/test/bm/mega.rb +0 -2
- data/test/functional/base.rb +57 -43
- data/test/functional/concurrent_base.rb +16 -13
- data/test/functional/ct_0_concurrence.rb +7 -11
- data/test/functional/ct_1_iterator.rb +9 -11
- data/test/functional/ct_2_cancel.rb +28 -17
- data/test/functional/eft_0_flow_expression.rb +35 -0
- data/test/functional/eft_10_cancel_process.rb +1 -1
- data/test/functional/eft_11_wait.rb +13 -13
- data/test/functional/eft_12_listen.rb +199 -66
- data/test/functional/eft_13_iterator.rb +95 -29
- data/test/functional/eft_14_cursor.rb +74 -24
- data/test/functional/eft_15_loop.rb +7 -7
- data/test/functional/eft_16_if.rb +1 -1
- data/test/functional/eft_17_equals.rb +1 -1
- data/test/functional/eft_18_concurrent_iterator.rb +156 -68
- data/test/functional/eft_19_reserve.rb +15 -15
- data/test/functional/eft_1_echo.rb +1 -1
- data/test/functional/eft_20_save.rb +51 -9
- data/test/functional/eft_21_restore.rb +1 -1
- data/test/functional/eft_22_noop.rb +1 -1
- data/test/functional/eft_23_apply.rb +1 -1
- data/test/functional/eft_24_add_branches.rb +7 -8
- data/test/functional/eft_25_command.rb +1 -1
- data/test/functional/eft_26_error.rb +11 -11
- data/test/functional/eft_27_inc.rb +111 -67
- data/test/functional/eft_28_once.rb +16 -16
- data/test/functional/eft_29_cron.rb +9 -9
- data/test/functional/eft_2_sequence.rb +23 -4
- data/test/functional/eft_30_ref.rb +36 -24
- data/test/functional/eft_31_registerp.rb +24 -24
- data/test/functional/eft_32_lose.rb +46 -20
- data/test/functional/eft_34_given.rb +1 -1
- data/test/functional/eft_35_filter.rb +161 -7
- data/test/functional/eft_36_read.rb +97 -0
- data/test/functional/{eft_0_process_definition.rb → eft_37_process_definition.rb} +4 -4
- data/test/functional/eft_38_on_error.rb +195 -0
- data/test/functional/eft_39_stall.rb +35 -0
- data/test/functional/eft_3_participant.rb +77 -22
- data/test/functional/eft_40_await.rb +297 -0
- data/test/functional/eft_4_set.rb +110 -11
- data/test/functional/eft_5_subprocess.rb +27 -5
- data/test/functional/eft_6_concurrence.rb +299 -60
- data/test/functional/eft_7_forget.rb +24 -22
- data/test/functional/eft_8_undo.rb +52 -15
- data/test/functional/eft_9_redo.rb +18 -20
- data/test/functional/ft_0_worker.rb +122 -13
- data/test/functional/ft_10_dollar.rb +77 -16
- data/test/functional/ft_11_recursion.rb +9 -9
- data/test/functional/ft_12_launchitem.rb +7 -9
- data/test/functional/ft_13_variables.rb +125 -22
- data/test/functional/ft_14_re_apply.rb +112 -56
- data/test/functional/ft_15_timeout.rb +64 -33
- data/test/functional/ft_16_participant_params.rb +59 -6
- data/test/functional/ft_17_conditional.rb +68 -2
- data/test/functional/ft_18_kill.rb +48 -30
- data/test/functional/ft_19_participant_code.rb +67 -0
- data/test/functional/ft_1_process_status.rb +222 -150
- data/test/functional/ft_20_storage_participant.rb +445 -44
- data/test/functional/ft_21_forget.rb +21 -26
- data/test/functional/ft_22_process_definitions.rb +8 -6
- data/test/functional/ft_23_load_defs.rb +29 -5
- data/test/functional/ft_24_block_participant.rb +199 -20
- data/test/functional/ft_25_receiver.rb +98 -46
- data/test/functional/ft_26_participant_rtimeout.rb +34 -26
- data/test/functional/ft_27_var_indirection.rb +40 -5
- data/test/functional/ft_28_null_noop_participants.rb +5 -5
- data/test/functional/ft_29_part_template.rb +2 -2
- data/test/functional/ft_2_errors.rb +106 -74
- data/test/functional/ft_30_smtp_participant.rb +7 -7
- data/test/functional/ft_31_part_blocking.rb +11 -11
- data/test/functional/ft_32_scope.rb +50 -0
- data/test/functional/ft_33_participant_subprocess_priority.rb +3 -3
- data/test/functional/ft_34_cursor_rewind.rb +14 -14
- data/test/functional/ft_35_add_service.rb +67 -9
- data/test/functional/ft_36_storage_history.rb +92 -24
- data/test/functional/ft_37_default_history.rb +35 -23
- data/test/functional/ft_38_participant_more.rb +189 -32
- data/test/functional/ft_39_wait_for.rb +25 -25
- data/test/functional/ft_3_participant_registration.rb +235 -107
- data/test/functional/ft_40_wait_logger.rb +105 -18
- data/test/functional/ft_41_participants.rb +13 -12
- data/test/functional/ft_42_storage_copy.rb +12 -12
- data/test/functional/ft_43_participant_on_reply.rb +85 -11
- data/test/functional/ft_44_var_participant.rb +5 -5
- data/test/functional/ft_45_participant_accept.rb +3 -3
- data/test/functional/ft_46_launch_single.rb +17 -17
- data/test/functional/ft_47_wfids.rb +41 -0
- data/test/functional/ft_48_lose.rb +19 -25
- data/test/functional/ft_49_engine_on_error.rb +54 -70
- data/test/functional/ft_4_cancel.rb +84 -26
- data/test/functional/ft_50_engine_config.rb +4 -4
- data/test/functional/ft_51_misc.rb +12 -12
- data/test/functional/ft_52_case.rb +17 -17
- data/test/functional/ft_53_engine_on_terminate.rb +18 -21
- data/test/functional/ft_54_patterns.rb +18 -16
- data/test/functional/ft_55_engine_participant.rb +55 -55
- data/test/functional/ft_56_filter_attribute.rb +90 -52
- data/test/functional/ft_57_rev_participant.rb +252 -0
- data/test/functional/ft_58_workitem.rb +150 -0
- data/test/functional/ft_59_pause.rb +329 -0
- data/test/functional/ft_5_on_error.rb +430 -77
- data/test/functional/ft_60_code_participant.rb +65 -0
- data/test/functional/ft_61_trailing_fields.rb +34 -0
- data/test/functional/ft_62_exp_name_and_dollar_substitution.rb +35 -0
- data/test/functional/ft_63_participants_221.rb +458 -0
- data/test/functional/ft_64_stash.rb +41 -0
- data/test/functional/ft_65_timers.rb +313 -0
- data/test/functional/ft_66_flank.rb +133 -0
- data/test/functional/ft_67_radial_misc.rb +34 -0
- data/test/functional/ft_68_reput.rb +72 -0
- data/test/functional/ft_69_worker_info.rb +56 -0
- data/test/functional/ft_6_on_cancel.rb +189 -36
- data/test/functional/ft_70_take_and_discard_attributes.rb +94 -0
- data/test/functional/ft_71_retries.rb +144 -0
- data/test/functional/ft_72_on_terminate.rb +60 -0
- data/test/functional/ft_73_raise_msg.rb +107 -0
- data/test/functional/ft_74_respark.rb +106 -0
- data/test/functional/ft_75_context.rb +66 -0
- data/test/functional/ft_76_observer.rb +53 -0
- data/test/functional/ft_77_process_observer.rb +157 -0
- data/test/functional/ft_78_part_participant.rb +37 -0
- data/test/functional/ft_7_tags.rb +238 -50
- data/test/functional/ft_8_participant_consumption.rb +27 -21
- data/test/functional/ft_9_subprocesses.rb +48 -18
- data/test/functional/restart_base.rb +4 -6
- data/test/functional/rt_0_wait.rb +10 -10
- data/test/functional/rt_1_listen.rb +6 -6
- data/test/functional/rt_2_errors.rb +12 -12
- data/test/functional/rt_3_once.rb +17 -12
- data/test/functional/rt_4_cron.rb +17 -17
- data/test/functional/rt_5_timeout.rb +13 -13
- data/test/functional/signals.rb +103 -0
- data/test/functional/storage.rb +730 -0
- data/test/functional/storage_helper.rb +48 -35
- data/test/functional/test.rb +6 -2
- data/test/misc/idle.rb +21 -0
- data/test/misc/light.rb +29 -0
- data/test/path_helper.rb +1 -1
- data/test/test.rb +2 -5
- data/test/test_helper.rb +13 -0
- data/test/unit/test.rb +1 -4
- data/test/unit/ut_0_ruby_reader.rb +25 -9
- data/test/unit/ut_10_participants.rb +47 -0
- data/test/unit/ut_11_lookup.rb +59 -2
- data/test/unit/ut_12_wait_logger.rb +123 -0
- data/test/unit/ut_14_is_uri.rb +1 -1
- data/test/unit/ut_15_util.rb +1 -1
- data/test/unit/ut_16_reader.rb +136 -14
- data/test/unit/ut_17_merge.rb +155 -0
- data/test/unit/ut_19_part_template.rb +1 -1
- data/test/unit/ut_1_fei.rb +11 -2
- data/test/unit/ut_20_composite_storage.rb +27 -1
- data/test/unit/{ut_21_participant_list.rb → ut_21_svc_participant_list.rb} +2 -3
- data/test/unit/ut_22_filter.rb +231 -10
- data/test/unit/ut_23_svc_tracker.rb +48 -0
- data/test/unit/ut_24_radial_reader.rb +458 -0
- data/test/unit/ut_25_process_status.rb +143 -0
- data/test/unit/ut_26_deep.rb +131 -0
- data/test/unit/ut_2_dashboard.rb +114 -0
- data/test/unit/ut_3_worker.rb +54 -0
- data/test/unit/ut_4_expmap.rb +1 -1
- data/test/unit/ut_5_tree.rb +23 -23
- data/test/unit/ut_6_condition.rb +71 -29
- data/test/unit/ut_7_workitem.rb +18 -4
- data/test/unit/ut_8_tree_to_dot.rb +1 -1
- data/test/unit/ut_9_xml_reader.rb +1 -1
- metadata +142 -63
- data/jruby_issue.txt +0 -32
- data/lib/ruote/engine/process_status.rb +0 -403
- data/lib/ruote/log/pretty.rb +0 -165
- data/lib/ruote/log/test_logger.rb +0 -204
- data/lib/ruote/util/serializer.rb +0 -103
- data/phil.txt +0 -14
- data/test/functional/eft_33_let.rb +0 -31
- data/test/functional/ft_19_alias.rb +0 -33
- data/test/functional/ft_47_wfid_generator.rb +0 -54
- data/test/unit/storage.rb +0 -403
- data/test/unit/storages.rb +0 -37
- data/test/unit/ut_13_serializer.rb +0 -65
- data/test/unit/ut_18_engine.rb +0 -47
- data/test/unit/ut_3_wait_logger.rb +0 -39
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# Mon May 18 22:25:57 JST 2009
|
|
6
6
|
#
|
|
7
7
|
|
|
8
|
-
require File.
|
|
8
|
+
require File.expand_path('../base', __FILE__)
|
|
9
9
|
|
|
10
10
|
require 'ruote'
|
|
11
11
|
|
|
@@ -15,12 +15,10 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
|
|
|
15
15
|
|
|
16
16
|
def test_participant_register
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
@engine.register_participant :alpha do |workitem|
|
|
21
|
-
@tracer << 'alpha'
|
|
18
|
+
@dashboard.register_participant :alpha do |workitem|
|
|
19
|
+
tracer << 'alpha'
|
|
22
20
|
end
|
|
23
|
-
@
|
|
21
|
+
@dashboard.register_participant /^user_/, Ruote::NullParticipant
|
|
24
22
|
|
|
25
23
|
wait_for(2)
|
|
26
24
|
|
|
@@ -33,57 +31,106 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
|
|
|
33
31
|
logger.log.collect { |msg| msg['regex'] })
|
|
34
32
|
|
|
35
33
|
assert_equal(
|
|
36
|
-
[ [
|
|
37
|
-
[
|
|
38
|
-
{
|
|
39
|
-
[
|
|
40
|
-
[
|
|
34
|
+
[ [ '^alpha$',
|
|
35
|
+
[ 'Ruote::BlockParticipant',
|
|
36
|
+
{ 'on_workitem' => "proc do |workitem|\n tracer << 'alpha'\n end" } ] ],
|
|
37
|
+
[ '^user_',
|
|
38
|
+
[ 'Ruote::NullParticipant',
|
|
41
39
|
{} ] ] ],
|
|
42
|
-
@
|
|
40
|
+
@dashboard.participant_list.collect { |pe| pe.to_a })
|
|
43
41
|
end
|
|
44
42
|
|
|
45
43
|
def test_participant_register_position
|
|
46
44
|
|
|
47
|
-
@
|
|
45
|
+
@dashboard.register_participant :ur, Ruote::StorageParticipant
|
|
48
46
|
|
|
49
47
|
assert_equal(
|
|
50
48
|
%w[ ^ur$ ],
|
|
51
|
-
@
|
|
49
|
+
@dashboard.participant_list.collect { |pe| pe.regex.to_s })
|
|
52
50
|
|
|
53
|
-
@
|
|
51
|
+
@dashboard.register_participant(
|
|
54
52
|
:first, Ruote::StorageParticipant, :position => :first)
|
|
55
|
-
@
|
|
53
|
+
@dashboard.register_participant(
|
|
56
54
|
:last, Ruote::StorageParticipant, :position => :last)
|
|
57
55
|
|
|
58
56
|
assert_equal(
|
|
59
57
|
%w[ ^first$ ^ur$ ^last$ ],
|
|
60
|
-
@
|
|
58
|
+
@dashboard.participant_list.collect { |pe| pe.regex.to_s })
|
|
61
59
|
|
|
62
|
-
@
|
|
60
|
+
@dashboard.register_participant(
|
|
63
61
|
:x, Ruote::StorageParticipant, :position => -2)
|
|
64
62
|
|
|
65
63
|
assert_equal(
|
|
66
64
|
%w[ ^first$ ^ur$ ^x$ ^last$ ],
|
|
67
|
-
@
|
|
65
|
+
@dashboard.participant_list.collect { |pe| pe.regex.to_s })
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_participant_register_before
|
|
69
|
+
|
|
70
|
+
@dashboard.register_participant :alpha, 'AlphaParticipant'
|
|
71
|
+
@dashboard.register_participant :bravo, 'BravoParticipant'
|
|
72
|
+
@dashboard.register_participant :alpha, 'AlphaPrimeParticipant', :pos => :after
|
|
73
|
+
|
|
74
|
+
assert_equal(
|
|
75
|
+
[ %w[ ^alpha$ AlphaParticipant ],
|
|
76
|
+
%w[ ^alpha$ AlphaPrimeParticipant ],
|
|
77
|
+
%w[ ^bravo$ BravoParticipant ] ],
|
|
78
|
+
@dashboard.participant_list.collect { |e| [ e.regex, e.classname ] })
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def test_participant_register_after
|
|
82
|
+
|
|
83
|
+
@dashboard.register_participant :alpha, 'AlphaParticipant'
|
|
84
|
+
@dashboard.register_participant :alpha, 'AlphaPrimeParticipant', :pos => :before
|
|
85
|
+
|
|
86
|
+
assert_equal(
|
|
87
|
+
[ %w[ ^alpha$ AlphaPrimeParticipant ],
|
|
88
|
+
%w[ ^alpha$ AlphaParticipant ] ],
|
|
89
|
+
@dashboard.participant_list.collect { |e| [ e.regex, e.classname ] })
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def test_participant_register_before_after_corner_cases
|
|
93
|
+
|
|
94
|
+
@dashboard.register_participant :alpha, 'KlassA', :pos => :before
|
|
95
|
+
@dashboard.register_participant :bravo, 'KlassB', :pos => :after
|
|
96
|
+
|
|
97
|
+
assert_equal(
|
|
98
|
+
[ %w[ ^alpha$ KlassA ],
|
|
99
|
+
%w[ ^bravo$ KlassB ] ],
|
|
100
|
+
@dashboard.participant_list.collect { |e| [ e.regex, e.classname ] })
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def test_participant_register_over
|
|
104
|
+
|
|
105
|
+
@dashboard.register_participant :alpha, 'KlassA'
|
|
106
|
+
@dashboard.register_participant :bravo, 'KlassB'
|
|
107
|
+
@dashboard.register_participant :alpha, 'KlassAa', :pos => :over
|
|
108
|
+
@dashboard.register_participant :charly, 'KlassC', :pos => :over
|
|
109
|
+
|
|
110
|
+
assert_equal(
|
|
111
|
+
[ %w[ ^alpha$ KlassAa ],
|
|
112
|
+
%w[ ^bravo$ KlassB ],
|
|
113
|
+
%w[ ^charly$ KlassC ] ],
|
|
114
|
+
@dashboard.participant_list.collect { |e| [ e.regex, e.classname ] })
|
|
68
115
|
end
|
|
69
116
|
|
|
70
117
|
def test_double_registration
|
|
71
118
|
|
|
72
|
-
@
|
|
73
|
-
|
|
119
|
+
@dashboard.register_participant :alpha do |workitem|
|
|
120
|
+
tracer << 'alpha'
|
|
74
121
|
end
|
|
75
|
-
@
|
|
76
|
-
|
|
122
|
+
@dashboard.register_participant :alpha do |workitem|
|
|
123
|
+
tracer << 'alpha'
|
|
77
124
|
end
|
|
78
125
|
|
|
79
|
-
assert_equal 1, @
|
|
126
|
+
assert_equal 1, @dashboard.context.plist.send(:get_list)['list'].size
|
|
80
127
|
end
|
|
81
128
|
|
|
82
129
|
def test_register_and_return_something
|
|
83
130
|
|
|
84
|
-
pa = @
|
|
131
|
+
pa = @dashboard.register_participant :alpha do |workitem|
|
|
85
132
|
end
|
|
86
|
-
pb = @
|
|
133
|
+
pb = @dashboard.register_participant :bravo, Ruote::StorageParticipant
|
|
87
134
|
|
|
88
135
|
assert_nil pa
|
|
89
136
|
assert_equal Ruote::StorageParticipant, pb.class
|
|
@@ -91,12 +138,10 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
|
|
|
91
138
|
|
|
92
139
|
def test_participant_unregister_by_name
|
|
93
140
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
@engine.register_participant :alpha do |workitem|
|
|
141
|
+
@dashboard.register_participant :alpha do |workitem|
|
|
97
142
|
end
|
|
98
143
|
|
|
99
|
-
@
|
|
144
|
+
@dashboard.unregister_participant(:alpha)
|
|
100
145
|
|
|
101
146
|
wait_for(2)
|
|
102
147
|
Thread.pass
|
|
@@ -108,10 +153,10 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
|
|
|
108
153
|
|
|
109
154
|
def test_participant_unregister
|
|
110
155
|
|
|
111
|
-
@
|
|
156
|
+
@dashboard.register_participant :alpha do |workitem|
|
|
112
157
|
end
|
|
113
158
|
|
|
114
|
-
@
|
|
159
|
+
@dashboard.unregister_participant('alpha')
|
|
115
160
|
|
|
116
161
|
wait_for(2)
|
|
117
162
|
|
|
@@ -119,7 +164,7 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
|
|
|
119
164
|
assert_equal 'participant_unregistered', msg['action']
|
|
120
165
|
assert_equal '^alpha$', msg['regex']
|
|
121
166
|
|
|
122
|
-
assert_equal 0, @
|
|
167
|
+
assert_equal 0, @dashboard.context.plist.list.size
|
|
123
168
|
end
|
|
124
169
|
|
|
125
170
|
class MyParticipant
|
|
@@ -136,25 +181,25 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
|
|
|
136
181
|
|
|
137
182
|
def test_participant_shutdown
|
|
138
183
|
|
|
139
|
-
alpha = @
|
|
184
|
+
alpha = @dashboard.register :alpha, MyParticipant
|
|
140
185
|
|
|
141
|
-
@
|
|
186
|
+
@dashboard.context.plist.shutdown
|
|
142
187
|
|
|
143
188
|
assert_equal true, MyParticipant.down
|
|
144
189
|
end
|
|
145
190
|
|
|
146
191
|
def test_participant_list_of_names
|
|
147
192
|
|
|
148
|
-
pa = @
|
|
193
|
+
pa = @dashboard.register_participant :alpha do |workitem|
|
|
149
194
|
end
|
|
150
195
|
|
|
151
|
-
assert_equal [ '^alpha$' ], @
|
|
196
|
+
assert_equal [ '^alpha$' ], @dashboard.context.plist.names
|
|
152
197
|
end
|
|
153
198
|
|
|
154
199
|
def test_register_require_path
|
|
155
200
|
|
|
156
|
-
rpath = File.
|
|
157
|
-
|
|
201
|
+
rpath = File.expand_path(
|
|
202
|
+
"../#{Time.now.to_f}_#{$$}_required_participant", __FILE__)
|
|
158
203
|
path = "#{rpath}.rb"
|
|
159
204
|
|
|
160
205
|
File.open(path, 'wb') do |f|
|
|
@@ -172,22 +217,22 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
|
|
|
172
217
|
})
|
|
173
218
|
end
|
|
174
219
|
|
|
175
|
-
@
|
|
220
|
+
@dashboard.register_participant(
|
|
176
221
|
:alfred,
|
|
177
222
|
'RequiredParticipant',
|
|
178
223
|
:require_path => rpath, :message => 'hello')
|
|
179
224
|
|
|
180
|
-
assert_equal [ '^alfred$' ], @
|
|
225
|
+
assert_equal [ '^alfred$' ], @dashboard.context.plist.names
|
|
181
226
|
|
|
182
227
|
# first run
|
|
183
228
|
|
|
184
229
|
assert_equal(
|
|
185
230
|
[ 'RequiredParticipant',
|
|
186
231
|
{ 'require_path' => rpath, 'message' => 'hello' } ],
|
|
187
|
-
@
|
|
232
|
+
@dashboard.context.plist.lookup_info('alfred', nil))
|
|
188
233
|
|
|
189
|
-
wfid = @
|
|
190
|
-
r = @
|
|
234
|
+
wfid = @dashboard.launch(Ruote.define { alfred })
|
|
235
|
+
r = @dashboard.wait_for(wfid)
|
|
191
236
|
|
|
192
237
|
assert_equal 'hello', r['workitem']['fields']['message']
|
|
193
238
|
|
|
@@ -208,8 +253,8 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
|
|
|
208
253
|
})
|
|
209
254
|
end
|
|
210
255
|
|
|
211
|
-
wfid = @
|
|
212
|
-
r = @
|
|
256
|
+
wfid = @dashboard.launch(Ruote.define { alfred })
|
|
257
|
+
r = @dashboard.wait_for(wfid)
|
|
213
258
|
|
|
214
259
|
# since it's a 'require', the code isn't reloaded
|
|
215
260
|
|
|
@@ -238,22 +283,22 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
|
|
|
238
283
|
})
|
|
239
284
|
end
|
|
240
285
|
|
|
241
|
-
@
|
|
286
|
+
@dashboard.register_participant(
|
|
242
287
|
:alfred,
|
|
243
288
|
'LoadedParticipant',
|
|
244
289
|
:load_path => path, :message => 'bondzoi')
|
|
245
290
|
|
|
246
|
-
assert_equal [ '^alfred$' ], @
|
|
291
|
+
assert_equal [ '^alfred$' ], @dashboard.context.plist.names
|
|
247
292
|
|
|
248
293
|
# first run
|
|
249
294
|
|
|
250
295
|
assert_equal(
|
|
251
296
|
[ 'LoadedParticipant',
|
|
252
297
|
{ 'load_path' => path, 'message' => 'bondzoi' } ],
|
|
253
|
-
@
|
|
298
|
+
@dashboard.context.plist.lookup_info('alfred', nil))
|
|
254
299
|
|
|
255
|
-
wfid = @
|
|
256
|
-
r = @
|
|
300
|
+
wfid = @dashboard.launch(Ruote.define { alfred })
|
|
301
|
+
r = @dashboard.wait_for(wfid)
|
|
257
302
|
|
|
258
303
|
assert_equal 'bondzoi', r['workitem']['fields']['message']
|
|
259
304
|
|
|
@@ -274,8 +319,8 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
|
|
|
274
319
|
})
|
|
275
320
|
end
|
|
276
321
|
|
|
277
|
-
wfid = @
|
|
278
|
-
r = @
|
|
322
|
+
wfid = @dashboard.launch(Ruote.define { alfred })
|
|
323
|
+
r = @dashboard.wait_for(wfid)
|
|
279
324
|
|
|
280
325
|
# since it's a 'load', the code is reloaded
|
|
281
326
|
|
|
@@ -286,49 +331,59 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
|
|
|
286
331
|
|
|
287
332
|
def test_participant_list
|
|
288
333
|
|
|
289
|
-
|
|
334
|
+
@dashboard.register_participant 'alpha', Ruote::StorageParticipant
|
|
290
335
|
|
|
291
|
-
|
|
336
|
+
#assert_equal(
|
|
337
|
+
# [ '/^alpha$/ ==> Ruote::StorageParticipant {}' ],
|
|
338
|
+
# @dashboard.participant_list.collect { |pe| pe.to_s })
|
|
292
339
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
340
|
+
plist = @dashboard.participant_list
|
|
341
|
+
|
|
342
|
+
assert_equal 1, plist.size
|
|
343
|
+
assert_equal '^alpha$', plist.first.regex
|
|
344
|
+
assert_equal 'Ruote::StorageParticipant', plist.first.classname
|
|
296
345
|
|
|
297
346
|
# launching a process with a missing participant
|
|
298
347
|
|
|
299
|
-
wfid = @
|
|
300
|
-
@
|
|
348
|
+
wfid = @dashboard.launch(Ruote.define { bravo })
|
|
349
|
+
@dashboard.wait_for(wfid)
|
|
301
350
|
|
|
302
|
-
assert_equal 1, @
|
|
351
|
+
assert_equal 1, @dashboard.process(wfid).errors.size
|
|
303
352
|
|
|
304
353
|
# fixing the error by updating the participant list
|
|
305
354
|
|
|
306
|
-
list = @
|
|
355
|
+
list = @dashboard.participant_list
|
|
307
356
|
list.first.regex = '^.+$' # instead of '^alpha$'
|
|
308
|
-
@
|
|
357
|
+
@dashboard.participant_list = list
|
|
309
358
|
|
|
310
359
|
# replay at error
|
|
311
360
|
|
|
312
|
-
@
|
|
313
|
-
@
|
|
361
|
+
@dashboard.replay_at_error(@dashboard.process(wfid).errors.first)
|
|
362
|
+
@dashboard.wait_for(:bravo)
|
|
314
363
|
|
|
315
364
|
# bravo should hold a workitem
|
|
316
365
|
|
|
317
|
-
assert_equal 1, @
|
|
318
|
-
assert_equal 'bravo', @
|
|
366
|
+
assert_equal 1, @dashboard.storage_participant.size
|
|
367
|
+
assert_equal 'bravo', @dashboard.storage_participant.first.participant_name
|
|
319
368
|
end
|
|
320
369
|
|
|
321
370
|
def test_participant_list_update
|
|
322
371
|
|
|
323
|
-
@
|
|
372
|
+
@dashboard.register_participant 'alpha', Ruote::StorageParticipant
|
|
324
373
|
|
|
325
|
-
assert_equal(
|
|
326
|
-
|
|
327
|
-
|
|
374
|
+
#assert_equal(
|
|
375
|
+
# [ '/^alpha$/ ==> Ruote::StorageParticipant {}' ],
|
|
376
|
+
# @dashboard.participant_list.collect { |pe| pe.to_s })
|
|
377
|
+
|
|
378
|
+
plist = @dashboard.participant_list
|
|
379
|
+
|
|
380
|
+
assert_equal 1, plist.size
|
|
381
|
+
assert_equal '^alpha$', plist.first.regex
|
|
382
|
+
assert_equal 'Ruote::StorageParticipant', plist.first.classname
|
|
328
383
|
|
|
329
384
|
# 0
|
|
330
385
|
|
|
331
|
-
@
|
|
386
|
+
@dashboard.participant_list = [
|
|
332
387
|
{ 'regex' => '^bravo$',
|
|
333
388
|
'classname' => 'Ruote::StorageParticipant',
|
|
334
389
|
'options' => {} },
|
|
@@ -337,47 +392,57 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
|
|
|
337
392
|
'options' => {} }
|
|
338
393
|
]
|
|
339
394
|
|
|
340
|
-
assert_equal(
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
395
|
+
#assert_equal(
|
|
396
|
+
# [
|
|
397
|
+
# '/^bravo$/ ==> Ruote::StorageParticipant {}',
|
|
398
|
+
# '/^charly$/ ==> Ruote::StorageParticipant {}'
|
|
399
|
+
# ],
|
|
400
|
+
# @dashboard.participant_list.collect { |pe| pe.to_s })
|
|
401
|
+
|
|
402
|
+
plist = @dashboard.participant_list
|
|
403
|
+
|
|
404
|
+
assert_equal 2, plist.size
|
|
405
|
+
assert_equal '^bravo$', plist.first.regex
|
|
406
|
+
assert_equal '^charly$', plist.last.regex
|
|
407
|
+
assert_equal 'Ruote::StorageParticipant', plist.first.classname
|
|
408
|
+
assert_equal 'Ruote::StorageParticipant', plist.last.classname
|
|
346
409
|
|
|
347
410
|
# 1
|
|
348
411
|
|
|
349
|
-
@
|
|
412
|
+
@dashboard.participant_list = [
|
|
350
413
|
[ '^charly$', [ 'Ruote::StorageParticipant', {} ] ],
|
|
351
414
|
[ '^bravo$', [ 'Ruote::StorageParticipant', {} ] ]
|
|
352
415
|
]
|
|
353
416
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
417
|
+
plist = @dashboard.participant_list
|
|
418
|
+
|
|
419
|
+
assert_equal 2, plist.size
|
|
420
|
+
assert_equal '^charly$', plist.first.regex
|
|
421
|
+
assert_equal '^bravo$', plist.last.regex
|
|
422
|
+
assert_equal 'Ruote::StorageParticipant', plist.first.classname
|
|
423
|
+
assert_equal 'Ruote::StorageParticipant', plist.last.classname
|
|
360
424
|
|
|
361
425
|
# 2
|
|
362
426
|
|
|
363
|
-
@
|
|
427
|
+
@dashboard.participant_list = [
|
|
364
428
|
[ '^delta$', Ruote::StorageParticipant, {} ],
|
|
365
429
|
[ '^echo$', 'Ruote::StorageParticipant', {} ]
|
|
366
430
|
]
|
|
367
431
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
432
|
+
plist = @dashboard.participant_list
|
|
433
|
+
|
|
434
|
+
assert_equal 2, plist.size
|
|
435
|
+
assert_equal '^delta$', plist.first.regex
|
|
436
|
+
assert_equal '^echo$', plist.last.regex
|
|
437
|
+
assert_equal 'Ruote::StorageParticipant', plist.first.classname
|
|
438
|
+
assert_equal 'Ruote::StorageParticipant', plist.last.classname
|
|
374
439
|
end
|
|
375
440
|
|
|
376
441
|
class ParticipantCharlie; end
|
|
377
442
|
|
|
378
443
|
def test_register_block
|
|
379
444
|
|
|
380
|
-
@
|
|
445
|
+
@dashboard.register do
|
|
381
446
|
alpha 'Participants::Alpha', 'flavour' => 'vanilla'
|
|
382
447
|
participant 'bravo', 'Participants::Bravo', :flavour => 'peach'
|
|
383
448
|
participant 'charlie', 'Participants::Charlie'
|
|
@@ -387,11 +452,11 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
|
|
|
387
452
|
catchall 'Participants::Zebda', 'flavour' => 'coconut'
|
|
388
453
|
end
|
|
389
454
|
|
|
390
|
-
assert_equal 5, @
|
|
455
|
+
assert_equal 5, @dashboard.participant_list.size
|
|
391
456
|
|
|
392
457
|
assert_equal(
|
|
393
458
|
%w[ ^alpha$ ^bravo$ ^charlie$ ^david$ ^.+$ ],
|
|
394
|
-
@
|
|
459
|
+
@dashboard.participant_list.collect { |pe| pe.regex.to_s })
|
|
395
460
|
|
|
396
461
|
assert_equal(
|
|
397
462
|
%w[ Participants::Alpha
|
|
@@ -399,33 +464,96 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
|
|
|
399
464
|
Participants::Charlie
|
|
400
465
|
Ruote::BlockParticipant
|
|
401
466
|
Participants::Zebda ],
|
|
402
|
-
@
|
|
467
|
+
@dashboard.participant_list.collect { |pe| pe.classname })
|
|
403
468
|
|
|
404
469
|
assert_equal(
|
|
405
470
|
%w[ vanilla peach nil nil coconut ],
|
|
406
|
-
@
|
|
471
|
+
@dashboard.participant_list.collect { |pe|
|
|
407
472
|
(pe.options['flavour'] || 'nil') rescue 'nil'
|
|
408
473
|
})
|
|
409
474
|
end
|
|
410
475
|
|
|
476
|
+
def test_register_block_and_block
|
|
477
|
+
|
|
478
|
+
@dashboard.register do
|
|
479
|
+
alpha do |workitem|
|
|
480
|
+
a
|
|
481
|
+
end
|
|
482
|
+
participant 'bravo' do |workitem|
|
|
483
|
+
b
|
|
484
|
+
end
|
|
485
|
+
end
|
|
486
|
+
|
|
487
|
+
assert_equal(
|
|
488
|
+
[ [ 'on_workitem' ], [ 'on_workitem' ] ],
|
|
489
|
+
@dashboard.participant_list.collect { |pe| pe.options.keys })
|
|
490
|
+
end
|
|
491
|
+
|
|
411
492
|
def test_register_block_catchall_default
|
|
412
493
|
|
|
413
|
-
@
|
|
494
|
+
@dashboard.register do
|
|
414
495
|
catchall
|
|
415
496
|
end
|
|
416
497
|
|
|
417
498
|
assert_equal(
|
|
418
499
|
%w[ Ruote::StorageParticipant ],
|
|
419
|
-
@
|
|
500
|
+
@dashboard.participant_list.collect { |pe| pe.classname })
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
def test_register_block_catch_all
|
|
504
|
+
|
|
505
|
+
@dashboard.register do
|
|
506
|
+
catch_all
|
|
507
|
+
end
|
|
508
|
+
|
|
509
|
+
assert_equal(
|
|
510
|
+
%w[ Ruote::StorageParticipant ],
|
|
511
|
+
@dashboard.participant_list.collect { |pe| pe.classname })
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
def test_register_block_override_false
|
|
515
|
+
|
|
516
|
+
@dashboard.register do
|
|
517
|
+
alpha 'KlassA'
|
|
518
|
+
alpha 'KlassB'
|
|
519
|
+
end
|
|
520
|
+
|
|
521
|
+
plist = @dashboard.participant_list
|
|
522
|
+
|
|
523
|
+
assert_equal(%w[ ^alpha$ ^alpha$ ], plist.collect { |pe| pe.regex })
|
|
524
|
+
assert_equal(%w[ KlassA KlassB ], plist.collect { |pe| pe.classname })
|
|
525
|
+
assert_equal({}, plist.first.options)
|
|
526
|
+
end
|
|
527
|
+
|
|
528
|
+
def test_register_block_clears
|
|
529
|
+
|
|
530
|
+
@dashboard.register 'alpha', 'AlphaParticipant'
|
|
531
|
+
|
|
532
|
+
@dashboard.register do
|
|
533
|
+
bravo 'BravoParticipant'
|
|
534
|
+
end
|
|
535
|
+
|
|
536
|
+
assert_equal 1, @dashboard.participant_list.size
|
|
537
|
+
end
|
|
538
|
+
|
|
539
|
+
def test_register_block_clear_option
|
|
540
|
+
|
|
541
|
+
@dashboard.register 'alpha', 'AlphaParticipant'
|
|
542
|
+
|
|
543
|
+
@dashboard.register :clear => false do
|
|
544
|
+
bravo 'BravoParticipant'
|
|
545
|
+
end
|
|
546
|
+
|
|
547
|
+
assert_equal 2, @dashboard.participant_list.size
|
|
420
548
|
end
|
|
421
549
|
|
|
422
550
|
def test_argument_error_on_instantiated_participant
|
|
423
551
|
|
|
424
552
|
assert_raise ArgumentError do
|
|
425
|
-
@
|
|
553
|
+
@dashboard.register 'alpha', Ruote::StorageParticipant.new
|
|
426
554
|
end
|
|
427
555
|
assert_raise ArgumentError do
|
|
428
|
-
@
|
|
556
|
+
@dashboard.register 'alpha', Ruote::StorageParticipant.new, 'hello' => 'kitty'
|
|
429
557
|
end
|
|
430
558
|
end
|
|
431
559
|
|
|
@@ -444,19 +572,19 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
|
|
|
444
572
|
|
|
445
573
|
def test_engine_participant
|
|
446
574
|
|
|
447
|
-
@
|
|
575
|
+
@dashboard.register do
|
|
448
576
|
alpha AaParticipant
|
|
449
577
|
bravo BbParticipant
|
|
450
578
|
catchall AaParticipant, :catch_all => 'oh yeah'
|
|
451
579
|
end
|
|
452
580
|
|
|
453
|
-
assert_equal AaParticipant, @
|
|
454
|
-
assert_equal BbParticipant, @
|
|
581
|
+
assert_equal AaParticipant, @dashboard.participant('alpha').class
|
|
582
|
+
assert_equal BbParticipant, @dashboard.participant('bravo').class
|
|
455
583
|
|
|
456
|
-
assert_equal AaParticipant, @
|
|
457
|
-
assert_equal 'oh yeah', @
|
|
584
|
+
assert_equal AaParticipant, @dashboard.participant('charly').class
|
|
585
|
+
assert_equal 'oh yeah', @dashboard.participant('charly').opts['catch_all']
|
|
458
586
|
|
|
459
|
-
assert_equal Ruote::Context, @
|
|
587
|
+
assert_equal Ruote::Context, @dashboard.participant('alpha').context.class
|
|
460
588
|
end
|
|
461
589
|
end
|
|
462
590
|
|