ruote-maestrodev 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.txt +290 -0
- data/CREDITS.txt +99 -0
- data/LICENSE.txt +21 -0
- data/README.rdoc +88 -0
- data/Rakefile +108 -0
- data/TODO.txt +488 -0
- data/lib/ruote.rb +7 -0
- data/lib/ruote/context.rb +194 -0
- data/lib/ruote/engine.rb +1062 -0
- data/lib/ruote/engine/process_error.rb +122 -0
- data/lib/ruote/engine/process_status.rb +448 -0
- data/lib/ruote/exp/command.rb +87 -0
- data/lib/ruote/exp/commanded.rb +69 -0
- data/lib/ruote/exp/condition.rb +227 -0
- data/lib/ruote/exp/fe_add_branches.rb +138 -0
- data/lib/ruote/exp/fe_apply.rb +154 -0
- data/lib/ruote/exp/fe_cancel_process.rb +78 -0
- data/lib/ruote/exp/fe_command.rb +156 -0
- data/lib/ruote/exp/fe_concurrence.rb +321 -0
- data/lib/ruote/exp/fe_concurrent_iterator.rb +219 -0
- data/lib/ruote/exp/fe_cron.rb +141 -0
- data/lib/ruote/exp/fe_cursor.rb +324 -0
- data/lib/ruote/exp/fe_define.rb +112 -0
- data/lib/ruote/exp/fe_echo.rb +60 -0
- data/lib/ruote/exp/fe_equals.rb +115 -0
- data/lib/ruote/exp/fe_error.rb +82 -0
- data/lib/ruote/exp/fe_filter.rb +648 -0
- data/lib/ruote/exp/fe_forget.rb +88 -0
- data/lib/ruote/exp/fe_given.rb +154 -0
- data/lib/ruote/exp/fe_if.rb +127 -0
- data/lib/ruote/exp/fe_inc.rb +205 -0
- data/lib/ruote/exp/fe_iterator.rb +234 -0
- data/lib/ruote/exp/fe_let.rb +75 -0
- data/lib/ruote/exp/fe_listen.rb +304 -0
- data/lib/ruote/exp/fe_lose.rb +110 -0
- data/lib/ruote/exp/fe_noop.rb +45 -0
- data/lib/ruote/exp/fe_once.rb +215 -0
- data/lib/ruote/exp/fe_participant.rb +287 -0
- data/lib/ruote/exp/fe_read.rb +69 -0
- data/lib/ruote/exp/fe_redo.rb +82 -0
- data/lib/ruote/exp/fe_ref.rb +152 -0
- data/lib/ruote/exp/fe_registerp.rb +110 -0
- data/lib/ruote/exp/fe_reserve.rb +126 -0
- data/lib/ruote/exp/fe_restore.rb +102 -0
- data/lib/ruote/exp/fe_save.rb +72 -0
- data/lib/ruote/exp/fe_sequence.rb +59 -0
- data/lib/ruote/exp/fe_set.rb +154 -0
- data/lib/ruote/exp/fe_subprocess.rb +211 -0
- data/lib/ruote/exp/fe_that.rb +92 -0
- data/lib/ruote/exp/fe_undo.rb +67 -0
- data/lib/ruote/exp/fe_unregisterp.rb +69 -0
- data/lib/ruote/exp/fe_wait.rb +95 -0
- data/lib/ruote/exp/flowexpression.rb +886 -0
- data/lib/ruote/exp/iterator.rb +81 -0
- data/lib/ruote/exp/merge.rb +118 -0
- data/lib/ruote/exp/ro_attributes.rb +212 -0
- data/lib/ruote/exp/ro_filters.rb +136 -0
- data/lib/ruote/exp/ro_persist.rb +154 -0
- data/lib/ruote/exp/ro_variables.rb +189 -0
- data/lib/ruote/exp/ro_vf.rb +68 -0
- data/lib/ruote/fei.rb +260 -0
- data/lib/ruote/id/mnemo_wfid_generator.rb +43 -0
- data/lib/ruote/id/wfid_generator.rb +81 -0
- data/lib/ruote/log/default_history.rb +122 -0
- data/lib/ruote/log/pretty.rb +176 -0
- data/lib/ruote/log/storage_history.rb +159 -0
- data/lib/ruote/log/test_logger.rb +208 -0
- data/lib/ruote/log/wait_logger.rb +64 -0
- data/lib/ruote/part/block_participant.rb +137 -0
- data/lib/ruote/part/code_participant.rb +81 -0
- data/lib/ruote/part/engine_participant.rb +189 -0
- data/lib/ruote/part/local_participant.rb +138 -0
- data/lib/ruote/part/no_op_participant.rb +60 -0
- data/lib/ruote/part/null_participant.rb +54 -0
- data/lib/ruote/part/rev_participant.rb +169 -0
- data/lib/ruote/part/smtp_participant.rb +116 -0
- data/lib/ruote/part/storage_participant.rb +392 -0
- data/lib/ruote/part/template.rb +84 -0
- data/lib/ruote/participant.rb +7 -0
- data/lib/ruote/reader.rb +278 -0
- data/lib/ruote/reader/json.rb +49 -0
- data/lib/ruote/reader/radial.rb +290 -0
- data/lib/ruote/reader/ruby_dsl.rb +186 -0
- data/lib/ruote/reader/xml.rb +99 -0
- data/lib/ruote/receiver/base.rb +212 -0
- data/lib/ruote/storage/base.rb +364 -0
- data/lib/ruote/storage/composite_storage.rb +121 -0
- data/lib/ruote/storage/fs_storage.rb +139 -0
- data/lib/ruote/storage/hash_storage.rb +211 -0
- data/lib/ruote/svc/dispatch_pool.rb +158 -0
- data/lib/ruote/svc/dollar_sub.rb +298 -0
- data/lib/ruote/svc/error_handler.rb +138 -0
- data/lib/ruote/svc/expression_map.rb +97 -0
- data/lib/ruote/svc/participant_list.rb +397 -0
- data/lib/ruote/svc/tracker.rb +172 -0
- data/lib/ruote/svc/treechecker.rb +141 -0
- data/lib/ruote/tree_dot.rb +85 -0
- data/lib/ruote/util/filter.rb +525 -0
- data/lib/ruote/util/hashdot.rb +79 -0
- data/lib/ruote/util/look.rb +128 -0
- data/lib/ruote/util/lookup.rb +127 -0
- data/lib/ruote/util/misc.rb +167 -0
- data/lib/ruote/util/ometa.rb +71 -0
- data/lib/ruote/util/serializer.rb +103 -0
- data/lib/ruote/util/subprocess.rb +88 -0
- data/lib/ruote/util/time.rb +100 -0
- data/lib/ruote/util/tree.rb +58 -0
- data/lib/ruote/version.rb +29 -0
- data/lib/ruote/worker.rb +386 -0
- data/lib/ruote/workitem.rb +394 -0
- data/phil.txt +14 -0
- data/ruote.gemspec +44 -0
- data/test/bm/ci.rb +55 -0
- data/test/bm/ici.rb +71 -0
- data/test/bm/juuman.rb +54 -0
- data/test/bm/launch_bench.rb +37 -0
- data/test/bm/load_26c.rb +97 -0
- data/test/bm/mega.rb +64 -0
- data/test/bm/seq_thousand.rb +31 -0
- data/test/bm/t.rb +35 -0
- data/test/functional/base.rb +247 -0
- data/test/functional/concurrent_base.rb +98 -0
- data/test/functional/crunner.rb +31 -0
- data/test/functional/ct_0_concurrence.rb +65 -0
- data/test/functional/ct_1_iterator.rb +67 -0
- data/test/functional/ct_2_cancel.rb +81 -0
- data/test/functional/eft_0_process_definition.rb +65 -0
- data/test/functional/eft_10_cancel_process.rb +46 -0
- data/test/functional/eft_11_wait.rb +109 -0
- data/test/functional/eft_12_listen.rb +500 -0
- data/test/functional/eft_13_iterator.rb +342 -0
- data/test/functional/eft_14_cursor.rb +456 -0
- data/test/functional/eft_15_loop.rb +69 -0
- data/test/functional/eft_16_if.rb +183 -0
- data/test/functional/eft_17_equals.rb +55 -0
- data/test/functional/eft_18_concurrent_iterator.rb +410 -0
- data/test/functional/eft_19_reserve.rb +136 -0
- data/test/functional/eft_1_echo.rb +68 -0
- data/test/functional/eft_20_save.rb +116 -0
- data/test/functional/eft_21_restore.rb +61 -0
- data/test/functional/eft_22_noop.rb +28 -0
- data/test/functional/eft_23_apply.rb +168 -0
- data/test/functional/eft_24_add_branches.rb +98 -0
- data/test/functional/eft_25_command.rb +28 -0
- data/test/functional/eft_26_error.rb +77 -0
- data/test/functional/eft_27_inc.rb +280 -0
- data/test/functional/eft_28_once.rb +135 -0
- data/test/functional/eft_29_cron.rb +64 -0
- data/test/functional/eft_2_sequence.rb +58 -0
- data/test/functional/eft_30_ref.rb +155 -0
- data/test/functional/eft_31_registerp.rb +130 -0
- data/test/functional/eft_32_lose.rb +93 -0
- data/test/functional/eft_33_let.rb +31 -0
- data/test/functional/eft_34_given.rb +123 -0
- data/test/functional/eft_35_filter.rb +375 -0
- data/test/functional/eft_36_read.rb +95 -0
- data/test/functional/eft_3_participant.rb +149 -0
- data/test/functional/eft_4_set.rb +296 -0
- data/test/functional/eft_5_subprocess.rb +163 -0
- data/test/functional/eft_6_concurrence.rb +304 -0
- data/test/functional/eft_7_forget.rb +61 -0
- data/test/functional/eft_8_undo.rb +114 -0
- data/test/functional/eft_9_redo.rb +138 -0
- data/test/functional/ft_0_worker.rb +65 -0
- data/test/functional/ft_10_dollar.rb +304 -0
- data/test/functional/ft_11_recursion.rb +109 -0
- data/test/functional/ft_12_launchitem.rb +43 -0
- data/test/functional/ft_13_variables.rb +151 -0
- data/test/functional/ft_14_re_apply.rb +324 -0
- data/test/functional/ft_15_timeout.rb +226 -0
- data/test/functional/ft_16_participant_params.rb +98 -0
- data/test/functional/ft_17_conditional.rb +102 -0
- data/test/functional/ft_18_kill.rb +138 -0
- data/test/functional/ft_19_participant_code.rb +67 -0
- data/test/functional/ft_1_process_status.rb +796 -0
- data/test/functional/ft_20_storage_participant.rb +543 -0
- data/test/functional/ft_21_forget.rb +153 -0
- data/test/functional/ft_22_process_definitions.rb +90 -0
- data/test/functional/ft_23_load_defs.rb +79 -0
- data/test/functional/ft_24_block_participant.rb +235 -0
- data/test/functional/ft_25_receiver.rb +207 -0
- data/test/functional/ft_26_participant_rtimeout.rb +179 -0
- data/test/functional/ft_27_var_indirection.rb +128 -0
- data/test/functional/ft_28_null_noop_participants.rb +51 -0
- data/test/functional/ft_29_part_template.rb +60 -0
- data/test/functional/ft_2_errors.rb +380 -0
- data/test/functional/ft_30_smtp_participant.rb +122 -0
- data/test/functional/ft_31_part_blocking.rb +72 -0
- data/test/functional/ft_33_participant_subprocess_priority.rb +32 -0
- data/test/functional/ft_34_cursor_rewind.rb +101 -0
- data/test/functional/ft_35_add_service.rb +56 -0
- data/test/functional/ft_36_storage_history.rb +150 -0
- data/test/functional/ft_37_default_history.rb +109 -0
- data/test/functional/ft_38_participant_more.rb +193 -0
- data/test/functional/ft_39_wait_for.rb +136 -0
- data/test/functional/ft_3_participant_registration.rb +574 -0
- data/test/functional/ft_40_wait_logger.rb +62 -0
- data/test/functional/ft_41_participants.rb +91 -0
- data/test/functional/ft_42_storage_copy.rb +71 -0
- data/test/functional/ft_43_participant_on_reply.rb +87 -0
- data/test/functional/ft_44_var_participant.rb +35 -0
- data/test/functional/ft_45_participant_accept.rb +64 -0
- data/test/functional/ft_46_launch_single.rb +83 -0
- data/test/functional/ft_47_wfid_generator.rb +54 -0
- data/test/functional/ft_48_lose.rb +112 -0
- data/test/functional/ft_49_engine_on_error.rb +201 -0
- data/test/functional/ft_4_cancel.rb +132 -0
- data/test/functional/ft_50_engine_config.rb +22 -0
- data/test/functional/ft_51_misc.rb +67 -0
- data/test/functional/ft_52_case.rb +134 -0
- data/test/functional/ft_53_engine_on_terminate.rb +95 -0
- data/test/functional/ft_54_patterns.rb +104 -0
- data/test/functional/ft_55_engine_participant.rb +303 -0
- data/test/functional/ft_56_filter_attribute.rb +259 -0
- data/test/functional/ft_57_rev_participant.rb +252 -0
- data/test/functional/ft_58_workitem.rb +69 -0
- data/test/functional/ft_59_pause.rb +343 -0
- data/test/functional/ft_5_on_error.rb +384 -0
- data/test/functional/ft_60_code_participant.rb +45 -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_6_on_cancel.rb +221 -0
- data/test/functional/ft_7_tags.rb +177 -0
- data/test/functional/ft_8_participant_consumption.rb +124 -0
- data/test/functional/ft_9_subprocesses.rb +146 -0
- data/test/functional/restart_base.rb +34 -0
- data/test/functional/rt_0_wait.rb +55 -0
- data/test/functional/rt_1_listen.rb +56 -0
- data/test/functional/rt_2_errors.rb +56 -0
- data/test/functional/rt_3_once.rb +70 -0
- data/test/functional/rt_4_cron.rb +64 -0
- data/test/functional/rt_5_timeout.rb +60 -0
- data/test/functional/rtest.rb +8 -0
- data/test/functional/storage_helper.rb +93 -0
- data/test/functional/test.rb +44 -0
- data/test/functional/vertical.rb +46 -0
- data/test/path_helper.rb +15 -0
- data/test/test.rb +13 -0
- data/test/test_helper.rb +28 -0
- data/test/unit/storage.rb +428 -0
- data/test/unit/storages.rb +37 -0
- data/test/unit/test.rb +28 -0
- data/test/unit/ut_0_ruby_reader.rb +223 -0
- data/test/unit/ut_11_lookup.rb +122 -0
- data/test/unit/ut_13_serializer.rb +65 -0
- data/test/unit/ut_14_is_uri.rb +28 -0
- data/test/unit/ut_15_util.rb +57 -0
- data/test/unit/ut_16_reader.rb +225 -0
- data/test/unit/ut_18_engine.rb +47 -0
- data/test/unit/ut_19_part_template.rb +86 -0
- data/test/unit/ut_1_fei.rb +165 -0
- data/test/unit/ut_20_composite_storage.rb +74 -0
- data/test/unit/ut_21_svc_participant_list.rb +46 -0
- data/test/unit/ut_22_filter.rb +1094 -0
- data/test/unit/ut_23_svc_tracker.rb +48 -0
- data/test/unit/ut_24_radial_reader.rb +332 -0
- data/test/unit/ut_25_merge.rb +113 -0
- data/test/unit/ut_3_wait_logger.rb +39 -0
- data/test/unit/ut_4_expmap.rb +20 -0
- data/test/unit/ut_5_tree.rb +54 -0
- data/test/unit/ut_6_condition.rb +303 -0
- data/test/unit/ut_7_workitem.rb +99 -0
- data/test/unit/ut_8_tree_to_dot.rb +72 -0
- data/test/unit/ut_9_xml_reader.rb +61 -0
- metadata +504 -0
@@ -0,0 +1,207 @@
|
|
1
|
+
|
2
|
+
#
|
3
|
+
# testing ruote
|
4
|
+
#
|
5
|
+
# Wed Aug 12 23:24:16 JST 2009
|
6
|
+
#
|
7
|
+
|
8
|
+
require File.join(File.dirname(__FILE__), 'base')
|
9
|
+
|
10
|
+
require 'ruote/participant'
|
11
|
+
|
12
|
+
|
13
|
+
class FtReceiverTest < Test::Unit::TestCase
|
14
|
+
include FunctionalBase
|
15
|
+
|
16
|
+
def setup
|
17
|
+
|
18
|
+
super
|
19
|
+
|
20
|
+
@pdef = Ruote.process_definition :name => 'test' do
|
21
|
+
sequence do
|
22
|
+
alpha
|
23
|
+
echo '.'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
@engine.register_participant 'alpha', MyParticipant
|
28
|
+
end
|
29
|
+
|
30
|
+
class MyParticipant
|
31
|
+
include Ruote::LocalParticipant
|
32
|
+
|
33
|
+
def consume(workitem)
|
34
|
+
|
35
|
+
@context.stash[:wi] = workitem
|
36
|
+
|
37
|
+
# no reply to the engine
|
38
|
+
end
|
39
|
+
|
40
|
+
# do not let the dispatch happen in its own thread, this makes
|
41
|
+
# wait_for(:alpha) synchronous.
|
42
|
+
#
|
43
|
+
def do_not_thread
|
44
|
+
|
45
|
+
true
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
class MyReceiver < Ruote::Receiver
|
50
|
+
attr_reader :context
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_my_receiver_init
|
54
|
+
|
55
|
+
cid = @engine.context.object_id
|
56
|
+
|
57
|
+
receiver = MyReceiver.new(@engine)
|
58
|
+
assert_equal cid, receiver.context.object_id
|
59
|
+
assert_not_nil receiver.context.storage
|
60
|
+
|
61
|
+
receiver = MyReceiver.new(@engine.context)
|
62
|
+
assert_equal cid, receiver.context.object_id
|
63
|
+
assert_not_nil receiver.context.storage
|
64
|
+
|
65
|
+
receiver = MyReceiver.new(@engine.worker)
|
66
|
+
assert_equal cid, receiver.context.object_id
|
67
|
+
assert_not_nil receiver.context.storage
|
68
|
+
|
69
|
+
receiver = MyReceiver.new(@engine.storage)
|
70
|
+
assert_equal cid, receiver.context.object_id
|
71
|
+
assert_not_nil receiver.context.storage
|
72
|
+
|
73
|
+
@engine.storage.instance_variable_set(:@context, nil)
|
74
|
+
receiver = MyReceiver.new(@engine.storage)
|
75
|
+
assert_not_equal cid, receiver.context.object_id
|
76
|
+
assert_not_nil receiver.context.storage
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_my_receiver
|
80
|
+
|
81
|
+
receiver = MyReceiver.new(@engine.context)
|
82
|
+
|
83
|
+
#noisy
|
84
|
+
|
85
|
+
wfid = @engine.launch(@pdef)
|
86
|
+
|
87
|
+
wait_for(:alpha)
|
88
|
+
while @engine.context.stash[:wi].nil? do
|
89
|
+
Thread.pass
|
90
|
+
end
|
91
|
+
|
92
|
+
assert_equal 3, @engine.process(wfid).expressions.size
|
93
|
+
|
94
|
+
receiver.receive(@engine.context.stash[:wi])
|
95
|
+
|
96
|
+
wait_for(wfid)
|
97
|
+
|
98
|
+
assert_nil @engine.process(wfid)
|
99
|
+
|
100
|
+
rcv = logger.log.select { |e| e['action'] == 'receive' }.first
|
101
|
+
assert_equal 'FtReceiverTest::MyReceiver', rcv['receiver']
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_engine_receive
|
105
|
+
|
106
|
+
wfid = @engine.launch(@pdef)
|
107
|
+
|
108
|
+
wait_for(:alpha)
|
109
|
+
|
110
|
+
@engine.receive(@engine.context.stash[:wi])
|
111
|
+
|
112
|
+
wait_for(wfid)
|
113
|
+
|
114
|
+
assert_nil @engine.process(wfid)
|
115
|
+
|
116
|
+
rcv = logger.log.select { |e| e['action'] == 'receive' }.first
|
117
|
+
assert_equal 'Ruote::Engine', rcv['receiver']
|
118
|
+
end
|
119
|
+
|
120
|
+
class MyOtherParticipant
|
121
|
+
include Ruote::LocalParticipant
|
122
|
+
def consume(workitem)
|
123
|
+
@context.receiver.pass(workitem.to_h)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
class MyOtherReceiver < Ruote::Receiver
|
127
|
+
def initialize(context, opts={})
|
128
|
+
super(context, opts)
|
129
|
+
@count = 0
|
130
|
+
end
|
131
|
+
def pass(workitem)
|
132
|
+
if @count < 1
|
133
|
+
@context.error_handler.action_handle(
|
134
|
+
'dispatch', workitem['fei'], RuntimeError.new('something went wrong'))
|
135
|
+
else
|
136
|
+
reply(workitem)
|
137
|
+
end
|
138
|
+
@count = @count + 1
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_receiver_triggered_dispatch_error
|
143
|
+
|
144
|
+
class << @engine.context
|
145
|
+
def receiver
|
146
|
+
@rcv ||= MyOtherReceiver.new(engine)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
@engine.register_participant :alpha, MyOtherParticipant
|
151
|
+
|
152
|
+
pdef = Ruote.process_definition do
|
153
|
+
alpha
|
154
|
+
end
|
155
|
+
|
156
|
+
#noisy
|
157
|
+
|
158
|
+
wfid = @engine.launch(pdef)
|
159
|
+
|
160
|
+
wait_for(wfid)
|
161
|
+
|
162
|
+
ps = @engine.process(wfid)
|
163
|
+
err = ps.errors.first
|
164
|
+
|
165
|
+
assert_equal 1, ps.errors.size
|
166
|
+
assert_equal '#<RuntimeError: something went wrong>', err.message
|
167
|
+
|
168
|
+
@engine.replay_at_error(err)
|
169
|
+
|
170
|
+
wait_for(wfid)
|
171
|
+
|
172
|
+
ps = @engine.process(wfid)
|
173
|
+
|
174
|
+
assert_nil ps
|
175
|
+
end
|
176
|
+
|
177
|
+
def test_receiver_fexp_and_wi
|
178
|
+
|
179
|
+
#@engine.register do
|
180
|
+
# catchall Ruote::StorageParticipant
|
181
|
+
#end
|
182
|
+
@engine.register_participant :alpha, Ruote::StorageParticipant
|
183
|
+
|
184
|
+
#noisy
|
185
|
+
|
186
|
+
wfid = @engine.launch(Ruote.define do
|
187
|
+
alpha
|
188
|
+
end)
|
189
|
+
|
190
|
+
@engine.wait_for(:alpha)
|
191
|
+
@engine.wait_for(1)
|
192
|
+
|
193
|
+
wi = @engine.storage_participant.first
|
194
|
+
|
195
|
+
assert_equal wfid, wi.fei.wfid
|
196
|
+
|
197
|
+
assert_equal wfid, @engine.fexp(wi).fei.wfid
|
198
|
+
assert_equal wfid, @engine.fexp(wi.fei).fei.wfid
|
199
|
+
assert_equal wfid, @engine.fexp(wi.fei.sid).fei.wfid
|
200
|
+
assert_equal wfid, @engine.fexp(wi.fei.sid).h.applied_workitem['fei']['wfid']
|
201
|
+
|
202
|
+
assert_equal wfid, @engine.workitem(wi).wfid
|
203
|
+
assert_equal wfid, @engine.workitem(wi.fei).wfid
|
204
|
+
assert_equal wfid, @engine.workitem(wi.fei.sid).wfid
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
@@ -0,0 +1,179 @@
|
|
1
|
+
|
2
|
+
#
|
3
|
+
# testing ruote
|
4
|
+
#
|
5
|
+
# Sun Aug 16 14:25:35 JST 2009
|
6
|
+
#
|
7
|
+
|
8
|
+
require File.join(File.dirname(__FILE__), 'base')
|
9
|
+
|
10
|
+
require 'ruote/participant'
|
11
|
+
|
12
|
+
|
13
|
+
class FtParticipantTimeoutTest < Test::Unit::TestCase
|
14
|
+
include FunctionalBase
|
15
|
+
|
16
|
+
class AlphaParticipant < Ruote::StorageParticipant
|
17
|
+
def rtimeout(workitem)
|
18
|
+
'1s'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_participant_defined_timeout
|
23
|
+
|
24
|
+
pdef = Ruote.process_definition do
|
25
|
+
sequence do
|
26
|
+
alpha
|
27
|
+
bravo
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
@engine.register_participant :alpha, AlphaParticipant
|
32
|
+
sto = @engine.register_participant :bravo, Ruote::StorageParticipant
|
33
|
+
|
34
|
+
#noisy
|
35
|
+
|
36
|
+
wfid = @engine.launch(pdef)
|
37
|
+
wait_for(13)
|
38
|
+
|
39
|
+
assert_equal 1, sto.size
|
40
|
+
assert_equal 'bravo', sto.first.participant_name
|
41
|
+
|
42
|
+
#logger.log.each { |l| p l }
|
43
|
+
assert_equal 2, logger.log.select { |e| e['flavour'] == 'timeout' }.size
|
44
|
+
assert_equal 0, @engine.storage.get_many('schedules').size
|
45
|
+
|
46
|
+
assert_not_nil sto.first.fields['__timed_out__']
|
47
|
+
end
|
48
|
+
|
49
|
+
class MyParticipant
|
50
|
+
include Ruote::LocalParticipant
|
51
|
+
def consume(workitem)
|
52
|
+
# do nothing
|
53
|
+
end
|
54
|
+
def cancel(fei, flavour)
|
55
|
+
# do nothing
|
56
|
+
end
|
57
|
+
def rtimeout
|
58
|
+
'1s'
|
59
|
+
end
|
60
|
+
def do_not_thread
|
61
|
+
true
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_participant_class_defined_timeout
|
66
|
+
|
67
|
+
pdef = Ruote.define do
|
68
|
+
alpha
|
69
|
+
echo 'done.'
|
70
|
+
end
|
71
|
+
|
72
|
+
@engine.register_participant :alpha, MyParticipant
|
73
|
+
|
74
|
+
#noisy
|
75
|
+
|
76
|
+
wfid = @engine.launch(pdef)
|
77
|
+
|
78
|
+
@engine.wait_for(wfid)
|
79
|
+
|
80
|
+
assert_equal 'done.', @tracer.to_s
|
81
|
+
assert_equal 2, logger.log.select { |e| e['flavour'] == 'timeout' }.size
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_pdef_overriden_timeout
|
85
|
+
|
86
|
+
# process definition cancels timeout given by participant
|
87
|
+
|
88
|
+
pdef = Ruote.define do
|
89
|
+
alpha :timeout => ''
|
90
|
+
echo 'done.'
|
91
|
+
end
|
92
|
+
|
93
|
+
@engine.register_participant :alpha, MyParticipant
|
94
|
+
|
95
|
+
wfid = @engine.launch(pdef)
|
96
|
+
|
97
|
+
@engine.wait_for(:alpha)
|
98
|
+
|
99
|
+
sleep 0.350
|
100
|
+
|
101
|
+
assert_equal 0, @engine.storage.get_many('schedules').size
|
102
|
+
assert_equal '', @tracer.to_s
|
103
|
+
end
|
104
|
+
|
105
|
+
class MyOtherParticipant
|
106
|
+
include Ruote::LocalParticipant
|
107
|
+
def initialize(opts)
|
108
|
+
@opts = opts
|
109
|
+
end
|
110
|
+
def consume(workitem)
|
111
|
+
# do nothing
|
112
|
+
end
|
113
|
+
def cancel(fei, flavour)
|
114
|
+
# do nothing
|
115
|
+
end
|
116
|
+
def rtimeout(workitem)
|
117
|
+
@opts['timeout']
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_participant_option_defined_timeout
|
122
|
+
|
123
|
+
pdef = Ruote.define do
|
124
|
+
alpha
|
125
|
+
bravo
|
126
|
+
echo 'done.'
|
127
|
+
end
|
128
|
+
|
129
|
+
@engine.register_participant :alpha, MyOtherParticipant, 'timeout' => '1s'
|
130
|
+
@engine.register_participant :bravo, MyOtherParticipant
|
131
|
+
|
132
|
+
#noisy
|
133
|
+
|
134
|
+
wfid = @engine.launch(pdef)
|
135
|
+
|
136
|
+
@engine.wait_for(:bravo)
|
137
|
+
|
138
|
+
assert_equal 0, @engine.storage.get_many('schedules').size
|
139
|
+
# no timeout for participant :bravo
|
140
|
+
end
|
141
|
+
|
142
|
+
class YetAnotherParticipant
|
143
|
+
include Ruote::LocalParticipant
|
144
|
+
def initialize(opts)
|
145
|
+
@opts = opts
|
146
|
+
end
|
147
|
+
def consume(workitem)
|
148
|
+
# do nothing
|
149
|
+
end
|
150
|
+
def cancel(fei, flavour)
|
151
|
+
# do nothing
|
152
|
+
end
|
153
|
+
def rtimeout(workitem)
|
154
|
+
"#{workitem.fields['timeout'] * 2}s"
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_participant_rtimeout_workitem
|
159
|
+
|
160
|
+
pdef = Ruote.process_definition do
|
161
|
+
alpha
|
162
|
+
end
|
163
|
+
|
164
|
+
@engine.register_participant :alpha, YetAnotherParticipant
|
165
|
+
|
166
|
+
#noisy
|
167
|
+
|
168
|
+
wfid = @engine.launch(pdef, 'timeout' => 60)
|
169
|
+
|
170
|
+
@engine.wait_for(:alpha)
|
171
|
+
@engine.wait_for(1)
|
172
|
+
|
173
|
+
schedules = @engine.storage.get_many('schedules')
|
174
|
+
|
175
|
+
assert_equal 1, schedules.size
|
176
|
+
assert_equal '120s', schedules.first['original']
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
@@ -0,0 +1,128 @@
|
|
1
|
+
|
2
|
+
#
|
3
|
+
# testing ruote
|
4
|
+
#
|
5
|
+
# Sun Aug 23 16:59:07 JST 2009
|
6
|
+
#
|
7
|
+
|
8
|
+
require File.join(File.dirname(__FILE__), 'base')
|
9
|
+
|
10
|
+
|
11
|
+
class FtVarIndirectionTest < Test::Unit::TestCase
|
12
|
+
include FunctionalBase
|
13
|
+
|
14
|
+
def test_var_alias
|
15
|
+
|
16
|
+
pdef = Ruote.process_definition :name => 'def0' do
|
17
|
+
set :v => 'alpha', :val => 'bravo'
|
18
|
+
sequence do
|
19
|
+
alpha
|
20
|
+
bravo
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
alpha = @engine.register_participant :bravo do |workitem|
|
25
|
+
@tracer << "b:#{workitem.fields['params']['original_ref']}\n"
|
26
|
+
end
|
27
|
+
|
28
|
+
#noisy
|
29
|
+
|
30
|
+
assert_trace(%w[ b:alpha b: ], pdef)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_participant_indirection
|
34
|
+
|
35
|
+
pdef = Ruote.process_definition do
|
36
|
+
sequence do
|
37
|
+
set 'v:v' => 'alpha'
|
38
|
+
#participant '${v:v}'
|
39
|
+
v
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
@engine.register_participant :alpha do |workitem|
|
44
|
+
@tracer << "alpha\n"
|
45
|
+
end
|
46
|
+
|
47
|
+
#noisy
|
48
|
+
|
49
|
+
assert_trace 'alpha', pdef
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_subprocess_indirection
|
53
|
+
|
54
|
+
pdef = Ruote.process_definition do
|
55
|
+
sequence do
|
56
|
+
set 'v:v' => 'sub0'
|
57
|
+
#subprocess '${v:v}'
|
58
|
+
v
|
59
|
+
end
|
60
|
+
define 'sub0' do
|
61
|
+
echo 'a'
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
#noisy
|
66
|
+
|
67
|
+
assert_trace 'a', pdef
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_subprocess_indirection_uri
|
71
|
+
|
72
|
+
pdef = Ruote.process_definition do
|
73
|
+
sequence do
|
74
|
+
set 'v:v' => File.join(File.dirname(__FILE__), '..', 'pdef.xml')
|
75
|
+
#subprocess '${v:v}'
|
76
|
+
v
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
#noisy
|
81
|
+
|
82
|
+
assert_trace %w[ a b ], pdef
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_subprocess_uri_set_as_engine_variable
|
86
|
+
|
87
|
+
pdef = Ruote.process_definition do
|
88
|
+
v
|
89
|
+
end
|
90
|
+
|
91
|
+
#noisy
|
92
|
+
|
93
|
+
@engine.variables['v'] = File.join(File.dirname(__FILE__), '..', 'pdef.xml')
|
94
|
+
|
95
|
+
assert_trace %w[ a b ], pdef
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_subprocess_uri_set_as_engine_variable__absolute
|
99
|
+
|
100
|
+
pdef = Ruote.process_definition do
|
101
|
+
v
|
102
|
+
end
|
103
|
+
|
104
|
+
#noisy
|
105
|
+
|
106
|
+
@engine.variables['v'] = File.expand_path(
|
107
|
+
File.join(File.dirname(__FILE__), '..', 'pdef.xml'))
|
108
|
+
|
109
|
+
assert_trace %w[ a b ], pdef
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_engine_variable_for_expression_aliases
|
113
|
+
|
114
|
+
pdef = Ruote.define do
|
115
|
+
output "nada"
|
116
|
+
end
|
117
|
+
|
118
|
+
@engine.variables['output'] = 'echo'
|
119
|
+
|
120
|
+
#@engine.noisy = true
|
121
|
+
|
122
|
+
wfid = @engine.launch(pdef)
|
123
|
+
@engine.wait_for(wfid)
|
124
|
+
|
125
|
+
assert_equal 'nada', @tracer.to_s
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|