boxgrinder-core 0.0.21 → 0.0.22
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.
- data/CHANGELOG +4 -0
- data/Rakefile +2 -1
- data/boxgrinder-core.gemspec +5 -2
- data/lib/boxgrinder-core/helpers/exec-helper.rb +31 -18
- data/spec/Rakefile +2 -1
- data/spec/helpers/exec-helper-spec.rb +35 -0
- metadata +18 -5
data/CHANGELOG
CHANGED
data/Rakefile
CHANGED
data/boxgrinder-core.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{boxgrinder-core}
|
5
|
-
s.version = "0.0.
|
5
|
+
s.version = "0.0.22"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Marek Goldmann"]
|
9
|
-
s.date = %q{2010-08-
|
9
|
+
s.date = %q{2010-08-23}
|
10
10
|
s.description = %q{Core files for BoxGrinder.}
|
11
11
|
s.email = %q{info@boxgrinder.org}
|
12
12
|
s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README", "lib/boxgrinder-core.rb", "lib/boxgrinder-core/defaults.rb", "lib/boxgrinder-core/helpers/appliance-config-helper.rb", "lib/boxgrinder-core/helpers/appliance-helper.rb", "lib/boxgrinder-core/helpers/exec-helper.rb", "lib/boxgrinder-core/helpers/log-helper.rb", "lib/boxgrinder-core/helpers/queue-helper.rb", "lib/boxgrinder-core/models/appliance-config.rb", "lib/boxgrinder-core/models/config.rb", "lib/boxgrinder-core/models/task.rb", "lib/boxgrinder-core/validators/appliance-config-validator.rb", "lib/boxgrinder-core/validators/errors.rb", "lib/openhash/openhash.rb"]
|
@@ -23,8 +23,11 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.specification_version = 3
|
24
24
|
|
25
25
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
26
|
+
s.add_runtime_dependency(%q<open4>, [">= 1.0.0"])
|
26
27
|
else
|
28
|
+
s.add_dependency(%q<open4>, [">= 1.0.0"])
|
27
29
|
end
|
28
30
|
else
|
31
|
+
s.add_dependency(%q<open4>, [">= 1.0.0"])
|
29
32
|
end
|
30
33
|
end
|
@@ -19,7 +19,8 @@
|
|
19
19
|
# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
20
20
|
|
21
21
|
require 'logger'
|
22
|
-
require '
|
22
|
+
require 'rubygems'
|
23
|
+
require 'open4'
|
23
24
|
|
24
25
|
module BoxGrinder
|
25
26
|
class ExecHelper
|
@@ -32,28 +33,40 @@ module BoxGrinder
|
|
32
33
|
|
33
34
|
output = ""
|
34
35
|
|
35
|
-
|
36
|
-
|
36
|
+
begin
|
37
|
+
status = Open4::popen4( command ) do |pid, stdin, stdout, stderr|
|
38
|
+
threads = []
|
37
39
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
40
|
+
threads << Thread.new(stdout) do |input_str|
|
41
|
+
input_str.each do |l|
|
42
|
+
l.chomp!
|
43
|
+
l.strip!
|
44
|
+
|
45
|
+
output << "\n#{l}"
|
46
|
+
@log.debug l
|
47
|
+
end
|
42
48
|
end
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
+
|
50
|
+
threads << Thread.new(stderr) do |input_str|
|
51
|
+
input_str.each do |l|
|
52
|
+
l.chomp!
|
53
|
+
l.strip!
|
54
|
+
|
55
|
+
output << "\n#{l}"
|
56
|
+
@log.debug l
|
57
|
+
end
|
49
58
|
end
|
59
|
+
threads.each{|t|t.join}
|
50
60
|
end
|
51
|
-
threads.each{|t|t.join}
|
52
|
-
end
|
53
61
|
|
54
|
-
|
62
|
+
raise "process exited with wrong exit status: #{status.exitstatus}" if status.exitstatus != 0
|
55
63
|
|
56
|
-
|
64
|
+
return output.strip
|
65
|
+
rescue => e
|
66
|
+
@log.error e.backtrace.join($/)
|
67
|
+
@log.error "An error occurred while executing command: '#{command}', #{e.message}"
|
68
|
+
raise "An error occurred while executing command: '#{command}', #{e.message}"
|
69
|
+
end
|
57
70
|
end
|
58
71
|
end
|
59
|
-
end
|
72
|
+
end
|
data/spec/Rakefile
CHANGED
@@ -3,7 +3,8 @@ require 'spec/rake/spectask'
|
|
3
3
|
|
4
4
|
desc "Run all examples"
|
5
5
|
Spec::Rake::SpecTask.new('examples') do |t|
|
6
|
-
t.spec_files = FileList['
|
6
|
+
t.spec_files = FileList['**/*-spec.rb']
|
7
7
|
t.rcov = true
|
8
|
+
t.spec_opts = ['--colour', '--format', 'nested']
|
8
9
|
t.rcov_opts = ['--exclude', 'spec']
|
9
10
|
end
|
@@ -2,5 +2,40 @@ require 'boxgrinder-core/helpers/exec-helper'
|
|
2
2
|
|
3
3
|
module BoxGrinder
|
4
4
|
describe ExecHelper do
|
5
|
+
before(:each) do
|
6
|
+
@helper = ExecHelper.new( :log => Logger.new('/dev/null') )
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should fail when command doesn't exists" do
|
10
|
+
Open4.should_receive( :popen4 ).with('thisdoesntexists').and_raise('abc')
|
11
|
+
|
12
|
+
proc { @helper.execute("thisdoesntexists") }.should raise_error("An error occurred while executing command: 'thisdoesntexists', abc")
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should fail when command exit status != 0" do
|
16
|
+
open4 = mock(Open4)
|
17
|
+
open4.stub!(:exitstatus).and_return(1)
|
18
|
+
|
19
|
+
Open4.should_receive( :popen4 ).with('abc').and_return(open4)
|
20
|
+
|
21
|
+
proc { @helper.execute("abc") }.should raise_error("An error occurred while executing command: 'abc', process exited with wrong exit status: 1")
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should execute the command" do
|
25
|
+
open4 = mock(Open4)
|
26
|
+
open4.stub!(:exitstatus).and_return(0)
|
27
|
+
|
28
|
+
Open4.should_receive( :popen4 ).with('abc').and_return(open4)
|
29
|
+
|
30
|
+
proc { @helper.execute("abc") }.should_not raise_error
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should execute the command and return output" do
|
34
|
+
@helper.execute("ls rspec/ls | wc -l").should == "2"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should execute the command and return multi line output" do
|
38
|
+
@helper.execute("ls -1 rspec/ls").should == "one\ntwo"
|
39
|
+
end
|
5
40
|
end
|
6
41
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 22
|
9
|
+
version: 0.0.22
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Marek Goldmann
|
@@ -14,10 +14,23 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-08-
|
17
|
+
date: 2010-08-23 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
|
-
dependencies:
|
20
|
-
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: open4
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 0
|
30
|
+
- 0
|
31
|
+
version: 1.0.0
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
21
34
|
description: Core files for BoxGrinder.
|
22
35
|
email: info@boxgrinder.org
|
23
36
|
executables: []
|