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.
- checksums.yaml +4 -4
- data/.vimproject +29 -0
- data/VERSION +1 -1
- data/bin/scout +5 -1
- data/lib/rbbt-scout.rb +5 -0
- data/lib/scout/concurrent_stream.rb +6 -2
- data/lib/scout/config.rb +168 -0
- data/lib/scout/exceptions.rb +4 -3
- data/lib/scout/indiferent_hash/options.rb +1 -0
- data/lib/scout/indiferent_hash.rb +4 -2
- data/lib/scout/log/color.rb +3 -1
- data/lib/scout/log/progress/report.rb +1 -0
- data/lib/scout/log/progress/util.rb +1 -1
- data/lib/scout/log/progress.rb +5 -3
- data/lib/scout/log.rb +3 -2
- data/lib/scout/misc/monitor.rb +3 -0
- data/lib/scout/misc/system.rb +15 -0
- data/lib/scout/misc.rb +1 -0
- data/lib/scout/named_array.rb +68 -0
- data/lib/scout/open/stream.rb +38 -7
- data/lib/scout/path/find.rb +27 -3
- data/lib/scout/path/util.rb +7 -4
- data/lib/scout/persist/serialize.rb +7 -14
- data/lib/scout/persist.rb +21 -1
- data/lib/scout/resource/produce.rb +7 -94
- data/lib/scout/resource/software.rb +176 -0
- data/lib/scout/tsv/dumper.rb +107 -0
- data/lib/scout/tsv/index.rb +49 -0
- data/lib/scout/tsv/parser.rb +203 -30
- data/lib/scout/tsv/path.rb +13 -0
- data/lib/scout/tsv/persist/adapter.rb +348 -0
- data/lib/scout/tsv/persist/tokyocabinet.rb +113 -0
- data/lib/scout/tsv/persist.rb +15 -0
- data/lib/scout/tsv/traverse.rb +48 -0
- data/lib/scout/tsv/util.rb +24 -0
- data/lib/scout/tsv.rb +16 -3
- data/lib/scout/work_queue/worker.rb +3 -3
- data/lib/scout/work_queue.rb +22 -7
- data/lib/scout/workflow/definition.rb +93 -4
- data/lib/scout/workflow/step/config.rb +18 -0
- data/lib/scout/workflow/step/dependencies.rb +40 -0
- data/lib/scout/workflow/step/file.rb +15 -0
- data/lib/scout/workflow/step/info.rb +31 -4
- data/lib/scout/workflow/step/provenance.rb +148 -0
- data/lib/scout/workflow/step.rb +68 -19
- data/lib/scout/workflow/task.rb +3 -2
- data/lib/scout/workflow/usage.rb +1 -1
- data/lib/scout/workflow.rb +11 -3
- data/lib/scout-gear.rb +1 -0
- data/lib/scout.rb +1 -0
- data/scout-gear.gemspec +34 -3
- data/scout_commands/find +1 -1
- data/scout_commands/workflow/task +16 -10
- data/share/software/install_helpers +523 -0
- data/test/scout/log/test_progress.rb +0 -2
- data/test/scout/misc/test_system.rb +21 -0
- data/test/scout/open/test_stream.rb +159 -0
- data/test/scout/path/test_find.rb +14 -7
- data/test/scout/resource/test_software.rb +24 -0
- data/test/scout/test_config.rb +66 -0
- data/test/scout/test_meta_extension.rb +10 -0
- data/test/scout/test_named_array.rb +19 -0
- data/test/scout/test_persist.rb +35 -0
- data/test/scout/test_tmpfile.rb +2 -2
- data/test/scout/test_tsv.rb +41 -1
- data/test/scout/test_work_queue.rb +40 -13
- data/test/scout/tsv/persist/test_adapter.rb +34 -0
- data/test/scout/tsv/persist/test_tokyocabinet.rb +92 -0
- data/test/scout/tsv/test_dumper.rb +44 -0
- data/test/scout/tsv/test_index.rb +64 -0
- data/test/scout/tsv/test_parser.rb +86 -0
- data/test/scout/tsv/test_persist.rb +36 -0
- data/test/scout/tsv/test_traverse.rb +9 -0
- data/test/scout/tsv/test_util.rb +0 -0
- data/test/scout/work_queue/test_worker.rb +3 -3
- data/test/scout/workflow/step/test_dependencies.rb +25 -0
- data/test/scout/workflow/step/test_info.rb +15 -17
- data/test/scout/workflow/step/test_load.rb +16 -18
- data/test/scout/workflow/step/test_provenance.rb +25 -0
- data/test/scout/workflow/test_step.rb +206 -10
- data/test/scout/workflow/test_task.rb +0 -3
- data/test/test_helper.rb +6 -0
- 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
|
+
|
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
|
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
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
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
|
-
|
16
|
-
|
14
|
+
assert_equal 2, step1.exec
|
15
|
+
assert_equal 2, step1.run
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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
|
-
|
22
|
+
step2.dependencies = [step1]
|
24
23
|
|
25
|
-
|
26
|
-
|
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
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
end
|
8
|
+
tmpfile = tmpdir.test_step
|
9
|
+
step1 = Step.new tmpfile.step1, ["12"] do |s|
|
10
|
+
s.length
|
11
|
+
end
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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
|
-
|
18
|
+
step2.dependencies = [step1]
|
20
19
|
|
21
|
-
|
22
|
-
|
20
|
+
step2.recursive_clean
|
21
|
+
step2.run
|
23
22
|
|
24
|
-
|
23
|
+
new_step2 = Step.load(step2.path)
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
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
|
+
|