ruote 2.1.1 → 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,8 +1,14 @@
1
1
 
2
- = ruote (OpenWFEru) - CHANGELOG.txt
2
+ = ruote - CHANGELOG.txt
3
3
 
4
- == ruote - 2.0.0 not yet released
4
+
5
+ == ruote - 2.1.2 released 2010/01/03
6
+
7
+ - fixed issue when initializing engine without worker. Thanks Matt Nichols.
8
+
9
+
10
+ == ruote - 2.1.1 released 2009/12/31
5
11
 
6
12
  == OpenWFEru - 0.9.2 released 2007/01/26
7
- == openwfe-ruby - 1.7.0 released 2006-05-08
13
+ == openwfe-ruby - 1.7.0 released 2006/05/08
8
14
 
@@ -15,6 +15,7 @@ Kenneth Kalmer http://www.opensourcery.co.za
15
15
  Contributors
16
16
  ------------
17
17
 
18
+ Matt Nichols - http://github.com/mattnichols
18
19
  Nicholas Faiz - http://github.com/biv
19
20
  Chris Beer - http://github.com/cbeer
20
21
  Enrico Bianco - http://github.com/enricob
data/Rakefile CHANGED
@@ -23,9 +23,9 @@ ruote is an open source ruby workflow engine.
23
23
  gem.rubyforge_project = 'ruote'
24
24
  gem.test_file = 'test/test.rb'
25
25
 
26
- gem.add_dependency 'rufus-cloche', '>= 0.1.6'
27
- gem.add_dependency 'rufus-dollar'
28
26
  gem.add_dependency 'rufus-json'
27
+ gem.add_dependency 'rufus-cloche', '>= 0.1.10'
28
+ gem.add_dependency 'rufus-dollar'
29
29
  gem.add_dependency 'rufus-lru'
30
30
  gem.add_dependency 'rufus-mnemo', '>= 1.1.0'
31
31
  gem.add_dependency 'rufus-scheduler', '>= 2.0.3'
data/TODO.txt CHANGED
@@ -285,3 +285,6 @@
285
285
  concurrence terminated (got removed) meanwhile ?
286
286
  the reply returns true...
287
287
 
288
+ [ ] shell ? irb ? Shell.new(storage)
289
+ [ ] focus on fulldup or json.dup (via fulldup ?)
290
+
@@ -50,7 +50,7 @@ module Ruote
50
50
 
51
51
  @worker = nil
52
52
  @storage = worker_or_storage
53
- @context = Ruote::Context.new(self)
53
+ @context = Ruote::Context.new(@storage, self)
54
54
  end
55
55
 
56
56
  @variables = EngineVariables.new(@storage)
@@ -62,13 +62,6 @@ module Ruote::Exp
62
62
 
63
63
  # never called
64
64
  end
65
-
66
- def cancel (flavour)
67
-
68
- # has to let the workitem rebound for the whole process to get cancelled
69
-
70
- reply_to_parent(h.applied_workitem)
71
- end
72
65
  end
73
66
  end
74
67
 
@@ -135,13 +135,6 @@ module Ruote::Exp
135
135
  reply_to_parent(h.applied_workitem) unless ancestor
136
136
  end
137
137
 
138
- # Necessary in case of 'pass_command_directly'
139
- #
140
- def cancel (flavour)
141
-
142
- reply_to_parent(h.applied_workitem)
143
- end
144
-
145
138
  protected
146
139
 
147
140
  # Walks up the expression tree (process instance and returns the first
@@ -77,14 +77,6 @@ module Ruote::Exp
77
77
 
78
78
  raise(Ruote::ForcedError.new(msg))
79
79
  end
80
-
81
- def cancel (flavour)
82
-
83
- # TODO : should the error get removed from the process status ?
84
- # it's currently done when the exp gets 'unpersisted'
85
-
86
- reply_to_parent(h.applied_workitem)
87
- end
88
80
  end
89
81
  end
90
82
 
@@ -179,11 +179,6 @@ module Ruote::Exp
179
179
  end
180
180
  end
181
181
 
182
- def cancel (flavour)
183
-
184
- reply_to_parent(h.applied_workitem)
185
- end
186
-
187
182
  protected
188
183
 
189
184
  def reply_to_parent (workitem)
@@ -73,11 +73,6 @@ module Ruote::Exp
73
73
 
74
74
  # never called
75
75
  end
76
-
77
- def cancel (flavour)
78
-
79
- reply_to_parent(h.applied_workitem)
80
- end
81
76
  end
82
77
  end
83
78
 
@@ -251,6 +251,7 @@ module Ruote::Exp
251
251
  end
252
252
 
253
253
  h.children.delete(fei)
254
+ # accept without any check ?
254
255
 
255
256
  if h.state != nil # failing or timing out ...
256
257
 
@@ -260,7 +261,7 @@ module Ruote::Exp
260
261
  persist_or_raise # for the updated h.children
261
262
  end
262
263
 
263
- else
264
+ else # vanilla reply
264
265
 
265
266
  reply(workitem)
266
267
  end
@@ -282,14 +283,14 @@ module Ruote::Exp
282
283
  #
283
284
  def do_cancel (msg)
284
285
 
285
- @msg = Ruote.fulldup(msg)
286
-
287
286
  return if h.state == 'cancelling'
288
287
  # cancel on cancel gets discarded
289
288
 
289
+ @msg = Ruote.fulldup(msg)
290
+
290
291
  flavour = msg['flavour']
291
292
 
292
- return if h.state == 'failed' and flavour == 'timeout'
293
+ return if h.state == 'failed' && flavour == 'timeout'
293
294
  # do not timeout expressions that are "in error" (failed)
294
295
 
295
296
  h.state = case flavour
@@ -318,6 +319,9 @@ module Ruote::Exp
318
319
  #
319
320
  def cancel (flavour)
320
321
 
322
+ return reply_to_parent(h.applied_workitem) \
323
+ unless h.children.find { |cfei| Ruote::FlowExpression.fetch(cfei) }
324
+
321
325
  do_persist || return
322
326
  # before firing the cancel message to the children
323
327
 
@@ -39,10 +39,6 @@ module Ruote::Exp
39
39
  def reply (workitem)
40
40
  raise "can't apply or reply [to] raw expression"
41
41
  end
42
-
43
- def cancel (flavour)
44
- reply_to_parent(h.applied_workitem)
45
- end
46
42
  end
47
43
  end
48
44
 
@@ -55,7 +55,7 @@ module Ruote::Exp
55
55
  r = @context.storage.put(@h)
56
56
 
57
57
  #puts "+ per #{h.fei['expid']} #{tree.first} #{h._rev} --> #{r.class}"
58
- #Ruote.p_caller('+ per') if r != nil
58
+ #Ruote.p_caller('+ per') if r != nil || h.fei['expid'] == '0_0'
59
59
 
60
60
  r
61
61
  end
@@ -65,7 +65,7 @@ module Ruote::Exp
65
65
  r = @context.storage.delete(@h)
66
66
 
67
67
  #puts "- unp #{h.fei['expid']} #{tree.first} #{h._rev} --> #{r.class}"
68
- #Ruote.p_caller('- unp') if r != nil
68
+ #Ruote.p_caller('- unp') if r != nil || h.fei['expid'] == '0_0'
69
69
 
70
70
  return r if r
71
71
 
@@ -123,15 +123,13 @@ module Ruote::Exp
123
123
 
124
124
  case r = self.send("try_#{pers}")
125
125
  when true
126
- (pers == :unpersist)
127
- # persist FALSE : gone... return false "please don't go on"
128
- # unpersist TRUE : already gone, should be OK
126
+ false # don't go on
129
127
  when Hash
130
128
  self.h = r
131
129
  self.send("do_#{@msg['action']}", @msg)
132
- false
130
+ false # don't go on
133
131
  else
134
- true
132
+ true # success, please go on
135
133
  end
136
134
  end
137
135
  end
@@ -51,11 +51,13 @@ module Ruote
51
51
  @last = nil
52
52
  @file = nil
53
53
 
54
- if @context.respond_to?(:worker)
54
+ if @context.worker
55
+
56
+ # only care about logging if there is a worker present
57
+
55
58
  @context.worker.subscribe(:all, self)
59
+ rotate_if_necessary
56
60
  end
57
-
58
- rotate_if_necessary
59
61
  end
60
62
 
61
63
  # Makes sure to close the history file.
@@ -38,12 +38,12 @@ module Ruote
38
38
 
39
39
  @context = context
40
40
 
41
- if @context.respond_to?(:worker)
41
+ if @context.worker
42
42
  #
43
43
  # this is a worker context, DO log
44
44
  #
45
45
  @context.worker.subscribe(:all, self)
46
- else
46
+ #else
47
47
  #
48
48
  # this is not a worker context, DO NOT log, but be ready to
49
49
  # be queried
@@ -22,7 +22,11 @@
22
22
  # Made in Japan.
23
23
  #++
24
24
 
25
- require 'yajl' rescue require 'json'
25
+ begin
26
+ require 'yajl'
27
+ rescue LoadError
28
+ require 'json'
29
+ end
26
30
  # gem install yajl-ruby OR json OR json_pure OR json-jruby
27
31
 
28
32
  require 'rufus/json'
@@ -50,7 +54,7 @@ module Ruote
50
54
 
51
55
  def put (doc, opts={})
52
56
 
53
- @cloche.put(doc.merge!('put_at' => Ruote.now_to_utc_s))
57
+ @cloche.put(doc.merge!('put_at' => Ruote.now_to_utc_s), opts)
54
58
  end
55
59
 
56
60
  def get (type, key)
@@ -27,7 +27,7 @@ require 'ruote/fei'
27
27
 
28
28
  module Ruote
29
29
 
30
- VERSION = '2.1.1'
30
+ VERSION = '2.1.2'
31
31
 
32
32
  class Worker
33
33
 
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ruote}
8
- s.version = "2.1.1"
8
+ s.version = "2.1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["John Mettraux", "Kenneth Kalmer"]
12
- s.date = %q{2009-12-31}
12
+ s.date = %q{2010-01-03}
13
13
  s.description = %q{
14
14
  ruote is an open source ruby workflow engine.
15
15
  }
@@ -218,6 +218,7 @@ ruote is an open source ruby workflow engine.
218
218
  "test/unit/ut_15_util.rb",
219
219
  "test/unit/ut_16_parser.rb",
220
220
  "test/unit/ut_17_storage.rb",
221
+ "test/unit/ut_18_engine.rb",
221
222
  "test/unit/ut_1_fei.rb",
222
223
  "test/unit/ut_2_wfidgen.rb",
223
224
  "test/unit/ut_3_wait_logger.rb",
@@ -243,9 +244,9 @@ ruote is an open source ruby workflow engine.
243
244
  s.specification_version = 3
244
245
 
245
246
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
246
- s.add_runtime_dependency(%q<rufus-cloche>, [">= 0.1.6"])
247
- s.add_runtime_dependency(%q<rufus-dollar>, [">= 0"])
248
247
  s.add_runtime_dependency(%q<rufus-json>, [">= 0"])
248
+ s.add_runtime_dependency(%q<rufus-cloche>, [">= 0.1.10"])
249
+ s.add_runtime_dependency(%q<rufus-dollar>, [">= 0"])
249
250
  s.add_runtime_dependency(%q<rufus-lru>, [">= 0"])
250
251
  s.add_runtime_dependency(%q<rufus-mnemo>, [">= 1.1.0"])
251
252
  s.add_runtime_dependency(%q<rufus-scheduler>, [">= 2.0.3"])
@@ -253,9 +254,9 @@ ruote is an open source ruby workflow engine.
253
254
  s.add_development_dependency(%q<json>, [">= 0"])
254
255
  s.add_development_dependency(%q<yard>, [">= 0"])
255
256
  else
256
- s.add_dependency(%q<rufus-cloche>, [">= 0.1.6"])
257
- s.add_dependency(%q<rufus-dollar>, [">= 0"])
258
257
  s.add_dependency(%q<rufus-json>, [">= 0"])
258
+ s.add_dependency(%q<rufus-cloche>, [">= 0.1.10"])
259
+ s.add_dependency(%q<rufus-dollar>, [">= 0"])
259
260
  s.add_dependency(%q<rufus-lru>, [">= 0"])
260
261
  s.add_dependency(%q<rufus-mnemo>, [">= 1.1.0"])
261
262
  s.add_dependency(%q<rufus-scheduler>, [">= 2.0.3"])
@@ -264,9 +265,9 @@ ruote is an open source ruby workflow engine.
264
265
  s.add_dependency(%q<yard>, [">= 0"])
265
266
  end
266
267
  else
267
- s.add_dependency(%q<rufus-cloche>, [">= 0.1.6"])
268
- s.add_dependency(%q<rufus-dollar>, [">= 0"])
269
268
  s.add_dependency(%q<rufus-json>, [">= 0"])
269
+ s.add_dependency(%q<rufus-cloche>, [">= 0.1.10"])
270
+ s.add_dependency(%q<rufus-dollar>, [">= 0"])
270
271
  s.add_dependency(%q<rufus-lru>, [">= 0"])
271
272
  s.add_dependency(%q<rufus-mnemo>, [">= 1.1.0"])
272
273
  s.add_dependency(%q<rufus-scheduler>, [">= 2.0.3"])
@@ -1,13 +1,16 @@
1
1
 
2
2
  pers = ARGV.find { |a| a.match(/^--/) } || ''
3
+ tnumber = ARGV.find { |a| a.match(/^\d+/) } || 2
3
4
 
4
5
  i = 0
5
6
 
6
7
  loop do
7
8
 
8
- #s = `ruby test/functional/ct_0_concurrence.rb #{pers}`
9
- #s = `ruby test/functional/ct_1_iterator.rb #{pers}`
10
- s = `ruby test/functional/ct_2_cancel.rb #{pers}`
9
+ t = Dir["test/functional/ct_#{tnumber}_*.rb"].first
10
+
11
+ raise "didn't find test..." unless t
12
+
13
+ s = `ruby #{t} #{pers}`
11
14
 
12
15
  if $? != 0
13
16
  puts
@@ -41,7 +41,7 @@ class CtConcurrenceTest < Test::Unit::TestCase
41
41
  msgs = @storage.get_msgs
42
42
  msg = msgs.first
43
43
 
44
- if msgs.size > 1 || (msg['fei'] && msg['fei']['expid'] != '0')
44
+ if msgs.size > 1 || (msg && msg['fei'] && msg['fei']['expid'] != '0')
45
45
 
46
46
  msgs.each do |m|
47
47
 
@@ -45,8 +45,8 @@ class CtCancelTest < Test::Unit::TestCase
45
45
  #msgs.each { |m| p m }
46
46
  #puts
47
47
 
48
- t1 = Thread.new { @engine0.do_step(msgs[1]) }
49
- t0 = Thread.new { @engine1.do_step(msgs[0]) }
48
+ t1 = Thread.new { @engine1.do_step(msgs[1]) }
49
+ t0 = Thread.new { @engine0.do_step(msgs[0]) }
50
50
  t1.join
51
51
  t0.join
52
52
 
@@ -146,7 +146,11 @@ class EftIfTest < Test::Unit::TestCase
146
146
 
147
147
  def test_xml_equals
148
148
 
149
- require 'yajl' rescue require 'json'
149
+ begin
150
+ require 'yajl'
151
+ rescue LoadError
152
+ require 'json'
153
+ end
150
154
  Rufus::Json.detect_backend
151
155
  # making sure JSON dup is available in case of HashStorage
152
156
 
@@ -105,6 +105,8 @@ class FtRecursionTest < Test::Unit::TestCase
105
105
 
106
106
  6.times { wait_for(:alpha) }
107
107
 
108
+ Thread.pass
109
+
108
110
  assert_equal((1..6).to_a.join("\n"), @tracer.to_s)
109
111
  end
110
112
  end
@@ -38,6 +38,14 @@ class FtReceiverTest < Test::Unit::TestCase
38
38
 
39
39
  # no reply to the engine
40
40
  end
41
+
42
+ # do not let the dispatch happen in its own thread, this makes
43
+ # wait_for(:alpha) synchronous.
44
+ #
45
+ def do_not_thread
46
+
47
+ true
48
+ end
41
49
  end
42
50
 
43
51
  class MyReceiver < Ruote::Receiver
@@ -5,8 +5,11 @@
5
5
  # Sun Oct 4 00:14:27 JST 2009
6
6
  #
7
7
 
8
-
9
- require 'yajl' rescue require 'json'
8
+ begin
9
+ require 'yajl'
10
+ rescue LoadError
11
+ require 'json'
12
+ end
10
13
  Rufus::Json.detect_backend rescue nil
11
14
 
12
15
  require File.join(File.dirname(__FILE__), 'base')
@@ -35,7 +38,7 @@ class FtHistoryTest < Test::Unit::TestCase
35
38
  wfid0 = assert_trace(pdef, "done.")
36
39
  wfid1 = assert_trace(pdef, "done.\ndone.")
37
40
 
38
- sleep 0.010
41
+ sleep 0.100
39
42
 
40
43
  lines = File.readlines(Dir['work/log/*'].first)
41
44
 
@@ -79,7 +82,7 @@ class FtHistoryTest < Test::Unit::TestCase
79
82
 
80
83
  wfid0 = assert_trace(pdef, "done.")
81
84
 
82
- sleep 0.010
85
+ sleep 0.100
83
86
 
84
87
  h = @engine.context.history.by_process(wfid0)
85
88
  #h.each { |r| p r }
@@ -104,7 +107,7 @@ class FtHistoryTest < Test::Unit::TestCase
104
107
  wfid = @engine.launch(pdef)
105
108
  wait_for(wfid)
106
109
 
107
- sleep 0.010
110
+ sleep 0.100
108
111
 
109
112
  h = @engine.context.history.by_process(wfid)
110
113
  #h.each { |r| p r }
@@ -134,7 +137,7 @@ class FtHistoryTest < Test::Unit::TestCase
134
137
  @engine.cancel_expression(fei)
135
138
  wait_for(wfid)
136
139
 
137
- sleep 0.010
140
+ sleep 0.100
138
141
 
139
142
  h = @engine.context.history.by_process(wfid)
140
143
  #h.each { |r| p r }
@@ -53,9 +53,10 @@ class RtCronTest < Test::Unit::TestCase
53
53
 
54
54
  @engine.cancel_process(wfid)
55
55
 
56
- msg = wait_for(wfid)
56
+ while msg = wait_for(wfid)
57
+ break if msg['action'] == 'terminated'
58
+ end
57
59
 
58
- assert_equal 'terminated', msg['action']
59
60
  assert_equal 0, @engine.processes.size
60
61
  assert_equal 0, @engine.storage.get_many('schedules').size
61
62
  end
@@ -42,7 +42,11 @@ else uses the in-memory Ruote::Engine (fastest, but no persistence at all)
42
42
 
43
43
  if ps.include?('--fs')
44
44
 
45
- require 'yajl' rescue require 'json'
45
+ begin
46
+ require 'yajl'
47
+ rescue LoadError
48
+ require 'json'
49
+ end
46
50
  Rufus::Json.detect_backend
47
51
 
48
52
  Ruote::FsStorage.new('work', opts)
@@ -66,7 +70,11 @@ else uses the in-memory Ruote::Engine (fastest, but no persistence at all)
66
70
 
67
71
  elsif persistent
68
72
 
69
- require 'yajl' rescue require 'json'
73
+ begin
74
+ require 'yajl'
75
+ rescue LoadError
76
+ require 'json'
77
+ end
70
78
  Rufus::Json.detect_backend
71
79
 
72
80
  Ruote::FsStorage.new('work', opts)
@@ -5,7 +5,11 @@
5
5
  # Mon Dec 14 15:03:13 JST 2009
6
6
  #
7
7
 
8
- require 'yajl' rescue require 'json'
8
+ begin
9
+ require 'yajl'
10
+ rescue LoadError
11
+ require 'json'
12
+ end
9
13
  require 'patron' rescue nil
10
14
 
11
15
  require File.join(File.dirname(__FILE__), %w[ .. test_helper.rb ])
@@ -44,7 +48,11 @@ class UtStorage < Test::Unit::TestCase
44
48
 
45
49
  def test_put
46
50
 
47
- @s.put('_id' => 'nada', 'type' => 'dogfood', 'message' => 'testing again')
51
+ doc = { '_id' => 'nada', 'type' => 'dogfood', 'message' => 'testing (2)' }
52
+
53
+ @s.put(doc)
54
+
55
+ assert_nil doc['_rev']
48
56
 
49
57
  h = @s.get('dogfood', 'nada')
50
58
 
@@ -93,8 +101,12 @@ class UtStorage < Test::Unit::TestCase
93
101
 
94
102
  def test_keys_should_be_string
95
103
 
96
- require 'yajl' rescue require 'json'
97
- Rufus::Json.detect_backend
104
+ #begin
105
+ # require 'yajl'
106
+ #rescue LoadError
107
+ # require 'json'
108
+ #end
109
+ #Rufus::Json.detect_backend
98
110
 
99
111
  doc = { '_id' => 'h0', 'type' => 'dogfood', :m0 => :z, :m1 => [ :a, :b ] }
100
112
 
@@ -108,7 +120,7 @@ class UtStorage < Test::Unit::TestCase
108
120
 
109
121
  # Updating a gone document must result in a 'true' reply.
110
122
  #
111
- def test_put_missing
123
+ def test_put_gone
112
124
 
113
125
  h = @s.get('dogfood', 'toto')
114
126
 
@@ -0,0 +1,34 @@
1
+
2
+ #
3
+ # testing ruote
4
+ #
5
+ # Sun Jan 3 12:04:07 JST 2010
6
+ #
7
+ # Matt Nichols (http://github.com/mattnichols)
8
+ #
9
+
10
+ require File.join(File.dirname(__FILE__), %w[ .. test_helper.rb ])
11
+ require File.join(File.dirname(__FILE__), %w[ .. functional storage_helper.rb ])
12
+
13
+ require 'ruote'
14
+
15
+
16
+ class UtEngineTest < Test::Unit::TestCase
17
+
18
+ def test_initialize_with_worker
19
+
20
+ storage = determine_storage(
21
+ 's_logger' => [ 'ruote/log/test_logger', 'Ruote::TestLogger' ])
22
+ worker = Ruote::Worker.new(storage)
23
+ engine = Ruote::Engine.new(worker, false)
24
+ end
25
+
26
+ def test_initialize_with_storage
27
+
28
+ storage = determine_storage(
29
+ 's_logger' => [ 'ruote/log/test_logger', 'Ruote::TestLogger' ])
30
+
31
+ engine = Ruote::Engine.new(storage)
32
+ end
33
+ end
34
+
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.1
4
+ version: 2.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Mettraux
@@ -10,31 +10,31 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-12-31 00:00:00 +09:00
13
+ date: 2010-01-03 00:00:00 +09:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
- name: rufus-cloche
17
+ name: rufus-json
18
18
  type: :runtime
19
19
  version_requirement:
20
20
  version_requirements: !ruby/object:Gem::Requirement
21
21
  requirements:
22
22
  - - ">="
23
23
  - !ruby/object:Gem::Version
24
- version: 0.1.6
24
+ version: "0"
25
25
  version:
26
26
  - !ruby/object:Gem::Dependency
27
- name: rufus-dollar
27
+ name: rufus-cloche
28
28
  type: :runtime
29
29
  version_requirement:
30
30
  version_requirements: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: "0"
34
+ version: 0.1.10
35
35
  version:
36
36
  - !ruby/object:Gem::Dependency
37
- name: rufus-json
37
+ name: rufus-dollar
38
38
  type: :runtime
39
39
  version_requirement:
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -313,6 +313,7 @@ files:
313
313
  - test/unit/ut_15_util.rb
314
314
  - test/unit/ut_16_parser.rb
315
315
  - test/unit/ut_17_storage.rb
316
+ - test/unit/ut_18_engine.rb
316
317
  - test/unit/ut_1_fei.rb
317
318
  - test/unit/ut_2_wfidgen.rb
318
319
  - test/unit/ut_3_wait_logger.rb