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
|
# Wed Jul 1 09:51:30 JST 2009
|
|
6
6
|
#
|
|
7
7
|
|
|
8
|
-
require File.
|
|
8
|
+
require File.expand_path('../base', __FILE__)
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class FtParticipantParamsTest < Test::Unit::TestCase
|
|
@@ -21,25 +21,78 @@ class FtParticipantParamsTest < Test::Unit::TestCase
|
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
alpha = @
|
|
24
|
+
alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
|
|
25
25
|
|
|
26
26
|
#noisy
|
|
27
27
|
|
|
28
|
-
wfid = @
|
|
28
|
+
wfid = @dashboard.launch(pdef)
|
|
29
29
|
|
|
30
30
|
wait_for(:alpha)
|
|
31
31
|
assert_equal({ 'ref' => 'alpha' }, alpha.first.fields['params'])
|
|
32
|
-
alpha.
|
|
32
|
+
alpha.proceed(alpha.first)
|
|
33
33
|
|
|
34
34
|
wait_for(:alpha)
|
|
35
35
|
assert_equal('buy groceries', alpha.first.fields['params']['activity'])
|
|
36
|
-
alpha.
|
|
36
|
+
alpha.proceed(alpha.first)
|
|
37
37
|
|
|
38
38
|
wait_for(:alpha)
|
|
39
39
|
assert_equal({ 'ref' => 'alpha' }, alpha.first.fields['params'])
|
|
40
|
-
alpha.
|
|
40
|
+
alpha.proceed(alpha.first)
|
|
41
41
|
|
|
42
42
|
wait_for(wfid)
|
|
43
43
|
end
|
|
44
|
+
|
|
45
|
+
def test_attribute_text_param
|
|
46
|
+
|
|
47
|
+
pdef = Ruote.process_definition do
|
|
48
|
+
alpha 'nemo', :action => 'nada'
|
|
49
|
+
bravo
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
@dashboard.register { catchall }
|
|
53
|
+
|
|
54
|
+
#@dashboard.noisy = true
|
|
55
|
+
|
|
56
|
+
@dashboard.launch(pdef)
|
|
57
|
+
|
|
58
|
+
@dashboard.wait_for(:alpha)
|
|
59
|
+
workitem = @dashboard.storage_participant.first
|
|
60
|
+
|
|
61
|
+
assert_equal(
|
|
62
|
+
{ 'nemo' => nil, 'action' => 'nada', 'ref' => 'alpha' }, workitem.params)
|
|
63
|
+
assert_equal(
|
|
64
|
+
'nemo', workitem.param_text)
|
|
65
|
+
|
|
66
|
+
@dashboard.storage_participant.proceed(workitem)
|
|
67
|
+
|
|
68
|
+
@dashboard.wait_for(:bravo)
|
|
69
|
+
workitem = @dashboard.storage_participant.first
|
|
70
|
+
|
|
71
|
+
assert_equal(
|
|
72
|
+
nil, workitem.param_text)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_param_or_field
|
|
76
|
+
|
|
77
|
+
pdef = Ruote.process_definition do
|
|
78
|
+
alpha
|
|
79
|
+
alpha :theme => :wagner
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
@dashboard.register :alpha do |workitem|
|
|
83
|
+
context.tracer << "pof_theme:#{workitem.param_or_field(:theme)}\n"
|
|
84
|
+
context.tracer << "fop_theme:#{workitem.field_or_param(:theme)}\n"
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
#@dashboard.noisy = true
|
|
88
|
+
|
|
89
|
+
wfid = @dashboard.launch(pdef, 'theme' => 'mozart')
|
|
90
|
+
@dashboard.wait_for(wfid)
|
|
91
|
+
|
|
92
|
+
assert_equal %w[
|
|
93
|
+
pof_theme:mozart fop_theme:mozart
|
|
94
|
+
pof_theme:wagner fop_theme:mozart
|
|
95
|
+
], @tracer.to_a
|
|
96
|
+
end
|
|
44
97
|
end
|
|
45
98
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# Fri Jul 3 19:46:22 JST 2009
|
|
6
6
|
#
|
|
7
7
|
|
|
8
|
-
require File.
|
|
8
|
+
require File.expand_path('../base', __FILE__)
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class FtConditionalTest < Test::Unit::TestCase
|
|
@@ -80,6 +80,8 @@ class FtConditionalTest < Test::Unit::TestCase
|
|
|
80
80
|
|
|
81
81
|
set 'f:t' => true
|
|
82
82
|
set 'f:f' => false
|
|
83
|
+
set 'f:name' => 'n'
|
|
84
|
+
set 'f:city' => 'c'
|
|
83
85
|
|
|
84
86
|
sequence do
|
|
85
87
|
|
|
@@ -90,10 +92,74 @@ class FtConditionalTest < Test::Unit::TestCase
|
|
|
90
92
|
echo 'c', :if => '${f:t} and ${f:f}'
|
|
91
93
|
echo 'd', :if => '${f:t} and (${f:t} or ${f:f})'
|
|
92
94
|
echo 'e', :if => '${f:t} and (${f:t} and ${f:f})'
|
|
95
|
+
echo 'f', :if => '${name} == n and ${city} == c'
|
|
93
96
|
end
|
|
94
97
|
end
|
|
95
98
|
|
|
96
|
-
assert_trace(%w[ true/false a b d ], pdef)
|
|
99
|
+
assert_trace(%w[ true/false a b d f ], pdef)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def test_if_booleans
|
|
103
|
+
|
|
104
|
+
pdef = Ruote.define do
|
|
105
|
+
|
|
106
|
+
echo 'a', :if => true
|
|
107
|
+
echo '.'
|
|
108
|
+
echo 'b', :if => 'true'
|
|
109
|
+
echo '.'
|
|
110
|
+
echo 'c', :if => false
|
|
111
|
+
echo '.'
|
|
112
|
+
echo 'd', :if => 'false'
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
wfid = @dashboard.launch(pdef)
|
|
116
|
+
r = @dashboard.wait_for(wfid)
|
|
117
|
+
|
|
118
|
+
assert_equal 'terminated', r['action']
|
|
119
|
+
assert_equal 'a.b..', @tracer.to_a.join
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def test_unless_booleans
|
|
123
|
+
|
|
124
|
+
pdef = Ruote.define do
|
|
125
|
+
|
|
126
|
+
echo 'a', :unless => true
|
|
127
|
+
echo '.'
|
|
128
|
+
echo 'b', :unless => 'true'
|
|
129
|
+
echo '.'
|
|
130
|
+
echo 'c', :unless => false
|
|
131
|
+
echo '.'
|
|
132
|
+
echo 'd', :unless => 'false'
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
wfid = @dashboard.launch(pdef)
|
|
136
|
+
r = @dashboard.wait_for(wfid)
|
|
137
|
+
|
|
138
|
+
assert_equal 'terminated', r['action']
|
|
139
|
+
assert_equal '..c.d', @tracer.to_a.join
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def test_with_numbers
|
|
143
|
+
|
|
144
|
+
pdef = Ruote.define do
|
|
145
|
+
|
|
146
|
+
set 'commission' => 2.310000
|
|
147
|
+
set 'scommission' => '2.310000'
|
|
148
|
+
|
|
149
|
+
echo 'a', :if => '${f:commission} > 0'
|
|
150
|
+
echo '.'
|
|
151
|
+
echo 'b', :unless => '${f:commission} > 0'
|
|
152
|
+
echo '.'
|
|
153
|
+
echo 'c', :if => '${f:scommission} > 0'
|
|
154
|
+
echo '.'
|
|
155
|
+
echo 'c', :unless => '${f:scommission} > 0'
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
wfid = @dashboard.launch(pdef)
|
|
159
|
+
r = @dashboard.wait_for(wfid)
|
|
160
|
+
|
|
161
|
+
assert_equal 'terminated', r['action']
|
|
162
|
+
assert_equal 'a..c.', @tracer.to_a.join
|
|
97
163
|
end
|
|
98
164
|
end
|
|
99
165
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# Sun Jul 5 22:56:06 JST 2009
|
|
6
6
|
#
|
|
7
7
|
|
|
8
|
-
require File.
|
|
8
|
+
require File.expand_path('../base', __FILE__)
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class FtKillTest < Test::Unit::TestCase
|
|
@@ -17,23 +17,36 @@ class FtKillTest < Test::Unit::TestCase
|
|
|
17
17
|
alpha
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
-
alpha = @
|
|
20
|
+
alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
|
|
21
21
|
|
|
22
22
|
#noisy
|
|
23
23
|
|
|
24
|
-
wfid = @
|
|
24
|
+
wfid = @dashboard.launch(pdef)
|
|
25
25
|
wait_for(:alpha)
|
|
26
26
|
|
|
27
|
-
@
|
|
27
|
+
@dashboard.kill_process(wfid)
|
|
28
28
|
|
|
29
29
|
wait_for(wfid)
|
|
30
|
-
ps = @
|
|
30
|
+
ps = @dashboard.process(wfid)
|
|
31
31
|
|
|
32
32
|
assert_nil ps
|
|
33
33
|
assert_equal 0, alpha.size
|
|
34
34
|
|
|
35
35
|
assert_equal(
|
|
36
|
-
1,
|
|
36
|
+
1,
|
|
37
|
+
logger.log.select { |e|
|
|
38
|
+
e['action'] == 'cancel_process' &&
|
|
39
|
+
e['flavour'] == 'kill'
|
|
40
|
+
}.size)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_kill_process_with_source
|
|
44
|
+
|
|
45
|
+
@dashboard.kill('20111121-nada', :source => 'y')
|
|
46
|
+
|
|
47
|
+
@dashboard.wait_for(1)
|
|
48
|
+
|
|
49
|
+
assert_equal 'y', @dashboard.context.logger.log.first['source']
|
|
37
50
|
end
|
|
38
51
|
|
|
39
52
|
def test_kill_does_not_trigger_on_cancel
|
|
@@ -44,13 +57,13 @@ class FtKillTest < Test::Unit::TestCase
|
|
|
44
57
|
end
|
|
45
58
|
end
|
|
46
59
|
|
|
47
|
-
@
|
|
48
|
-
sto = @
|
|
60
|
+
@dashboard.register_participant :alpha, Ruote::StorageParticipant
|
|
61
|
+
sto = @dashboard.register_participant :catcher, Ruote::StorageParticipant
|
|
49
62
|
|
|
50
|
-
wfid = @
|
|
63
|
+
wfid = @dashboard.launch(pdef)
|
|
51
64
|
wait_for(:alpha)
|
|
52
65
|
|
|
53
|
-
@
|
|
66
|
+
@dashboard.kill_process(wfid)
|
|
54
67
|
|
|
55
68
|
wait_for(wfid)
|
|
56
69
|
|
|
@@ -65,13 +78,13 @@ class FtKillTest < Test::Unit::TestCase
|
|
|
65
78
|
end
|
|
66
79
|
end
|
|
67
80
|
|
|
68
|
-
@
|
|
69
|
-
sto = @
|
|
81
|
+
@dashboard.register_participant :alpha, Ruote::StorageParticipant
|
|
82
|
+
sto = @dashboard.register_participant :catcher, Ruote::StorageParticipant
|
|
70
83
|
|
|
71
|
-
wfid = @
|
|
84
|
+
wfid = @dashboard.launch(pdef)
|
|
72
85
|
wait_for(:alpha)
|
|
73
86
|
|
|
74
|
-
@
|
|
87
|
+
@dashboard.kill_expression(sto.first.fei)
|
|
75
88
|
|
|
76
89
|
wait_for(wfid)
|
|
77
90
|
|
|
@@ -84,21 +97,26 @@ class FtKillTest < Test::Unit::TestCase
|
|
|
84
97
|
alpha
|
|
85
98
|
end
|
|
86
99
|
|
|
87
|
-
@
|
|
100
|
+
@dashboard.register_participant :alpha, Ruote::NullParticipant
|
|
88
101
|
|
|
89
102
|
#noisy
|
|
90
103
|
|
|
91
|
-
wfid = @
|
|
104
|
+
wfid = @dashboard.launch(pdef)
|
|
92
105
|
|
|
93
|
-
@
|
|
106
|
+
@dashboard.wait_for(:alpha)
|
|
94
107
|
|
|
95
|
-
@
|
|
108
|
+
@dashboard.kill(wfid)
|
|
96
109
|
|
|
97
|
-
@
|
|
110
|
+
@dashboard.wait_for(wfid)
|
|
98
111
|
|
|
99
|
-
assert_nil @
|
|
112
|
+
assert_nil @dashboard.process(wfid)
|
|
100
113
|
|
|
101
|
-
assert_equal
|
|
114
|
+
assert_equal(
|
|
115
|
+
1,
|
|
116
|
+
logger.log.select { |e|
|
|
117
|
+
e['action'] == 'cancel_process' &&
|
|
118
|
+
e['flavour'] == 'kill'
|
|
119
|
+
}.size)
|
|
102
120
|
end
|
|
103
121
|
|
|
104
122
|
def test_kill__process
|
|
@@ -112,23 +130,23 @@ class FtKillTest < Test::Unit::TestCase
|
|
|
112
130
|
echo '2'
|
|
113
131
|
end
|
|
114
132
|
|
|
115
|
-
@
|
|
133
|
+
@dashboard.register_participant :alpha, Ruote::NullParticipant
|
|
116
134
|
|
|
117
|
-
wfid = @
|
|
135
|
+
wfid = @dashboard.launch(pdef)
|
|
118
136
|
|
|
119
|
-
r = @
|
|
137
|
+
r = @dashboard.wait_for(:alpha)
|
|
120
138
|
|
|
121
|
-
@
|
|
139
|
+
@dashboard.kill(r['fei']) # fei as a Hash
|
|
122
140
|
|
|
123
|
-
r = @
|
|
141
|
+
r = @dashboard.wait_for(:alpha)
|
|
124
142
|
|
|
125
|
-
@
|
|
143
|
+
@dashboard.kill(Ruote.sid(r['fei'])) # fei as a String
|
|
126
144
|
|
|
127
|
-
r = @
|
|
145
|
+
r = @dashboard.wait_for(:alpha)
|
|
128
146
|
|
|
129
|
-
@
|
|
147
|
+
@dashboard.kill(Ruote::Workitem.new(r['workitem'])) # fei as workitem
|
|
130
148
|
|
|
131
|
-
@
|
|
149
|
+
@dashboard.wait_for(wfid)
|
|
132
150
|
|
|
133
151
|
assert_equal %w[ 0 1 2 ], @tracer.to_a
|
|
134
152
|
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
|
|
2
|
+
#
|
|
3
|
+
# testing ruote
|
|
4
|
+
#
|
|
5
|
+
# Fri Apr 22 15:44:38 JST 2011
|
|
6
|
+
#
|
|
7
|
+
# Singapore
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
require File.expand_path('../base', __FILE__)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class FtParticipantCodeTest < Test::Unit::TestCase
|
|
14
|
+
include FunctionalBase
|
|
15
|
+
|
|
16
|
+
def test_block_participant
|
|
17
|
+
|
|
18
|
+
@dashboard.context['participant_in_variable_enabled'] = true
|
|
19
|
+
|
|
20
|
+
pdef = Ruote.process_definition :name => 'def0' do
|
|
21
|
+
|
|
22
|
+
set 'v:alpha' => {
|
|
23
|
+
'on_workitem' => lambda { |wi|
|
|
24
|
+
wi.fields['alpha'] = wi.participant_name
|
|
25
|
+
wi.fields['x'] = 0
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
alpha
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
wfid = @dashboard.launch(pdef)
|
|
33
|
+
|
|
34
|
+
r = @dashboard.wait_for(wfid)
|
|
35
|
+
|
|
36
|
+
assert_equal(
|
|
37
|
+
{ 'alpha' => 'alpha', 'x' => 0, '__result__' => 0 },
|
|
38
|
+
r['workitem']['fields'])
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_code_participant
|
|
42
|
+
|
|
43
|
+
@dashboard.context['participant_in_variable_enabled'] = true
|
|
44
|
+
|
|
45
|
+
pdef = Ruote.process_definition do
|
|
46
|
+
|
|
47
|
+
set 'v:alpha' => %{
|
|
48
|
+
def consume(workitem)
|
|
49
|
+
workitem.fields['x'] = 0
|
|
50
|
+
workitem.fields['alpha'] = workitem.participant_name
|
|
51
|
+
reply_to_engine(workitem)
|
|
52
|
+
end
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
alpha
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
wfid = @dashboard.launch(pdef)
|
|
59
|
+
|
|
60
|
+
r = @dashboard.wait_for(wfid)
|
|
61
|
+
|
|
62
|
+
assert_equal(
|
|
63
|
+
{ 'x' => 0, 'alpha' => 'alpha' },
|
|
64
|
+
r['workitem']['fields'])
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# Fri May 15 09:51:28 JST 2009
|
|
6
6
|
#
|
|
7
7
|
|
|
8
|
-
require File.
|
|
8
|
+
require File.expand_path('../base', __FILE__)
|
|
9
9
|
|
|
10
10
|
require 'ruote/participant'
|
|
11
11
|
|
|
@@ -19,15 +19,13 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
19
19
|
participant :ref => 'alpha'
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
wfid = @engine.launch(pdef, :workitem => { 'kilroy' => 'was here' })
|
|
24
|
+
wfid = @dashboard.launch(pdef, :workitem => { 'kilroy' => 'was here' })
|
|
27
25
|
|
|
28
26
|
wait_for(:alpha)
|
|
29
27
|
|
|
30
|
-
ps = @
|
|
28
|
+
ps = @dashboard.process(wfid)
|
|
31
29
|
|
|
32
30
|
assert_equal 'my process', ps.definition_name
|
|
33
31
|
assert_equal nil, ps.definition_revision
|
|
@@ -47,12 +45,12 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
47
45
|
end
|
|
48
46
|
end
|
|
49
47
|
|
|
50
|
-
alpha = @
|
|
51
|
-
wfid = @
|
|
48
|
+
alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
|
|
49
|
+
wfid = @dashboard.launch(pdef, :workitem => { 'kilroy' => 'was here' })
|
|
52
50
|
|
|
53
51
|
wait_for(:alpha)
|
|
54
52
|
|
|
55
|
-
ps = @
|
|
53
|
+
ps = @dashboard.process(wfid)
|
|
56
54
|
|
|
57
55
|
assert_equal 'my process', ps.definition_name
|
|
58
56
|
|
|
@@ -67,21 +65,21 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
67
65
|
nada
|
|
68
66
|
end
|
|
69
67
|
|
|
70
|
-
wfid = @
|
|
68
|
+
wfid = @dashboard.launch(pdef)
|
|
71
69
|
wait_for(wfid)
|
|
72
70
|
|
|
73
|
-
errs = @
|
|
71
|
+
errs = @dashboard.errors
|
|
74
72
|
|
|
75
73
|
assert_equal 1, errs.size
|
|
76
74
|
|
|
77
75
|
assert_equal wfid, errs.first.wfid
|
|
78
76
|
|
|
79
|
-
err = @
|
|
77
|
+
err = @dashboard.errors(wfid)
|
|
80
78
|
|
|
81
79
|
assert_equal 1, err.size
|
|
82
80
|
assert_equal wfid, err.first.wfid
|
|
83
81
|
|
|
84
|
-
assert_equal 1, @
|
|
82
|
+
assert_equal 1, @dashboard.errors(:count => true)
|
|
85
83
|
end
|
|
86
84
|
|
|
87
85
|
def test_tree
|
|
@@ -93,12 +91,12 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
93
91
|
end
|
|
94
92
|
end
|
|
95
93
|
|
|
96
|
-
alpha = @
|
|
97
|
-
wfid = @
|
|
94
|
+
alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
|
|
95
|
+
wfid = @dashboard.launch(pdef)
|
|
98
96
|
|
|
99
97
|
wait_for(:alpha)
|
|
100
98
|
|
|
101
|
-
ps = @
|
|
99
|
+
ps = @dashboard.process(wfid)
|
|
102
100
|
|
|
103
101
|
assert_equal(
|
|
104
102
|
["define", {"my process"=>nil}, [
|
|
@@ -145,12 +143,12 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
145
143
|
end
|
|
146
144
|
end
|
|
147
145
|
|
|
148
|
-
alpha = @
|
|
149
|
-
wfid = @
|
|
146
|
+
alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
|
|
147
|
+
wfid = @dashboard.launch(pdef)
|
|
150
148
|
|
|
151
149
|
wait_for(:alpha)
|
|
152
150
|
|
|
153
|
-
ps = @
|
|
151
|
+
ps = @dashboard.process(wfid)
|
|
154
152
|
|
|
155
153
|
assert_equal(
|
|
156
154
|
{"my process"=>["0", ["define", {"my process"=>nil}, [["define", {"sub0"=>nil}, [["echo", {"meh"=>nil}, []]]], ["participant", {"ref"=>"alpha"}, []]]]], "sub0"=>["0_0", ["define", {"sub0"=>nil}, [["echo", {"meh"=>nil}, []]]]]},
|
|
@@ -184,15 +182,13 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
184
182
|
end
|
|
185
183
|
end
|
|
186
184
|
|
|
187
|
-
alpha = @
|
|
188
|
-
|
|
189
|
-
#noisy
|
|
185
|
+
alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
|
|
190
186
|
|
|
191
|
-
wfid = @
|
|
187
|
+
wfid = @dashboard.launch(pdef)
|
|
192
188
|
|
|
193
189
|
wait_for(:alpha)
|
|
194
190
|
|
|
195
|
-
ps = @
|
|
191
|
+
ps = @dashboard.process(wfid)
|
|
196
192
|
|
|
197
193
|
assert_equal(0, ps.variables['v0'])
|
|
198
194
|
assert_equal(nil, ps.variables['v1'])
|
|
@@ -214,18 +210,17 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
214
210
|
end
|
|
215
211
|
end
|
|
216
212
|
|
|
217
|
-
alpha = @
|
|
218
|
-
|
|
219
|
-
#noisy
|
|
213
|
+
alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
|
|
220
214
|
|
|
221
|
-
wfid = @
|
|
215
|
+
wfid = @dashboard.launch(pdef)
|
|
222
216
|
wait_for(:alpha)
|
|
223
217
|
|
|
224
|
-
ps = @
|
|
218
|
+
ps = @dashboard.process(wfid)
|
|
225
219
|
|
|
226
|
-
assert_equal %w[ main part ], ps.tags.keys.sort
|
|
220
|
+
assert_equal %w[ main main/part part ], ps.tags.keys.sort
|
|
221
|
+
assert_equal %w[ main main/part part ], ps.all_tags.keys.sort
|
|
227
222
|
|
|
228
|
-
assert_equal
|
|
223
|
+
assert_equal 3, ps.all_tags.size
|
|
229
224
|
assert_kind_of Array, ps.all_tags['main']
|
|
230
225
|
assert_equal 1, ps.all_tags['main'].size
|
|
231
226
|
end
|
|
@@ -243,16 +238,14 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
243
238
|
end
|
|
244
239
|
end
|
|
245
240
|
|
|
246
|
-
alpha = @
|
|
241
|
+
alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
|
|
247
242
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
wfid = @engine.launch(pdef)
|
|
243
|
+
wfid = @dashboard.launch(pdef)
|
|
251
244
|
wait_for(:alpha)
|
|
252
245
|
|
|
253
|
-
ps = @
|
|
246
|
+
ps = @dashboard.process(wfid)
|
|
254
247
|
|
|
255
|
-
assert_equal
|
|
248
|
+
assert_equal 2, ps.tags.size
|
|
256
249
|
assert_equal 2, ps.all_tags['tag0'].size
|
|
257
250
|
end
|
|
258
251
|
|
|
@@ -262,17 +255,15 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
262
255
|
participant :ref => 'alpha'
|
|
263
256
|
end
|
|
264
257
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
|
|
258
|
+
alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
|
|
268
259
|
|
|
269
|
-
wfid0 = @
|
|
270
|
-
wfid1 = @
|
|
260
|
+
wfid0 = @dashboard.launch(pdef)
|
|
261
|
+
wfid1 = @dashboard.launch(pdef)
|
|
271
262
|
|
|
272
263
|
wait_for(:alpha)
|
|
273
264
|
wait_for(:alpha)
|
|
274
265
|
|
|
275
|
-
ps = @
|
|
266
|
+
ps = @dashboard.processes
|
|
276
267
|
|
|
277
268
|
assert_equal 2, ps.size
|
|
278
269
|
assert_equal [ wfid0, wfid1 ].sort, ps.collect { |e| e.wfid }.sort
|
|
@@ -284,23 +275,23 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
284
275
|
|
|
285
276
|
n = 3
|
|
286
277
|
|
|
287
|
-
@
|
|
278
|
+
@dashboard.register_participant :alpha, Ruote::StorageParticipant
|
|
288
279
|
|
|
289
|
-
n.times.collect { @
|
|
280
|
+
n.times.collect { @dashboard.launch(Ruote.define { alpha }) }
|
|
290
281
|
|
|
291
|
-
while @
|
|
282
|
+
while @dashboard.storage_participant.size < n; sleep 0.100; end
|
|
292
283
|
sleep 0.100
|
|
293
284
|
|
|
294
|
-
@
|
|
295
|
-
@
|
|
285
|
+
@dashboard.ps(@dashboard.storage_participant.first.wfid).expressions.each do |exp|
|
|
286
|
+
@dashboard.storage.delete(exp.h)
|
|
296
287
|
end
|
|
297
288
|
# nuking all the expressions of a process instance
|
|
298
289
|
|
|
299
|
-
assert_equal n - 1, @
|
|
300
|
-
assert_equal n, @
|
|
290
|
+
assert_equal n - 1, @dashboard.processes.size
|
|
291
|
+
assert_equal n, @dashboard.storage_participant.size
|
|
301
292
|
# orphan workitem left in storage
|
|
302
293
|
|
|
303
|
-
assert_equal 1, @
|
|
294
|
+
assert_equal 1, @dashboard.leftovers.size
|
|
304
295
|
end
|
|
305
296
|
|
|
306
297
|
def test_left_overs
|
|
@@ -313,15 +304,15 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
313
304
|
{ '_id' => '0!f!z', 'type' => 'schedules', 'fei' => { 'wfid' => 'z' },
|
|
314
305
|
'at' => Ruote.time_to_utc_s(Time.now + 24 * 3600) }
|
|
315
306
|
].each do |doc|
|
|
316
|
-
@
|
|
307
|
+
@dashboard.storage.put(doc)
|
|
317
308
|
end
|
|
318
309
|
|
|
319
310
|
assert_equal(
|
|
320
311
|
3,
|
|
321
|
-
@
|
|
312
|
+
@dashboard.leftovers.size)
|
|
322
313
|
assert_equal(
|
|
323
314
|
%w[ workitems errors schedules ],
|
|
324
|
-
@
|
|
315
|
+
@dashboard.leftovers.collect { |lo| lo['type'] })
|
|
325
316
|
end
|
|
326
317
|
|
|
327
318
|
def test_tree_rewrite
|
|
@@ -335,9 +326,9 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
335
326
|
delta
|
|
336
327
|
end
|
|
337
328
|
|
|
338
|
-
@
|
|
329
|
+
@dashboard.register_participant :alpha do |wi, fexp|
|
|
339
330
|
|
|
340
|
-
|
|
331
|
+
tracer << "a\n"
|
|
341
332
|
|
|
342
333
|
parent = fexp.parent
|
|
343
334
|
parent.update_tree
|
|
@@ -345,29 +336,27 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
345
336
|
parent.persist
|
|
346
337
|
end
|
|
347
338
|
|
|
348
|
-
@
|
|
349
|
-
|
|
339
|
+
@dashboard.register_participant :bravo do |wi, fexp|
|
|
340
|
+
tracer << "b\n"
|
|
350
341
|
end
|
|
351
|
-
@
|
|
352
|
-
|
|
342
|
+
@dashboard.register_participant :charly do |wi, fexp|
|
|
343
|
+
tracer << "c\n"
|
|
353
344
|
stash[:tree0] = fexp.context.engine.process(fexp.fei.wfid).current_tree
|
|
354
345
|
end
|
|
355
|
-
@
|
|
356
|
-
|
|
346
|
+
@dashboard.register_participant :delta do |wi, fexp|
|
|
347
|
+
tracer << "d\n"
|
|
357
348
|
stash[:tree1] = fexp.context.engine.process(fexp.fei.wfid).current_tree
|
|
358
349
|
end
|
|
359
350
|
|
|
360
|
-
#noisy
|
|
361
|
-
|
|
362
351
|
assert_trace %w[ a c c d ], pdef
|
|
363
352
|
|
|
364
353
|
assert_equal(
|
|
365
354
|
["define", {"name"=>"test"}, [["sequence", {}, [["alpha", {}, []], ["charly", {}, []], ["participant", {"ref"=>"charly"}, []]]], ["delta", {}, []]]],
|
|
366
|
-
@
|
|
355
|
+
@dashboard.context.stash[:tree0])
|
|
367
356
|
|
|
368
357
|
assert_equal(
|
|
369
358
|
["define", {"name"=>"test"}, [["sequence", {}, [["alpha", {}, []], ["charly", {}, []], ["charly", {}, []]]], ["participant", {"ref"=>"delta"}, []]]],
|
|
370
|
-
@
|
|
359
|
+
@dashboard.context.stash[:tree1])
|
|
371
360
|
end
|
|
372
361
|
|
|
373
362
|
def test_when_on_cancel_subprocess
|
|
@@ -381,15 +370,13 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
381
370
|
end
|
|
382
371
|
end
|
|
383
372
|
|
|
384
|
-
alpha = @
|
|
385
|
-
|
|
386
|
-
#noisy
|
|
373
|
+
alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
|
|
387
374
|
|
|
388
|
-
wfid = @
|
|
375
|
+
wfid = @dashboard.launch(pdef)
|
|
389
376
|
|
|
390
377
|
wait_for(:alpha)
|
|
391
378
|
|
|
392
|
-
@
|
|
379
|
+
@dashboard.cancel_process(wfid)
|
|
393
380
|
|
|
394
381
|
wait_for(:alpha)
|
|
395
382
|
wait_for(1)
|
|
@@ -397,14 +384,14 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
397
384
|
assert_match wfid, alpha.first.fei.wfid
|
|
398
385
|
assert_not_nil alpha.first.fei.subid
|
|
399
386
|
|
|
400
|
-
assert_equal 0, @
|
|
401
|
-
assert_equal 4, @
|
|
387
|
+
assert_equal 0, @dashboard.process(wfid).errors.size
|
|
388
|
+
assert_equal 4, @dashboard.process(wfid).expressions.size
|
|
402
389
|
|
|
403
390
|
assert_equal(
|
|
404
391
|
["define", {"name"=>"test"}, [
|
|
405
392
|
["define", {"sub0"=>nil}, [["alpha", {}, []]]],
|
|
406
393
|
["sequence", {"on_cancel"=>"sub0"}, [["alpha", {}, []]]]]],
|
|
407
|
-
@
|
|
394
|
+
@dashboard.process(wfid).original_tree)
|
|
408
395
|
|
|
409
396
|
assert_equal(
|
|
410
397
|
["define", {"name"=>"test"}, [
|
|
@@ -412,7 +399,7 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
412
399
|
["participant", {"ref"=>"alpha"}, []]]],
|
|
413
400
|
["sequence", {"on_cancel"=>"sub0", "_triggered"=>"on_cancel"}, [
|
|
414
401
|
["alpha", {}, []]]]]],
|
|
415
|
-
@
|
|
402
|
+
@dashboard.process(wfid).current_tree)
|
|
416
403
|
end
|
|
417
404
|
|
|
418
405
|
def test_fexp_to_h
|
|
@@ -421,15 +408,13 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
421
408
|
participant :ref => 'alpha'
|
|
422
409
|
end
|
|
423
410
|
|
|
424
|
-
|
|
411
|
+
alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
|
|
425
412
|
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
wfid = @engine.launch(pdef)
|
|
413
|
+
wfid = @dashboard.launch(pdef)
|
|
429
414
|
|
|
430
415
|
wait_for(:alpha)
|
|
431
416
|
|
|
432
|
-
ps = @
|
|
417
|
+
ps = @dashboard.process(wfid)
|
|
433
418
|
|
|
434
419
|
h = ps.expressions.find { |hf|
|
|
435
420
|
hf.is_a?(Ruote::Exp::ParticipantExpression)
|
|
@@ -449,13 +434,13 @@ class FtProcessStatusTest < Test::Unit::TestCase
|
|
|
449
434
|
end
|
|
450
435
|
end
|
|
451
436
|
|
|
452
|
-
alpha = @
|
|
437
|
+
alpha = @dashboard.register_participant :alpha, Ruote::StorageParticipant
|
|
453
438
|
|
|
454
|
-
wfid = @
|
|
439
|
+
wfid = @dashboard.launch(pdef)
|
|
455
440
|
|
|
456
441
|
wait_for(:alpha)
|
|
457
442
|
|
|
458
|
-
ps = @
|
|
443
|
+
ps = @dashboard.process(wfid)
|
|
459
444
|
|
|
460
445
|
#puts
|
|
461
446
|
#puts ps.to_dot
|
|
@@ -494,20 +479,20 @@ digraph "process wfid {
|
|
|
494
479
|
bravo
|
|
495
480
|
end
|
|
496
481
|
|
|
497
|
-
@
|
|
482
|
+
@dashboard.register_participant '.+', Ruote::StorageParticipant
|
|
498
483
|
|
|
499
|
-
wfid = @
|
|
484
|
+
wfid = @dashboard.launch(pdef)
|
|
500
485
|
|
|
501
|
-
@
|
|
486
|
+
@dashboard.wait_for(:alpha)
|
|
502
487
|
|
|
503
|
-
t0 = Time.parse(@
|
|
488
|
+
t0 = Time.parse(@dashboard.process(wfid).last_active)
|
|
504
489
|
|
|
505
|
-
sp = @
|
|
506
|
-
sp.
|
|
490
|
+
sp = @dashboard.storage_participant
|
|
491
|
+
sp.proceed(sp.first)
|
|
507
492
|
|
|
508
|
-
@
|
|
493
|
+
@dashboard.wait_for(:bravo)
|
|
509
494
|
|
|
510
|
-
t1 = Time.parse(@
|
|
495
|
+
t1 = Time.parse(@dashboard.process(wfid).last_active)
|
|
511
496
|
|
|
512
497
|
assert t1 > t0
|
|
513
498
|
end
|
|
@@ -518,20 +503,20 @@ digraph "process wfid {
|
|
|
518
503
|
alpha :task => 'clean car'
|
|
519
504
|
end
|
|
520
505
|
|
|
521
|
-
@
|
|
506
|
+
@dashboard.register_participant '.+', Ruote::StorageParticipant
|
|
522
507
|
|
|
523
|
-
wfid = @
|
|
524
|
-
@
|
|
508
|
+
wfid = @dashboard.launch(pdef)
|
|
509
|
+
@dashboard.wait_for(:alpha)
|
|
525
510
|
|
|
526
511
|
assert_equal(
|
|
527
512
|
[ [ 'alpha', { 'task' => 'clean car' } ] ],
|
|
528
|
-
@
|
|
513
|
+
@dashboard.process(wfid).position.collect { |pos| pos[1..-1] })
|
|
529
514
|
|
|
530
515
|
# #position leverages #workitems
|
|
531
516
|
|
|
532
517
|
assert_equal(
|
|
533
518
|
[ [ wfid, 'alpha' ] ],
|
|
534
|
-
@
|
|
519
|
+
@dashboard.process(wfid).workitems.collect { |wi|
|
|
535
520
|
[ wi.fei.wfid, wi.participant_name ]
|
|
536
521
|
})
|
|
537
522
|
end
|
|
@@ -542,25 +527,25 @@ digraph "process wfid {
|
|
|
542
527
|
participant
|
|
543
528
|
end
|
|
544
529
|
|
|
545
|
-
wfid = @
|
|
546
|
-
@
|
|
530
|
+
wfid = @dashboard.launch(pdef)
|
|
531
|
+
@dashboard.wait_for(wfid)
|
|
547
532
|
|
|
548
|
-
assert_equal 1, @
|
|
533
|
+
assert_equal 1, @dashboard.process(wfid).errors.size
|
|
549
534
|
|
|
550
535
|
assert_equal(
|
|
551
536
|
[ [ nil,
|
|
552
537
|
{ 'error' => '#<ArgumentError: no participant name specified>' } ] ],
|
|
553
|
-
@
|
|
538
|
+
@dashboard.process(wfid).position.collect { |pos| pos[1..-1] })
|
|
554
539
|
end
|
|
555
540
|
|
|
556
541
|
def test_ps_with_stored_workitems
|
|
557
542
|
|
|
558
|
-
@
|
|
543
|
+
@dashboard.register_participant '.+', Ruote::StorageParticipant
|
|
559
544
|
|
|
560
|
-
wfid = @
|
|
561
|
-
@
|
|
545
|
+
wfid = @dashboard.launch(Ruote.define { alpha })
|
|
546
|
+
@dashboard.wait_for(:alpha)
|
|
562
547
|
|
|
563
|
-
ps = @
|
|
548
|
+
ps = @dashboard.process(wfid)
|
|
564
549
|
|
|
565
550
|
assert_equal 1, ps.stored_workitems.size
|
|
566
551
|
assert_equal Ruote::Workitem, ps.stored_workitems.first.class
|
|
@@ -568,37 +553,35 @@ digraph "process wfid {
|
|
|
568
553
|
|
|
569
554
|
def test_ps_without_stored_workitems
|
|
570
555
|
|
|
571
|
-
@
|
|
556
|
+
@dashboard.register_participant '.+', Ruote::NullParticipant
|
|
572
557
|
|
|
573
|
-
wfid = @
|
|
574
|
-
@
|
|
558
|
+
wfid = @dashboard.launch(Ruote.define { alpha })
|
|
559
|
+
@dashboard.wait_for(:alpha)
|
|
575
560
|
|
|
576
|
-
ps = @
|
|
561
|
+
ps = @dashboard.process(wfid)
|
|
577
562
|
|
|
578
563
|
assert_equal 0, ps.stored_workitems.size
|
|
579
564
|
end
|
|
580
565
|
|
|
581
566
|
def test_schedules
|
|
582
567
|
|
|
583
|
-
@
|
|
568
|
+
@dashboard.register_participant '.+', Ruote::NullParticipant
|
|
584
569
|
|
|
585
|
-
wfid = @
|
|
586
|
-
@
|
|
570
|
+
wfid = @dashboard.launch(Ruote.define { alpha :timeout => '2d' })
|
|
571
|
+
@dashboard.wait_for(:alpha)
|
|
587
572
|
|
|
588
|
-
assert_equal 1, @
|
|
589
|
-
assert_equal 1, @
|
|
573
|
+
assert_equal 1, @dashboard.schedules.size
|
|
574
|
+
assert_equal 1, @dashboard.schedules(:count => true)
|
|
590
575
|
end
|
|
591
576
|
|
|
592
577
|
def test_processes_and_schedules
|
|
593
578
|
|
|
594
|
-
@
|
|
595
|
-
|
|
596
|
-
#noisy
|
|
579
|
+
@dashboard.register_participant '.+', Ruote::NullParticipant
|
|
597
580
|
|
|
598
|
-
wfid = @
|
|
599
|
-
@
|
|
581
|
+
wfid = @dashboard.launch(Ruote.define { alpha :timeout => '2d' })
|
|
582
|
+
@dashboard.wait_for(:alpha)
|
|
600
583
|
|
|
601
|
-
ps = @
|
|
584
|
+
ps = @dashboard.process(wfid)
|
|
602
585
|
|
|
603
586
|
assert_equal 1, ps.schedules.size
|
|
604
587
|
assert_match /^0_0![a-f0-9]+!#{wfid}$/, ps.schedules.first['target'].sid
|
|
@@ -608,50 +591,50 @@ digraph "process wfid {
|
|
|
608
591
|
|
|
609
592
|
n = 7
|
|
610
593
|
|
|
611
|
-
@
|
|
594
|
+
@dashboard.register_participant '.+', Ruote::StorageParticipant
|
|
612
595
|
|
|
613
596
|
wfids = (1..n).collect { |i|
|
|
614
|
-
@
|
|
597
|
+
@dashboard.launch(Ruote.define { alpha })
|
|
615
598
|
}.sort
|
|
616
599
|
|
|
617
|
-
while @
|
|
600
|
+
while @dashboard.storage_participant.size < n; sleep 0.140; end
|
|
618
601
|
|
|
619
|
-
assert_equal wfids, @
|
|
602
|
+
assert_equal wfids, @dashboard.process_wfids
|
|
620
603
|
|
|
621
604
|
assert_equal(
|
|
622
605
|
wfids,
|
|
623
|
-
@
|
|
606
|
+
@dashboard.processes.collect { |ps| ps.wfid })
|
|
624
607
|
|
|
625
608
|
assert_equal(
|
|
626
609
|
wfids,
|
|
627
|
-
@
|
|
610
|
+
@dashboard.processes(:test => :garbage).collect { |ps| ps.wfid })
|
|
628
611
|
# prompted by
|
|
629
612
|
# http://groups.google.com/group/openwferu-users/browse_thread/thread/ee493bdf8d8cdb37
|
|
630
613
|
|
|
631
614
|
assert_equal(
|
|
632
615
|
wfids[0, 3],
|
|
633
|
-
@
|
|
616
|
+
@dashboard.processes(:limit => 3).collect { |ps| ps.wfid })
|
|
634
617
|
|
|
635
618
|
assert_equal(
|
|
636
619
|
wfids[3, 3],
|
|
637
|
-
@
|
|
620
|
+
@dashboard.processes(:skip => 3, :limit => 3).collect { |ps| ps.wfid })
|
|
638
621
|
|
|
639
622
|
#puts "==="
|
|
640
623
|
#wfids.each { |wfid| puts wfid }
|
|
641
624
|
#puts "---"
|
|
642
|
-
#@
|
|
625
|
+
#@dashboard.processes(:limit => 3, :descending => false).collect { |ps| ps.wfid }.each { |wfid| puts wfid }
|
|
643
626
|
#puts "---"
|
|
644
|
-
#@
|
|
627
|
+
#@dashboard.processes(:limit => 3, :descending => true).collect { |ps| ps.wfid }.each { |wfid| puts wfid }
|
|
645
628
|
|
|
646
629
|
assert_equal(
|
|
647
630
|
wfids.reverse[0, 3],
|
|
648
|
-
@
|
|
631
|
+
@dashboard.processes(
|
|
649
632
|
:limit => 3, :descending => true
|
|
650
633
|
).collect { |ps| ps.wfid })
|
|
651
634
|
|
|
652
635
|
assert_equal(
|
|
653
636
|
n,
|
|
654
|
-
@
|
|
637
|
+
@dashboard.processes(:count => true))
|
|
655
638
|
end
|
|
656
639
|
|
|
657
640
|
# Issue identified by David Goodlad :
|
|
@@ -667,28 +650,26 @@ digraph "process wfid {
|
|
|
667
650
|
end
|
|
668
651
|
end
|
|
669
652
|
|
|
670
|
-
|
|
653
|
+
wfid = @dashboard.launch(pdef)
|
|
671
654
|
|
|
672
|
-
|
|
655
|
+
@dashboard.wait_for(4)
|
|
673
656
|
|
|
674
|
-
@
|
|
675
|
-
|
|
676
|
-
#assert_equal 1, @engine.processes.size
|
|
677
|
-
assert_equal [ wfid ], @engine.processes.collect { |ps| ps.wfid }
|
|
657
|
+
#assert_equal 1, @dashboard.processes.size
|
|
658
|
+
assert_equal [ wfid ], @dashboard.processes.collect { |ps| ps.wfid }
|
|
678
659
|
end
|
|
679
660
|
|
|
680
661
|
def test_ps
|
|
681
662
|
|
|
682
|
-
@
|
|
663
|
+
@dashboard.register 'alpha', Ruote::NullParticipant
|
|
683
664
|
|
|
684
665
|
wfid = nil
|
|
685
666
|
|
|
686
|
-
2.times { wfid = @
|
|
667
|
+
2.times { wfid = @dashboard.launch(Ruote.define { alpha }) }
|
|
687
668
|
|
|
688
|
-
@
|
|
669
|
+
@dashboard.wait_for(4)
|
|
689
670
|
|
|
690
|
-
assert_equal 2, @
|
|
691
|
-
assert_equal wfid, @
|
|
671
|
+
assert_equal 2, @dashboard.ps.size
|
|
672
|
+
assert_equal wfid, @dashboard.ps(wfid).wfid
|
|
692
673
|
end
|
|
693
674
|
|
|
694
675
|
def test_definition_name
|
|
@@ -697,21 +678,112 @@ digraph "process wfid {
|
|
|
697
678
|
alpha
|
|
698
679
|
end
|
|
699
680
|
|
|
700
|
-
|
|
681
|
+
alpha = @dashboard.register_participant :alpha, Ruote::NullParticipant
|
|
682
|
+
|
|
683
|
+
wfid = @dashboard.launch(pdef)
|
|
684
|
+
|
|
685
|
+
wait_for(:alpha)
|
|
686
|
+
|
|
687
|
+
assert_equal 'invictus', @dashboard.process(wfid).definition_name
|
|
688
|
+
|
|
689
|
+
exp = @dashboard.process(wfid).expressions.first
|
|
690
|
+
@dashboard.storage.delete(exp.h)
|
|
691
|
+
|
|
692
|
+
assert_nil @dashboard.process(wfid).definition_name
|
|
693
|
+
assert_nil @dashboard.process(wfid).definition_revision
|
|
694
|
+
end
|
|
695
|
+
|
|
696
|
+
def test_leaves
|
|
697
|
+
|
|
698
|
+
pdef = Ruote.define do
|
|
699
|
+
concurrence do
|
|
700
|
+
alpha
|
|
701
|
+
wait '1w'
|
|
702
|
+
end
|
|
703
|
+
end
|
|
704
|
+
|
|
705
|
+
@dashboard.register_participant :alpha, Ruote::NullParticipant
|
|
706
|
+
|
|
707
|
+
wfid = @dashboard.launch(pdef)
|
|
708
|
+
|
|
709
|
+
wait_for(:alpha)
|
|
710
|
+
wait_for(1)
|
|
711
|
+
|
|
712
|
+
leaves = @dashboard.process(wfid).leaves
|
|
713
|
+
|
|
714
|
+
assert_equal(
|
|
715
|
+
[ "0_0_0:Ruote::Exp::ParticipantExpression:",
|
|
716
|
+
"0_0_1:Ruote::Exp::WaitExpression:" ],
|
|
717
|
+
leaves.collect { |fexp|
|
|
718
|
+
[ fexp.fei.expid,
|
|
719
|
+
fexp.class.to_s,
|
|
720
|
+
fexp.error ? fexp.error.message : '' ].join(':')
|
|
721
|
+
})
|
|
722
|
+
end
|
|
723
|
+
|
|
724
|
+
def test_leaves_when_errors
|
|
725
|
+
|
|
726
|
+
pdef = Ruote.define do
|
|
727
|
+
concurrence do
|
|
728
|
+
wait '1w'
|
|
729
|
+
participant
|
|
730
|
+
alpha
|
|
731
|
+
end
|
|
732
|
+
end
|
|
733
|
+
|
|
734
|
+
@dashboard.register_participant :alpha, Ruote::NullParticipant
|
|
701
735
|
|
|
702
|
-
|
|
736
|
+
wfid = @dashboard.launch(pdef)
|
|
737
|
+
|
|
738
|
+
wait_for(:alpha)
|
|
739
|
+
wait_for(1)
|
|
740
|
+
|
|
741
|
+
leaves = @dashboard.process(wfid).leaves
|
|
742
|
+
|
|
743
|
+
assert_equal(
|
|
744
|
+
[ "0_0_0:Ruote::Exp::WaitExpression:",
|
|
745
|
+
"0_0_1:Ruote::Exp::ParticipantExpression:#<ArgumentError: no participant name specified>",
|
|
746
|
+
"0_0_2:Ruote::Exp::ParticipantExpression:" ],
|
|
747
|
+
leaves.collect { |fexp|
|
|
748
|
+
[ fexp.fei.expid,
|
|
749
|
+
fexp.class.to_s,
|
|
750
|
+
fexp.error ? fexp.error.message : '' ].join(':')
|
|
751
|
+
})
|
|
752
|
+
end
|
|
703
753
|
|
|
704
|
-
|
|
754
|
+
def test_root_workitem
|
|
755
|
+
|
|
756
|
+
pdef = Ruote.define do
|
|
757
|
+
alpha
|
|
758
|
+
end
|
|
759
|
+
|
|
760
|
+
@dashboard.register_participant :alpha, Ruote::NullParticipant
|
|
761
|
+
|
|
762
|
+
wfid = @dashboard.launch(pdef, 'small' => 'town')
|
|
705
763
|
|
|
706
764
|
wait_for(:alpha)
|
|
707
765
|
|
|
708
|
-
|
|
766
|
+
wi = @dashboard.process(wfid).root_workitem
|
|
767
|
+
|
|
768
|
+
assert_equal 'town', wi.fields['small']
|
|
769
|
+
end
|
|
770
|
+
|
|
771
|
+
def test_to_h
|
|
772
|
+
|
|
773
|
+
@dashboard.register_participant :alpha, Ruote::StorageParticipant
|
|
774
|
+
|
|
775
|
+
pdef = Ruote.define do
|
|
776
|
+
concurrence do
|
|
777
|
+
alpha
|
|
778
|
+
wait '1d'
|
|
779
|
+
nada
|
|
780
|
+
end
|
|
781
|
+
end
|
|
709
782
|
|
|
710
|
-
|
|
711
|
-
@
|
|
783
|
+
wfid = @dashboard.launch(pdef)
|
|
784
|
+
@dashboard.wait_for(7)
|
|
712
785
|
|
|
713
|
-
|
|
714
|
-
assert_nil @engine.process(wfid).definition_revision
|
|
786
|
+
assert_equal Hash, @dashboard.ps(wfid).to_h.class
|
|
715
787
|
end
|
|
716
788
|
end
|
|
717
789
|
|