scout-gear 5.1.1 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.vimproject +24 -12
  3. data/Rakefile +2 -0
  4. data/VERSION +1 -1
  5. data/bin/scout +2 -0
  6. data/lib/scout/exceptions.rb +14 -2
  7. data/lib/scout/log/color.rb +34 -10
  8. data/lib/scout/log/progress/report.rb +5 -4
  9. data/lib/scout/meta_extension.rb +4 -2
  10. data/lib/scout/misc/format.rb +16 -4
  11. data/lib/scout/misc/monitor.rb +41 -0
  12. data/lib/scout/misc.rb +1 -0
  13. data/lib/scout/open/stream.rb +31 -0
  14. data/lib/scout/path/find.rb +2 -1
  15. data/lib/scout/path.rb +1 -1
  16. data/lib/scout/persist/serialize.rb +15 -4
  17. data/lib/scout/resource/path.rb +5 -0
  18. data/lib/scout/resource/util.rb +48 -0
  19. data/lib/scout/resource.rb +2 -0
  20. data/lib/scout/semaphore.rb +148 -0
  21. data/lib/scout/simple_opt/doc.rb +26 -2
  22. data/lib/scout/work_queue/socket.rb +119 -0
  23. data/lib/scout/work_queue/worker.rb +54 -0
  24. data/lib/scout/work_queue.rb +86 -0
  25. data/lib/scout/workflow/definition.rb +8 -2
  26. data/lib/scout/workflow/documentation.rb +32 -26
  27. data/lib/scout/workflow/step/info.rb +13 -13
  28. data/lib/scout/workflow/step/load.rb +18 -0
  29. data/lib/scout/workflow/step.rb +40 -4
  30. data/lib/scout/workflow/task/inputs.rb +4 -2
  31. data/lib/scout/workflow/task.rb +15 -1
  32. data/lib/scout/workflow/usage.rb +96 -76
  33. data/lib/scout/workflow.rb +1 -0
  34. data/scout-gear.gemspec +25 -3
  35. data/scout_commands/workflow/info +29 -0
  36. data/scout_commands/workflow/list +27 -0
  37. data/scout_commands/workflow/task +32 -681
  38. data/scout_commands/workflow/task_old +706 -0
  39. data/share/color/color_names +507 -0
  40. data/share/color/diverging_colors.hex +12 -0
  41. data/test/scout/log/test_color.rb +0 -0
  42. data/test/scout/resource/test_util.rb +27 -0
  43. data/test/scout/simple_opt/test_doc.rb +16 -0
  44. data/test/scout/test_meta_extension.rb +9 -0
  45. data/test/scout/test_semaphore.rb +17 -0
  46. data/test/scout/test_work_queue.rb +93 -0
  47. data/test/scout/work_queue/test_socket.rb +46 -0
  48. data/test/scout/work_queue/test_worker.rb +99 -0
  49. data/test/scout/workflow/step/test_info.rb +17 -15
  50. data/test/scout/workflow/step/test_load.rb +65 -0
  51. data/test/scout/workflow/test_definition.rb +0 -0
  52. data/test/scout/workflow/test_documentation.rb +30 -0
  53. data/test/scout/workflow/test_task.rb +1 -0
  54. data/test/scout/workflow/test_usage.rb +12 -3
  55. metadata +24 -2
@@ -0,0 +1,46 @@
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 TestSocket < Test::Unit::TestCase
5
+ def test_simple
6
+ socket = WorkQueue::Socket.new
7
+
8
+ socket.write 1
9
+ socket.write 2
10
+ socket.write "STRING"
11
+ socket.write :string
12
+
13
+ assert_equal 1, socket.read
14
+ assert_equal 2, socket.read
15
+ assert_equal "STRING", socket.read
16
+ assert_equal :string, socket.read
17
+
18
+ socket.close_write
19
+ assert_raise ClosedStream do
20
+ socket.read
21
+ end
22
+ end
23
+
24
+ def __test_speed
25
+ sss 0
26
+ socket = WorkQueue::Socket.new
27
+
28
+ num = 10_000
29
+
30
+ Thread.new do
31
+ num.times do |i|
32
+ socket.write nil
33
+ end
34
+ socket.write DoneProcessing.new
35
+ end
36
+
37
+ bar = Log::ProgressBar.new num
38
+ while true
39
+ i = socket.read
40
+ bar.tick
41
+ break if DoneProcessing === i
42
+ end
43
+ bar.done
44
+ end
45
+ end
46
+
@@ -0,0 +1,99 @@
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/semaphore'
5
+ require 'scout/work_queue/socket'
6
+ class TestQueueWorker < Test::Unit::TestCase
7
+ def test_simple
8
+ worker = WorkQueue::Worker.new
9
+ TmpFile.with_file do |file|
10
+ worker.run do
11
+ Open.write file, "TEST"
12
+ end
13
+ worker.join
14
+
15
+ assert_equal "TEST", Open.read(file)
16
+ end
17
+ end
18
+
19
+ def test_semaphore
20
+ ScoutSemaphore.with_semaphore 1 do |sem|
21
+
22
+ TmpFile.with_file do |outfile|
23
+ 2.times do
24
+ sout = Open.open_pipe do |sin|
25
+ workers = 100.times.collect{ WorkQueue::Worker.new }
26
+ workers.each do |w|
27
+ w.run do
28
+ ScoutSemaphore.synchronize(sem) do
29
+ 10.times do
30
+ sin.puts Process.pid
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ WorkQueue::Worker.join(workers)
37
+ end
38
+ Open.consume_stream(sout, false, outfile)
39
+ pid_list = Open.read(outfile).split("\n")
40
+
41
+ assert_nothing_raised do
42
+ seen = []
43
+ current = nil
44
+ pid_list.each do |pid|
45
+ if pid != current
46
+ raise "Out of order" if seen.include? pid
47
+ end
48
+ current = pid
49
+ seen << pid
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ def test_process
58
+ input = WorkQueue::Socket.new
59
+ output = WorkQueue::Socket.new
60
+
61
+ workers = 10.times.collect{ WorkQueue::Worker.new }
62
+ workers.each do |w|
63
+ w.process(input, output) do |obj|
64
+ [Process.pid, obj.inspect] * " "
65
+ end
66
+ end
67
+
68
+ read = Thread.new do
69
+ begin
70
+ while obj = output.read
71
+ if DoneProcessing === obj
72
+ pid = obj.pid
73
+ workers.delete_if{|w| w.pid = pid }
74
+ break if workers.empty?
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+ write = Thread.new do
81
+ 100.times do |i|
82
+ input.write i
83
+ end
84
+ 10.times do
85
+ input.write DoneProcessing.new
86
+ end
87
+ input.close_write
88
+ end
89
+
90
+ write.join
91
+ read.join
92
+
93
+ WorkQueue::Worker.join workers
94
+ input.clean
95
+ output.clean
96
+ end
97
+
98
+ end
99
+
@@ -4,25 +4,27 @@ require 'scout/workflow'
4
4
 
5
5
  class TestStepInfo < Test::Unit::TestCase
6
6
  def test_dependency
7
- Log.with_severity 0 do
8
- tmpfile = tmpdir.test_step
9
- step1 = Step.new tmpfile.step1, ["12"] do |s|
10
- s.length
11
- end
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
12
14
 
13
- assert_equal 2, step1.exec
14
- assert_equal 2, step1.run
15
+ assert_equal 2, step1.exec
16
+ assert_equal 2, step1.run
15
17
 
16
- step2 = Step.new tmpfile.step2 do
17
- step1 = dependencies.first
18
- step1.inputs.first + " has " + step1.load.to_s + " characters"
19
- end
18
+ step2 = Step.new tmpfile.step2 do
19
+ step1 = dependencies.first
20
+ step1.inputs.first + " has " + step1.load.to_s + " characters"
21
+ end
20
22
 
21
- step2.dependencies = [step1]
23
+ step2.dependencies = [step1]
22
24
 
23
- assert_equal "12 has 2 characters", step2.run
24
- assert_equal "12 has 2 characters", step2.run
25
+ assert_equal "12 has 2 characters", step2.run
26
+ assert_equal "12 has 2 characters", step2.run
27
+ end
25
28
  end
26
29
  end
27
30
  end
28
-
@@ -0,0 +1,65 @@
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/step'
5
+
6
+ class TestStepLoad < Test::Unit::TestCase
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
13
+
14
+ step2 = Step.new tmpfile.step2 do
15
+ step1 = dependencies.first
16
+ step1.inputs.first + " has " + step1.load.to_s + " characters"
17
+ end
18
+
19
+ step2.dependencies = [step1]
20
+
21
+ step2.recursive_clean
22
+ step2.run
23
+
24
+ new_step2 = Step.load(step2.path)
25
+
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
31
+ end
32
+
33
+ def test_relocate
34
+ wf = Workflow.annonymous_workflow "RelocateWorkflow" do
35
+ input :input1, :string
36
+ task :step1 => :string do |input1|
37
+ input1
38
+ end
39
+
40
+ dep :step1
41
+ task :step2 => :string do
42
+ step(:step1).load.reverse
43
+ end
44
+ end
45
+
46
+ step2 = wf.job(:step2, :input1 => "TEST")
47
+ step1 = step2.step(:step1)
48
+
49
+ step2.run
50
+ new_step2 = Step.load(step2.path)
51
+ TmpFile.with_file do |dir|
52
+ Misc.in_dir dir do
53
+ Path.setup(dir)
54
+ Open.mv step1.path, dir.var.jobs.RelocateWorkflow.step1[File.basename(step1.path)]
55
+ Open.mv step1.info_file, dir.var.jobs.RelocateWorkflow.step1[File.basename(step1.info_file)]
56
+
57
+ new_step2 = Step.load(step2.path)
58
+ assert_equal "TEST".reverse, new_step2.load
59
+ assert_equal "TEST", new_step2.dependencies.first.load
60
+ end
61
+ end
62
+
63
+ end
64
+ end
65
+
File without changes
@@ -0,0 +1,30 @@
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 TestWorkflowDocumentation < Test::Unit::TestCase
5
+ module UsageWorkflow
6
+ extend Workflow
7
+
8
+ self.name = "UsageWorkflow"
9
+
10
+ self.title = "Workflow to test documentation"
11
+ self.description = "Use this workflow to test if the documentation is correctly presented"
12
+
13
+ desc "Desc"
14
+ input :array, :array, "Array"
15
+ task :step1 => :string do
16
+ end
17
+
18
+ dep :step1
19
+ desc "Desc2"
20
+ input :float, :float, "Float"
21
+ task :step2 => :string do
22
+ end
23
+ end
24
+
25
+ def test_usage
26
+ assert_match 'test', UsageWorkflow.documentation[:title]
27
+ assert_match 'presented', UsageWorkflow.documentation[:description]
28
+ end
29
+ end
30
+
@@ -17,6 +17,7 @@ class TestTask < Test::Unit::TestCase
17
17
  end
18
18
 
19
19
  s = task.job('test', ['12'])
20
+ s.clean
20
21
  assert_equal 2, s.run
21
22
  end
22
23
 
@@ -5,6 +5,11 @@ require 'scout/workflow'
5
5
  class TestWorkflowUsage < Test::Unit::TestCase
6
6
  module UsageWorkflow
7
7
  extend Workflow
8
+
9
+ self.name = "UsageWorkflow"
10
+
11
+ self.title = "Workflow to test documentation"
12
+ self.description = "Use this workflow to test if the documentation is correctly presented."
8
13
 
9
14
  desc "Desc"
10
15
  input :array, :array, "Array"
@@ -18,9 +23,13 @@ class TestWorkflowUsage < Test::Unit::TestCase
18
23
  end
19
24
  end
20
25
 
21
- def __test_usage
22
- UsageWorkflow.tasks[:step1].doc
23
- UsageWorkflow.doc
26
+
27
+ def test_workflow_usage
28
+ assert_match "test if the documentation", UsageWorkflow.usage
29
+ end
30
+
31
+ def test_task_usage
32
+ assert_match "Desc2", UsageWorkflow.tasks[:step2].usage
24
33
  end
25
34
  end
26
35
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scout-gear
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.1
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-27 00:00:00.000000000 Z
11
+ date: 2023-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: term-ansicolor
@@ -118,6 +118,7 @@ files:
118
118
  - lib/scout/misc/filesystem.rb
119
119
  - lib/scout/misc/format.rb
120
120
  - lib/scout/misc/insist.rb
121
+ - lib/scout/misc/monitor.rb
121
122
  - lib/scout/open.rb
122
123
  - lib/scout/open/lock.rb
123
124
  - lib/scout/open/remote.rb
@@ -136,6 +137,8 @@ files:
136
137
  - lib/scout/resource/produce.rb
137
138
  - lib/scout/resource/produce/rake.rb
138
139
  - lib/scout/resource/scout.rb
140
+ - lib/scout/resource/util.rb
141
+ - lib/scout/semaphore.rb
139
142
  - lib/scout/simple_opt.rb
140
143
  - lib/scout/simple_opt/accessor.rb
141
144
  - lib/scout/simple_opt/doc.rb
@@ -143,11 +146,15 @@ files:
143
146
  - lib/scout/simple_opt/parse.rb
144
147
  - lib/scout/simple_opt/setup.rb
145
148
  - lib/scout/tmpfile.rb
149
+ - lib/scout/work_queue.rb
150
+ - lib/scout/work_queue/socket.rb
151
+ - lib/scout/work_queue/worker.rb
146
152
  - lib/scout/workflow.rb
147
153
  - lib/scout/workflow/definition.rb
148
154
  - lib/scout/workflow/documentation.rb
149
155
  - lib/scout/workflow/step.rb
150
156
  - lib/scout/workflow/step/info.rb
157
+ - lib/scout/workflow/step/load.rb
151
158
  - lib/scout/workflow/task.rb
152
159
  - lib/scout/workflow/task/inputs.rb
153
160
  - lib/scout/workflow/usage.rb
@@ -158,9 +165,15 @@ files:
158
165
  - scout_commands/find
159
166
  - scout_commands/glob
160
167
  - scout_commands/rbbt
168
+ - scout_commands/workflow/info
169
+ - scout_commands/workflow/list
161
170
  - scout_commands/workflow/task
171
+ - scout_commands/workflow/task_old
172
+ - share/color/color_names
173
+ - share/color/diverging_colors.hex
162
174
  - test/scout/indiferent_hash/test_case_insensitive.rb
163
175
  - test/scout/indiferent_hash/test_options.rb
176
+ - test/scout/log/test_color.rb
164
177
  - test/scout/log/test_progress.rb
165
178
  - test/scout/misc/test_digest.rb
166
179
  - test/scout/misc/test_filesystem.rb
@@ -176,6 +189,8 @@ files:
176
189
  - test/scout/persist/test_serialize.rb
177
190
  - test/scout/resource/test_path.rb
178
191
  - test/scout/resource/test_produce.rb
192
+ - test/scout/resource/test_util.rb
193
+ - test/scout/simple_opt/test_doc.rb
179
194
  - test/scout/simple_opt/test_get.rb
180
195
  - test/scout/simple_opt/test_parse.rb
181
196
  - test/scout/simple_opt/test_setup.rb
@@ -189,10 +204,17 @@ files:
189
204
  - test/scout/test_path.rb
190
205
  - test/scout/test_persist.rb
191
206
  - test/scout/test_resource.rb
207
+ - test/scout/test_semaphore.rb
192
208
  - test/scout/test_tmpfile.rb
209
+ - test/scout/test_work_queue.rb
193
210
  - test/scout/test_workflow.rb
211
+ - test/scout/work_queue/test_socket.rb
212
+ - test/scout/work_queue/test_worker.rb
194
213
  - test/scout/workflow/step/test_info.rb
214
+ - test/scout/workflow/step/test_load.rb
195
215
  - test/scout/workflow/task/test_inputs.rb
216
+ - test/scout/workflow/test_definition.rb
217
+ - test/scout/workflow/test_documentation.rb
196
218
  - test/scout/workflow/test_step.rb
197
219
  - test/scout/workflow/test_task.rb
198
220
  - test/scout/workflow/test_usage.rb