ruote 2.1.6 → 2.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/CHANGELOG.txt +14 -0
  2. data/CREDITS.txt +4 -3
  3. data/Rakefile +4 -3
  4. data/TODO.txt +9 -6
  5. data/lib/ruote/context.rb +29 -13
  6. data/lib/ruote/engine.rb +14 -0
  7. data/lib/ruote/exp/flowexpression.rb +7 -0
  8. data/lib/ruote/fei.rb +15 -7
  9. data/lib/ruote/id/wfid_generator.rb +3 -0
  10. data/lib/ruote/log/fs_history.rb +3 -3
  11. data/lib/ruote/log/storage_history.rb +13 -7
  12. data/lib/ruote/log/test_logger.rb +6 -0
  13. data/lib/ruote/parser.rb +12 -3
  14. data/lib/ruote/parser/ruby_dsl.rb +53 -0
  15. data/lib/ruote/part/participant_list.rb +10 -0
  16. data/lib/ruote/part/storage_participant.rb +74 -3
  17. data/lib/ruote/storage/base.rb +9 -6
  18. data/lib/ruote/storage/hash_storage.rb +7 -2
  19. data/lib/ruote/util/misc.rb +4 -0
  20. data/lib/ruote/version.rb +1 -1
  21. data/lib/ruote/workitem.rb +35 -48
  22. data/ruote.gemspec +12 -9
  23. data/test/README.rdoc +3 -3
  24. data/test/functional/eft_18_concurrent_iterator.rb +8 -11
  25. data/test/functional/eft_24_add_branches.rb +18 -6
  26. data/test/functional/eft_27_inc.rb +2 -1
  27. data/test/functional/eft_6_concurrence.rb +9 -4
  28. data/test/functional/ft_20_storage_participant.rb +63 -29
  29. data/test/functional/ft_24_block_participants.rb +6 -0
  30. data/test/functional/ft_30_smtp_participant.rb +2 -2
  31. data/test/functional/ft_32_fs_history.rb +15 -10
  32. data/test/functional/ft_36_storage_history.rb +3 -3
  33. data/test/functional/ft_3_participant_registration.rb +8 -0
  34. data/test/functional/storage_helper.rb +2 -0
  35. data/test/functional/test.rb +9 -2
  36. data/test/unit/storage.rb +2 -1
  37. data/test/unit/test.rb +18 -2
  38. data/test/unit/ut_0_ruby_parser.rb +7 -0
  39. data/test/unit/ut_16_parser.rb +1 -1
  40. data/test/unit/ut_1_fei.rb +60 -2
  41. data/test/unit/ut_3_wait_logger.rb +2 -0
  42. data/test/unit/ut_7_workitem.rb +29 -2
  43. metadata +15 -4
@@ -3,13 +3,13 @@
3
3
 
4
4
  running all the tests
5
5
 
6
- $ ruby19 test/test.rb
6
+ $ ruby test/test.rb
7
7
 
8
8
  running a specific test
9
9
 
10
- $ ruby19 test/functional/ft_1_process_status.rb
10
+ $ ruby test/functional/ft_1_process_status.rb
11
11
 
12
12
  running a test with file persistence :
13
13
 
14
- $ ruby19 test/functional/eft_2_sequence.rb -- --fs
14
+ $ ruby test/functional/eft_2_sequence.rb -- --fs
15
15
 
@@ -252,7 +252,7 @@ class EftConcurrentIteratorTest < Test::Unit::TestCase
252
252
 
253
253
  #noisy
254
254
 
255
- assert_trace pdef, %w[ a b c ]
255
+ assert_trace pdef, *%w[ a b c ].permutation.to_a
256
256
  end
257
257
 
258
258
  def test_merge_type_isolate
@@ -264,10 +264,10 @@ class EftConcurrentIteratorTest < Test::Unit::TestCase
264
264
  bravo
265
265
  end
266
266
 
267
- merged_fields = nil
267
+ mf = nil
268
268
 
269
269
  @engine.register_participant :bravo do |workitem|
270
- merged_fields = workitem.fields
270
+ mf = workitem.fields
271
271
  nil
272
272
  end
273
273
 
@@ -275,12 +275,9 @@ class EftConcurrentIteratorTest < Test::Unit::TestCase
275
275
 
276
276
  assert_trace(
277
277
  pdef, %w{ . . . })
278
- assert_equal(
279
- {"0" => { "f" => "a" },
280
- "1" => { "f" => "b" },
281
- "2" => { "f" => "c" },
282
- "params" => { "ref" => "bravo" }},
283
- merged_fields)
278
+
279
+ mf = ('0'..'2').to_a.map { |k| mf[k]['f'] }.sort
280
+ assert_equal %w[ a b c ], mf
284
281
  end
285
282
 
286
283
  def test_cancel
@@ -298,13 +295,13 @@ class EftConcurrentIteratorTest < Test::Unit::TestCase
298
295
 
299
296
  a_count = 0
300
297
  @engine.register_participant(:alpha) { |wi| a_count += 1 }
301
- @engine.register_participant(:bravo, Ruote::NullParticipant.new)
298
+ @engine.register_participant(:bravo, Ruote::NullParticipant)
302
299
 
303
300
  #noisy
304
301
 
305
302
  wfid = @engine.launch(pdef)
306
303
 
307
- wait_for(2 + 77 * 5)
304
+ wait_for(2 + n * 5)
308
305
  #p "=" * 80
309
306
 
310
307
  assert_equal n, a_count
@@ -25,7 +25,10 @@ class EftAddBranchesTest < Test::Unit::TestCase
25
25
 
26
26
  #noisy
27
27
 
28
- assert_trace pdef, %w[ a b c d ]
28
+ wfid = @engine.launch(pdef)
29
+ wait_for(wfid)
30
+
31
+ assert_equal %w[ a b c d ], @tracer.to_a.sort
29
32
  end
30
33
 
31
34
  def test_add_branches_times
@@ -41,7 +44,10 @@ class EftAddBranchesTest < Test::Unit::TestCase
41
44
 
42
45
  #noisy
43
46
 
44
- assert_trace pdef, %w[ 1 2 3 4 5 ]
47
+ wfid = @engine.launch(pdef)
48
+ wait_for(wfid)
49
+
50
+ assert_equal %w[ 1 2 3 4 5 ], @tracer.to_a.sort
45
51
  end
46
52
 
47
53
  def test_add_branches_times_and_whatever
@@ -57,7 +63,10 @@ class EftAddBranchesTest < Test::Unit::TestCase
57
63
 
58
64
  #noisy
59
65
 
60
- assert_trace pdef, %w[ 1 2 3 a b ]
66
+ wfid = @engine.launch(pdef)
67
+ wait_for(wfid)
68
+
69
+ assert_equal %w[ 1 2 3 a b ], @tracer.to_a.sort
61
70
  end
62
71
 
63
72
  def test_add_branches_with_tag
@@ -78,9 +87,12 @@ class EftAddBranchesTest < Test::Unit::TestCase
78
87
 
79
88
  #noisy
80
89
 
81
- assert_trace(
82
- pdef,
83
- "<:a\n<:b\n>:0\n>:1\n>:0\n>:1\n<:c\n<:c\n>:0\n>:1\n>:0\n>:1")
90
+ wfid = @engine.launch(pdef)
91
+ wait_for(wfid)
92
+
93
+ assert_equal(
94
+ %w[ <:a <:b <:c <:c >:0 >:0 >:0 >:0 >:1 >:1 >:1 >:1 ],
95
+ @tracer.to_a.sort)
84
96
  end
85
97
  end
86
98
 
@@ -113,7 +113,8 @@ class EftIncTest < Test::Unit::TestCase
113
113
 
114
114
  def test_inc_array_head
115
115
 
116
- @engine.context['ruby_eval_allowed'] = true
116
+ #@engine.context['ruby_eval_allowed'] = true
117
+ @engine.configure('ruby_eval_allowed', true)
117
118
 
118
119
  pdef = Ruote.process_definition do
119
120
  sequence do
@@ -63,9 +63,14 @@ class EftConcurrenceTest < Test::Unit::TestCase
63
63
 
64
64
  assert_trace(pdef, %w[ alpha ] * 3)
65
65
 
66
- assert_equal(
67
- {'1'=>{"seen"=>"indeed"}, '0'=>{}, "params"=>{"ref"=>"bravo"}},
68
- fields)
66
+ #assert_equal(
67
+ # {'1'=>{"seen"=>"indeed"}, '0'=>{}, "params"=>{"ref"=>"bravo"}},
68
+ # fields)
69
+
70
+ params = fields.delete('params')
71
+
72
+ assert_equal({ 'ref' => 'bravo' }, params)
73
+ assert_match /seen/, fields.inspect
69
74
  end
70
75
 
71
76
  def test_over_unless
@@ -115,7 +120,7 @@ class EftConcurrenceTest < Test::Unit::TestCase
115
120
 
116
121
  #noisy
117
122
 
118
- assert_trace pdef, %w[ a b done.]
123
+ assert_trace pdef, %w[ a b done. ], %w[ b a done. ]
119
124
  end
120
125
 
121
126
  # helper
@@ -112,58 +112,85 @@ class FtStorageParticipantTest < Test::Unit::TestCase
112
112
  end
113
113
  end
114
114
 
115
- def test_by_participant
115
+ def prepare_al_bravo
116
116
 
117
117
  @engine.register_participant :alpha, Ruote::StorageParticipant
118
118
  @engine.register_participant :bravo, Ruote::StorageParticipant
119
119
 
120
- wfid = @engine.launch(CON_AL_BRAVO)
120
+ @wfid = @engine.launch(CON_AL_BRAVO)
121
121
 
122
122
  wait_for(:bravo)
123
123
 
124
- part = Ruote::StorageParticipant.new
125
- part.context = @engine.context
126
-
127
- assert_equal 2, part.size
128
- #part.by_participant('alpha').each { |wi| p wi }
129
- assert_equal 1, part.by_participant('alpha').size
130
- assert_equal 1, part.by_participant('bravo').size
124
+ @part = Ruote::StorageParticipant.new
125
+ @part.context = @engine.context
131
126
  end
132
127
 
133
- def test_by_field
128
+ def test_by_participant
134
129
 
135
- @engine.register_participant :alpha, Ruote::StorageParticipant
136
- @engine.register_participant :bravo, Ruote::StorageParticipant
130
+ prepare_al_bravo
137
131
 
138
- wfid = @engine.launch(CON_AL_BRAVO)
132
+ assert_equal 2, @part.size
133
+ #@part.by_participant('alpha').each { |wi| p wi }
134
+ assert_equal 1, @part.by_participant('alpha').size
135
+ assert_equal 1, @part.by_participant('bravo').size
136
+ end
139
137
 
140
- wait_for(:bravo)
138
+ def test_by_field
141
139
 
142
- part = Ruote::StorageParticipant.new
143
- part.context = @engine.context
140
+ prepare_al_bravo
144
141
 
145
- assert_equal 2, part.size
146
- assert_equal 2, part.by_field('place').size
147
- assert_equal 2, part.by_field('character').size
148
- assert_equal 1, part.by_field('adversary').size
142
+ assert_equal 2, @part.size
143
+ assert_equal 2, @part.by_field('place').size
144
+ assert_equal 2, @part.by_field('character').size
145
+ assert_equal 1, @part.by_field('adversary').size
149
146
  end
150
147
 
151
148
  def test_by_field_and_value
152
149
 
153
- @engine.register_participant :alpha, Ruote::StorageParticipant
154
- @engine.register_participant :bravo, Ruote::StorageParticipant
150
+ prepare_al_bravo
155
151
 
156
- wfid = @engine.launch(CON_AL_BRAVO)
152
+ assert_equal 2, @part.size
153
+ assert_equal 0, @part.by_field('place', 'nara').size
154
+ assert_equal 2, @part.by_field('place', 'heiankyou').size
155
+ assert_equal 1, @part.by_field('character', 'minamoto no hirosama').size
156
+ end
157
157
 
158
+ def test_query
159
+
160
+ prepare_al_bravo
161
+
162
+ wfid2 = @engine.launch(CON_AL_BRAVO, 'adversary' => 'B')
158
163
  wait_for(:bravo)
159
164
 
160
- part = Ruote::StorageParticipant.new
161
- part.context = @engine.context
165
+ #@part.query({}).each { |wi| puts '-' * 80; p wi }
166
+
167
+ assert_equal 4, @part.size
168
+ assert_equal 4, @part.query({}).size
169
+ assert_equal Ruote::Workitem, @part.query({}).first.class
170
+ assert_equal 2, @part.query(:wfid => @wfid).size
171
+ assert_equal 0, @part.query('place' => 'nara').size
172
+ assert_equal 4, @part.query('place' => 'heiankyou').size
173
+ assert_equal 2, @part.query(:wfid => @wfid, :place => 'heiankyou').size
174
+
175
+ assert_equal(
176
+ 1,
177
+ @part.query(:place => 'heiankyou', :adversary => 'B').size)
178
+
179
+ assert_equal 2, @part.query('place' => 'heiankyou', :limit => 2).size
180
+ assert_equal 4, @part.query('place' => 'heiankyou', :limit => 20).size
181
+
182
+ page0 =
183
+ @part.query('place' => 'heiankyou', :limit => 2).collect { |wi|
184
+ "#{wi.fei.wfid}-#{wi.participant_name}" }
185
+ page1 =
186
+ @part.query('place' => 'heiankyou', :offset => 2, :limit => 2).collect { |wi|
187
+ "#{wi.fei.wfid}-#{wi.participant_name}" }
162
188
 
163
- assert_equal 2, part.size
164
- assert_equal 0, part.by_field('place', 'nara').size
165
- assert_equal 2, part.by_field('place', 'heiankyou').size
166
- assert_equal 1, part.by_field('character', 'minamoto no hirosama').size
189
+ #p page0, page1
190
+ assert_equal 4, (page0 + page1).sort.uniq.size
191
+
192
+ assert_equal(
193
+ 2, @part.query('place' => 'heiankyou', :participant => 'alpha').size)
167
194
  end
168
195
 
169
196
  def test_initialize_engine_then_opts
@@ -255,5 +282,12 @@ class FtStorageParticipantTest < Test::Unit::TestCase
255
282
 
256
283
  assert_equal 'heian', alpha.first.fields['jidai']
257
284
  end
285
+
286
+ def test_registration
287
+
288
+ pa = @engine.register_participant 'alpha', Ruote::StorageParticipant
289
+
290
+ assert_equal Ruote::StorageParticipant, pa.class
291
+ end
258
292
  end
259
293
 
@@ -47,6 +47,9 @@ class FtBlockParticipantTest < Test::Unit::TestCase
47
47
 
48
48
  def test_block_result
49
49
 
50
+ return if Ruote::WIN
51
+ # defective 'json' lib on windows render this test useless
52
+
50
53
  @engine.register_participant :alpha do |workitem|
51
54
  'seen'
52
55
  end
@@ -58,6 +61,9 @@ class FtBlockParticipantTest < Test::Unit::TestCase
58
61
 
59
62
  def test_non_jsonfiable_result
60
63
 
64
+ return if Ruote::WIN
65
+ # defective 'json' lib on windows render this test useless
66
+
61
67
  t = Time.now
62
68
 
63
69
  @engine.register_participant :alpha do |workitem|
@@ -35,8 +35,8 @@ class NftSmtpParticipantTest < Test::Unit::TestCase
35
35
  end
36
36
  end
37
37
 
38
- trapfile = '/tmp/ruote_mailtrap.txt'
39
- FileUtils.rm(trapfile) rescue nil
38
+ trapfile = Ruote::WIN ? 'ruote_mailtrap.txt' : '/tmp/ruote_mailtrap.txt'
39
+ FileUtils.rm_f(trapfile)
40
40
 
41
41
  Thread.new do
42
42
  Trap.new('127.0.0.1', 2525, true, trapfile)
@@ -5,6 +5,8 @@
5
5
  # Sun Oct 4 00:14:27 JST 2009
6
6
  #
7
7
 
8
+ require File.join(File.dirname(__FILE__), 'base')
9
+
8
10
  begin
9
11
  require 'yajl'
10
12
  rescue LoadError
@@ -12,8 +14,6 @@ rescue LoadError
12
14
  end
13
15
  Rufus::Json.detect_backend rescue nil
14
16
 
15
- require File.join(File.dirname(__FILE__), 'base')
16
-
17
17
  require 'ruote/log/fs_history'
18
18
  require 'ruote/part/no_op_participant'
19
19
 
@@ -57,6 +57,7 @@ class FtFsHistoryTest < Test::Unit::TestCase
57
57
 
58
58
  ensure
59
59
 
60
+ @engine.context.history.shutdown
60
61
  Dir['work/log/*'].each { |fn| FileUtils.rm(fn) }
61
62
  end
62
63
 
@@ -90,6 +91,7 @@ class FtFsHistoryTest < Test::Unit::TestCase
90
91
 
91
92
  ensure
92
93
 
94
+ @engine.context.history.shutdown
93
95
  Dir['work/log2/*'].each { |fn| FileUtils.rm(fn) }
94
96
  end
95
97
 
@@ -115,6 +117,7 @@ class FtFsHistoryTest < Test::Unit::TestCase
115
117
 
116
118
  ensure
117
119
 
120
+ @engine.context.history.shutdown
118
121
  Dir['work/log/*'].each { |fn| FileUtils.rm(fn) }
119
122
  end
120
123
 
@@ -145,6 +148,7 @@ class FtFsHistoryTest < Test::Unit::TestCase
145
148
 
146
149
  ensure
147
150
 
151
+ @engine.context.history.shutdown
148
152
  Dir['work/log/*'].each { |fn| FileUtils.rm(fn) }
149
153
  end
150
154
 
@@ -157,18 +161,18 @@ class FtFsHistoryTest < Test::Unit::TestCase
157
161
 
158
162
  File.open(File.join('work', 'log', 'history_2009-10-08.json'), 'w') do |f|
159
163
  f.puts(%{
160
- ["2009-10-08 12:33:27.835469",{"wfid":"20091224-beretsureto","tree":["define",{},[["alpha",{},[]],["echo",{"done.":null},[]]]],"workitem":{"fields":{},"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0"}},"variables":{},"type":"msgs","_id":"17619-2151883888-1261658007.83374","action":"launch","_rev":0,"put_at":"2009/12/24 12:33:27.833769 UTC"}]
161
- ["2009-10-08 12:33:27.836787",{"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"tree":["participant",{"ref":"alpha"},[]],"parent_id":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0"},"variables":null,"workitem":{"fields":{"params":{"ref":"alpha"}},"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"participant_name":"alpha"},"type":"msgs","_id":"17619-2157823640-1261658007.83534","action":"apply","_rev":0,"put_at":"2009/12/24 12:33:27.835369 UTC"}]
162
- ["2009-10-08 12:33:27.837098",{"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"participant_name":"alpha","workitem":{"fields":{"params":{"ref":"alpha"}},"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"participant_name":"alpha"},"for_engine_worker?":false,"type":"msgs","_id":"17619-2157823640-1261658007.83666","action":"dispatch","_rev":0,"put_at":"2009/12/24 12:33:27.836690 UTC"}]
164
+ ["!2009-10-08!12:33:27.835469",{"wfid":"20091224-beretsureto","tree":["define",{},[["alpha",{},[]],["echo",{"done.":null},[]]]],"workitem":{"fields":{},"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0"}},"variables":{},"type":"msgs","_id":"17619-2151883888-1261658007.83374","action":"launch","_rev":0,"put_at":"2009/12/24 12:33:27.833769 UTC"}]
165
+ ["!2009-10-08!12:33:27.836787",{"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"tree":["participant",{"ref":"alpha"},[]],"parent_id":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0"},"variables":null,"workitem":{"fields":{"params":{"ref":"alpha"}},"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"participant_name":"alpha"},"type":"msgs","_id":"17619-2157823640-1261658007.83534","action":"apply","_rev":0,"put_at":"2009/12/24 12:33:27.835369 UTC"}]
166
+ ["!2009-10-08!12:33:27.837098",{"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"participant_name":"alpha","workitem":{"fields":{"params":{"ref":"alpha"}},"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"participant_name":"alpha"},"for_engine_worker?":false,"type":"msgs","_id":"17619-2157823640-1261658007.83666","action":"dispatch","_rev":0,"put_at":"2009/12/24 12:33:27.836690 UTC"}]
163
167
  }.strip)
164
168
  end
165
169
 
166
170
  File.open(File.join('work', 'log', 'history_2009-10-31.json'), 'w') do |f|
167
171
  f.puts(%{
168
- ["2009-10-31 12:33:27.835469",{"wfid":"20091224-beretsureto","tree":["define",{},[["alpha",{},[]],["echo",{"done.":null},[]]]],"workitem":{"fields":{},"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0"}},"variables":{},"type":"msgs","_id":"17619-2151883888-1261658007.83374","action":"launch","_rev":0,"put_at":"2009/12/24 12:33:27.833769 UTC"}]
169
- ["2009-10-31 12:33:27.836787",{"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"tree":["participant",{"ref":"alpha"},[]],"parent_id":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0"},"variables":null,"workitem":{"fields":{"params":{"ref":"alpha"}},"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"participant_name":"alpha"},"type":"msgs","_id":"17619-2157823640-1261658007.83534","action":"apply","_rev":0,"put_at":"2009/12/24 12:33:27.835369 UTC"}]
170
- ["2009-10-31 12:33:27.837098",{"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"participant_name":"alpha","workitem":{"fields":{"params":{"ref":"alpha"}},"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"participant_name":"alpha"},"for_engine_worker?":false,"type":"msgs","_id":"17619-2157823640-1261658007.83666","action":"dispatch","_rev":0,"put_at":"2009/12/24 12:33:27.836690 UTC"}]
171
- ["2009-10-31 12:33:27.837961",{"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"workitem":{"fields":{},"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"participant_name":"alpha"},"participant_name":"alpha","type":"msgs","_id":"17619-2159486252-1261658007.83719","action":"receive","_rev":0,"put_at":"2009/12/24 12:33:27.837235 UTC"}]
172
+ ["!2009-10-31!12:33:27.835469",{"wfid":"20091224-beretsureto","tree":["define",{},[["alpha",{},[]],["echo",{"done.":null},[]]]],"workitem":{"fields":{},"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0"}},"variables":{},"type":"msgs","_id":"17619-2151883888-1261658007.83374","action":"launch","_rev":0,"put_at":"2009/12/24 12:33:27.833769 UTC"}]
173
+ ["!2009-10-31!12:33:27.836787",{"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"tree":["participant",{"ref":"alpha"},[]],"parent_id":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0"},"variables":null,"workitem":{"fields":{"params":{"ref":"alpha"}},"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"participant_name":"alpha"},"type":"msgs","_id":"17619-2157823640-1261658007.83534","action":"apply","_rev":0,"put_at":"2009/12/24 12:33:27.835369 UTC"}]
174
+ ["!2009-10-31!12:33:27.837098",{"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"participant_name":"alpha","workitem":{"fields":{"params":{"ref":"alpha"}},"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"participant_name":"alpha"},"for_engine_worker?":false,"type":"msgs","_id":"17619-2157823640-1261658007.83666","action":"dispatch","_rev":0,"put_at":"2009/12/24 12:33:27.836690 UTC"}]
175
+ ["!2009-10-31!12:33:27.837961",{"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"workitem":{"fields":{},"fei":{"engine_id":"engine","wfid":"20091224-beretsureto","expid":"0_0"},"participant_name":"alpha"},"participant_name":"alpha","type":"msgs","_id":"17619-2159486252-1261658007.83719","action":"receive","_rev":0,"put_at":"2009/12/24 12:33:27.837235 UTC"}]
172
176
  }.strip)
173
177
  end
174
178
 
@@ -176,11 +180,12 @@ class FtFsHistoryTest < Test::Unit::TestCase
176
180
  assert_equal 4, @engine.context.history.by_date('2009-10-31').size
177
181
 
178
182
  assert_equal(
179
- [ Time.parse(Time.now.strftime('%F')), Time.parse('2009-10-08') ],
183
+ [ Time.parse(Time.now.strftime('%Y-%m-%d')), Time.parse('2009-10-08') ],
180
184
  @engine.context.history.range)
181
185
 
182
186
  ensure
183
187
 
188
+ @engine.context.history.shutdown
184
189
  Dir['work/log/*'].each { |fn| FileUtils.rm(fn) }
185
190
  end
186
191
  end
@@ -57,12 +57,12 @@ class FtStorageHistoryTest < Test::Unit::TestCase
57
57
 
58
58
  6.times do |i|
59
59
  @engine.storage.put(
60
- '_id' => "2010-01-06!11414#{i}!0!!20100106-bichisosupo",
60
+ '_id' => "!2010-01-06!11414#{i}!0!!20100106-bichisosupo",
61
61
  'type' => 'history')
62
62
  end
63
63
  7.times do |i|
64
64
  @engine.storage.put(
65
- '_id' => "2010-01-07!11414#{i}!0!!20100107-bichitehoni",
65
+ '_id' => "!2010-01-07!11414#{i}!0!!20100107-bichitehoni",
66
66
  'type' => 'history')
67
67
  end
68
68
 
@@ -78,7 +78,7 @@ class FtStorageHistoryTest < Test::Unit::TestCase
78
78
  7.times do |i|
79
79
  i = i + 1
80
80
  @engine.storage.put(
81
- '_id' => "2010-01-0#{i}!114147!0!!2010010#{i}-bichisosupo",
81
+ '_id' => "!2010-01-0#{i}!114147!0!!2010010#{i}-bichisosupo",
82
82
  'type' => 'history')
83
83
  end
84
84
 
@@ -103,5 +103,13 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
103
103
 
104
104
  assert_equal true, alpha.down
105
105
  end
106
+
107
+ def test_participant_list_of_names
108
+
109
+ pa = @engine.register_participant :alpha do |workitem|
110
+ end
111
+
112
+ assert_equal ['^alpha$'], @engine.context.plist.names
113
+ end
106
114
  end
107
115
 
@@ -38,6 +38,8 @@ else uses the in-memory Ruote::Engine (fastest, but no persistence at all)
38
38
  end
39
39
 
40
40
  ps = ARGV.select { |a| a.match(/^--/) }
41
+ ps.delete('--split')
42
+
41
43
  persistent = opts.delete(:persistent)
42
44
 
43
45
  if ps.include?('--fs')