libis-workflow 2.0.25 → 2.0.28

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 (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