serverspec 0.6.6 → 0.6.7

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.
@@ -6,7 +6,7 @@ module Serverspec
6
6
  def initialize
7
7
  @attr = {}
8
8
  end
9
- def attributes attr=nil
9
+ def attributes(attr=nil)
10
10
  if ! attr.nil?
11
11
  @attr = attr
12
12
  end
@@ -5,24 +5,32 @@ module Serverspec
5
5
  class Base
6
6
  class NotImplementedError < Exception; end
7
7
 
8
- def escape target
8
+ def escape(target)
9
9
  Shellwords.shellescape(target.to_s())
10
10
  end
11
11
 
12
- def check_enabled service
12
+ def check_enabled(service)
13
13
  raise NotImplementedError.new
14
14
  end
15
15
 
16
- def check_mounted path
16
+ def check_yumrepo(repository)
17
+ raise NotImplementedError.new
18
+ end
19
+
20
+ def check_yumrepo_enabled(repository)
21
+ raise NotImplementedError.new
22
+ end
23
+
24
+ def check_mounted(path)
17
25
  regexp = "on #{path}"
18
26
  "mount | grep -w -- #{escape(regexp)}"
19
27
  end
20
28
 
21
- def check_routing_table destination
29
+ def check_routing_table(destination)
22
30
  "ip route | grep -E '^#{destination} |^default '"
23
31
  end
24
32
 
25
- def check_reachable host, port, proto, timeout
33
+ def check_reachable(host, port, proto, timeout)
26
34
  if port.nil?
27
35
  "ping -n #{escape(host)} -w #{escape(timeout)} -c 2"
28
36
  else
@@ -30,7 +38,7 @@ module Serverspec
30
38
  end
31
39
  end
32
40
 
33
- def check_resolvable name, type
41
+ def check_resolvable(name, type)
34
42
  if type == "dns"
35
43
  "nslookup -timeout=1 #{escape(name)}"
36
44
  elsif type == "hosts"
@@ -40,78 +48,78 @@ module Serverspec
40
48
  end
41
49
  end
42
50
 
43
- def check_file file
51
+ def check_file(file)
44
52
  "test -f #{escape(file)}"
45
53
  end
46
54
 
47
- def check_socket file
55
+ def check_socket(file)
48
56
  "test -S #{escape(file)}"
49
57
  end
50
58
 
51
- def check_directory directory
59
+ def check_directory(directory)
52
60
  "test -d #{escape(directory)}"
53
61
  end
54
62
 
55
- def check_user user
63
+ def check_user(user)
56
64
  "id #{escape(user)}"
57
65
  end
58
66
 
59
- def check_group group
67
+ def check_group(group)
60
68
  "getent group | grep -wq -- #{escape(group)}"
61
69
  end
62
70
 
63
- def check_installed package
71
+ def check_installed(package)
64
72
  raise NotImplementedError.new
65
73
  end
66
74
 
67
- def check_listening port
75
+ def check_listening(port)
68
76
  regexp = ":#{port} "
69
77
  "netstat -tunl | grep -- #{escape(regexp)}"
70
78
  end
71
79
 
72
- def check_running service
80
+ def check_running(service)
73
81
  "service #{escape(service)} status"
74
82
  end
75
83
 
76
- def check_running_under_supervisor service
84
+ def check_running_under_supervisor(service)
77
85
  "supervisorctl status #{escape(service)}"
78
86
  end
79
87
 
80
- def check_process process
88
+ def check_process(process)
81
89
  "ps aux | grep -w -- #{escape(process)} | grep -qv grep"
82
90
  end
83
91
 
84
- def check_file_contain file, expected_pattern
92
+ def check_file_contain(file, expected_pattern)
85
93
  "grep -q -- #{escape(expected_pattern)} #{escape(file)}"
86
94
  end
87
95
 
88
- def check_file_md5checksum file, expected
96
+ def check_file_md5checksum(file, expected)
89
97
  "md5sum #{escape(file)} | grep -iw -- ^#{escape(expected)}"
90
98
  end
91
99
 
92
- def check_file_contain_within file, expected_pattern, from=nil, to=nil
100
+ def check_file_contain_within(file, expected_pattern, from=nil, to=nil)
93
101
  from ||= '1'
94
102
  to ||= '$'
95
103
  checker = check_file_contain("-", expected_pattern)
96
104
  "sed -n #{escape(from)},#{escape(to)}p #{escape(file)} | #{checker}"
97
105
  end
98
106
 
99
- def check_mode file, mode
107
+ def check_mode(file, mode)
100
108
  regexp = "^#{mode}$"
101
109
  "stat -c %a #{escape(file)} | grep -- #{escape(regexp)}"
102
110
  end
103
111
 
104
- def check_owner file, owner
112
+ def check_owner(file, owner)
105
113
  regexp = "^#{owner}$"
106
114
  "stat -c %U #{escape(file)} | grep -- #{escape(regexp)}"
107
115
  end
108
116
 
109
- def check_grouped file, group
117
+ def check_grouped(file, group)
110
118
  regexp = "^#{group}$"
111
119
  "stat -c %G #{escape(file)} | grep -- #{escape(regexp)}"
112
120
  end
113
121
 
114
- def check_cron_entry user, entry
122
+ def check_cron_entry(user, entry)
115
123
  entry_escaped = entry.gsub(/\*/, '\\*')
116
124
  if user.nil?
117
125
  "crontab -l | grep -- #{escape(entry_escaped)}"
@@ -120,11 +128,11 @@ module Serverspec
120
128
  end
121
129
  end
122
130
 
123
- def check_link link, target
131
+ def check_link(link, target)
124
132
  "stat -c %N #{escape(link)} | grep -- #{escape(target)}"
125
133
  end
126
134
 
127
- def check_installed_by_gem name, version=nil
135
+ def check_installed_by_gem(name, version=nil)
128
136
  cmd = "gem list --local | grep -w -- ^#{escape(name)}"
129
137
  if ! version.nil?
130
138
  cmd = "#{cmd} | grep -w -- #{escape(version)}"
@@ -132,13 +140,13 @@ module Serverspec
132
140
  cmd
133
141
  end
134
142
 
135
- def check_installed_by_npm name, version=nil
143
+ def check_installed_by_npm(name, version=nil)
136
144
  cmd = "npm ls #{escape(name)} -g"
137
145
  cmd = "#{cmd} | grep -w -- #{escape(version)}" unless version.nil?
138
146
  cmd
139
147
  end
140
148
 
141
- def check_installed_by_pecl name, version=nil
149
+ def check_installed_by_pecl(name, version=nil)
142
150
  cmd = "pecl list | grep -w -- ^#{escape(name)}"
143
151
  if ! version.nil?
144
152
  cmd = "#{cmd} | grep -w -- #{escape(version)}"
@@ -146,38 +154,38 @@ module Serverspec
146
154
  cmd
147
155
  end
148
156
 
149
- def check_belonging_group user, group
157
+ def check_belonging_group(user, group)
150
158
  "id #{escape(user)} | awk '{print $3}' | grep -- #{escape(group)}"
151
159
  end
152
160
 
153
- def check_gid group, gid
161
+ def check_gid(group, gid)
154
162
  regexp = "^#{group}"
155
163
  "getent group | grep -w -- #{escape(regexp)} | cut -f 3 -d ':' | grep -w -- #{escape(gid)}"
156
164
  end
157
165
 
158
- def check_uid user, uid
166
+ def check_uid(user, uid)
159
167
  regexp = "^uid=#{uid}("
160
168
  "id #{escape(user)} | grep -- #{escape(regexp)}"
161
169
  end
162
170
 
163
- def check_login_shell user, path_to_shell
171
+ def check_login_shell(user, path_to_shell)
164
172
  "getent passwd #{escape(user)} | cut -f 7 -d ':' | grep -w -- #{escape(path_to_shell)}"
165
173
  end
166
174
 
167
- def check_home_directory user, path_to_home
175
+ def check_home_directory(user, path_to_home)
168
176
  "getent passwd #{escape(user)} | cut -f 6 -d ':' | grep -w -- #{escape(path_to_home)}"
169
177
  end
170
178
 
171
- def check_authorized_key user, key
179
+ def check_authorized_key(user, key)
172
180
  key.sub!(/\s+\S*$/, '') if key.match(/^\S+\s+\S+\s+\S*$/)
173
181
  "grep -w -- #{escape(key)} ~#{escape(user)}/.ssh/authorized_keys"
174
182
  end
175
183
 
176
- def check_iptables_rule rule, table=nil, chain=nil
184
+ def check_iptables_rule(rule, table=nil, chain=nil)
177
185
  raise NotImplementedError.new
178
186
  end
179
187
 
180
- def check_zfs zfs, property=nil, value=nil
188
+ def check_zfs(zfs, property=nil, value=nil)
181
189
  raise NotImplementedError.new
182
190
  end
183
191
 
@@ -185,31 +193,31 @@ module Serverspec
185
193
  "stat -c %a #{escape(file)}"
186
194
  end
187
195
 
188
- def check_ipfilter_rule rule
196
+ def check_ipfilter_rule(rule)
189
197
  raise NotImplementedError.new
190
198
  end
191
199
 
192
- def check_ipnat_rule rule
200
+ def check_ipnat_rule(rule)
193
201
  raise NotImplementedError.new
194
202
  end
195
203
 
196
- def check_svcprop svc, property, value
204
+ def check_svcprop(svc, property, value)
197
205
  raise NotImplementedError.new
198
206
  end
199
207
 
200
- def check_svcprops svc, property
208
+ def check_svcprops(svc, property)
201
209
  raise NotImplementedError.new
202
210
  end
203
211
 
204
- def check_selinux mode
212
+ def check_selinux(mode)
205
213
  raise NotImplementedError.new
206
214
  end
207
215
 
208
- def check_access_by_user file, user, access
216
+ def check_access_by_user(file, user, access)
209
217
  raise NotImplementedError.new
210
218
  end
211
219
 
212
- def check_kernel_module_loaded name
220
+ def check_kernel_module_loaded(name)
213
221
  raise NotImplementedError.new
214
222
  end
215
223
  end
@@ -3,23 +3,21 @@ require 'shellwords'
3
3
  module Serverspec
4
4
  module Commands
5
5
  class Darwin < Base
6
- class NotImplementedError < Exception; end
7
-
8
- def check_file_md5checksum file, expected
6
+ def check_file_md5checksum(file, expected)
9
7
  "openssl md5 #{escape(file)} | cut -d'=' -f2 | cut -c 2- | grep -E ^#{escape(expected)}$"
10
8
  end
11
9
 
12
- def check_mode file, mode
10
+ def check_mode(file, mode)
13
11
  regexp = "^#{mode}$"
14
12
  "stat -f%Lp #{escape(file)} | grep -- #{escape(regexp)}"
15
13
  end
16
14
 
17
- def check_owner file, owner
15
+ def check_owner(file, owner)
18
16
  regexp = "^#{owner}$"
19
17
  "stat -f %Su #{escape(file)} | grep -- #{escape(regexp)}"
20
18
  end
21
19
 
22
- def check_grouped file, group
20
+ def check_grouped(file, group)
23
21
  regexp = "^#{group}$"
24
22
  "stat -f %Sg #{escape(file)} | grep -- #{escape(regexp)}"
25
23
  end
@@ -28,7 +26,7 @@ module Serverspec
28
26
  "stat -f%Lp #{escape(file)}"
29
27
  end
30
28
 
31
- def check_access_by_user file, user, access
29
+ def check_access_by_user(file, user, access)
32
30
  "sudo -u #{user} -s /bin/test -#{access} #{file}"
33
31
  end
34
32
  end
@@ -1,17 +1,17 @@
1
1
  module Serverspec
2
2
  module Commands
3
3
  class Debian < Linux
4
- def check_enabled service
4
+ def check_enabled(service)
5
5
  # Until everything uses Upstart, this needs an OR.
6
6
  "ls /etc/rc3.d/ | grep -- #{escape(service)} || grep 'start on' /etc/init/#{escape(service)}.conf"
7
7
  end
8
8
 
9
- def check_installed package
9
+ def check_installed(package)
10
10
  escaped_package = escape(package)
11
11
  "dpkg -s #{escaped_package} && ! dpkg -s #{escaped_package} | grep -E '^Status: .+ not-installed$'"
12
12
  end
13
13
 
14
- def check_running service
14
+ def check_running(service)
15
15
  # This is compatible with Debian >Jaunty and Ubuntu derivatives
16
16
  "service #{escape(service)} status | grep 'running'"
17
17
  end
@@ -1,16 +1,16 @@
1
1
  module Serverspec
2
2
  module Commands
3
3
  class Gentoo < Linux
4
- def check_enabled service
4
+ def check_enabled(service)
5
5
  regexp = "^\\s*#{service}\\s*|\\s*\\(boot\\|default\\)"
6
6
  "rc-update show | grep -- #{escape(regexp)}"
7
7
  end
8
8
 
9
- def check_installed package
9
+ def check_installed(package)
10
10
  "eix #{escape(package)} --installed"
11
11
  end
12
12
 
13
- def check_running service
13
+ def check_running(service)
14
14
  "/etc/init.d/#{escape(service)} status"
15
15
  end
16
16
  end
@@ -3,13 +3,11 @@ require 'shellwords'
3
3
  module Serverspec
4
4
  module Commands
5
5
  class Linux < Base
6
- class NotImplementedError < Exception; end
7
-
8
- def check_access_by_user file, user, access
6
+ def check_access_by_user(file, user, access)
9
7
  "su -s sh -c \"test -#{access} #{file}\" #{user}"
10
8
  end
11
9
 
12
- def check_iptables_rule rule, table=nil, chain=nil
10
+ def check_iptables_rule(rule, table=nil, chain=nil)
13
11
  cmd = "iptables"
14
12
  cmd += " -t #{escape(table)}" if table
15
13
  cmd += " -S"
@@ -18,11 +16,11 @@ module Serverspec
18
16
  cmd
19
17
  end
20
18
 
21
- def check_selinux mode
19
+ def check_selinux(mode)
22
20
  "getenforce | grep -i -- #{escape(mode)} && grep -i -- ^SELINUX=#{escape(mode)}$ /etc/selinux/config"
23
21
  end
24
22
 
25
- def check_kernel_module_loaded name
23
+ def check_kernel_module_loaded(name)
26
24
  "lsmod | grep ^#{name}"
27
25
  end
28
26
  end
@@ -1,16 +1,24 @@
1
1
  module Serverspec
2
2
  module Commands
3
3
  class RedHat < Linux
4
- def check_access_by_user file, user, access
4
+ def check_access_by_user(file, user, access)
5
5
  # Redhat-specific
6
6
  "runuser -s sh -c \"test -#{access} #{file}\" #{user}"
7
7
  end
8
8
 
9
- def check_enabled service
9
+ def check_enabled(service)
10
10
  "chkconfig --list #{escape(service)} | grep 3:on"
11
11
  end
12
12
 
13
- def check_installed package
13
+ def check_yumrepo(repository)
14
+ "yum repolist -C | grep ^#{escape(repository)}"
15
+ end
16
+
17
+ def check_yumrepo_enabled(repository)
18
+ "yum repolist all -C | grep ^#{escape(repository)} | grep enabled"
19
+ end
20
+
21
+ def check_installed(package)
14
22
  "rpm -q #{escape(package)}"
15
23
  end
16
24
  end
@@ -1,24 +1,24 @@
1
1
  module Serverspec
2
2
  module Commands
3
3
  class Solaris < Base
4
- def check_enabled service
4
+ def check_enabled(service)
5
5
  "svcs -l #{escape(service)} 2> /dev/null | grep 'enabled true'"
6
6
  end
7
7
 
8
- def check_installed package
8
+ def check_installed(package)
9
9
  "pkg list -H #{escape(package)} 2> /dev/null"
10
10
  end
11
11
 
12
- def check_listening port
12
+ def check_listening(port)
13
13
  regexp = "\.#{port} "
14
14
  "netstat -an 2> /dev/null | egrep 'LISTEN|Idle' | grep -- #{escape(regexp)}"
15
15
  end
16
16
 
17
- def check_running service
17
+ def check_running(service)
18
18
  "svcs -l #{escape(service)} status 2> /dev/null |grep 'state online'"
19
19
  end
20
20
 
21
- def check_cron_entry user, entry
21
+ def check_cron_entry(user, entry)
22
22
  entry_escaped = entry.gsub(/\*/, '\\*')
23
23
  if user.nil?
24
24
  "crontab -l | grep -- #{escape(entry_escaped)}"
@@ -27,7 +27,7 @@ module Serverspec
27
27
  end
28
28
  end
29
29
 
30
- def check_zfs zfs, property=nil
30
+ def check_zfs(zfs, property=nil)
31
31
  if property.nil?
32
32
  "zfs list -H #{escape(zfs)}"
33
33
  else
@@ -40,21 +40,21 @@ module Serverspec
40
40
  end
41
41
  end
42
42
 
43
- def check_ipfilter_rule rule
43
+ def check_ipfilter_rule(rule)
44
44
  "ipfstat -io 2> /dev/null | grep -- #{escape(rule)}"
45
45
  end
46
46
 
47
- def check_ipnat_rule rule
47
+ def check_ipnat_rule(rule)
48
48
  regexp = "^#{rule}$"
49
49
  "ipnat -l 2> /dev/null | grep -- #{escape(regexp)}"
50
50
  end
51
51
 
52
- def check_svcprop svc, property, value
52
+ def check_svcprop(svc, property, value)
53
53
  regexp = "^#{value}$"
54
54
  "svcprop -p #{escape(property)} #{escape(svc)} | grep -- #{escape(regexp)}"
55
55
  end
56
56
 
57
- def check_svcprops svc, property
57
+ def check_svcprops(svc, property)
58
58
  commands = []
59
59
  property.sort.each do |key, value|
60
60
  regexp = "^#{value}$"
@@ -63,31 +63,31 @@ module Serverspec
63
63
  commands.join(' && ')
64
64
  end
65
65
 
66
- def check_file_contain_within file, expected_pattern, from=nil, to=nil
66
+ def check_file_contain_within(file, expected_pattern, from=nil, to=nil)
67
67
  from ||= '1'
68
68
  to ||= '$'
69
69
  checker = check_file_contain("/dev/stdin", expected_pattern)
70
70
  "sed -n #{escape(from)},#{escape(to)}p #{escape(file)} | #{checker}"
71
71
  end
72
72
 
73
- def check_belonging_group user, group
73
+ def check_belonging_group(user, group)
74
74
  "id -Gn #{escape(user)} | grep -- #{escape(group)}"
75
75
  end
76
76
 
77
- def check_gid group, gid
77
+ def check_gid(group, gid)
78
78
  regexp = "^#{group}:"
79
79
  "getent group | grep -- #{escape(regexp)} | cut -f 3 -d ':' | grep -w -- #{escape(gid)}"
80
80
  end
81
81
 
82
- def check_home_directory user, path_to_home
82
+ def check_home_directory(user, path_to_home)
83
83
  "getent passwd #{escape(user)} | cut -f 6 -d ':' | grep -w -- #{escape(path_to_home)}"
84
84
  end
85
85
 
86
- def check_login_shell user, path_to_shell
86
+ def check_login_shell(user, path_to_shell)
87
87
  "getent passwd #{escape(user)} | cut -f 7 -d ':' | grep -w -- #{escape(path_to_shell)}"
88
88
  end
89
89
 
90
- def check_access_by_user file, user, access
90
+ def check_access_by_user(file, user, access)
91
91
  # http://docs.oracle.com/cd/E23823_01/html/816-5166/su-1m.html
92
92
  ## No need for login shell as it seems that behavior as superuser is favorable for us, but needs
93
93
  ## to be better tested under real solaris env
@@ -2,7 +2,7 @@ module Serverspec
2
2
  module Helper
3
3
  module Type
4
4
  types = %w(
5
- base service package port file cron command linux_kernel_parameter iptables host
5
+ base yumrepo service package port file cron command linux_kernel_parameter iptables host
6
6
  routing_table default_gateway selinux user group zfs ipnat ipfilter kernel_module
7
7
  )
8
8
 
@@ -1,6 +1,6 @@
1
1
  module Serverspec
2
2
  class Subject
3
- def value v=nil
3
+ def value(v=nil)
4
4
  if v.nil?
5
5
  @value
6
6
  else
@@ -5,7 +5,7 @@ module Serverspec
5
5
  backend.check_enabled(@name)
6
6
  end
7
7
 
8
- def running? under
8
+ def running?(under)
9
9
  if under
10
10
  check_method = "check_running_under_#{under}".to_sym
11
11
 
@@ -0,0 +1,13 @@
1
+ module Serverspec
2
+ module Type
3
+ class Yumrepo < Base
4
+ def exists?
5
+ backend.check_yumrepo(@name)
6
+ end
7
+
8
+ def enabled?
9
+ backend.check_yumrepo_enabled(@name)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module Serverspec
2
- VERSION = "0.6.6"
2
+ VERSION = "0.6.7"
3
3
  end
data/lib/serverspec.rb CHANGED
@@ -68,8 +68,9 @@ module RSpec
68
68
  exception_class_name = exception_class_name_for(exception)
69
69
  output.puts "#{long_padding}#{failure_color("Failure/Error:")} #{failure_color(read_failed_line(exception, example).strip)}"
70
70
  output.puts "#{long_padding}#{failure_color(exception_class_name)}: #{failure_color(exception.message)}" unless exception_class_name =~ /RSpec/
71
- output.puts "#{long_padding} #{failure_color(example.metadata[:command])}"
71
+ output.puts "#{long_padding} #{failure_color(example.metadata[:command])}" if example.metadata[:command]
72
72
  output.puts "#{long_padding} #{failure_color(example.metadata[:stdout])}" if example.metadata[:stdout] != ''
73
+ exception.message.to_s.split("\n").each { |line| output.puts "#{long_padding} #{failure_color(line)}" } if exception.message
73
74
 
74
75
  if shared_group = find_shared_group(example)
75
76
  dump_shared_failure_info(shared_group)
@@ -82,8 +83,9 @@ module RSpec
82
83
  exception_class_name = exception_class_name_for(exception)
83
84
  output.puts "#{long_padding}#{failure_color("Failure/Error:")} #{failure_color(read_failed_line(exception, example).strip)}"
84
85
  output.puts "#{long_padding}#{failure_color(exception_class_name)}: #{failure_color(exception.message)}" unless exception_class_name =~ /RSpec/
85
- output.puts "#{long_padding} #{failure_color(example.metadata[:command])}"
86
+ output.puts "#{long_padding} #{failure_color(example.metadata[:command])}" if example.metadata[:command]
86
87
  output.puts "#{long_padding} #{failure_color(example.metadata[:stdout])}" if example.metadata[:stdout] != ''
88
+ exception.message.to_s.split("\n").each { |line| output.puts "#{long_padding} #{failure_color(line)}" } if exception.message
87
89
 
88
90
  if shared_group = find_shared_group(example)
89
91
  dump_shared_failure_info(shared_group)
@@ -10,6 +10,9 @@ describe 'Serverspec commands of Darwin family' do
10
10
  it_behaves_like 'support command check_installed_by_gem', 'jekyll'
11
11
  it_behaves_like 'support command check_installed_by_gem with_version', 'jekyll', '1.0.2'
12
12
 
13
+ it_behaves_like 'support command check_installed_by_npm', 'hubot'
14
+ it_behaves_like 'support command check_installed_by_npm with_version', 'hubot', '1.0.2'
15
+
13
16
  it_behaves_like 'support command check_installed_by_pecl', 'mongo'
14
17
  it_behaves_like 'support command check_installed_by_pecl with_version', 'mongo', '1.4.1'
15
18
 
@@ -10,6 +10,9 @@ describe 'Serverspec commands of Debian family' do
10
10
  it_behaves_like 'support command check_installed_by_gem', 'jekyll'
11
11
  it_behaves_like 'support command check_installed_by_gem with_version', 'jekyll', '1.0.2'
12
12
 
13
+ it_behaves_like 'support command check_installed_by_npm', 'hubot'
14
+ it_behaves_like 'support command check_installed_by_npm with_version', 'hubot', '1.0.2'
15
+
13
16
  it_behaves_like 'support command check_installed_by_pecl', 'mongo'
14
17
  it_behaves_like 'support command check_installed_by_pecl with_version', 'mongo', '1.4.1'
15
18
 
@@ -4,8 +4,11 @@ include Serverspec::Helper::Debian
4
4
 
5
5
  describe 'Serverspec file matchers of Debian family' do
6
6
  it_behaves_like 'support file be_file matcher', '/etc/ssh/sshd_config'
7
+ it_behaves_like 'support file be_a_file matcher', '/etc/ssh/sshd_config'
7
8
  it_behaves_like 'support file be_directory matcher', '/etc/ssh'
9
+ it_behaves_like 'support file be_a_directory matcher', '/etc/ssh'
8
10
  it_behaves_like 'support file be_socket matcher', '/var/run/unicorn.sock'
11
+ it_behaves_like 'support file be_a_socket matcher', '/var/run/unicorn.sock'
9
12
  it_behaves_like 'support file contain matcher', '/etc/ssh/sshd_config', 'This is the sshd server system-wide configuration file'
10
13
  it_behaves_like 'support file contain from to matcher', 'Gemfile', 'rspec', /^group :test do/, /^end/
11
14
  it_behaves_like 'support file contain after matcher', 'Gemfile', 'rspec', /^group :test do/
@@ -10,6 +10,9 @@ describe 'Serverspec commands of Gentoo family' do
10
10
  it_behaves_like 'support command check_installed_by_gem', 'jekyll'
11
11
  it_behaves_like 'support command check_installed_by_gem with_version', 'jekyll', '1.0.2'
12
12
 
13
+ it_behaves_like 'support command check_installed_by_npm', 'hubot'
14
+ it_behaves_like 'support command check_installed_by_npm with_version', 'hubot', '1.0.2'
15
+
13
16
  it_behaves_like 'support command check_installed_by_pecl', 'mongo'
14
17
  it_behaves_like 'support command check_installed_by_pecl with_version', 'mongo', '1.4.1'
15
18
 
@@ -10,6 +10,9 @@ describe 'Serverspec commands of Red Hat' do
10
10
  it_behaves_like 'support command check_installed_by_gem', 'jekyll'
11
11
  it_behaves_like 'support command check_installed_by_gem with_version', 'jekyll', '1.0.2'
12
12
 
13
+ it_behaves_like 'support command check_installed_by_npm', 'hubot'
14
+ it_behaves_like 'support command check_installed_by_npm with_version', 'hubot', '1.0.2'
15
+
13
16
  it_behaves_like 'support command check_installed_by_pecl', 'mongo'
14
17
  it_behaves_like 'support command check_installed_by_pecl with_version', 'mongo', '1.4.1'
15
18
 
@@ -63,6 +66,16 @@ describe 'check_enabled' do
63
66
  it { should eq 'chkconfig --list httpd | grep 3:on' }
64
67
  end
65
68
 
69
+ describe 'check_yumrepo' do
70
+ subject { commands.check_yumrepo('epel') }
71
+ it { should eq 'yum repolist -C | grep ^epel' }
72
+ end
73
+
74
+ describe 'check_yumrepo_enabled' do
75
+ subject { commands.check_yumrepo_enabled('epel') }
76
+ it { should eq 'yum repolist all -C | grep ^epel | grep enabled' }
77
+ end
78
+
66
79
  describe 'check_installed' do
67
80
  subject { commands.check_installed('httpd') }
68
81
  it { should eq 'rpm -q httpd' }
@@ -4,8 +4,11 @@ include Serverspec::Helper::RedHat
4
4
 
5
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
+ it_behaves_like 'support file be_a_file matcher', '/etc/ssh/sshd_config'
7
8
  it_behaves_like 'support file be_directory matcher', '/etc/ssh'
9
+ it_behaves_like 'support file be_a_directory matcher', '/etc/ssh'
8
10
  it_behaves_like 'support file be_socket matcher', '/var/run/unicorn.sock'
11
+ it_behaves_like 'support file be_a_socket matcher', '/var/run/unicorn.sock'
9
12
  it_behaves_like 'support file contain matcher', '/etc/ssh/sshd_config', 'This is the sshd server system-wide configuration file'
10
13
  it_behaves_like 'support file contain from to matcher', 'Gemfile', 'rspec', /^group :test do/, /^end/
11
14
  it_behaves_like 'support file contain after matcher', 'Gemfile', 'rspec', /^group :test do/
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ include Serverspec::Helper::RedHat
4
+
5
+ describe 'Serverspec yumrepo matchers of Red Hat family' do
6
+ describe 'exist' do
7
+ describe yumrepo('epel') do
8
+ it { should exist }
9
+ end
10
+
11
+ describe yumrepo('invalid-repository') do
12
+ it { should_not exist }
13
+ end
14
+ end
15
+
16
+ describe 'be_enabled' do
17
+ describe yumrepo('epel') do
18
+ it { should be_enabled }
19
+ end
20
+
21
+ describe yumrepo('invalid-repository') do
22
+ it { should_not be_enabled }
23
+ end
24
+ end
25
+ end
@@ -10,6 +10,9 @@ describe 'Serverspec commands of Solaris family' do
10
10
  it_behaves_like 'support command check_installed_by_gem', 'jekyll'
11
11
  it_behaves_like 'support command check_installed_by_gem with_version', 'jekyll', '1.0.2'
12
12
 
13
+ it_behaves_like 'support command check_installed_by_npm', 'hubot'
14
+ it_behaves_like 'support command check_installed_by_npm with_version', 'hubot', '1.0.2'
15
+
13
16
  it_behaves_like 'support command check_installed_by_pecl', 'mongo'
14
17
  it_behaves_like 'support command check_installed_by_pecl with_version', 'mongo', '1.4.1'
15
18
 
@@ -14,7 +14,7 @@ shared_examples_for 'support command check_installed_by_npm' do |package|
14
14
  end
15
15
 
16
16
  shared_examples_for 'support command check_installed_by_npm with_version' do |package, version|
17
- subject { commands.check_installed_by_npm(package) }
17
+ subject { commands.check_installed_by_npm(package, version) }
18
18
  it { should eq "npm ls #{package} -g | grep -w -- #{version}" }
19
19
  end
20
20
 
@@ -10,6 +10,18 @@ shared_examples_for 'support file be_file matcher' do |name|
10
10
  end
11
11
  end
12
12
 
13
+ shared_examples_for 'support file be_a_file matcher' do |name|
14
+ describe 'be_a_file' do
15
+ describe file(name) do
16
+ it { should be_a_file }
17
+ end
18
+
19
+ describe file('/etc/invalid_file') do
20
+ it { should_not be_a_file }
21
+ end
22
+ end
23
+ end
24
+
13
25
  shared_examples_for 'support file be_directory matcher' do |name|
14
26
  describe 'be_directory' do
15
27
  describe file(name) do
@@ -22,6 +34,18 @@ shared_examples_for 'support file be_directory matcher' do |name|
22
34
  end
23
35
  end
24
36
 
37
+ shared_examples_for 'support file be_a_directory matcher' do |name|
38
+ describe 'be_a_directory' do
39
+ describe file(name) do
40
+ it { should be_a_directory }
41
+ end
42
+
43
+ describe file('/etc/invalid_directory') do
44
+ it { should_not be_a_directory }
45
+ end
46
+ end
47
+ end
48
+
25
49
  shared_examples_for 'support file be_socket matcher' do |name|
26
50
  describe 'be_socket' do
27
51
  describe file(name) do
@@ -34,6 +58,18 @@ shared_examples_for 'support file be_socket matcher' do |name|
34
58
  end
35
59
  end
36
60
 
61
+ shared_examples_for 'support file be_a_socket matcher' do |name|
62
+ describe 'be_a_socket' do
63
+ describe file(name) do
64
+ it { should be_a_socket }
65
+ end
66
+
67
+ describe file('/etc/invalid_socket') do
68
+ it { should_not be_a_socket }
69
+ end
70
+ end
71
+ end
72
+
37
73
  shared_examples_for 'support file contain matcher' do |name, pattern|
38
74
  describe 'contain' do
39
75
  describe file(name) do
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.6.6
4
+ version: 0.6.7
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-06-20 00:00:00.000000000 Z
12
+ date: 2013-06-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: net-ssh
@@ -203,6 +203,7 @@ files:
203
203
  - lib/serverspec/type/selinux.rb
204
204
  - lib/serverspec/type/service.rb
205
205
  - lib/serverspec/type/user.rb
206
+ - lib/serverspec/type/yumrepo.rb
206
207
  - lib/serverspec/type/zfs.rb
207
208
  - lib/serverspec/version.rb
208
209
  - serverspec.gemspec
@@ -268,6 +269,7 @@ files:
268
269
  - spec/redhat/selinux_spec.rb
269
270
  - spec/redhat/service_spec.rb
270
271
  - spec/redhat/user_spec.rb
272
+ - spec/redhat/yumrepo_spec.rb
271
273
  - spec/solaris/command_spec.rb
272
274
  - spec/solaris/commands_spec.rb
273
275
  - spec/solaris/cron_spec.rb
@@ -322,7 +324,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
322
324
  version: '0'
323
325
  requirements: []
324
326
  rubyforge_project:
325
- rubygems_version: 1.8.23
327
+ rubygems_version: 1.8.25
326
328
  signing_key:
327
329
  specification_version: 3
328
330
  summary: RSpec tests for your servers configured by Puppet, Chef or anything else
@@ -389,6 +391,7 @@ test_files:
389
391
  - spec/redhat/selinux_spec.rb
390
392
  - spec/redhat/service_spec.rb
391
393
  - spec/redhat/user_spec.rb
394
+ - spec/redhat/yumrepo_spec.rb
392
395
  - spec/solaris/command_spec.rb
393
396
  - spec/solaris/commands_spec.rb
394
397
  - spec/solaris/cron_spec.rb