ruote 2.1.6 → 2.1.7

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.
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')