serverspec 0.6.6 → 0.6.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -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