serverspec 0.4.1 → 0.4.2

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 (43) hide show
  1. data/Guardfile +4 -0
  2. data/lib/serverspec/commands/base.rb +5 -1
  3. data/lib/serverspec/commands/solaris.rb +5 -1
  4. data/lib/serverspec/helper/type.rb +15 -8
  5. data/lib/serverspec/matchers.rb +0 -1
  6. data/lib/serverspec/matchers/have_entry.rb +10 -2
  7. data/lib/serverspec/matchers/return_exit_status.rb +6 -2
  8. data/lib/serverspec/matchers/return_stderr.rb +8 -4
  9. data/lib/serverspec/matchers/return_stdout.rb +8 -4
  10. data/lib/serverspec/type/base.rb +1 -1
  11. data/lib/serverspec/type/command.rb +31 -0
  12. data/lib/serverspec/type/cron.rb +12 -0
  13. data/lib/serverspec/version.rb +1 -1
  14. data/serverspec.gemspec +2 -0
  15. data/spec/darwin/command_spec.rb +13 -0
  16. data/spec/darwin/commands_spec.rb +9 -2
  17. data/spec/darwin/cron_spec.rb +8 -0
  18. data/spec/darwin/file_spec.rb +1 -1
  19. data/spec/darwin/port_spec.rb +1 -1
  20. data/spec/debian/command_spec.rb +13 -0
  21. data/spec/debian/commands_spec.rb +9 -2
  22. data/spec/debian/cron_spec.rb +8 -0
  23. data/spec/debian/file_spec.rb +1 -1
  24. data/spec/debian/port_spec.rb +1 -1
  25. data/spec/gentoo/command_spec.rb +13 -0
  26. data/spec/gentoo/commands_spec.rb +9 -2
  27. data/spec/gentoo/cron_spec.rb +8 -0
  28. data/spec/gentoo/file_spec.rb +1 -1
  29. data/spec/gentoo/port_spec.rb +1 -1
  30. data/spec/redhat/command_spec.rb +13 -0
  31. data/spec/redhat/commands_spec.rb +9 -2
  32. data/spec/redhat/cron_spec.rb +8 -0
  33. data/spec/redhat/file_spec.rb +1 -1
  34. data/spec/redhat/port_spec.rb +1 -1
  35. data/spec/solaris/command_spec.rb +13 -0
  36. data/spec/solaris/commands_spec.rb +9 -2
  37. data/spec/solaris/cron_spec.rb +8 -0
  38. data/spec/solaris/file_spec.rb +1 -1
  39. data/spec/solaris/port_spec.rb +1 -1
  40. data/spec/support/shared_command_examples.rb +108 -0
  41. data/spec/support/shared_cron_examples.rb +23 -0
  42. metadata +61 -3
  43. data/lib/serverspec/matchers/be_installed_by_gem.rb +0 -16
data/Guardfile ADDED
@@ -0,0 +1,4 @@
1
+ guard :rspec do
2
+ watch(%r{^spec/.+/.+_spec\.rb$})
3
+ watch('spec/spec_helper.rb') { "spec" }
4
+ end
@@ -109,7 +109,11 @@ module Serverspec
109
109
 
110
110
  def check_cron_entry user, entry
111
111
  entry_escaped = entry.gsub(/\*/, '\\*')
112
- "crontab -u #{escape(user)} -l | grep -- #{escape(entry_escaped)}"
112
+ if user.nil?
113
+ "crontab -l | grep -- #{escape(entry_escaped)}"
114
+ else
115
+ "crontab -u #{escape(user)} -l | grep -- #{escape(entry_escaped)}"
116
+ end
113
117
  end
114
118
 
115
119
  def check_link link, target
@@ -20,7 +20,11 @@ module Serverspec
20
20
 
21
21
  def check_cron_entry user, entry
22
22
  entry_escaped = entry.gsub(/\*/, '\\*')
23
- "crontab -l #{escape(user)} | grep -- #{escape(entry_escaped)}"
23
+ if user.nil?
24
+ "crontab -l | grep -- #{escape(entry_escaped)}"
25
+ else
26
+ "crontab -l #{escape(user)} | grep -- #{escape(entry_escaped)}"
27
+ end
24
28
  end
25
29
 
26
30
  def check_zfs zfs, property=nil
@@ -1,14 +1,21 @@
1
- require 'serverspec/type/base'
2
- require 'serverspec/type/service'
3
- require 'serverspec/type/package'
4
- require 'serverspec/type/port'
5
- require 'serverspec/type/file'
6
-
7
1
  module Serverspec
8
2
  module Helper
9
3
  module Type
10
- %w( service package port file ).each do |type|
11
- define_method type do |name|
4
+ types = %w(
5
+ base
6
+ service
7
+ package
8
+ port
9
+ file
10
+ cron
11
+ command
12
+ )
13
+
14
+ types.each {|type| require "serverspec/type/#{type}" }
15
+
16
+ types.each do |type|
17
+ define_method type do |*args|
18
+ name = args.first
12
19
  self.class.const_get('Serverspec').const_get('Type').const_get(type.capitalize).new(name)
13
20
  end
14
21
  end
@@ -17,7 +17,6 @@ require 'serverspec/matchers/be_grouped_into'
17
17
  require 'serverspec/matchers/have_entry'
18
18
  require 'serverspec/matchers/have_cron_entry'
19
19
  require 'serverspec/matchers/be_linked_to'
20
- require 'serverspec/matchers/be_installed_by_gem'
21
20
  require 'serverspec/matchers/belong_to_group'
22
21
  require 'serverspec/matchers/have_gid'
23
22
  require 'serverspec/matchers/have_uid'
@@ -1,5 +1,13 @@
1
- RSpec::Matchers.define :have_entry do |attr|
1
+ RSpec::Matchers.define :have_entry do |entry|
2
2
  match do |subject|
3
- backend.check_routing_table(example, attr)
3
+ if subject.class.name == 'Serverspec::Type::Cron'
4
+ subject.has_entry?(@user, entry)
5
+ else
6
+ backend.check_routing_table(example, entry)
7
+ end
8
+ end
9
+ # For cron type
10
+ chain :with_user do |user|
11
+ @user = user
4
12
  end
5
13
  end
@@ -1,6 +1,10 @@
1
1
  RSpec::Matchers.define :return_exit_status do |status|
2
2
  match do |command|
3
- ret = backend.run_command(command)
4
- ret[:exit_status].to_i == status
3
+ if command.respond_to?(:return_exit_status?)
4
+ command.return_exit_status?(status)
5
+ else
6
+ ret = backend.run_command(command)
7
+ ret[:exit_status].to_i == status
8
+ end
5
9
  end
6
10
  end
@@ -1,10 +1,14 @@
1
1
  RSpec::Matchers.define :return_stderr do |content|
2
2
  match do |command|
3
- ret = backend.run_command(command)
4
- if content.instance_of?(Regexp)
5
- ret[:stderr] =~ content
3
+ if command.respond_to?(:return_stderr?)
4
+ command.return_stderr?(content)
6
5
  else
7
- ret[:stderr].strip == content
6
+ ret = backend.run_command(command)
7
+ if content.instance_of?(Regexp)
8
+ ret[:stderr] =~ content
9
+ else
10
+ ret[:stderr].strip == content
11
+ end
8
12
  end
9
13
  end
10
14
  end
@@ -1,10 +1,14 @@
1
1
  RSpec::Matchers.define :return_stdout do |content|
2
2
  match do |command|
3
- ret = backend.run_command(command)
4
- if content.instance_of?(Regexp)
5
- ret[:stdout] =~ content
3
+ if command.respond_to?(:return_stdout?)
4
+ command.return_stdout?(content)
6
5
  else
7
- ret[:stdout].strip == content
6
+ ret = backend.run_command(command)
7
+ if content.instance_of?(Regexp)
8
+ ret[:stdout] =~ content
9
+ else
10
+ ret[:stdout].strip == content
11
+ end
8
12
  end
9
13
  end
10
14
  end
@@ -1,7 +1,7 @@
1
1
  module Serverspec
2
2
  module Type
3
3
  class Base
4
- def initialize name
4
+ def initialize(name=nil)
5
5
  @name = name
6
6
  end
7
7
 
@@ -0,0 +1,31 @@
1
+ module Serverspec
2
+ module Type
3
+ class Command < Base
4
+ def return_stdout?(content)
5
+ ret = backend.run_command(@name)
6
+ if content.instance_of?(Regexp)
7
+ ret[:stdout] =~ content
8
+ else
9
+ ret[:stdout].strip == content
10
+ end
11
+ end
12
+
13
+ def return_stderr?(content)
14
+ ret = backend.run_command(@name)
15
+ # In ssh access with pty, stderr is merged to stdout
16
+ # See http://stackoverflow.com/questions/7937651/receiving-extended-data-with-ssh-using-twisted-conch-as-client
17
+ # So I use stdout instead of stderr
18
+ if content.instance_of?(Regexp)
19
+ ret[:stdout] =~ content
20
+ else
21
+ ret[:stdout].strip == content
22
+ end
23
+ end
24
+
25
+ def return_exit_status?(status)
26
+ ret = backend.run_command(@name)
27
+ ret[:exit_status].to_i == status
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,12 @@
1
+ module Serverspec
2
+ module Type
3
+ class Cron < Base
4
+ def has_entry?(user, entry)
5
+ backend.check_cron_entry(nil, user, entry)
6
+ end
7
+ def to_s
8
+ 'Cron'
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,3 +1,3 @@
1
1
  module Serverspec
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.2"
3
3
  end
data/serverspec.gemspec CHANGED
@@ -23,4 +23,6 @@ Gem::Specification.new do |spec|
23
23
  spec.add_runtime_dependency "highline"
24
24
  spec.add_development_dependency "bundler", "~> 1.3"
25
25
  spec.add_development_dependency "rake"
26
+ spec.add_development_dependency "guard-rspec"
27
+ spec.add_development_dependency "growl"
26
28
  end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ include Serverspec::Helper::Darwin
4
+
5
+ describe 'Serverspec command matchers of Darwin family' do
6
+ it_behaves_like 'support command return_stdout matcher', 'cat /etc/resolv.conf', 'localhost'
7
+ it_behaves_like 'support command return_stdout matcher with regexp', 'cat /etc/resolv.conf', /localhost/
8
+
9
+ it_behaves_like 'support command return_stderr matcher', 'cat /foo', 'cat: /foo: No such file or directory'
10
+ it_behaves_like 'support command return_stderr matcher with regexp', 'cat /foo', /No such file or directory/
11
+
12
+ it_behaves_like 'support command return_exit_status matcher', 'ls /tmp', 0
13
+ end
@@ -130,8 +130,15 @@ describe 'check_grouped' do
130
130
  end
131
131
 
132
132
  describe 'check_cron_entry' do
133
- subject { commands.check_cron_entry('root', '* * * * * /usr/local/bin/batch.sh') }
134
- it { should eq 'crontab -u root -l | grep -- \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ /usr/local/bin/batch.sh' }
133
+ context 'specify root user' do
134
+ subject { commands.check_cron_entry('root', '* * * * * /usr/local/bin/batch.sh') }
135
+ it { should eq 'crontab -u root -l | grep -- \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ /usr/local/bin/batch.sh' }
136
+ end
137
+
138
+ context 'no specified user' do
139
+ subject { commands.check_cron_entry(nil, '* * * * * /usr/local/bin/batch.sh') }
140
+ it { should eq 'crontab -l | grep -- \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ /usr/local/bin/batch.sh' }
141
+ end
135
142
  end
136
143
 
137
144
  describe 'check_link' do
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ include Serverspec::Helper::Darwin
4
+
5
+ describe 'Serverspec cron matchers of Darwin family' do
6
+ it_behaves_like 'support cron have_entry matcher', '* * * * * /usr/local/bin/batch.sh'
7
+ it_behaves_like 'support cron have_entry with user matcher', '* * * * * /usr/local/bin/batch.sh', 'root'
8
+ end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  include Serverspec::Helper::Darwin
4
4
 
5
- describe 'Serverspec service matchers of Darwin family' do
5
+ describe 'Serverspec file matchers of Darwin family' do
6
6
  it_behaves_like 'support file be_file matcher', '/etc/ssh/sshd_config'
7
7
  it_behaves_like 'support file be_directory matcher', '/etc/ssh'
8
8
  it_behaves_like 'support file contain matcher', '/etc/ssh/sshd_config', 'This is the sshd server system-wide configuration file'
@@ -2,6 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  include Serverspec::Helper::Darwin
4
4
 
5
- describe 'Serverspec package matchers of Darwin family' do
5
+ describe 'Serverspec port matchers of Darwin family' do
6
6
  it_behaves_like 'support port listening matcher', 80
7
7
  end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ include Serverspec::Helper::Debian
4
+
5
+ describe 'Serverspec command matchers of Debian family' do
6
+ it_behaves_like 'support command return_stdout matcher', 'cat /etc/resolv.conf', 'localhost'
7
+ it_behaves_like 'support command return_stdout matcher with regexp', 'cat /etc/resolv.conf', /localhost/
8
+
9
+ it_behaves_like 'support command return_stderr matcher', 'cat /foo', 'cat: /foo: No such file or directory'
10
+ it_behaves_like 'support command return_stderr matcher with regexp', 'cat /foo', /No such file or directory/
11
+
12
+ it_behaves_like 'support command return_exit_status matcher', 'ls /tmp', 0
13
+ end
@@ -142,8 +142,15 @@ describe 'check_grouped' do
142
142
  end
143
143
 
144
144
  describe 'check_cron_entry' do
145
- subject { commands.check_cron_entry('root', '* * * * * /usr/local/bin/batch.sh') }
146
- it { should eq 'crontab -u root -l | grep -- \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ /usr/local/bin/batch.sh' }
145
+ context 'specify root user' do
146
+ subject { commands.check_cron_entry('root', '* * * * * /usr/local/bin/batch.sh') }
147
+ it { should eq 'crontab -u root -l | grep -- \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ /usr/local/bin/batch.sh' }
148
+ end
149
+
150
+ context 'no specified user' do
151
+ subject { commands.check_cron_entry(nil, '* * * * * /usr/local/bin/batch.sh') }
152
+ it { should eq 'crontab -l | grep -- \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ /usr/local/bin/batch.sh' }
153
+ end
147
154
  end
148
155
 
149
156
  describe 'check_link' do
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ include Serverspec::Helper::Debian
4
+
5
+ describe 'Serverspec cron matchers of Debian family' do
6
+ it_behaves_like 'support cron have_entry matcher', '* * * * * /usr/local/bin/batch.sh'
7
+ it_behaves_like 'support cron have_entry with user matcher', '* * * * * /usr/local/bin/batch.sh', 'root'
8
+ end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  include Serverspec::Helper::Debian
4
4
 
5
- describe 'Serverspec service matchers of Debian family' do
5
+ describe 'Serverspec file matchers of Debian family' do
6
6
  it_behaves_like 'support file be_file matcher', '/etc/ssh/sshd_config'
7
7
  it_behaves_like 'support file be_directory matcher', '/etc/ssh'
8
8
  it_behaves_like 'support file contain matcher', '/etc/ssh/sshd_config', 'This is the sshd server system-wide configuration file'
@@ -2,6 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  include Serverspec::Helper::Debian
4
4
 
5
- describe 'Serverspec package matchers of Debian family' do
5
+ describe 'Serverspec port matchers of Debian family' do
6
6
  it_behaves_like 'support port listening matcher', 80
7
7
  end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ include Serverspec::Helper::Gentoo
4
+
5
+ describe 'Serverspec command matchers of Gentoo family' do
6
+ it_behaves_like 'support command return_stdout matcher', 'cat /etc/resolv.conf', 'localhost'
7
+ it_behaves_like 'support command return_stdout matcher with regexp', 'cat /etc/resolv.conf', /localhost/
8
+
9
+ it_behaves_like 'support command return_stderr matcher', 'cat /foo', 'cat: /foo: No such file or directory'
10
+ it_behaves_like 'support command return_stderr matcher with regexp', 'cat /foo', /No such file or directory/
11
+
12
+ it_behaves_like 'support command return_exit_status matcher', 'ls /tmp', 0
13
+ end
@@ -138,8 +138,15 @@ describe 'check_grouped' do
138
138
  end
139
139
 
140
140
  describe 'check_cron_entry' do
141
- subject { commands.check_cron_entry('root', '* * * * * /usr/local/bin/batch.sh') }
142
- it { should eq 'crontab -u root -l | grep -- \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ /usr/local/bin/batch.sh' }
141
+ context 'specify root user' do
142
+ subject { commands.check_cron_entry('root', '* * * * * /usr/local/bin/batch.sh') }
143
+ it { should eq 'crontab -u root -l | grep -- \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ /usr/local/bin/batch.sh' }
144
+ end
145
+
146
+ context 'no specified user' do
147
+ subject { commands.check_cron_entry(nil, '* * * * * /usr/local/bin/batch.sh') }
148
+ it { should eq 'crontab -l | grep -- \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ /usr/local/bin/batch.sh' }
149
+ end
143
150
  end
144
151
 
145
152
  describe 'check_link' do
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ include Serverspec::Helper::Gentoo
4
+
5
+ describe 'Serverspec cron matchers of Gentoo family' do
6
+ it_behaves_like 'support cron have_entry matcher', '* * * * * /usr/local/bin/batch.sh'
7
+ it_behaves_like 'support cron have_entry with user matcher', '* * * * * /usr/local/bin/batch.sh', 'root'
8
+ end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  include Serverspec::Helper::Gentoo
4
4
 
5
- describe 'Serverspec service matchers of Gentoo family' do
5
+ describe 'Serverspec file matchers of Gentoo family' do
6
6
  it_behaves_like 'support file be_file matcher', '/etc/ssh/sshd_config'
7
7
  it_behaves_like 'support file be_directory matcher', '/etc/ssh'
8
8
  it_behaves_like 'support file contain matcher', '/etc/ssh/sshd_config', 'This is the sshd server system-wide configuration file'
@@ -2,6 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  include Serverspec::Helper::Gentoo
4
4
 
5
- describe 'Serverspec package matchers of Gentoo family' do
5
+ describe 'Serverspec port matchers of Gentoo family' do
6
6
  it_behaves_like 'support port listening matcher', 80
7
7
  end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ include Serverspec::Helper::RedHat
4
+
5
+ describe 'Serverspec command matchers of Red Hat family' do
6
+ it_behaves_like 'support command return_stdout matcher', 'cat /etc/resolv.conf', 'localhost'
7
+ it_behaves_like 'support command return_stdout matcher with regexp', 'cat /etc/resolv.conf', /localhost/
8
+
9
+ it_behaves_like 'support command return_stderr matcher', 'cat /foo', 'cat: /foo: No such file or directory'
10
+ it_behaves_like 'support command return_stderr matcher with regexp', 'cat /foo', /No such file or directory/
11
+
12
+ it_behaves_like 'support command return_exit_status matcher', 'ls /tmp', 0
13
+ end
@@ -140,8 +140,15 @@ describe 'check_grouped' do
140
140
  end
141
141
 
142
142
  describe 'check_cron_entry' do
143
- subject { commands.check_cron_entry('root', '* * * * * /usr/local/bin/batch.sh') }
144
- it { should eq 'crontab -u root -l | grep -- \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ /usr/local/bin/batch.sh' }
143
+ context 'specify root user' do
144
+ subject { commands.check_cron_entry('root', '* * * * * /usr/local/bin/batch.sh') }
145
+ it { should eq 'crontab -u root -l | grep -- \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ /usr/local/bin/batch.sh' }
146
+ end
147
+
148
+ context 'no specified user' do
149
+ subject { commands.check_cron_entry(nil, '* * * * * /usr/local/bin/batch.sh') }
150
+ it { should eq 'crontab -l | grep -- \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ /usr/local/bin/batch.sh' }
151
+ end
145
152
  end
146
153
 
147
154
  describe 'check_link' do
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ include Serverspec::Helper::RedHat
4
+
5
+ describe 'Serverspec cron matchers of Red Hat family' do
6
+ it_behaves_like 'support cron have_entry matcher', '* * * * * /usr/local/bin/batch.sh'
7
+ it_behaves_like 'support cron have_entry with user matcher', '* * * * * /usr/local/bin/batch.sh', 'root'
8
+ end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  include Serverspec::Helper::RedHat
4
4
 
5
- describe 'Serverspec service matchers of Red Hat family' do
5
+ describe 'Serverspec file matchers of Red Hat family' do
6
6
  it_behaves_like 'support file be_file matcher', '/etc/ssh/sshd_config'
7
7
  it_behaves_like 'support file be_directory matcher', '/etc/ssh'
8
8
  it_behaves_like 'support file contain matcher', '/etc/ssh/sshd_config', 'This is the sshd server system-wide configuration file'
@@ -2,6 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  include Serverspec::Helper::RedHat
4
4
 
5
- describe 'Serverspec package matchers of Red Hat family' do
5
+ describe 'Serverspec port matchers of Red Hat family' do
6
6
  it_behaves_like 'support port listening matcher', 80
7
7
  end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ include Serverspec::Helper::Solaris
4
+
5
+ describe 'Serverspec command matchers of Solaris family' do
6
+ it_behaves_like 'support command return_stdout matcher', 'cat /etc/resolv.conf', 'localhost'
7
+ it_behaves_like 'support command return_stdout matcher with regexp', 'cat /etc/resolv.conf', /localhost/
8
+
9
+ it_behaves_like 'support command return_stderr matcher', 'cat /foo', 'cat: /foo: No such file or directory'
10
+ it_behaves_like 'support command return_stderr matcher with regexp', 'cat /foo', /No such file or directory/
11
+
12
+ it_behaves_like 'support command return_exit_status matcher', 'ls /tmp', 0
13
+ end
@@ -140,8 +140,15 @@ describe 'check_grouped' do
140
140
  end
141
141
 
142
142
  describe 'check_cron_entry' do
143
- subject { commands.check_cron_entry('root', '* * * * * /usr/local/bin/batch.sh') }
144
- it { should eq 'crontab -l root | grep -- \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ /usr/local/bin/batch.sh' }
143
+ context 'specify root user' do
144
+ subject { commands.check_cron_entry('root', '* * * * * /usr/local/bin/batch.sh') }
145
+ it { should eq 'crontab -l root | grep -- \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ /usr/local/bin/batch.sh' }
146
+ end
147
+
148
+ context 'no specified user' do
149
+ subject { commands.check_cron_entry(nil, '* * * * * /usr/local/bin/batch.sh') }
150
+ it { should eq 'crontab -l | grep -- \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ /usr/local/bin/batch.sh' }
151
+ end
145
152
  end
146
153
 
147
154
  describe 'check_link' do
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ include Serverspec::Helper::Solaris
4
+
5
+ describe 'Serverspec cron matchers of Solaris family' do
6
+ it_behaves_like 'support cron have_entry matcher', '* * * * * /usr/local/bin/batch.sh'
7
+ it_behaves_like 'support cron have_entry with user matcher', '* * * * * /usr/local/bin/batch.sh', 'root'
8
+ end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  include Serverspec::Helper::Solaris
4
4
 
5
- describe 'Serverspec service matchers of Solaris family' do
5
+ describe 'Serverspec file matchers of Solaris family' do
6
6
  it_behaves_like 'support file be_file matcher', '/etc/ssh/sshd_config'
7
7
  it_behaves_like 'support file be_directory matcher', '/etc/ssh'
8
8
  it_behaves_like 'support file contain matcher', '/etc/ssh/sshd_config', 'This is the sshd server system-wide configuration file'
@@ -2,6 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  include Serverspec::Helper::Solaris
4
4
 
5
- describe 'Serverspec package matchers of Solaris family' do
5
+ describe 'Serverspec port matchers of Solaris family' do
6
6
  it_behaves_like 'support port listening matcher', 80
7
7
  end
@@ -0,0 +1,108 @@
1
+ shared_examples_for 'support command return_stdout matcher' do |name, content|
2
+ describe 'return_stdout' do
3
+ describe command(name) do
4
+ before :all do
5
+ RSpec.configure do |c|
6
+ c.stdout = "#{content}\r\n"
7
+ end
8
+ end
9
+ it { should return_stdout(content) }
10
+ end
11
+
12
+ describe command(name) do
13
+ before :all do
14
+ RSpec.configure do |c|
15
+ c.stdout = "foo#{content}bar\r\n"
16
+ end
17
+ end
18
+ it { should_not return_stdout(content) }
19
+ end
20
+
21
+
22
+ describe command('invalid-command') do
23
+ it { should_not return_stdout(content) }
24
+ end
25
+ end
26
+ end
27
+
28
+ shared_examples_for 'support command return_stdout matcher with regexp' do |name, content|
29
+ describe 'return_stdout' do
30
+ describe command(name) do
31
+ before :all do
32
+ RSpec.configure do |c|
33
+ c.stdout = "foo#{content}bar\r\n"
34
+ end
35
+ end
36
+ it { should return_stdout(content) }
37
+ end
38
+
39
+ describe command(name) do
40
+ before :all do
41
+ RSpec.configure do |c|
42
+ c.stdout = "foobar\r\n"
43
+ end
44
+ end
45
+ it { should_not return_stdout(content) }
46
+ end
47
+
48
+ describe command('invalid-command') do
49
+ it { should_not return_stdout(content) }
50
+ end
51
+ end
52
+ end
53
+
54
+ shared_examples_for 'support command return_stderr matcher' do |name, content|
55
+ describe 'return_stderr' do
56
+ describe command(name) do
57
+ before :all do
58
+ RSpec.configure do |c|
59
+ c.stdout = "#{content}\r\n"
60
+ end
61
+ end
62
+ it { should return_stderr(content) }
63
+ end
64
+
65
+ describe command(name) do
66
+ before :all do
67
+ RSpec.configure do |c|
68
+ c.stdout = "No such file or directory\r\n"
69
+ end
70
+ end
71
+ it { should_not return_stderr(content) }
72
+ end
73
+ end
74
+ end
75
+
76
+ shared_examples_for 'support command return_stderr matcher with regexp' do |name, content|
77
+ describe 'return_stderr' do
78
+ describe command(name) do
79
+ before :all do
80
+ RSpec.configure do |c|
81
+ c.stdout = "cat: /foo: No such file or directory\r\n"
82
+ end
83
+ end
84
+ it { should return_stdout(content) }
85
+ end
86
+
87
+ describe command(name) do
88
+ before :all do
89
+ RSpec.configure do |c|
90
+ c.stdout = "foobar\r\n"
91
+ end
92
+ end
93
+ it { should_not return_stdout(content) }
94
+ end
95
+ end
96
+ end
97
+
98
+ shared_examples_for 'support command return_exit_status matcher' do |name, status|
99
+ describe 'return_exit_status' do
100
+ describe command(name) do
101
+ it { should return_exit_status(status) }
102
+ end
103
+
104
+ describe command('invalid-command') do
105
+ it { should_not return_exit_status(status) }
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,23 @@
1
+ shared_examples_for 'support cron have_entry matcher' do |entry|
2
+ describe 'have_cron_entry' do
3
+ describe cron do
4
+ it { should have_cron_entry entry }
5
+ end
6
+
7
+ describe cron do
8
+ it { should_not have_cron_entry 'invalid entry' }
9
+ end
10
+ end
11
+ end
12
+
13
+ shared_examples_for 'support cron have_entry with user matcher' do |entry, user|
14
+ describe 'have_cron_entry' do
15
+ describe cron do
16
+ it { should have_cron_entry(entry).with_user(user) }
17
+ end
18
+
19
+ describe cron do
20
+ it { should_not have_cron_entry('invalid entry').with_user(user) }
21
+ end
22
+ end
23
+ end
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.1
4
+ version: 0.4.2
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-05-18 00:00:00.000000000 Z
12
+ date: 2013-05-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: net-ssh
@@ -91,6 +91,38 @@ dependencies:
91
91
  - - ! '>='
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: guard-rspec
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: growl
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
94
126
  description: RSpec tests for your servers provisioned by Puppet, Chef or anything
95
127
  else
96
128
  email:
@@ -103,6 +135,7 @@ files:
103
135
  - .gitignore
104
136
  - .travis.yml
105
137
  - Gemfile
138
+ - Guardfile
106
139
  - LICENSE.txt
107
140
  - README.md
108
141
  - Rakefile
@@ -145,7 +178,6 @@ files:
145
178
  - lib/serverspec/matchers/be_group.rb
146
179
  - lib/serverspec/matchers/be_grouped_into.rb
147
180
  - lib/serverspec/matchers/be_installed.rb
148
- - lib/serverspec/matchers/be_installed_by_gem.rb
149
181
  - lib/serverspec/matchers/be_linked_to.rb
150
182
  - lib/serverspec/matchers/be_listening.rb
151
183
  - lib/serverspec/matchers/be_mode.rb
@@ -181,44 +213,58 @@ files:
181
213
  - lib/serverspec/setup.rb
182
214
  - lib/serverspec/subject.rb
183
215
  - lib/serverspec/type/base.rb
216
+ - lib/serverspec/type/command.rb
217
+ - lib/serverspec/type/cron.rb
184
218
  - lib/serverspec/type/file.rb
185
219
  - lib/serverspec/type/package.rb
186
220
  - lib/serverspec/type/port.rb
187
221
  - lib/serverspec/type/service.rb
188
222
  - lib/serverspec/version.rb
189
223
  - serverspec.gemspec
224
+ - spec/darwin/command_spec.rb
190
225
  - spec/darwin/commands_spec.rb
226
+ - spec/darwin/cron_spec.rb
191
227
  - spec/darwin/file_spec.rb
192
228
  - spec/darwin/matchers_spec.rb
193
229
  - spec/darwin/package_spec.rb
194
230
  - spec/darwin/port_spec.rb
195
231
  - spec/darwin/service_spec.rb
232
+ - spec/debian/command_spec.rb
196
233
  - spec/debian/commands_spec.rb
234
+ - spec/debian/cron_spec.rb
197
235
  - spec/debian/file_spec.rb
198
236
  - spec/debian/matchers_spec.rb
199
237
  - spec/debian/package_spec.rb
200
238
  - spec/debian/port_spec.rb
201
239
  - spec/debian/service_spec.rb
240
+ - spec/gentoo/command_spec.rb
202
241
  - spec/gentoo/commands_spec.rb
242
+ - spec/gentoo/cron_spec.rb
203
243
  - spec/gentoo/file_spec.rb
204
244
  - spec/gentoo/matchers_spec.rb
205
245
  - spec/gentoo/package_spec.rb
206
246
  - spec/gentoo/port_spec.rb
207
247
  - spec/gentoo/service_spec.rb
208
248
  - spec/helpers/attributes_spec.rb
249
+ - spec/redhat/command_spec.rb
209
250
  - spec/redhat/commands_spec.rb
251
+ - spec/redhat/cron_spec.rb
210
252
  - spec/redhat/file_spec.rb
211
253
  - spec/redhat/matchers_spec.rb
212
254
  - spec/redhat/package_spec.rb
213
255
  - spec/redhat/port_spec.rb
214
256
  - spec/redhat/service_spec.rb
257
+ - spec/solaris/command_spec.rb
215
258
  - spec/solaris/commands_spec.rb
259
+ - spec/solaris/cron_spec.rb
216
260
  - spec/solaris/file_spec.rb
217
261
  - spec/solaris/matchers_spec.rb
218
262
  - spec/solaris/package_spec.rb
219
263
  - spec/solaris/port_spec.rb
220
264
  - spec/solaris/service_spec.rb
221
265
  - spec/spec_helper.rb
266
+ - spec/support/shared_command_examples.rb
267
+ - spec/support/shared_cron_examples.rb
222
268
  - spec/support/shared_file_examples.rb
223
269
  - spec/support/shared_matcher_examples.rb
224
270
  - spec/support/shared_package_examples.rb
@@ -250,38 +296,50 @@ signing_key:
250
296
  specification_version: 3
251
297
  summary: RSpec tests for your servers provisioned by Puppet, Chef or anything else
252
298
  test_files:
299
+ - spec/darwin/command_spec.rb
253
300
  - spec/darwin/commands_spec.rb
301
+ - spec/darwin/cron_spec.rb
254
302
  - spec/darwin/file_spec.rb
255
303
  - spec/darwin/matchers_spec.rb
256
304
  - spec/darwin/package_spec.rb
257
305
  - spec/darwin/port_spec.rb
258
306
  - spec/darwin/service_spec.rb
307
+ - spec/debian/command_spec.rb
259
308
  - spec/debian/commands_spec.rb
309
+ - spec/debian/cron_spec.rb
260
310
  - spec/debian/file_spec.rb
261
311
  - spec/debian/matchers_spec.rb
262
312
  - spec/debian/package_spec.rb
263
313
  - spec/debian/port_spec.rb
264
314
  - spec/debian/service_spec.rb
315
+ - spec/gentoo/command_spec.rb
265
316
  - spec/gentoo/commands_spec.rb
317
+ - spec/gentoo/cron_spec.rb
266
318
  - spec/gentoo/file_spec.rb
267
319
  - spec/gentoo/matchers_spec.rb
268
320
  - spec/gentoo/package_spec.rb
269
321
  - spec/gentoo/port_spec.rb
270
322
  - spec/gentoo/service_spec.rb
271
323
  - spec/helpers/attributes_spec.rb
324
+ - spec/redhat/command_spec.rb
272
325
  - spec/redhat/commands_spec.rb
326
+ - spec/redhat/cron_spec.rb
273
327
  - spec/redhat/file_spec.rb
274
328
  - spec/redhat/matchers_spec.rb
275
329
  - spec/redhat/package_spec.rb
276
330
  - spec/redhat/port_spec.rb
277
331
  - spec/redhat/service_spec.rb
332
+ - spec/solaris/command_spec.rb
278
333
  - spec/solaris/commands_spec.rb
334
+ - spec/solaris/cron_spec.rb
279
335
  - spec/solaris/file_spec.rb
280
336
  - spec/solaris/matchers_spec.rb
281
337
  - spec/solaris/package_spec.rb
282
338
  - spec/solaris/port_spec.rb
283
339
  - spec/solaris/service_spec.rb
284
340
  - spec/spec_helper.rb
341
+ - spec/support/shared_command_examples.rb
342
+ - spec/support/shared_cron_examples.rb
285
343
  - spec/support/shared_file_examples.rb
286
344
  - spec/support/shared_matcher_examples.rb
287
345
  - spec/support/shared_package_examples.rb
@@ -1,16 +0,0 @@
1
- RSpec::Matchers.define :be_installed_by_gem do
2
- match do |name|
3
- puts <<EOF
4
-
5
- ***************************************************
6
- The matcher be_isntalled_by_gem will be depricated.
7
- Please use be_installed.by('gem') instead.
8
- ***************************************************
9
-
10
- EOF
11
- backend.check_installed_by_gem(example, name, @version)
12
- end
13
- chain :with_version do |version|
14
- @version = version
15
- end
16
- end