scout-gear 7.1.0 → 7.2.0

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 (83) hide show
  1. checksums.yaml +4 -4
  2. data/.vimproject +29 -0
  3. data/VERSION +1 -1
  4. data/bin/scout +5 -1
  5. data/lib/rbbt-scout.rb +5 -0
  6. data/lib/scout/concurrent_stream.rb +6 -2
  7. data/lib/scout/config.rb +168 -0
  8. data/lib/scout/exceptions.rb +4 -3
  9. data/lib/scout/indiferent_hash/options.rb +1 -0
  10. data/lib/scout/indiferent_hash.rb +4 -2
  11. data/lib/scout/log/color.rb +3 -1
  12. data/lib/scout/log/progress/report.rb +1 -0
  13. data/lib/scout/log/progress/util.rb +1 -1
  14. data/lib/scout/log/progress.rb +5 -3
  15. data/lib/scout/log.rb +3 -2
  16. data/lib/scout/misc/monitor.rb +3 -0
  17. data/lib/scout/misc/system.rb +15 -0
  18. data/lib/scout/misc.rb +1 -0
  19. data/lib/scout/named_array.rb +68 -0
  20. data/lib/scout/open/stream.rb +38 -7
  21. data/lib/scout/path/find.rb +27 -3
  22. data/lib/scout/path/util.rb +7 -4
  23. data/lib/scout/persist/serialize.rb +7 -14
  24. data/lib/scout/persist.rb +21 -1
  25. data/lib/scout/resource/produce.rb +7 -94
  26. data/lib/scout/resource/software.rb +176 -0
  27. data/lib/scout/tsv/dumper.rb +107 -0
  28. data/lib/scout/tsv/index.rb +49 -0
  29. data/lib/scout/tsv/parser.rb +203 -30
  30. data/lib/scout/tsv/path.rb +13 -0
  31. data/lib/scout/tsv/persist/adapter.rb +348 -0
  32. data/lib/scout/tsv/persist/tokyocabinet.rb +113 -0
  33. data/lib/scout/tsv/persist.rb +15 -0
  34. data/lib/scout/tsv/traverse.rb +48 -0
  35. data/lib/scout/tsv/util.rb +24 -0
  36. data/lib/scout/tsv.rb +16 -3
  37. data/lib/scout/work_queue/worker.rb +3 -3
  38. data/lib/scout/work_queue.rb +22 -7
  39. data/lib/scout/workflow/definition.rb +93 -4
  40. data/lib/scout/workflow/step/config.rb +18 -0
  41. data/lib/scout/workflow/step/dependencies.rb +40 -0
  42. data/lib/scout/workflow/step/file.rb +15 -0
  43. data/lib/scout/workflow/step/info.rb +31 -4
  44. data/lib/scout/workflow/step/provenance.rb +148 -0
  45. data/lib/scout/workflow/step.rb +68 -19
  46. data/lib/scout/workflow/task.rb +3 -2
  47. data/lib/scout/workflow/usage.rb +1 -1
  48. data/lib/scout/workflow.rb +11 -3
  49. data/lib/scout-gear.rb +1 -0
  50. data/lib/scout.rb +1 -0
  51. data/scout-gear.gemspec +34 -3
  52. data/scout_commands/find +1 -1
  53. data/scout_commands/workflow/task +16 -10
  54. data/share/software/install_helpers +523 -0
  55. data/test/scout/log/test_progress.rb +0 -2
  56. data/test/scout/misc/test_system.rb +21 -0
  57. data/test/scout/open/test_stream.rb +159 -0
  58. data/test/scout/path/test_find.rb +14 -7
  59. data/test/scout/resource/test_software.rb +24 -0
  60. data/test/scout/test_config.rb +66 -0
  61. data/test/scout/test_meta_extension.rb +10 -0
  62. data/test/scout/test_named_array.rb +19 -0
  63. data/test/scout/test_persist.rb +35 -0
  64. data/test/scout/test_tmpfile.rb +2 -2
  65. data/test/scout/test_tsv.rb +41 -1
  66. data/test/scout/test_work_queue.rb +40 -13
  67. data/test/scout/tsv/persist/test_adapter.rb +34 -0
  68. data/test/scout/tsv/persist/test_tokyocabinet.rb +92 -0
  69. data/test/scout/tsv/test_dumper.rb +44 -0
  70. data/test/scout/tsv/test_index.rb +64 -0
  71. data/test/scout/tsv/test_parser.rb +86 -0
  72. data/test/scout/tsv/test_persist.rb +36 -0
  73. data/test/scout/tsv/test_traverse.rb +9 -0
  74. data/test/scout/tsv/test_util.rb +0 -0
  75. data/test/scout/work_queue/test_worker.rb +3 -3
  76. data/test/scout/workflow/step/test_dependencies.rb +25 -0
  77. data/test/scout/workflow/step/test_info.rb +15 -17
  78. data/test/scout/workflow/step/test_load.rb +16 -18
  79. data/test/scout/workflow/step/test_provenance.rb +25 -0
  80. data/test/scout/workflow/test_step.rb +206 -10
  81. data/test/scout/workflow/test_task.rb +0 -3
  82. data/test/test_helper.rb +6 -0
  83. metadata +33 -2
@@ -0,0 +1,92 @@
1
+ require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
+ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
+
4
+ require 'scout/tsv'
5
+
6
+ class TestTSVTokyo < Test::Unit::TestCase
7
+ def test_tokyo
8
+ content =<<-'EOF'
9
+ #: :sep=/\s+/#:type=:double#:merge=:concat
10
+ #Id ValueA ValueB OtherID
11
+ row1 a|aa|aaa b Id1|Id2
12
+ row2 A B Id3
13
+ row2 a a id3
14
+ EOF
15
+
16
+ tsv = TmpFile.with_file(content) do |filename|
17
+ Persist.persist(__method__, :HDB) do
18
+ TSV.open(filename)
19
+ end
20
+ end
21
+
22
+ assert_equal %w(a aa aaa), tsv["row1"][0]
23
+
24
+ tsv_loaded = assert_nothing_raised do
25
+ TmpFile.with_file(content) do |filename|
26
+ Persist.persist(__method__, :HDB) do
27
+ raise
28
+ end
29
+ end
30
+ end
31
+
32
+ assert_equal %w(a aa aaa), tsv_loaded["row1"][0]
33
+ end
34
+
35
+ def test_custom_load
36
+ tsv = TSV.setup({}, :type => :double, :key_field => "Key", :fields => %w(Field1 Field2))
37
+
38
+ size = 100_000
39
+ (0..size).each do |i|
40
+ k = "key-#{i}"
41
+ values1 = 3.times.collect{|j| "value-#{i}-1-#{j}" }
42
+ values2 = 5.times.collect{|j| "value-#{i}-2-#{j}" }
43
+
44
+ tsv[k] = [values1, values2]
45
+ end
46
+
47
+ tc = Persist.persist(__method__, :HDB) do |file|
48
+ tsv
49
+ end
50
+
51
+ 100.times do
52
+ i = rand(size).floor
53
+ assert_equal tc["key-#{i}"], tsv["key-#{i}"]
54
+ end
55
+ end
56
+
57
+ def test_speed
58
+ tsv = TSV.setup({}, :type => :double, :key_field => "Key", :fields => %w(Field1 Field2))
59
+
60
+ size = 100_000
61
+ (0..size).each do |i|
62
+ k = "key-#{i}"
63
+ values1 = 3.times.collect{|j| "value-#{i}-1-#{j}" }
64
+ values2 = 5.times.collect{|j| "value-#{i}-2-#{j}" }
65
+
66
+ tsv[k] = [values1, values2]
67
+ end
68
+
69
+ tc = Persist.persist(__method__, :HDB) do |file|
70
+ data = ScoutCabinet.open(file, true, "HDB")
71
+ TSV.setup(data, :type => :double, :key_field => "Key", :fields => %w(Field1 Field2))
72
+ data.extend TSVAdapter
73
+ Log::ProgressBar.with_bar size do |b|
74
+ (0..size).each do |i|
75
+ b.tick
76
+ k = "key-#{i}"
77
+ values1 = 3.times.collect{|j| "value-#{i}-1-#{j}" }
78
+ values2 = 5.times.collect{|j| "value-#{i}-2-#{j}" }
79
+
80
+ data[k] = [values1, values2]
81
+ end
82
+ end
83
+ data
84
+ end
85
+
86
+ 100.times do
87
+ i = rand(size).floor
88
+ assert_equal tc["key-#{i}"], tsv["key-#{i}"]
89
+ end
90
+ end
91
+ end
92
+
@@ -0,0 +1,44 @@
1
+ require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
+ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
+
4
+ require 'scout/tsv'
5
+
6
+ class TestTSVDumper < Test::Unit::TestCase
7
+ def test_dumper
8
+ dumper = TSV::Dumper.new :key_field => "Key", :fields => %w(Field1 Field2), :type => :double
9
+ dumper.init
10
+ dumper.add "a", [["1", "11"], ["2", "22"]]
11
+ txt=<<-EOF
12
+ #: :type=:double
13
+ #Key\tField1\tField2
14
+ a\t1|11\t2|22
15
+ EOF
16
+ dumper.close
17
+ assert_equal txt, dumper.stream.read
18
+ end
19
+
20
+ def test_to_s
21
+ tsv = TSV.setup({}, :key_field => "Key", :fields => %w(Field1 Field2), :type => :double)
22
+ tsv["a"] = [["1", "11"], ["2", "22"]]
23
+ txt=<<-EOF
24
+ #: :type=:double
25
+ #Key\tField1\tField2
26
+ a\t1|11\t2|22
27
+ EOF
28
+ assert_equal txt, tsv.to_s
29
+ end
30
+
31
+ def test_raise
32
+ dumper = TSV::Dumper.new :key_field => "Key", :fields => %w(Field1 Field2), :type => :double
33
+ dumper.init
34
+ t = Thread.new do
35
+ dumper.add "a", [["1", "11"], ["2", "22"]]
36
+ dumper.abort ScoutException
37
+ end
38
+
39
+ assert_raise ScoutException do
40
+ dumper.stream.read
41
+ end
42
+ end
43
+ end
44
+
@@ -0,0 +1,64 @@
1
+ require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
+ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
+
4
+ class TestTSVIndex < Test::Unit::TestCase
5
+ def test_true
6
+ content =<<-'EOF'
7
+ #: :sep=/\s+/#:type=:double#:merge=:concat
8
+ #Id ValueA ValueB OtherID
9
+ row1 a|aa|aaa b Id1|Id2
10
+ row2 A B Id3|a
11
+ row2 a b id3
12
+ EOF
13
+
14
+ TmpFile.with_file(content) do |filename|
15
+ index = TSV.index(filename, :target => "ValueB")
16
+ assert_equal 'b', index["row1"]
17
+ assert_equal 'b', index["a"]
18
+ assert_equal 'b', index["aaa"]
19
+ assert_equal 'B', index["A"]
20
+ end
21
+
22
+ TmpFile.with_file(content) do |filename|
23
+ index = TSV.index(filename, :target => "ValueB", :fields => "OtherID")
24
+ assert_equal 'B', index["a"]
25
+ assert_nil index["B"]
26
+ end
27
+ end
28
+
29
+ def test_persist
30
+ content =<<-'EOF'
31
+ #: :sep=/\s+/#:type=:double#:merge=:concat
32
+ #Id ValueA ValueB OtherID
33
+ row1 a|aa|aaa b Id1|Id2
34
+ row2 A B Id3|a
35
+ row2 a b id3
36
+ EOF
37
+ tsv = TmpFile.with_file(content) do |filename|
38
+ index = TSV.index(filename, :target => "ValueB", :persist => true)
39
+ assert_equal 'b', index["row1"]
40
+ assert_equal 'b', index["a"]
41
+ assert_equal 'b', index["aaa"]
42
+ assert_equal 'B', index["A"]
43
+ end
44
+ end
45
+
46
+ def __test_speed
47
+ content =<<-'EOF'
48
+ #: :sep=/\s+/#:type=:double#:merge=:concat
49
+ #Id ValueA ValueB OtherID
50
+ row1 a|aa|aaa b Id1|Id2
51
+ row2 A B Id3|a
52
+ row2 a b id3
53
+ EOF
54
+ tsv = TmpFile.with_file(content) do |filename|
55
+ Misc.benchmark 1000 do
56
+ TSV.index(filename, :target => "ValueB")
57
+ end
58
+ Misc.benchmark 1000 do
59
+ TSV.index(filename, :target => "ValueB", order: false)
60
+ end
61
+ end
62
+ end
63
+ end
64
+
@@ -12,6 +12,15 @@ class TestTSVParser < Test::Unit::TestCase
12
12
  assert_equal (1..10).collect{|v| v.to_s }, values
13
13
  end
14
14
 
15
+ def test_parse_line_key
16
+ line = (0..10).to_a * "\t"
17
+ key, values = TSV.parse_line(line, key: 2)
18
+
19
+ assert_equal "2", key
20
+ assert_equal %w(0 1 3 4 5 6 7 8 9 10), values
21
+ end
22
+
23
+
15
24
  def test_parse_double
16
25
  line = (0..10).collect{|v| v == 0 ? v : [v,v] * "|" } * "\t"
17
26
  key, values = TSV.parse_line(line, type: :double, cast: :to_i)
@@ -84,4 +93,81 @@ k a|A b|B
84
93
  tsv = TSV.parse(header)
85
94
  assert_equal 'a', tsv['k'][0][0]
86
95
  end
96
+
97
+ def test_parse_fields
98
+ content =<<-EOF
99
+ #: :sep=" "#:type=:double
100
+ #Key ValueA ValueB
101
+ k a|A b|B
102
+ EOF
103
+ content = StringIO.new content
104
+
105
+ tsv = TSV.parse(content, fields: %w(ValueB))
106
+ assert_equal [%w(b B)], tsv['k']
107
+ assert_equal %w(ValueB), tsv.fields
108
+
109
+ content.rewind
110
+
111
+ tsv = TSV.parse(content, fields: %w(ValueB ValueA))
112
+ assert_equal [%w(b B), %w(a A)], tsv['k']
113
+ assert_equal %w(ValueB ValueA), tsv.fields
114
+
115
+ content.rewind
116
+
117
+ tsv = TSV.parse(content, fields: %w(ValueB Key))
118
+ assert_equal [%w(b B), %w(k)], tsv['k']
119
+ end
120
+
121
+ def test_parse_key
122
+ content =<<-EOF
123
+ #: :sep=" "#:type=:double
124
+ #Key ValueA ValueB
125
+ k a|A b|B
126
+ EOF
127
+ content = StringIO.new content
128
+
129
+ tsv = TSV.parse(content, key_field: "ValueB")
130
+ assert_equal %w(b B), tsv.keys
131
+ assert_equal %w(a A), tsv["B"][1]
132
+
133
+ content.rewind
134
+
135
+ tsv = TSV.parse(content, key_field: "ValueB", one2one: true, type: :double)
136
+ assert_equal %w(b B), tsv.keys
137
+ assert_equal %w(A), tsv["B"][1]
138
+
139
+ content.rewind
140
+
141
+ tsv = TSV.parse(content, key_field: "ValueB", one2one: true, type: :list)
142
+ assert_equal %w(b B), tsv.keys
143
+ assert_equal "a", tsv["b"][1]
144
+ assert_equal "A", tsv["B"][1]
145
+ assert_equal "k", tsv["b"][0]
146
+ assert_equal "k", tsv["B"][0]
147
+
148
+ content.rewind
149
+
150
+ tsv = TSV.parse(content, key_field: "ValueB", one2one: true, type: :list)
151
+ assert_equal %w(b B), tsv.keys
152
+ assert_equal "A", tsv["B"][1]
153
+ end
154
+
155
+ def test_parser_class
156
+ content =<<-EOF
157
+ Key ValueA ValueB
158
+ k a|A b|B
159
+ EOF
160
+ content = StringIO.new content
161
+
162
+ parser = TSV::Parser.new content, sep: " ", header_hash: ''
163
+
164
+ assert_equal "Key", parser.key_field
165
+
166
+ values = []
167
+ parser.traverse fields: %w(ValueB), type: :double do |k,v|
168
+ values << [k,v]
169
+ end
170
+
171
+ assert_equal [["k", [%w(b B)]]], values
172
+ end
87
173
  end
@@ -0,0 +1,36 @@
1
+ require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
+ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
+
4
+ require 'scout/tsv'
5
+
6
+ class TestTSVPersist < Test::Unit::TestCase
7
+ def test_persist
8
+ content =<<-'EOF'
9
+ #: :sep=/\s+/#:type=:double#:merge=:concat
10
+ #Id ValueA ValueB OtherID
11
+ row1 a|aa|aaa b Id1|Id2
12
+ row2 A B Id3
13
+ row2 a a id3
14
+ EOF
15
+
16
+
17
+ tsv = Persist.persist("TEST Persist TSV", :tsv) do
18
+ TmpFile.with_file(content) do |filename|
19
+ TSV.open(filename)
20
+ end
21
+ end
22
+
23
+ assert_include tsv.keys, 'row1'
24
+ assert_include tsv.keys, 'row2'
25
+
26
+ assert_nothing_raised do
27
+ tsv = Persist.persist("TEST Persist TSV", :tsv) do
28
+ raise
29
+ end
30
+ end
31
+
32
+ assert_include tsv.keys, 'row1'
33
+ assert_include tsv.keys, 'row2'
34
+ end
35
+ end
36
+
@@ -0,0 +1,9 @@
1
+ require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
+ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
+
4
+ class TestClass < Test::Unit::TestCase
5
+ def test_true
6
+ assert true
7
+ end
8
+ end
9
+
File without changes
@@ -43,7 +43,7 @@ class TestQueueWorker < Test::Unit::TestCase
43
43
  current = nil
44
44
  pid_list.each do |pid|
45
45
  if pid != current
46
- raise "Out of order" if seen.include? pid
46
+ raise "Out of order #{Log.fingerprint seen} #{ pid }" if seen.include? pid
47
47
  end
48
48
  current = pid
49
49
  seen << pid
@@ -113,7 +113,7 @@ class TestQueueWorker < Test::Unit::TestCase
113
113
  while obj = output.read
114
114
  if DoneProcessing === obj
115
115
  pid = obj.pid
116
- workers.delete_if{|w| w.pid = pid }
116
+ @worker_mutex.synchronize{ @workers.delete_if{|w| w.pid = pid } }
117
117
  break if workers.empty?
118
118
  end
119
119
  raise obj if Exception === obj
@@ -134,7 +134,7 @@ class TestQueueWorker < Test::Unit::TestCase
134
134
 
135
135
  write.join
136
136
 
137
- assert_raise ScoutException do
137
+ assert_raise WorkerException do
138
138
  read.join
139
139
  end
140
140
 
@@ -0,0 +1,25 @@
1
+ require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
+ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
+
4
+ require 'scout/named_array'
5
+ class TestStepDependencies < Test::Unit::TestCase
6
+ def test_recursive_inputs
7
+ tmpfile = tmpdir.test_step
8
+ step1 = Step.new tmpfile.step1, NamedArray.setup(["12"], %w(input1)) do |s|
9
+ s.length
10
+ end
11
+
12
+ step2 = Step.new tmpfile.step2, NamedArray.setup([2], %w(input2)) do |times|
13
+ step1 = dependencies.first
14
+ (step1.inputs.first + " has " + step1.load.to_s + " characters") * times
15
+ end
16
+
17
+ step2.dependencies = [step1]
18
+
19
+ assert_equal 2, step2.inputs["input2"]
20
+ assert_equal "12", step2.recursive_inputs["input1"]
21
+ assert_equal 2, step2.inputs[:input2]
22
+ assert_equal "12", step2.recursive_inputs[:input1]
23
+ end
24
+ end
25
+
@@ -4,27 +4,25 @@ require 'scout/workflow'
4
4
 
5
5
  class TestStepInfo < Test::Unit::TestCase
6
6
  def test_dependency
7
- sss 0 do
8
- TmpFile.with_file do |tmpdir|
9
- Path.setup(tmpdir)
10
- tmpfile = tmpdir.test_step
11
- step1 = Step.new tmpfile.step1, ["12"] do |s|
12
- s.length
13
- end
7
+ TmpFile.with_file do |tmpdir|
8
+ Path.setup(tmpdir)
9
+ tmpfile = tmpdir.test_step
10
+ step1 = Step.new tmpfile.step1, ["12"] do |s|
11
+ s.length
12
+ end
14
13
 
15
- assert_equal 2, step1.exec
16
- assert_equal 2, step1.run
14
+ assert_equal 2, step1.exec
15
+ assert_equal 2, step1.run
17
16
 
18
- step2 = Step.new tmpfile.step2 do
19
- step1 = dependencies.first
20
- step1.inputs.first + " has " + step1.load.to_s + " characters"
21
- end
17
+ step2 = Step.new tmpfile.step2 do
18
+ step1 = dependencies.first
19
+ step1.inputs.first + " has " + step1.load.to_s + " characters"
20
+ end
22
21
 
23
- step2.dependencies = [step1]
22
+ step2.dependencies = [step1]
24
23
 
25
- assert_equal "12 has 2 characters", step2.run
26
- assert_equal "12 has 2 characters", step2.run
27
- end
24
+ assert_equal "12 has 2 characters", step2.run
25
+ assert_equal "12 has 2 characters", step2.run
28
26
  end
29
27
  end
30
28
  end
@@ -5,29 +5,27 @@ require 'scout/workflow/step'
5
5
 
6
6
  class TestStepLoad < Test::Unit::TestCase
7
7
  def test_dependency
8
- sss 0 do
9
- tmpfile = tmpdir.test_step
10
- step1 = Step.new tmpfile.step1, ["12"] do |s|
11
- s.length
12
- end
8
+ tmpfile = tmpdir.test_step
9
+ step1 = Step.new tmpfile.step1, ["12"] do |s|
10
+ s.length
11
+ end
13
12
 
14
- step2 = Step.new tmpfile.step2 do
15
- step1 = dependencies.first
16
- step1.inputs.first + " has " + step1.load.to_s + " characters"
17
- end
13
+ step2 = Step.new tmpfile.step2 do
14
+ step1 = dependencies.first
15
+ step1.inputs.first + " has " + step1.load.to_s + " characters"
16
+ end
18
17
 
19
- step2.dependencies = [step1]
18
+ step2.dependencies = [step1]
20
19
 
21
- step2.recursive_clean
22
- step2.run
20
+ step2.recursive_clean
21
+ step2.run
23
22
 
24
- new_step2 = Step.load(step2.path)
23
+ new_step2 = Step.load(step2.path)
25
24
 
26
- assert_equal "12 has 2 characters", new_step2.load
27
- assert_equal "12 has 2 characters", new_step2.run
28
- assert_equal 2, new_step2.dependencies.first.run
29
- assert_equal "12", new_step2.dependencies.first.inputs.first
30
- end
25
+ assert_equal "12 has 2 characters", new_step2.load
26
+ assert_equal "12 has 2 characters", new_step2.run
27
+ assert_equal 2, new_step2.dependencies.first.run
28
+ assert_equal "12", new_step2.dependencies.first.inputs.first
31
29
  end
32
30
 
33
31
  def test_relocate
@@ -0,0 +1,25 @@
1
+ require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
+ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
+
4
+ require 'scout/workflow'
5
+ class TestStepProvenance < Test::Unit::TestCase
6
+ def test_true
7
+ tmpfile = tmpdir.test_step
8
+ step1 = Step.new tmpfile.step1, ["12"] do |s|
9
+ s.length
10
+ end
11
+
12
+ step2 = Step.new tmpfile.step2 do
13
+ step1 = dependencies.first
14
+ step1.inputs.first + " has " + step1.load.to_s + " characters"
15
+ end
16
+
17
+ step2.dependencies = [step1]
18
+
19
+ step2.run
20
+
21
+ assert_include Step.prov_report(step2), 'step1'
22
+ assert_include Step.prov_report(step2), 'step2'
23
+ end
24
+ end
25
+