ruote 2.1.4 → 2.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -226,7 +226,7 @@ class FtErrorsTest < Test::Unit::TestCase
226
226
 
227
227
  @engine.register_participant 'alpha', WeakCancelParticipant
228
228
 
229
- noisy
229
+ #noisy
230
230
 
231
231
  wfid = @engine.launch(pdef)
232
232
 
@@ -238,8 +238,15 @@ class FtErrorsTest < Test::Unit::TestCase
238
238
 
239
239
  ps = @engine.process(wfid)
240
240
 
241
- puts ps.errors.first.trace
242
- puts ps.expressions.size
241
+ #puts ps.errors.first.trace
242
+ assert_equal 1, ps.errors.size
243
+ assert_equal 2, ps.expressions.size
244
+
245
+ @engine.kill_process(wfid)
246
+
247
+ wait_for(wfid)
248
+
249
+ assert_nil @engine.process(wfid)
243
250
  end
244
251
 
245
252
  def test_errors_and_subprocesses
@@ -354,7 +361,7 @@ class FtErrorsTest < Test::Unit::TestCase
354
361
  assert_equal 1, es.size
355
362
  assert_equal 'reply', e['msg']['action']
356
363
  assert_equal wfid, e['msg']['fei']['wfid']
357
- assert_equal 7, e.size
364
+ assert_equal 8, e.size
358
365
  end
359
366
  end
360
367
 
@@ -0,0 +1,295 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Wed Jan 20 22:35:20 JST 2010
6
+ #
7
+ # between Denpasar and Singapore
8
+ #
9
+
10
+ require File.join(File.dirname(__FILE__), 'base')
11
+
12
+ require 'ruote'
13
+ require 'ruote/storage/fs_storage'
14
+ require 'ruote/part/hash_participant'
15
+ require 'ruote/part/engine_participant'
16
+
17
+
18
+ class FtEngineParticipantTest < Test::Unit::TestCase
19
+ #include FunctionalBase
20
+
21
+ def setup
22
+
23
+ @engine0 =
24
+ Ruote::Engine.new(
25
+ Ruote::Worker.new(
26
+ Ruote::FsStorage.new(
27
+ 'work0',
28
+ 'engine_id' => 'engine0',
29
+ 's_logger' => [ 'ruote/log/test_logger', 'Ruote::TestLogger' ])))
30
+ @engine1 =
31
+ Ruote::Engine.new(
32
+ Ruote::Worker.new(
33
+ Ruote::FsStorage.new(
34
+ 'work1',
35
+ 'engine_id' => 'engine1',
36
+ 's_logger' => [ 'ruote/log/test_logger', 'Ruote::TestLogger' ])))
37
+
38
+ @tracer0 = Tracer.new
39
+ @engine0.add_service('tracer', @tracer0)
40
+
41
+ @tracer1 = Tracer.new
42
+ @engine1.add_service('tracer', @tracer1)
43
+
44
+ @engine0.register_participant(
45
+ 'engine1',
46
+ Ruote::EngineParticipant,
47
+ 'storage_class' => Ruote::FsStorage,
48
+ 'storage_path' => 'ruote/storage/fs_storage',
49
+ 'storage_args' => 'work1')
50
+ @engine1.register_participant(
51
+ 'engine0',
52
+ Ruote::EngineParticipant,
53
+ 'storage_class' => Ruote::FsStorage,
54
+ 'storage_path' => 'ruote/storage/fs_storage',
55
+ 'storage_args' => 'work0')
56
+ end
57
+
58
+ def teardown
59
+
60
+ @engine0.shutdown
61
+ @engine1.shutdown
62
+
63
+ FileUtils.rm_rf('work0')
64
+ FileUtils.rm_rf('work1')
65
+ end
66
+
67
+ def noisy
68
+
69
+ @engine0.context.logger.noisy = true
70
+ @engine1.context.logger.noisy = true
71
+ @engine1.context.logger.color = '32' # green
72
+ end
73
+
74
+ def test_as_participant
75
+
76
+ pdef = Ruote.process_definition do
77
+ sequence do
78
+ echo 'a'
79
+ participant :ref => 'engine1', :pdef => 'subp'
80
+ echo 'c'
81
+ end
82
+ define 'subp' do
83
+ echo 'b'
84
+ end
85
+ end
86
+
87
+ #noisy
88
+
89
+ wfid = @engine0.launch(pdef)
90
+ @engine0.wait_for(wfid)
91
+
92
+ assert_equal "a\nc", @tracer0.to_s
93
+ assert_equal "b", @tracer1.to_s
94
+ end
95
+
96
+ def test_as_subprocess
97
+
98
+ pdef = Ruote.process_definition do
99
+ sequence do
100
+ echo 'a'
101
+ subprocess 'subp', :engine => 'engine1'
102
+ echo 'c'
103
+ end
104
+ define 'subp' do
105
+ echo 'b'
106
+ end
107
+ end
108
+
109
+ #noisy
110
+
111
+ wfid = @engine0.launch(pdef)
112
+ @engine0.wait_for(wfid)
113
+
114
+ assert_equal "a\nc", @tracer0.to_s
115
+ assert_equal "b", @tracer1.to_s
116
+ end
117
+
118
+ def test_as_subprocess_2
119
+
120
+ pdef = Ruote.process_definition do
121
+ sequence do
122
+ echo 'a'
123
+ subp :engine => 'engine1'
124
+ echo 'c'
125
+ end
126
+ define 'subp' do
127
+ echo 'b'
128
+ end
129
+ end
130
+
131
+ #noisy
132
+
133
+ wfid = @engine0.launch(pdef)
134
+ @engine0.wait_for(wfid)
135
+
136
+ assert_equal "a\nc", @tracer0.to_s
137
+ assert_equal "b", @tracer1.to_s
138
+ end
139
+
140
+ def test_cancel_process
141
+
142
+ pdef = Ruote.process_definition do
143
+ sequence do
144
+ echo 'a'
145
+ subp :engine => 'engine1'
146
+ echo 'c'
147
+ end
148
+ define 'subp' do
149
+ alpha
150
+ end
151
+ end
152
+
153
+ #noisy
154
+
155
+ alpha = @engine1.register_participant :alpha, Ruote::HashParticipant.new
156
+
157
+ wfid = @engine0.launch(pdef)
158
+
159
+ @engine1.wait_for(:alpha)
160
+
161
+ assert_equal 1, alpha.size
162
+ assert_not_nil alpha.first.fei.sub_wfid
163
+
164
+ @engine0.cancel_process(wfid)
165
+ @engine0.wait_for(wfid)
166
+
167
+ assert_equal 0, alpha.size
168
+
169
+ assert_equal "a", @tracer0.to_s
170
+ assert_equal "", @tracer1.to_s
171
+ end
172
+
173
+ def test_with_variables
174
+
175
+ pdef = Ruote.process_definition do
176
+ sequence do
177
+ set 'v:v0' => 'b'
178
+ echo 'a'
179
+ subp :engine => 'engine1'
180
+ echo 'c'
181
+ end
182
+ define 'subp' do
183
+ echo '${r:engine_id}:${v:v0}'
184
+ end
185
+ end
186
+
187
+ @engine1.context['ruby_eval_allowed'] = true
188
+ # just for ${r:engine_id}
189
+
190
+ #noisy
191
+
192
+ wfid = @engine0.launch(pdef)
193
+ @engine0.wait_for(wfid)
194
+
195
+ assert_equal "a\nc", @tracer0.to_s
196
+ assert_equal "engine1:b", @tracer1.to_s
197
+
198
+ assert_nil @engine0.process(wfid)
199
+ end
200
+
201
+ def test_with_uri
202
+
203
+ path = File.expand_path(File.join(File.dirname(__FILE__), '..', 'pdef.xml'))
204
+
205
+ pdef = Ruote.process_definition do
206
+ participant :ref => 'engine1', :pdef => path
207
+ end
208
+
209
+ #noisy
210
+
211
+ wfid = @engine0.launch(pdef)
212
+ @engine0.wait_for(wfid)
213
+
214
+ assert_equal "", @tracer0.to_s
215
+ assert_equal "a\nb", @tracer1.to_s
216
+
217
+ assert_nil @engine0.process(wfid)
218
+ end
219
+
220
+ def test_forget
221
+
222
+ pdef = Ruote.process_definition do
223
+ sequence do
224
+ echo 'a'
225
+ participant :ref => 'engine1', :pdef => 'subp', :forget => true
226
+ echo 'c'
227
+ end
228
+ define 'subp' do
229
+ bravo
230
+ end
231
+ end
232
+
233
+ bravo = @engine1.register_participant :bravo, Ruote::HashParticipant.new
234
+
235
+ #noisy
236
+
237
+ wfid = @engine0.launch(pdef)
238
+ @engine0.wait_for(wfid) # terminated
239
+
240
+ assert_equal [], @engine0.processes
241
+
242
+ @engine1.wait_for(:bravo)
243
+
244
+ bravo.reply(bravo.first)
245
+
246
+ @engine1.wait_for(wfid) # ceased
247
+
248
+ assert_equal [], @engine0.processes
249
+ assert_equal [], @engine1.processes
250
+ end
251
+
252
+ def test_replay_gone_engine_participant
253
+
254
+ @engine1.unregister_participant('engine0')
255
+
256
+ pdef = Ruote.process_definition do
257
+ sequence do
258
+ echo 'a'
259
+ participant :ref => 'engine1', :pdef => 'subp'
260
+ echo 'c'
261
+ end
262
+ define 'subp' do
263
+ echo 'b'
264
+ end
265
+ end
266
+
267
+ #noisy
268
+
269
+ wfid = @engine0.launch(pdef)
270
+ @engine1.wait_for(wfid) # error
271
+
272
+ errs = @engine1.process(wfid).errors
273
+
274
+ assert_equal 1, errs.size
275
+
276
+ # fix error cause
277
+
278
+ @engine1.register_participant(
279
+ 'engine0',
280
+ Ruote::EngineParticipant,
281
+ 'storage_class' => Ruote::FsStorage,
282
+ 'storage_path' => 'ruote/storage/fs_storage',
283
+ 'storage_args' => 'work0')
284
+
285
+ # replay
286
+
287
+ @engine1.replay_at_error(errs.first)
288
+
289
+ @engine0.wait_for(wfid)
290
+
291
+ assert_equal "a\nc", @tracer0.to_s
292
+ assert_equal "b", @tracer1.to_s
293
+ end
294
+ end
295
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruote
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.4
4
+ version: 2.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Mettraux
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2010-01-11 00:00:00 +09:00
13
+ date: 2010-01-28 00:00:00 +09:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -202,6 +202,7 @@ files:
202
202
  - lib/ruote/parser/xml.rb
203
203
  - lib/ruote/part/block_participant.rb
204
204
  - lib/ruote/part/dispatch_pool.rb
205
+ - lib/ruote/part/engine_participant.rb
205
206
  - lib/ruote/part/hash_participant.rb
206
207
  - lib/ruote/part/local_participant.rb
207
208
  - lib/ruote/part/no_op_participant.rb
@@ -215,6 +216,7 @@ files:
215
216
  - lib/ruote/storage/base.rb
216
217
  - lib/ruote/storage/fs_storage.rb
217
218
  - lib/ruote/storage/hash_storage.rb
219
+ - lib/ruote/subprocess.rb
218
220
  - lib/ruote/tree_dot.rb
219
221
  - lib/ruote/util/dollar.rb
220
222
  - lib/ruote/util/hashdot.rb
@@ -304,6 +306,7 @@ files:
304
306
  - test/functional/ft_34_cursor_rewind.rb
305
307
  - test/functional/ft_35_add_service.rb
306
308
  - test/functional/ft_36_storage_history.rb
309
+ - test/functional/ft_37_engine_participant.rb
307
310
  - test/functional/ft_3_participant_registration.rb
308
311
  - test/functional/ft_4_cancel.rb
309
312
  - test/functional/ft_5_on_error.rb