libis-workflow 2.0.25 → 2.0.28

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -1
  3. data/.gitignore +36 -36
  4. data/.travis.yml +32 -32
  5. data/Gemfile +4 -4
  6. data/LICENSE +20 -20
  7. data/README.md +380 -380
  8. data/Rakefile +6 -6
  9. data/lib/libis/exceptions.rb +6 -6
  10. data/lib/libis/workflow.rb +41 -41
  11. data/lib/libis/workflow/action.rb +24 -24
  12. data/lib/libis/workflow/base/dir_item.rb +13 -13
  13. data/lib/libis/workflow/base/file_item.rb +80 -80
  14. data/lib/libis/workflow/base/job.rb +83 -83
  15. data/lib/libis/workflow/base/logging.rb +66 -66
  16. data/lib/libis/workflow/base/run.rb +97 -95
  17. data/lib/libis/workflow/base/work_item.rb +173 -173
  18. data/lib/libis/workflow/base/workflow.rb +149 -149
  19. data/lib/libis/workflow/config.rb +22 -22
  20. data/lib/libis/workflow/dir_item.rb +10 -10
  21. data/lib/libis/workflow/file_item.rb +15 -15
  22. data/lib/libis/workflow/job.rb +28 -28
  23. data/lib/libis/workflow/message_registry.rb +30 -30
  24. data/lib/libis/workflow/run.rb +34 -34
  25. data/lib/libis/workflow/status.rb +133 -133
  26. data/lib/libis/workflow/task.rb +318 -316
  27. data/lib/libis/workflow/task_group.rb +72 -71
  28. data/lib/libis/workflow/task_runner.rb +34 -34
  29. data/lib/libis/workflow/version.rb +5 -5
  30. data/lib/libis/workflow/work_item.rb +37 -37
  31. data/lib/libis/workflow/worker.rb +42 -42
  32. data/lib/libis/workflow/workflow.rb +20 -20
  33. data/libis-workflow.gemspec +38 -38
  34. data/spec/items.rb +2 -2
  35. data/spec/items/test_dir_item.rb +13 -13
  36. data/spec/items/test_file_item.rb +16 -16
  37. data/spec/items/test_run.rb +8 -8
  38. data/spec/spec_helper.rb +8 -8
  39. data/spec/task_spec.rb +15 -15
  40. data/spec/tasks/camelize_name.rb +12 -12
  41. data/spec/tasks/checksum_tester.rb +32 -32
  42. data/spec/tasks/collect_files.rb +47 -47
  43. data/spec/workflow_spec.rb +154 -154
  44. metadata +3 -3
data/spec/items.rb CHANGED
@@ -1,3 +1,3 @@
1
- require_relative 'items/test_dir_item'
2
- require_relative 'items/test_file_item'
1
+ require_relative 'items/test_dir_item'
2
+ require_relative 'items/test_file_item'
3
3
  require_relative 'items/test_run'
@@ -1,14 +1,14 @@
1
- require 'libis/workflow/dir_item'
2
-
3
- class TestDirItem < ::Libis::Workflow::DirItem
4
-
5
- def name=(dir)
6
- raise RuntimeError, "'#{dir}' is not a directory" unless File.directory? dir
7
- super dir
8
- end
9
-
10
- def name
11
- self.properties[:name] || super
12
- end
13
-
1
+ require 'libis/workflow/dir_item'
2
+
3
+ class TestDirItem < ::Libis::Workflow::DirItem
4
+
5
+ def name=(dir)
6
+ raise RuntimeError, "'#{dir}' is not a directory" unless File.directory? dir
7
+ super dir
8
+ end
9
+
10
+ def name
11
+ self.properties[:name] || super
12
+ end
13
+
14
14
  end
@@ -1,17 +1,17 @@
1
- require 'libis/tools/checksum'
2
-
3
- require 'libis/workflow/file_item'
4
-
5
- class TestFileItem < ::Libis::Workflow::FileItem
6
-
7
- def filename=(file)
8
- raise RuntimeError, "'#{file}' is not a file" unless File.file? file
9
- set_checksum :SHA256, ::Libis::Tools::Checksum.hexdigest(file, :SHA256)
10
- super file
11
- end
12
-
13
- def name
14
- self.properties[:name] || super
15
- end
16
-
1
+ require 'libis/tools/checksum'
2
+
3
+ require 'libis/workflow/file_item'
4
+
5
+ class TestFileItem < ::Libis::Workflow::FileItem
6
+
7
+ def filename=(file)
8
+ raise RuntimeError, "'#{file}' is not a file" unless File.file? file
9
+ set_checksum :SHA256, ::Libis::Tools::Checksum.hexdigest(file, :SHA256)
10
+ super file
11
+ end
12
+
13
+ def name
14
+ self.properties[:name] || super
15
+ end
16
+
17
17
  end
@@ -1,9 +1,9 @@
1
- require 'libis/workflow/run'
2
-
3
- require_relative 'test_dir_item'
4
-
5
- class TestRun < ::Libis::Workflow::Run
6
-
7
- def name; 'TestRun'; end
8
-
1
+ require 'libis/workflow/run'
2
+
3
+ require_relative 'test_dir_item'
4
+
5
+ class TestRun < ::Libis::Workflow::Run
6
+
7
+ def name; 'TestRun'; end
8
+
9
9
  end
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,8 @@
1
- require 'coveralls'
2
- Coveralls.wear!
3
-
4
- require 'bundler/setup'
5
- Bundler.setup
6
-
7
- require 'rspec'
8
- require 'libis-workflow'
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
4
+ require 'bundler/setup'
5
+ Bundler.setup
6
+
7
+ require 'rspec'
8
+ require 'libis-workflow'
data/spec/task_spec.rb CHANGED
@@ -1,16 +1,16 @@
1
- require_relative 'spec_helper'
2
-
3
- require 'libis/workflow/task'
4
-
5
- describe 'Task' do
6
-
7
- it 'should create a default task' do
8
-
9
- task = ::Libis::Workflow::Task.new nil
10
-
11
- expect(task.parent).to eq nil
12
- expect(task.name).to eq 'Task'
13
-
14
- end
15
-
1
+ require_relative 'spec_helper'
2
+
3
+ require 'libis/workflow/task'
4
+
5
+ describe 'Task' do
6
+
7
+ it 'should create a default task' do
8
+
9
+ task = ::Libis::Workflow::Task.new nil
10
+
11
+ expect(task.parent).to eq nil
12
+ expect(task.name).to eq 'Task'
13
+
14
+ end
15
+
16
16
  end
@@ -1,12 +1,12 @@
1
- require 'backports/rails/string'
2
-
3
- require 'libis/workflow'
4
-
5
- class CamelizeName < ::Libis::Workflow::Task
6
-
7
- def process(item)
8
- return unless (item.is_a?(TestFileItem) || item.is_a?(TestDirItem))
9
- item.properties[:name] = item.name.camelize
10
- end
11
-
12
- end
1
+ require 'backports/rails/string'
2
+
3
+ require 'libis/workflow'
4
+
5
+ class CamelizeName < ::Libis::Workflow::Task
6
+
7
+ def process(item)
8
+ return unless (item.is_a?(TestFileItem) || item.is_a?(TestDirItem))
9
+ item.properties[:name] = item.name.camelize
10
+ end
11
+
12
+ end
@@ -1,32 +1,32 @@
1
- require 'libis/tools/checksum'
2
-
3
- require 'libis/exceptions'
4
- require 'libis/workflow'
5
-
6
- class ChecksumTester < ::Libis::Workflow::Task
7
-
8
- parameter checksum_type: nil,
9
- description: 'Checksum type to use.',
10
- constraint: ::Libis::Tools::Checksum::CHECKSUM_TYPES.map {|x| x.to_s}
11
-
12
- def process(item)
13
- return unless item.is_a? TestFileItem
14
-
15
- checksum_type = parameter(:checksum_type)
16
-
17
- if checksum_type.nil?
18
- ::Libis::Tools::Checksum::CHECKSUM_TYPES.each do |x|
19
- test_checksum(item, x) if item.checksum(x)
20
- end
21
- else
22
- test_checksum(item, checksum_type)
23
- end
24
- end
25
-
26
- def test_checksum(item, checksum_type)
27
- checksum = ::Libis::Tools::Checksum.hexdigest(item.fullpath, checksum_type.to_sym)
28
- return if item.checksum(checksum_type) == checksum
29
- raise ::Libis::WorkflowError, "Checksum test #{checksum_type} failed for #{item.filepath}"
30
- end
31
-
32
- end
1
+ require 'libis/tools/checksum'
2
+
3
+ require 'libis/exceptions'
4
+ require 'libis/workflow'
5
+
6
+ class ChecksumTester < ::Libis::Workflow::Task
7
+
8
+ parameter checksum_type: nil,
9
+ description: 'Checksum type to use.',
10
+ constraint: ::Libis::Tools::Checksum::CHECKSUM_TYPES.map {|x| x.to_s}
11
+
12
+ def process(item)
13
+ return unless item.is_a? TestFileItem
14
+
15
+ checksum_type = parameter(:checksum_type)
16
+
17
+ if checksum_type.nil?
18
+ ::Libis::Tools::Checksum::CHECKSUM_TYPES.each do |x|
19
+ test_checksum(item, x) if item.checksum(x)
20
+ end
21
+ else
22
+ test_checksum(item, checksum_type)
23
+ end
24
+ end
25
+
26
+ def test_checksum(item, checksum_type)
27
+ checksum = ::Libis::Tools::Checksum.hexdigest(item.fullpath, checksum_type.to_sym)
28
+ return if item.checksum(checksum_type) == checksum
29
+ raise ::Libis::WorkflowError, "Checksum test #{checksum_type} failed for #{item.filepath}"
30
+ end
31
+
32
+ end
@@ -1,47 +1,47 @@
1
- require 'libis/exceptions'
2
-
3
- require_relative '../items'
4
-
5
- class CollectFiles < ::Libis::Workflow::Task
6
-
7
- parameter location: '.',
8
- description: 'Dir location to start scanning for files.'
9
- parameter subdirs: false,
10
- description: 'Look for files in subdirs too.'
11
- parameter selection: nil,
12
- description: 'Only select files that match the given regular expression. Ignored if empty.'
13
-
14
- def process(item)
15
- if item.is_a? TestRun
16
- add_item(item, parameter(:location))
17
- elsif item.is_a? TestDirItem
18
- collect_files(item, item.fullpath)
19
- end
20
- end
21
-
22
- def collect_files(item, dir)
23
- glob_string = dir
24
- glob_string = File.join(glob_string, '**') if parameter(:subdirs)
25
- glob_string = File.join(glob_string, '*')
26
-
27
- Dir.glob(glob_string).select do |x|
28
- parameter(:selection) && !parameter(:selection).empty? ? x =~ Regexp.new(parameter(:selection)) : true
29
- end.sort.each do |file|
30
- next if %w'. ..'.include? file
31
- add_item(item, file)
32
- end
33
- end
34
-
35
- def add_item(item, file)
36
- child = if File.file?(file)
37
- TestFileItem.new
38
- elsif File.directory?(file)
39
- TestDirItem.new
40
- else
41
- Item.new
42
- end
43
- child.filename = file
44
- item << child
45
- end
46
-
47
- end
1
+ require 'libis/exceptions'
2
+
3
+ require_relative '../items'
4
+
5
+ class CollectFiles < ::Libis::Workflow::Task
6
+
7
+ parameter location: '.',
8
+ description: 'Dir location to start scanning for files.'
9
+ parameter subdirs: false,
10
+ description: 'Look for files in subdirs too.'
11
+ parameter selection: nil,
12
+ description: 'Only select files that match the given regular expression. Ignored if empty.'
13
+
14
+ def process(item)
15
+ if item.is_a? TestRun
16
+ add_item(item, parameter(:location))
17
+ elsif item.is_a? TestDirItem
18
+ collect_files(item, item.fullpath)
19
+ end
20
+ end
21
+
22
+ def collect_files(item, dir)
23
+ glob_string = dir
24
+ glob_string = File.join(glob_string, '**') if parameter(:subdirs)
25
+ glob_string = File.join(glob_string, '*')
26
+
27
+ Dir.glob(glob_string).select do |x|
28
+ parameter(:selection) && !parameter(:selection).empty? ? x =~ Regexp.new(parameter(:selection)) : true
29
+ end.sort.each do |file|
30
+ next if %w'. ..'.include? file
31
+ add_item(item, file)
32
+ end
33
+ end
34
+
35
+ def add_item(item, file)
36
+ child = if File.file?(file)
37
+ TestFileItem.new
38
+ elsif File.directory?(file)
39
+ TestDirItem.new
40
+ else
41
+ Item.new
42
+ end
43
+ child.filename = file
44
+ item << child
45
+ end
46
+
47
+ end
@@ -1,155 +1,155 @@
1
- require_relative 'spec_helper'
2
-
3
- require 'stringio'
4
-
5
- describe 'TestWorkflow' do
6
-
7
- basedir = File.absolute_path File.join(File.dirname(__FILE__))
8
- dirname = File.join(basedir, 'items')
9
-
10
- before :each do
11
-
12
- # noinspection RubyResolve
13
- ::Libis::Workflow.configure do |cfg|
14
- cfg.itemdir = dirname
15
- cfg.taskdir = File.join(basedir, 'tasks')
16
- cfg.workdir = File.join(basedir, 'work')
17
- cfg.logger.appenders =
18
- ::Logging::Appenders.string_io('StringIO', layout: ::Libis::Tools::Config.get_log_formatter)
19
- end
20
- end
21
-
22
- let(:logoutput) { ::Libis::Workflow::Config.logger.appenders.first.sio }
23
-
24
- let(:workflow) {
25
- workflow = ::Libis::Workflow::Workflow.new
26
- workflow.configure(
27
- 'name' => 'TestWorkflow',
28
- 'description' => 'Workflow for testing',
29
- 'tasks' => [
30
- {'class' => 'CollectFiles', 'recursive' => true},
31
- {
32
- 'name' => 'ProcessFiles', 'recursive' => false,
33
- 'tasks' => [
34
- {'class' => 'ChecksumTester', 'recursive' => true},
35
- {'class' => 'CamelizeName', 'recursive' => true}
36
- ]
37
- }
38
- ],
39
- 'input' => {
40
- 'dirname' => {'default' => '.', 'propagate_to' => 'CollectFiles#location'},
41
- 'checksum_type' => {'default' => 'SHA1', 'propagate_to' => 'ChecksumTester'}
42
- }
43
- )
44
- workflow
45
- }
46
-
47
- let(:job) {
48
- job = ::Libis::Workflow::Job.new
49
- job.configure(
50
- 'name' => 'TestJob',
51
- 'description' => 'Job for testing',
52
- 'workflow' => workflow,
53
- 'run_object' => 'TestRun',
54
- 'input' => {'dirname' => dirname, 'checksum_type' => 'SHA256'},
55
- )
56
- job
57
- }
58
-
59
- it 'should contain three tasks' do
60
- expect(workflow.config['tasks'].size).to eq 2
61
- expect(workflow.config['tasks'].first['class']).to eq 'CollectFiles'
62
- expect(workflow.config['tasks'].last['name']).to eq 'ProcessFiles'
63
- end
64
-
65
- # noinspection RubyResolve
66
- it 'should camelize the workitem name' do
67
- run = job.execute
68
- expect(run.options['CollectFiles']['location']).to eq dirname
69
- expect(run.size).to eq 1
70
- expect(run.items.size).to eq 1
71
- expect(run.items.first.class).to eq TestDirItem
72
- expect(run.items.first.size).to eq 3
73
- expect(run.items.first.items.size).to eq 3
74
- expect(run.items.first.first.class).to eq TestFileItem
75
-
76
- expect(run.items.first.name).to eq 'Items'
77
-
78
- run.items.first.each_with_index do |x, i|
79
- expect(x.name).to eq %w'TestDirItem.rb TestFileItem.rb TestRun.rb'[i]
80
- end
81
- end
82
-
83
- it 'should return expected debug output' do
84
-
85
- sample_out = <<STR
86
- INFO -- Run - TestRun : Ingest run started.
87
- INFO -- Run - TestRun : Running subtask (1/2): CollectFiles
88
- DEBUG -- CollectFiles - TestRun : Processing subitem (1/1): items
89
- DEBUG -- CollectFiles - items : Processing subitem (1/3): test_dir_item.rb
90
- DEBUG -- CollectFiles - items : Processing subitem (2/3): test_file_item.rb
91
- DEBUG -- CollectFiles - items : Processing subitem (3/3): test_run.rb
92
- DEBUG -- CollectFiles - items : 3 of 3 subitems passed
93
- DEBUG -- CollectFiles - TestRun : 1 of 1 subitems passed
94
- INFO -- Run - TestRun : Running subtask (2/2): ProcessFiles
95
- INFO -- ProcessFiles - TestRun : Running subtask (1/2): ChecksumTester
96
- DEBUG -- ProcessFiles/ChecksumTester - TestRun : Processing subitem (1/1): items
97
- DEBUG -- ProcessFiles/ChecksumTester - items : Processing subitem (1/3): test_dir_item.rb
98
- DEBUG -- ProcessFiles/ChecksumTester - items : Processing subitem (2/3): test_file_item.rb
99
- DEBUG -- ProcessFiles/ChecksumTester - items : Processing subitem (3/3): test_run.rb
100
- DEBUG -- ProcessFiles/ChecksumTester - items : 3 of 3 subitems passed
101
- DEBUG -- ProcessFiles/ChecksumTester - TestRun : 1 of 1 subitems passed
102
- INFO -- ProcessFiles - TestRun : Running subtask (2/2): CamelizeName
103
- DEBUG -- ProcessFiles/CamelizeName - TestRun : Processing subitem (1/1): items
104
- DEBUG -- ProcessFiles/CamelizeName - Items : Processing subitem (1/3): test_dir_item.rb
105
- DEBUG -- ProcessFiles/CamelizeName - Items : Processing subitem (2/3): test_file_item.rb
106
- DEBUG -- ProcessFiles/CamelizeName - Items : Processing subitem (3/3): test_run.rb
107
- DEBUG -- ProcessFiles/CamelizeName - Items : 3 of 3 subitems passed
108
- DEBUG -- ProcessFiles/CamelizeName - TestRun : 1 of 1 subitems passed
109
- INFO -- ProcessFiles - TestRun : Done
110
- INFO -- Run - TestRun : Done
111
- STR
112
- sample_out = sample_out.lines.to_a
113
-
114
- run = job.execute
115
- output = logoutput.string.lines.to_a
116
-
117
- # puts output
118
-
119
- expect(output.size).to eq sample_out.size
120
- output.each_with_index do |o, i|
121
- expect(o[/(?<=\] ).*/].strip).to eq sample_out[i].strip
122
- end
123
-
124
- expect(run.status_log.size).to eq 5
125
- expect(run.items.first.status_log.size).to eq 3
126
-
127
- [
128
- {task: 'Run', status: :DONE, progress: 2, max: 2},
129
- {task: 'CollectFiles', status: :DONE, progress: 1, max: 1},
130
- {task: 'ProcessFiles', status: :DONE, progress: 2, max: 2},
131
- {task: 'ProcessFiles/ChecksumTester', status: :DONE, progress: 1, max: 1},
132
- {task: 'ProcessFiles/CamelizeName', status: :DONE, progress: 1, max: 1},
133
- ].each_with_index do |h, i|
134
- h.keys.each { |key| expect(run.status_log[i][key.to_s]).to eq h[key] }
135
- end
136
-
137
- [
138
- {task: 'CollectFiles', status: :DONE, progress: 3, max: 3},
139
- {task: 'ProcessFiles/ChecksumTester', status: :DONE, progress: 3, max: 3},
140
- {task: 'ProcessFiles/CamelizeName', status: :DONE, progress: 3, max: 3},
141
- ].each_with_index do |h, i|
142
- h.keys.each { |key| expect(run.items.first.status_log[i][key.to_s]).to eq h[key] }
143
- end
144
-
145
- [
146
- {task: 'CollectFiles', status: :DONE, progress: nil, max: nil},
147
- {task: 'ProcessFiles/ChecksumTester', status: :DONE, progress: nil, max: nil},
148
- {task: 'ProcessFiles/CamelizeName', status: :DONE, progress: nil, max: nil},
149
- ].each_with_index do |h, i|
150
- h.keys.each { |key| expect(run.items.first.first.status_log[i][key.to_s]).to eq h[key] }
151
- end
152
-
153
- end
154
-
1
+ require_relative 'spec_helper'
2
+
3
+ require 'stringio'
4
+
5
+ describe 'TestWorkflow' do
6
+
7
+ basedir = File.absolute_path File.join(File.dirname(__FILE__))
8
+ dirname = File.join(basedir, 'items')
9
+
10
+ before :each do
11
+
12
+ # noinspection RubyResolve
13
+ ::Libis::Workflow.configure do |cfg|
14
+ cfg.itemdir = dirname
15
+ cfg.taskdir = File.join(basedir, 'tasks')
16
+ cfg.workdir = File.join(basedir, 'work')
17
+ cfg.logger.appenders =
18
+ ::Logging::Appenders.string_io('StringIO', layout: ::Libis::Tools::Config.get_log_formatter)
19
+ end
20
+ end
21
+
22
+ let(:logoutput) { ::Libis::Workflow::Config.logger.appenders.first.sio }
23
+
24
+ let(:workflow) {
25
+ workflow = ::Libis::Workflow::Workflow.new
26
+ workflow.configure(
27
+ 'name' => 'TestWorkflow',
28
+ 'description' => 'Workflow for testing',
29
+ 'tasks' => [
30
+ {'class' => 'CollectFiles', 'recursive' => true},
31
+ {
32
+ 'name' => 'ProcessFiles', 'recursive' => false,
33
+ 'tasks' => [
34
+ {'class' => 'ChecksumTester', 'recursive' => true},
35
+ {'class' => 'CamelizeName', 'recursive' => true}
36
+ ]
37
+ }
38
+ ],
39
+ 'input' => {
40
+ 'dirname' => {'default' => '.', 'propagate_to' => 'CollectFiles#location'},
41
+ 'checksum_type' => {'default' => 'SHA1', 'propagate_to' => 'ChecksumTester'}
42
+ }
43
+ )
44
+ workflow
45
+ }
46
+
47
+ let(:job) {
48
+ job = ::Libis::Workflow::Job.new
49
+ job.configure(
50
+ 'name' => 'TestJob',
51
+ 'description' => 'Job for testing',
52
+ 'workflow' => workflow,
53
+ 'run_object' => 'TestRun',
54
+ 'input' => {'dirname' => dirname, 'checksum_type' => 'SHA256'},
55
+ )
56
+ job
57
+ }
58
+
59
+ it 'should contain three tasks' do
60
+ expect(workflow.config['tasks'].size).to eq 2
61
+ expect(workflow.config['tasks'].first['class']).to eq 'CollectFiles'
62
+ expect(workflow.config['tasks'].last['name']).to eq 'ProcessFiles'
63
+ end
64
+
65
+ # noinspection RubyResolve
66
+ it 'should camelize the workitem name' do
67
+ run = job.execute
68
+ expect(run.options['CollectFiles']['location']).to eq dirname
69
+ expect(run.size).to eq 1
70
+ expect(run.items.size).to eq 1
71
+ expect(run.items.first.class).to eq TestDirItem
72
+ expect(run.items.first.size).to eq 3
73
+ expect(run.items.first.items.size).to eq 3
74
+ expect(run.items.first.first.class).to eq TestFileItem
75
+
76
+ expect(run.items.first.name).to eq 'Items'
77
+
78
+ run.items.first.each_with_index do |x, i|
79
+ expect(x.name).to eq %w'TestDirItem.rb TestFileItem.rb TestRun.rb'[i]
80
+ end
81
+ end
82
+
83
+ it 'should return expected debug output' do
84
+
85
+ sample_out = <<STR
86
+ INFO -- Run - TestRun : Ingest run started.
87
+ INFO -- Run - TestRun : Running subtask (1/2): CollectFiles
88
+ DEBUG -- CollectFiles - TestRun : Processing subitem (1/1): items
89
+ DEBUG -- CollectFiles - items : Processing subitem (1/3): test_dir_item.rb
90
+ DEBUG -- CollectFiles - items : Processing subitem (2/3): test_file_item.rb
91
+ DEBUG -- CollectFiles - items : Processing subitem (3/3): test_run.rb
92
+ DEBUG -- CollectFiles - items : 3 of 3 subitems passed
93
+ DEBUG -- CollectFiles - TestRun : 1 of 1 subitems passed
94
+ INFO -- Run - TestRun : Running subtask (2/2): ProcessFiles
95
+ INFO -- ProcessFiles - TestRun : Running subtask (1/2): ChecksumTester
96
+ DEBUG -- ProcessFiles/ChecksumTester - TestRun : Processing subitem (1/1): items
97
+ DEBUG -- ProcessFiles/ChecksumTester - items : Processing subitem (1/3): test_dir_item.rb
98
+ DEBUG -- ProcessFiles/ChecksumTester - items : Processing subitem (2/3): test_file_item.rb
99
+ DEBUG -- ProcessFiles/ChecksumTester - items : Processing subitem (3/3): test_run.rb
100
+ DEBUG -- ProcessFiles/ChecksumTester - items : 3 of 3 subitems passed
101
+ DEBUG -- ProcessFiles/ChecksumTester - TestRun : 1 of 1 subitems passed
102
+ INFO -- ProcessFiles - TestRun : Running subtask (2/2): CamelizeName
103
+ DEBUG -- ProcessFiles/CamelizeName - TestRun : Processing subitem (1/1): items
104
+ DEBUG -- ProcessFiles/CamelizeName - Items : Processing subitem (1/3): test_dir_item.rb
105
+ DEBUG -- ProcessFiles/CamelizeName - Items : Processing subitem (2/3): test_file_item.rb
106
+ DEBUG -- ProcessFiles/CamelizeName - Items : Processing subitem (3/3): test_run.rb
107
+ DEBUG -- ProcessFiles/CamelizeName - Items : 3 of 3 subitems passed
108
+ DEBUG -- ProcessFiles/CamelizeName - TestRun : 1 of 1 subitems passed
109
+ INFO -- ProcessFiles - TestRun : Done
110
+ INFO -- Run - TestRun : Done
111
+ STR
112
+ sample_out = sample_out.lines.to_a
113
+
114
+ run = job.execute
115
+ output = logoutput.string.lines.to_a
116
+
117
+ # puts output
118
+
119
+ expect(output.size).to eq sample_out.size
120
+ output.each_with_index do |o, i|
121
+ expect(o[/(?<=\] ).*/].strip).to eq sample_out[i].strip
122
+ end
123
+
124
+ expect(run.status_log.size).to eq 5
125
+ expect(run.items.first.status_log.size).to eq 3
126
+
127
+ [
128
+ {task: 'Run', status: :DONE, progress: 2, max: 2},
129
+ {task: 'CollectFiles', status: :DONE, progress: 1, max: 1},
130
+ {task: 'ProcessFiles', status: :DONE, progress: 2, max: 2},
131
+ {task: 'ProcessFiles/ChecksumTester', status: :DONE, progress: 1, max: 1},
132
+ {task: 'ProcessFiles/CamelizeName', status: :DONE, progress: 1, max: 1},
133
+ ].each_with_index do |h, i|
134
+ h.keys.each { |key| expect(run.status_log[i][key.to_s]).to eq h[key] }
135
+ end
136
+
137
+ [
138
+ {task: 'CollectFiles', status: :DONE, progress: 3, max: 3},
139
+ {task: 'ProcessFiles/ChecksumTester', status: :DONE, progress: 3, max: 3},
140
+ {task: 'ProcessFiles/CamelizeName', status: :DONE, progress: 3, max: 3},
141
+ ].each_with_index do |h, i|
142
+ h.keys.each { |key| expect(run.items.first.status_log[i][key.to_s]).to eq h[key] }
143
+ end
144
+
145
+ [
146
+ {task: 'CollectFiles', status: :DONE, progress: nil, max: nil},
147
+ {task: 'ProcessFiles/ChecksumTester', status: :DONE, progress: nil, max: nil},
148
+ {task: 'ProcessFiles/CamelizeName', status: :DONE, progress: nil, max: nil},
149
+ ].each_with_index do |h, i|
150
+ h.keys.each { |key| expect(run.items.first.first.status_log[i][key.to_s]).to eq h[key] }
151
+ end
152
+
153
+ end
154
+
155
155
  end