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
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
|
|
2
|
+
#
|
|
3
|
+
# testing ruote
|
|
4
|
+
#
|
|
5
|
+
# Tue Apr 26 03:30:29 JST 2011
|
|
6
|
+
#
|
|
7
|
+
# between Changi and Haneda (JA622A)
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
require File.expand_path('../base', __FILE__)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class FtCodeParticipantTest < Test::Unit::TestCase
|
|
14
|
+
include FunctionalBase
|
|
15
|
+
|
|
16
|
+
def test_participant_in_vars_not_enabled
|
|
17
|
+
|
|
18
|
+
pdef = Ruote.process_definition do
|
|
19
|
+
set 'v:alpha' => '''
|
|
20
|
+
def consume(wi)
|
|
21
|
+
context.tracer << "#{wi.participant_name}\n"
|
|
22
|
+
end
|
|
23
|
+
def cancel(fei, flavour)
|
|
24
|
+
context.tracer << "cancelled\n"
|
|
25
|
+
end
|
|
26
|
+
'''
|
|
27
|
+
alpha
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
wfid = @dashboard.launch(pdef)
|
|
31
|
+
r = @dashboard.wait_for(wfid)
|
|
32
|
+
|
|
33
|
+
assert_equal 'error_intercepted', r['action']
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_workitems_dispatching_message
|
|
37
|
+
|
|
38
|
+
@dashboard.context['participant_in_variable_enabled'] = true
|
|
39
|
+
|
|
40
|
+
pdef = Ruote.process_definition do
|
|
41
|
+
set 'v:alpha' => '''
|
|
42
|
+
def consume(wi)
|
|
43
|
+
context.tracer << "#{wi.participant_name}\n"
|
|
44
|
+
end
|
|
45
|
+
def cancel(fei, flavour)
|
|
46
|
+
context.tracer << "cancelled\n"
|
|
47
|
+
end
|
|
48
|
+
'''
|
|
49
|
+
alpha
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
wfid = @dashboard.launch(pdef)
|
|
53
|
+
|
|
54
|
+
@dashboard.wait_for(:alpha)
|
|
55
|
+
@dashboard.wait_for(1)
|
|
56
|
+
|
|
57
|
+
assert_equal 'alpha', @tracer.to_s
|
|
58
|
+
|
|
59
|
+
@dashboard.cancel(wfid)
|
|
60
|
+
@dashboard.wait_for(wfid)
|
|
61
|
+
|
|
62
|
+
assert_equal "alpha\ncancelled", @tracer.to_s
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
|
|
2
|
+
#
|
|
3
|
+
# testing ruote
|
|
4
|
+
#
|
|
5
|
+
# Thu Jun 9 11:37:56 JST 2011
|
|
6
|
+
#
|
|
7
|
+
|
|
8
|
+
require File.expand_path('../base', __FILE__)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class FtTrailingFields < Test::Unit::TestCase
|
|
12
|
+
include FunctionalBase
|
|
13
|
+
|
|
14
|
+
def test_t_fields
|
|
15
|
+
|
|
16
|
+
pdef = Ruote.define do
|
|
17
|
+
alpha
|
|
18
|
+
echo 'a', :if => '${t.verbose}'
|
|
19
|
+
bravo
|
|
20
|
+
echo 'b', :if => '${t.verbose}'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
@dashboard.register(:alpha) { |wi| wi.t['verbose'] = true }
|
|
24
|
+
@dashboard.register(:bravo, Ruote::NoOpParticipant)
|
|
25
|
+
|
|
26
|
+
#@dashboard.noisy = true
|
|
27
|
+
|
|
28
|
+
wfid = @dashboard.launch(pdef)
|
|
29
|
+
@dashboard.wait_for(wfid)
|
|
30
|
+
|
|
31
|
+
assert_equal 'a', @tracer.to_s
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
|
|
2
|
+
#
|
|
3
|
+
# testing ruote
|
|
4
|
+
#
|
|
5
|
+
# Sat Jun 25 21:00:57 JST 2011
|
|
6
|
+
#
|
|
7
|
+
|
|
8
|
+
require File.expand_path('../base', __FILE__)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class FtExpNameAndDollarSubstitution < Test::Unit::TestCase
|
|
12
|
+
include FunctionalBase
|
|
13
|
+
|
|
14
|
+
def test_t_fields
|
|
15
|
+
|
|
16
|
+
pdef = <<-EOS
|
|
17
|
+
define
|
|
18
|
+
set 'v:x': alpha
|
|
19
|
+
user_${v:x}
|
|
20
|
+
user_${v:nada}
|
|
21
|
+
EOS
|
|
22
|
+
|
|
23
|
+
@dashboard.register /^user_/ do |wi|
|
|
24
|
+
tracer << wi.participant_name + "\n"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
#@dashboard.noisy = true
|
|
28
|
+
|
|
29
|
+
wfid = @dashboard.launch(pdef)
|
|
30
|
+
@dashboard.wait_for(wfid)
|
|
31
|
+
|
|
32
|
+
assert_equal %w[ user_alpha user_ ], @tracer.to_a
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
|
|
2
|
+
#
|
|
3
|
+
# testing ruote
|
|
4
|
+
#
|
|
5
|
+
# Mon Jun 27 15:18:18 JST 2011
|
|
6
|
+
#
|
|
7
|
+
|
|
8
|
+
require File.expand_path('../base', __FILE__)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class FtParticipantsTwoTwoOne < Test::Unit::TestCase
|
|
12
|
+
include FunctionalBase
|
|
13
|
+
|
|
14
|
+
#
|
|
15
|
+
# on_workitem / consume
|
|
16
|
+
|
|
17
|
+
class ClassicParticipant
|
|
18
|
+
include Ruote::LocalParticipant
|
|
19
|
+
def consume(workitem)
|
|
20
|
+
(workitem.fields['trace'] ||= []) << workitem.participant_name
|
|
21
|
+
reply_to_engine(workitem)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class AlphaParticipant
|
|
26
|
+
include Ruote::LocalParticipant
|
|
27
|
+
def on_workitem(workitem)
|
|
28
|
+
(workitem.fields['trace'] ||= []) << workitem.participant_name
|
|
29
|
+
reply_to_engine(workitem)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class BravoParticipant
|
|
34
|
+
include Ruote::LocalParticipant
|
|
35
|
+
def on_workitem
|
|
36
|
+
(workitem.fields['trace'] ||= []) << workitem.participant_name
|
|
37
|
+
reply_to_engine
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
class CharlyParticipant
|
|
42
|
+
include Ruote::LocalParticipant
|
|
43
|
+
def consume
|
|
44
|
+
(workitem.fields['trace'] ||= []) << workitem.participant_name
|
|
45
|
+
reply_to_engine
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
class DeltaParticipant
|
|
50
|
+
include Ruote::LocalParticipant
|
|
51
|
+
def on_workitem
|
|
52
|
+
(workitem.fields['trace'] ||= []) << workitem.participant_name
|
|
53
|
+
reply
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def test_on_workitem
|
|
58
|
+
|
|
59
|
+
@dashboard.register do
|
|
60
|
+
classic ClassicParticipant
|
|
61
|
+
alpha AlphaParticipant
|
|
62
|
+
bravo BravoParticipant
|
|
63
|
+
charly CharlyParticipant
|
|
64
|
+
delta DeltaParticipant
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
#@dashboard.noisy = true
|
|
68
|
+
|
|
69
|
+
wfid = @dashboard.launch(Ruote.define do
|
|
70
|
+
classic; alpha; bravo; charly; delta
|
|
71
|
+
end)
|
|
72
|
+
|
|
73
|
+
r = @dashboard.wait_for(wfid)
|
|
74
|
+
|
|
75
|
+
assert_equal(
|
|
76
|
+
%w[ classic alpha bravo charly delta ], r['workitem']['fields']['trace'])
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
#
|
|
80
|
+
# on_cancel / cancel
|
|
81
|
+
|
|
82
|
+
class ZuluParticipant
|
|
83
|
+
include Ruote::LocalParticipant
|
|
84
|
+
def on_workitem
|
|
85
|
+
# do nothing
|
|
86
|
+
end
|
|
87
|
+
def cancel(fei, flavour)
|
|
88
|
+
(workitem.fields['trace'] ||= []) <<
|
|
89
|
+
"#{workitem.participant_name}/#{fei.sid}/#{flavour}"
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
class YankeeParticipant
|
|
94
|
+
include Ruote::LocalParticipant
|
|
95
|
+
def on_workitem
|
|
96
|
+
# do nothing
|
|
97
|
+
end
|
|
98
|
+
def on_cancel(fei, flavour)
|
|
99
|
+
(workitem.fields['trace'] ||= []) <<
|
|
100
|
+
"#{workitem.participant_name}/#{fei.sid}/#{flavour}"
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
class XrayParticipant
|
|
105
|
+
include Ruote::LocalParticipant
|
|
106
|
+
def on_workitem
|
|
107
|
+
# do nothing
|
|
108
|
+
end
|
|
109
|
+
def on_cancel
|
|
110
|
+
(workitem.fields['trace'] ||= []) <<
|
|
111
|
+
"#{workitem.participant_name}/#{fei.sid}/#{flavour}"
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def test_on_cancel
|
|
116
|
+
|
|
117
|
+
@dashboard.register do
|
|
118
|
+
xray XrayParticipant
|
|
119
|
+
yankee YankeeParticipant
|
|
120
|
+
zulu ZuluParticipant
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
#@dashboard.noisy = true
|
|
124
|
+
|
|
125
|
+
wfid = @dashboard.launch(Ruote.define do
|
|
126
|
+
xray; yankee; zulu
|
|
127
|
+
end)
|
|
128
|
+
|
|
129
|
+
[ :xray, :yankee, :zulu ].each do |participant|
|
|
130
|
+
r = @dashboard.wait_for(participant)
|
|
131
|
+
@dashboard.wait_for(1)
|
|
132
|
+
@dashboard.cancel(r['fei'])
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
@dashboard.wait_for(wfid)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
#
|
|
139
|
+
# accept?
|
|
140
|
+
|
|
141
|
+
class AcAlphaParticipant
|
|
142
|
+
include Ruote::LocalParticipant
|
|
143
|
+
def on_workitem
|
|
144
|
+
@context.tracer << workitem.participant_name + "\n"
|
|
145
|
+
reply
|
|
146
|
+
end
|
|
147
|
+
def accept?(workitem)
|
|
148
|
+
@context.tracer << "a/#{workitem.participant_name}\n"
|
|
149
|
+
true
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
class AcBravoParticipant
|
|
154
|
+
include Ruote::LocalParticipant
|
|
155
|
+
def on_workitem
|
|
156
|
+
@context.tracer << workitem.participant_name + "\n"
|
|
157
|
+
reply
|
|
158
|
+
end
|
|
159
|
+
def accept?
|
|
160
|
+
@context.tracer << "a/#{workitem.participant_name}\n"
|
|
161
|
+
true
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def test_accept
|
|
166
|
+
|
|
167
|
+
#@dashboard.noisy = true
|
|
168
|
+
|
|
169
|
+
@dashboard.register do
|
|
170
|
+
alpha AcAlphaParticipant
|
|
171
|
+
bravo AcBravoParticipant
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
wfid = @dashboard.launch(Ruote.define do
|
|
175
|
+
alpha; bravo
|
|
176
|
+
end)
|
|
177
|
+
|
|
178
|
+
@dashboard.wait_for(wfid)
|
|
179
|
+
|
|
180
|
+
assert_equal %w[ a/alpha alpha a/bravo bravo ], @tracer.to_a
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
#
|
|
184
|
+
# on_reply
|
|
185
|
+
|
|
186
|
+
class OrAlphaParticipant
|
|
187
|
+
include Ruote::LocalParticipant
|
|
188
|
+
def on_workitem
|
|
189
|
+
@context.tracer << "ow/#{workitem.participant_name}\n"
|
|
190
|
+
reply
|
|
191
|
+
end
|
|
192
|
+
def on_reply(workitem)
|
|
193
|
+
@context.tracer << "or/#{workitem.participant_name}\n"
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
class OrBravoParticipant
|
|
198
|
+
include Ruote::LocalParticipant
|
|
199
|
+
def on_workitem
|
|
200
|
+
@context.tracer << "ow/#{workitem.participant_name}\n"
|
|
201
|
+
reply
|
|
202
|
+
end
|
|
203
|
+
def on_reply
|
|
204
|
+
@context.tracer << "or/#{workitem.participant_name}\n"
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def test_on_reply
|
|
209
|
+
|
|
210
|
+
#@dashboard.noisy = true
|
|
211
|
+
|
|
212
|
+
@dashboard.register do
|
|
213
|
+
alpha OrAlphaParticipant
|
|
214
|
+
bravo OrBravoParticipant
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
wfid = @dashboard.launch(Ruote.define do
|
|
218
|
+
alpha; bravo
|
|
219
|
+
end)
|
|
220
|
+
|
|
221
|
+
@dashboard.wait_for(wfid)
|
|
222
|
+
|
|
223
|
+
assert_equal %w[ ow/alpha or/alpha ow/bravo or/bravo ], @tracer.to_a
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
#
|
|
227
|
+
# do_not_thread? / do_not_thread
|
|
228
|
+
|
|
229
|
+
class DntAlphaParticipant
|
|
230
|
+
include Ruote::LocalParticipant
|
|
231
|
+
def on_workitem
|
|
232
|
+
@context.tracer << "ow/#{workitem.participant_name}\n"
|
|
233
|
+
reply
|
|
234
|
+
end
|
|
235
|
+
def do_not_thread(workitem)
|
|
236
|
+
@context.tracer << "dnt/#{workitem.participant_name}\n"
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
class DntBravoParticipant
|
|
241
|
+
include Ruote::LocalParticipant
|
|
242
|
+
def on_workitem
|
|
243
|
+
@context.tracer << "ow/#{workitem.participant_name}\n"
|
|
244
|
+
reply
|
|
245
|
+
end
|
|
246
|
+
def do_not_thread?(workitem)
|
|
247
|
+
@context.tracer << "dnt/#{workitem.participant_name}\n"
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
class DntCharlyParticipant
|
|
252
|
+
include Ruote::LocalParticipant
|
|
253
|
+
def on_workitem
|
|
254
|
+
@context.tracer << "ow/#{workitem.participant_name}\n"
|
|
255
|
+
reply
|
|
256
|
+
end
|
|
257
|
+
def do_not_thread?
|
|
258
|
+
@context.tracer << "dnt/#{workitem.participant_name}\n"
|
|
259
|
+
end
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
class DntDeltaParticipant
|
|
263
|
+
include Ruote::LocalParticipant
|
|
264
|
+
def on_workitem
|
|
265
|
+
@context.tracer << "ow/#{workitem.participant_name}\n"
|
|
266
|
+
reply
|
|
267
|
+
end
|
|
268
|
+
def dont_thread?
|
|
269
|
+
@context.tracer << "dnt/#{workitem.participant_name}\n"
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
def test_do_not_thread
|
|
274
|
+
|
|
275
|
+
#@dashboard.noisy = true
|
|
276
|
+
|
|
277
|
+
@dashboard.register do
|
|
278
|
+
alpha DntAlphaParticipant
|
|
279
|
+
bravo DntBravoParticipant
|
|
280
|
+
charly DntCharlyParticipant
|
|
281
|
+
delta DntDeltaParticipant
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
wfid = @dashboard.launch(Ruote.define do
|
|
285
|
+
alpha; bravo; charly; delta
|
|
286
|
+
end)
|
|
287
|
+
|
|
288
|
+
@dashboard.wait_for(wfid)
|
|
289
|
+
|
|
290
|
+
assert_equal(
|
|
291
|
+
%w[ dnt/alpha ow/alpha
|
|
292
|
+
dnt/bravo ow/bravo
|
|
293
|
+
dnt/charly ow/charly
|
|
294
|
+
dnt/delta ow/delta ],
|
|
295
|
+
@tracer.to_a)
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
#
|
|
299
|
+
# on_pause / on_resume
|
|
300
|
+
|
|
301
|
+
class OpAlphaParticipant
|
|
302
|
+
include Ruote::LocalParticipant
|
|
303
|
+
def on_workitem
|
|
304
|
+
@context.tracer << "ow/#{workitem.participant_name}\n"
|
|
305
|
+
end
|
|
306
|
+
def on_cancel
|
|
307
|
+
@context.tracer << "oc/#{fei.expid}\n"
|
|
308
|
+
end
|
|
309
|
+
def on_pause(fei)
|
|
310
|
+
@context.tracer << "op/#{fei.expid}\n"
|
|
311
|
+
end
|
|
312
|
+
def on_resume(fei)
|
|
313
|
+
@context.tracer << "or/#{fei.expid}\n"
|
|
314
|
+
end
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
class OpBravoParticipant
|
|
318
|
+
include Ruote::LocalParticipant
|
|
319
|
+
def on_workitem
|
|
320
|
+
@context.tracer << "ow/#{workitem.participant_name}\n"
|
|
321
|
+
end
|
|
322
|
+
def on_pause
|
|
323
|
+
@context.tracer << "op/#{fei.expid}\n"
|
|
324
|
+
end
|
|
325
|
+
def on_resume
|
|
326
|
+
@context.tracer << "or/#{fei.expid}\n"
|
|
327
|
+
end
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
def test_on_pause_on_resume
|
|
331
|
+
|
|
332
|
+
#@dashboard.noisy = true
|
|
333
|
+
|
|
334
|
+
@dashboard.register do
|
|
335
|
+
alpha OpAlphaParticipant
|
|
336
|
+
bravo OpBravoParticipant
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
wfid = @dashboard.launch(Ruote.define do
|
|
340
|
+
alpha; bravo
|
|
341
|
+
end)
|
|
342
|
+
|
|
343
|
+
r = @dashboard.wait_for(:alpha)
|
|
344
|
+
@dashboard.wait_for(1)
|
|
345
|
+
|
|
346
|
+
@dashboard.pause(r['fei'])
|
|
347
|
+
@dashboard.wait_for(2)
|
|
348
|
+
|
|
349
|
+
@dashboard.resume(r['fei'])
|
|
350
|
+
@dashboard.wait_for(2)
|
|
351
|
+
|
|
352
|
+
@dashboard.cancel(r['fei'])
|
|
353
|
+
|
|
354
|
+
r = @dashboard.wait_for(:bravo)
|
|
355
|
+
@dashboard.wait_for(1)
|
|
356
|
+
|
|
357
|
+
@dashboard.pause(r['fei'])
|
|
358
|
+
@dashboard.wait_for(2)
|
|
359
|
+
|
|
360
|
+
@dashboard.resume(r['fei'])
|
|
361
|
+
@dashboard.wait_for(2)
|
|
362
|
+
|
|
363
|
+
assert_equal(
|
|
364
|
+
%w[ ow/alpha op/0_0 or/0_0 oc/0_0 ow/bravo op/0_1 or/0_1 ],
|
|
365
|
+
@tracer.to_a)
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
#
|
|
369
|
+
# implicit participant name
|
|
370
|
+
|
|
371
|
+
class IpnParticipant
|
|
372
|
+
include Ruote::LocalParticipant
|
|
373
|
+
def consume
|
|
374
|
+
@context.tracer << participant_name
|
|
375
|
+
reply
|
|
376
|
+
end
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
def test_implicit_participant_name
|
|
380
|
+
|
|
381
|
+
@dashboard.register { hypno IpnParticipant }
|
|
382
|
+
|
|
383
|
+
#@dashboard.noisy = true
|
|
384
|
+
|
|
385
|
+
wfid = @dashboard.launch(Ruote.define do
|
|
386
|
+
hypno
|
|
387
|
+
end)
|
|
388
|
+
|
|
389
|
+
@dashboard.wait_for(wfid)
|
|
390
|
+
|
|
391
|
+
assert_equal 'hypno', @tracer.to_s
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
#
|
|
395
|
+
# fexp, fexp(fei)
|
|
396
|
+
# workitem, workitem(fei)
|
|
397
|
+
# applied_workitem, applied_workitem(fei)
|
|
398
|
+
|
|
399
|
+
class FexpParticipant
|
|
400
|
+
include Ruote::LocalParticipant
|
|
401
|
+
def consume
|
|
402
|
+
|
|
403
|
+
@context.tracer << fexp.lookup_variable('nada') + "\n"
|
|
404
|
+
@context.tracer << fexp(fei).lookup_variable('nada') + "\n"
|
|
405
|
+
|
|
406
|
+
@context.tracer << workitem.fields.size.to_s + "\n"
|
|
407
|
+
@context.tracer << workitem(fei).fields.size.to_s + "\n"
|
|
408
|
+
|
|
409
|
+
@context.tracer << applied_workitem.fields.size.to_s + "\n"
|
|
410
|
+
@context.tracer << applied_workitem(fei).fields.size.to_s + "\n"
|
|
411
|
+
|
|
412
|
+
reply
|
|
413
|
+
end
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
def test_helper_methods
|
|
417
|
+
|
|
418
|
+
@dashboard.register { felix FexpParticipant }
|
|
419
|
+
|
|
420
|
+
#@dashboard.noisy = true
|
|
421
|
+
|
|
422
|
+
wfid = @dashboard.launch(
|
|
423
|
+
Ruote.define() { felix },
|
|
424
|
+
{},
|
|
425
|
+
{ 'nada' => 'surf' })
|
|
426
|
+
|
|
427
|
+
@dashboard.wait_for(wfid)
|
|
428
|
+
|
|
429
|
+
assert_equal(
|
|
430
|
+
%w[ surf surf 2 1 1 1 ],
|
|
431
|
+
@tracer.to_a)
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
#
|
|
435
|
+
# lookup_variable(key)
|
|
436
|
+
|
|
437
|
+
class LvParticipant
|
|
438
|
+
include Ruote::LocalParticipant
|
|
439
|
+
def on_workitem
|
|
440
|
+
@context.tracer << lookup_variable('nada') + "\n"
|
|
441
|
+
reply
|
|
442
|
+
end
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
def test_lookup_variable
|
|
446
|
+
|
|
447
|
+
@dashboard.register { louis LvParticipant }
|
|
448
|
+
|
|
449
|
+
#@dashboard.noisy = true
|
|
450
|
+
|
|
451
|
+
wfid = @dashboard.launch(Ruote.define() { louis }, {}, { 'nada' => 'surf' })
|
|
452
|
+
|
|
453
|
+
@dashboard.wait_for(wfid)
|
|
454
|
+
|
|
455
|
+
assert_equal 'surf', @tracer.to_s
|
|
456
|
+
end
|
|
457
|
+
end
|
|
458
|
+
|