serverspec 0.4.14 → 0.5.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.
- data/Rakefile +11 -3
- data/lib/serverspec.rb +13 -1
- data/lib/serverspec/backend/exec.rb +14 -2
- data/lib/serverspec/backend/ssh.rb +13 -1
- data/lib/serverspec/configuration.rb +12 -0
- data/lib/serverspec/helper.rb +2 -0
- data/lib/serverspec/helper/configuration.rb +36 -0
- data/lib/serverspec/version.rb +1 -1
- data/spec/backend/exec/configuration_spec.rb +33 -0
- data/spec/backend/ssh/configuration_spec.rb +92 -0
- data/spec/spec_helper.rb +10 -2
- data/spec/support/shared_group_examples.rb +2 -0
- metadata +9 -5
- data/spec/backend/exec_spec.rb +0 -21
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ task :spec => 'spec:all'
|
|
6
6
|
namespace :spec do
|
7
7
|
oses = %w( darwin debian gentoo redhat solaris )
|
8
8
|
|
9
|
-
task :all => [ oses.map {|os| "spec:#{os}" }, :
|
9
|
+
task :all => [ oses.map {|os| "spec:#{os}" }, :helpers, :exec, :ssh ].flatten
|
10
10
|
|
11
11
|
oses.each do |os|
|
12
12
|
RSpec::Core::RakeTask.new(os.to_sym) do |t|
|
@@ -14,7 +14,15 @@ namespace :spec do
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
RSpec::Core::RakeTask.new(:
|
18
|
-
t.pattern = "spec/
|
17
|
+
RSpec::Core::RakeTask.new(:helpers) do |t|
|
18
|
+
t.pattern = "spec/helpers/*_spec.rb"
|
19
|
+
end
|
20
|
+
|
21
|
+
RSpec::Core::RakeTask.new(:exec) do |t|
|
22
|
+
t.pattern = "spec/backend/exec/*_spec.rb"
|
23
|
+
end
|
24
|
+
|
25
|
+
RSpec::Core::RakeTask.new(:ssh) do |t|
|
26
|
+
t.pattern = "spec/backend/ssh/*_spec.rb"
|
19
27
|
end
|
20
28
|
end
|
data/lib/serverspec.rb
CHANGED
@@ -14,8 +14,20 @@ require 'serverspec/commands/debian'
|
|
14
14
|
require 'serverspec/commands/gentoo'
|
15
15
|
require 'serverspec/commands/solaris'
|
16
16
|
require 'serverspec/commands/darwin'
|
17
|
+
require 'serverspec/configuration'
|
18
|
+
|
19
|
+
include Serverspec
|
20
|
+
|
21
|
+
module Serverspec
|
22
|
+
class << self
|
23
|
+
def configuration
|
24
|
+
Serverspec::Configuration
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
17
28
|
|
18
29
|
RSpec.configure do |c|
|
30
|
+
c.include(Serverspec::Helper::Configuration)
|
19
31
|
c.include(Serverspec::Helper::RedHat, :os => :redhat)
|
20
32
|
c.include(Serverspec::Helper::Debian, :os => :debian)
|
21
33
|
c.include(Serverspec::Helper::Gentoo, :os => :gentoo)
|
@@ -25,7 +37,7 @@ RSpec.configure do |c|
|
|
25
37
|
c.add_setting :host, :default => nil
|
26
38
|
c.add_setting :ssh, :default => nil
|
27
39
|
c.add_setting :sudo_password, :default => nil
|
28
|
-
c.add_setting
|
40
|
+
Serverspec.configuration.defaults.each { |k, v| c.add_setting k, :default => v }
|
29
41
|
c.before :each do
|
30
42
|
if described_class.nil?
|
31
43
|
puts
|
@@ -10,6 +10,8 @@ module Serverspec
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def run_command(cmd, opts={})
|
13
|
+
cmd = build_command(cmd)
|
14
|
+
cmd = add_pre_command(cmd)
|
13
15
|
stdout = `#{build_command(cmd)} 2>&1`
|
14
16
|
# In ruby 1.9, it is possible to use Open3.capture3, but not in 1.8
|
15
17
|
#stdout, stderr, status = Open3.capture3(cmd)
|
@@ -24,8 +26,18 @@ module Serverspec
|
|
24
26
|
end
|
25
27
|
|
26
28
|
def build_command(cmd)
|
27
|
-
|
28
|
-
|
29
|
+
path = Serverspec.configuration.path || RSpec.configuration.path
|
30
|
+
if path
|
31
|
+
cmd = "PATH=#{path}:$PATH #{cmd}"
|
32
|
+
end
|
33
|
+
cmd
|
34
|
+
end
|
35
|
+
|
36
|
+
def add_pre_command(cmd)
|
37
|
+
path = Serverspec.configuration.path || RSpec.configuration.path
|
38
|
+
if Serverspec.configuration.pre_command
|
39
|
+
cmd = "#{Serverspec.configuration.pre_command} && #{cmd}"
|
40
|
+
cmd = "PATH=#{path}:$PATH #{cmd}" if path
|
29
41
|
end
|
30
42
|
cmd
|
31
43
|
end
|
@@ -5,7 +5,7 @@ module Serverspec
|
|
5
5
|
class Ssh < Exec
|
6
6
|
def run_command(cmd, opt={})
|
7
7
|
cmd = build_command(cmd)
|
8
|
-
cmd =
|
8
|
+
cmd = add_pre_command(cmd)
|
9
9
|
ret = ssh_exec!(cmd)
|
10
10
|
if ! @example.nil?
|
11
11
|
@example.metadata[:command] = cmd
|
@@ -14,6 +14,18 @@ module Serverspec
|
|
14
14
|
ret
|
15
15
|
end
|
16
16
|
|
17
|
+
def build_command(cmd)
|
18
|
+
cmd = super(cmd)
|
19
|
+
cmd = "sudo #{cmd}" if RSpec.configuration.ssh.options[:user] != 'root'
|
20
|
+
cmd
|
21
|
+
end
|
22
|
+
|
23
|
+
def add_pre_command(cmd)
|
24
|
+
cmd = super(cmd)
|
25
|
+
cmd = "sudo #{cmd}" if RSpec.configuration.ssh.options[:user] != 'root'
|
26
|
+
cmd
|
27
|
+
end
|
28
|
+
|
17
29
|
private
|
18
30
|
def ssh_exec!(command)
|
19
31
|
stdout_data = ''
|
data/lib/serverspec/helper.rb
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
module Serverspec
|
2
|
+
module Helper
|
3
|
+
module Configuration
|
4
|
+
def subject
|
5
|
+
build_configurations
|
6
|
+
super
|
7
|
+
end
|
8
|
+
|
9
|
+
# You can create a set of configurations provided to all specs in your spec_helper:
|
10
|
+
#
|
11
|
+
# RSpec.configure { |c| c.pre_command = "source ~/.zshrc" }
|
12
|
+
#
|
13
|
+
# Any configurations you provide with `let(:option_name)` in a spec will
|
14
|
+
# automatically be merged on top of the configurations.
|
15
|
+
#
|
16
|
+
# @example
|
17
|
+
#
|
18
|
+
# describe 'Gem' do
|
19
|
+
# let(:pre_command) { "source ~/.zshrc" }
|
20
|
+
#
|
21
|
+
# %w(pry awesome_print bundler).each do |p|
|
22
|
+
# describe package(p) do
|
23
|
+
# it { should be_installed.by('gem') }
|
24
|
+
# end
|
25
|
+
# end
|
26
|
+
# end
|
27
|
+
def build_configurations
|
28
|
+
Serverspec::Configuration.defaults.keys.each do |c|
|
29
|
+
value = self.respond_to?(c.to_sym) ?
|
30
|
+
self.send(c) : RSpec.configuration.send(c)
|
31
|
+
Serverspec::Configuration.send(:"#{c}=", value)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/serverspec/version.rb
CHANGED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'serverspec/helper/base'
|
4
|
+
include Serverspec::Helper::Base
|
5
|
+
include Serverspec::Helper::Exec
|
6
|
+
|
7
|
+
describe 'configurations are not set' do
|
8
|
+
context package('httpd') do
|
9
|
+
its(:command) { should eq 'command' }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe 'path is set' do
|
14
|
+
let(:path) { '/sbin:/usr/sbin' }
|
15
|
+
context package('httpd') do
|
16
|
+
its(:command) { should eq 'PATH=/sbin:/usr/sbin:$PATH command' }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'pre_command is set' do
|
21
|
+
let(:pre_command) { 'source ~/.zshrc' }
|
22
|
+
context package('httpd') do
|
23
|
+
its(:command) { should eq 'source ~/.zshrc && command' }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'path and pre_command are set' do
|
28
|
+
let(:path) { '/sbin:/usr/sbin' }
|
29
|
+
let(:pre_command) { 'source ~/.zshrc' }
|
30
|
+
context package('httpd') do
|
31
|
+
its(:command) { should eq 'PATH=/sbin:/usr/sbin:$PATH source ~/.zshrc && PATH=/sbin:/usr/sbin:$PATH command' }
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'serverspec/helper/base'
|
4
|
+
include Serverspec::Helper::Base
|
5
|
+
include Serverspec::Helper::Ssh
|
6
|
+
|
7
|
+
ssh = double
|
8
|
+
|
9
|
+
describe 'configurations are not set' do
|
10
|
+
before :all do
|
11
|
+
RSpec.configure do |c|
|
12
|
+
ssh.stub(:options) { { :user => 'root' } }
|
13
|
+
c.ssh = ssh
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context package('httpd') do
|
18
|
+
its(:command) { should eq 'command' }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'path is set' do
|
23
|
+
before :all do
|
24
|
+
RSpec.configure do |c|
|
25
|
+
ssh.stub(:options) { { :user => 'root' } }
|
26
|
+
c.ssh = ssh
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
let(:path) { '/sbin:/usr/sbin' }
|
31
|
+
context package('httpd') do
|
32
|
+
its(:command) { should eq 'PATH=/sbin:/usr/sbin:$PATH command' }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe 'pre_command is set and user is root' do
|
37
|
+
before :all do
|
38
|
+
RSpec.configure do |c|
|
39
|
+
ssh.stub(:options) { { :user => 'root' } }
|
40
|
+
c.ssh = ssh
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
let(:pre_command) { 'source ~/.zshrc' }
|
45
|
+
context package('httpd') do
|
46
|
+
its(:command) { should eq 'source ~/.zshrc && command' }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe 'pre_command is set and user is non-root' do
|
51
|
+
before :all do
|
52
|
+
RSpec.configure do |c|
|
53
|
+
ssh.stub(:options) { { :user => 'foo' } }
|
54
|
+
c.ssh = ssh
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
let(:pre_command) { 'source ~/.zshrc' }
|
59
|
+
context package('httpd') do
|
60
|
+
its(:command) { should eq 'sudo source ~/.zshrc && sudo command' }
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe 'path pre_command and set and user is non-root' do
|
65
|
+
before :all do
|
66
|
+
RSpec.configure do |c|
|
67
|
+
ssh.stub(:options) { { :user => 'foo' } }
|
68
|
+
c.ssh = ssh
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
let(:path) { '/sbin:/usr/sbin' }
|
73
|
+
let(:pre_command) { 'source ~/.zshrc' }
|
74
|
+
context package('httpd') do
|
75
|
+
its(:command) { should eq 'sudo PATH=/sbin:/usr/sbin:$PATH source ~/.zshrc && sudo PATH=/sbin:/usr/sbin:$PATH command' }
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe 'path pre_command and set and user is non-root' do
|
80
|
+
before :all do
|
81
|
+
RSpec.configure do |c|
|
82
|
+
ssh.stub(:options) { { :user => 'root' } }
|
83
|
+
c.ssh = ssh
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
let(:path) { '/sbin:/usr/sbin' }
|
88
|
+
let(:pre_command) { 'source ~/.zshrc' }
|
89
|
+
context package('httpd') do
|
90
|
+
its(:command) { should eq 'PATH=/sbin:/usr/sbin:$PATH source ~/.zshrc && PATH=/sbin:/usr/sbin:$PATH command' }
|
91
|
+
end
|
92
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'serverspec'
|
2
2
|
require 'pathname'
|
3
|
-
|
4
|
-
include Serverspec::Helper::Exec
|
3
|
+
require 'rspec/mocks/standalone'
|
5
4
|
|
6
5
|
PROJECT_ROOT = (Pathname.new(File.dirname(__FILE__)) + '..').expand_path
|
7
6
|
|
@@ -29,6 +28,15 @@ module Serverspec
|
|
29
28
|
end
|
30
29
|
end
|
31
30
|
end
|
31
|
+
|
32
|
+
module Type
|
33
|
+
class Base
|
34
|
+
def command
|
35
|
+
cmd = backend.build_command('command')
|
36
|
+
backend.add_pre_command(cmd)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
32
40
|
end
|
33
41
|
|
34
42
|
RSpec.configure do |c|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serverspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-06-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: net-ssh
|
@@ -153,10 +153,12 @@ files:
|
|
153
153
|
- lib/serverspec/commands/linux.rb
|
154
154
|
- lib/serverspec/commands/redhat.rb
|
155
155
|
- lib/serverspec/commands/solaris.rb
|
156
|
+
- lib/serverspec/configuration.rb
|
156
157
|
- lib/serverspec/filter.rb
|
157
158
|
- lib/serverspec/helper.rb
|
158
159
|
- lib/serverspec/helper/attributes.rb
|
159
160
|
- lib/serverspec/helper/base.rb
|
161
|
+
- lib/serverspec/helper/configuration.rb
|
160
162
|
- lib/serverspec/helper/darwin.rb
|
161
163
|
- lib/serverspec/helper/debian.rb
|
162
164
|
- lib/serverspec/helper/detect_os.rb
|
@@ -234,7 +236,8 @@ files:
|
|
234
236
|
- lib/serverspec/type/zfs.rb
|
235
237
|
- lib/serverspec/version.rb
|
236
238
|
- serverspec.gemspec
|
237
|
-
- spec/backend/
|
239
|
+
- spec/backend/exec/configuration_spec.rb
|
240
|
+
- spec/backend/ssh/configuration_spec.rb
|
238
241
|
- spec/darwin/command_spec.rb
|
239
242
|
- spec/darwin/commands_spec.rb
|
240
243
|
- spec/darwin/cron_spec.rb
|
@@ -351,12 +354,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
351
354
|
version: '0'
|
352
355
|
requirements: []
|
353
356
|
rubyforge_project:
|
354
|
-
rubygems_version: 1.8.
|
357
|
+
rubygems_version: 1.8.25
|
355
358
|
signing_key:
|
356
359
|
specification_version: 3
|
357
360
|
summary: RSpec tests for your servers provisioned by Puppet, Chef or anything else
|
358
361
|
test_files:
|
359
|
-
- spec/backend/
|
362
|
+
- spec/backend/exec/configuration_spec.rb
|
363
|
+
- spec/backend/ssh/configuration_spec.rb
|
360
364
|
- spec/darwin/command_spec.rb
|
361
365
|
- spec/darwin/commands_spec.rb
|
362
366
|
- spec/darwin/cron_spec.rb
|
data/spec/backend/exec_spec.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
require 'serverspec/helper/exec'
|
4
|
-
require 'serverspec/helper/base'
|
5
|
-
include Serverspec::Helper::Exec
|
6
|
-
include Serverspec::Helper::Base
|
7
|
-
|
8
|
-
describe 'Default path setting' do
|
9
|
-
subject { backend.build_command('service httpd status') }
|
10
|
-
it { should eq 'service httpd status' }
|
11
|
-
end
|
12
|
-
|
13
|
-
describe 'Custom path setting' do
|
14
|
-
before :all do
|
15
|
-
RSpec.configure do |c|
|
16
|
-
c.path = '/usr/local/rbenv/shims:/sbin:/usr/sbin'
|
17
|
-
end
|
18
|
-
end
|
19
|
-
subject { backend.build_command('service httpd status') }
|
20
|
-
it { should eq 'PATH=/usr/local/rbenv/shims:/sbin:/usr/sbin:$PATH service httpd status' }
|
21
|
-
end
|