serverspec 1.7.1 → 1.8.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ddc0a5d2cc544c9e9a865760d6e2a966870e5d59
4
- data.tar.gz: f487423c89854402efecc2f770db393603af3499
3
+ metadata.gz: 0f25f83fa646e00df412c0b03654a485840171fa
4
+ data.tar.gz: 79510ae949e711812b565864a6e11473a8965e6a
5
5
  SHA512:
6
- metadata.gz: 93626b2e0f4a081666414b0a483a6c3fd760afaf3cb0aed1af4ae9617fdcc5ce1d6ed229ac15f8d8558fd1851744c37531e6173e19c20c73e61b682f1a4d4f41
7
- data.tar.gz: f8d21e974aff80f0500a88b2c379c68e38a046f669e9637e950179e46495a48dfa24dc9bfbe68ad1a5702a7b5735a90e4e10ac7f103dd1f086ec3b72c102373a
6
+ metadata.gz: 750b7b972dc1ea70c7ac446e5df1a3eb7f2eba280fe3fc3c766483630dcfa8c6aaed6a1dac81186e2b76b24724ac8441dab1fbeb59561bcfb90d78eb62e1f15a
7
+ data.tar.gz: 03df2d7e047da50dd7155d121c4f8c1dbc9cb2c1776421b3253c2f447d52eca6508f40ee7ece42f4c079f07ca1e5c22f342ef02f68bca5f90f9dfce31721327c
data/Rakefile CHANGED
@@ -1,32 +1,37 @@
1
1
  require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
- require "octorelease"
2
+ begin
3
+ require "rspec/core/rake_task"
4
+ require "octorelease"
5
+ rescue LoadError
6
+ end
4
7
 
5
- task :spec => 'spec:all'
8
+ if defined?(RSpec)
9
+ task :spec => 'spec:all'
6
10
 
7
- namespace :spec do
8
- oses = %w( darwin debian gentoo plamo redhat redhat7 aix solaris solaris10 solaris11 smartos windows freebsd freebsd10 arch fedora ubuntu)
9
- backends = %w( exec ssh cmd winrm powershell )
11
+ namespace :spec do
12
+ oses = %w( darwin debian gentoo plamo redhat redhat7 aix solaris solaris10 solaris11 smartos windows freebsd freebsd10 arch fedora ubuntu nixos)
13
+ backends = %w( exec ssh cmd winrm powershell )
10
14
 
11
- task :all => [ oses.map {|os| "spec:#{os}" }, backends, :helper, :unit ].flatten
15
+ task :all => [ oses.map {|os| "spec:#{os}" }, backends, :helper, :unit ].flatten
12
16
 
13
- oses.each do |os|
14
- RSpec::Core::RakeTask.new(os.to_sym) do |t|
15
- t.pattern = "spec/#{os}/*_spec.rb"
17
+ oses.each do |os|
18
+ RSpec::Core::RakeTask.new(os.to_sym) do |t|
19
+ t.pattern = "spec/#{os}/*_spec.rb"
20
+ end
16
21
  end
17
- end
18
22
 
19
- backends.each do |backend|
20
- RSpec::Core::RakeTask.new(backend) do |t|
21
- t.pattern = "spec/backend/#{backend.to_s}/*_spec.rb"
23
+ backends.each do |backend|
24
+ RSpec::Core::RakeTask.new(backend) do |t|
25
+ t.pattern = "spec/backend/#{backend.to_s}/*_spec.rb"
26
+ end
22
27
  end
23
- end
24
28
 
25
- RSpec::Core::RakeTask.new(:helper) do |t|
26
- t.pattern = "spec/helper/*_spec.rb"
27
- end
29
+ RSpec::Core::RakeTask.new(:helper) do |t|
30
+ t.pattern = "spec/helper/*_spec.rb"
31
+ end
28
32
 
29
- RSpec::Core::RakeTask.new(:unit) do |t|
30
- t.pattern = "spec/unit/*_spec.rb"
33
+ RSpec::Core::RakeTask.new(:unit) do |t|
34
+ t.pattern = "spec/unit/*_spec.rb"
35
+ end
31
36
  end
32
37
  end
@@ -10,6 +10,7 @@ module Serverspec
10
10
  'FreeBSD',
11
11
  'FreeBSD10',
12
12
  'Gentoo',
13
+ 'NixOS',
13
14
  'Plamo',
14
15
  'RedHat',
15
16
  'RedHat7',
@@ -1,3 +1,5 @@
1
+ require 'date'
2
+
1
3
  module Serverspec
2
4
  module Type
3
5
  class File < Base
@@ -93,6 +95,11 @@ module Serverspec
93
95
  def version?(version)
94
96
  backend.check_file_version(@name, version)
95
97
  end
98
+
99
+ def mtime
100
+ d = backend.get_file_mtime(@name).stdout.strip
101
+ DateTime.strptime(d, '%s')
102
+ end
96
103
  end
97
104
  end
98
105
  end
@@ -1,3 +1,3 @@
1
1
  module Serverspec
2
- VERSION = "1.7.1"
2
+ VERSION = "1.8.0"
3
3
  end
@@ -22,9 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_runtime_dependency "rspec", "~> 2.13"
23
23
  spec.add_runtime_dependency "rspec-its"
24
24
  spec.add_runtime_dependency "highline"
25
- spec.add_runtime_dependency "specinfra", "~> 1.13"
25
+ spec.add_runtime_dependency "specinfra", "~> 1.17"
26
26
  spec.add_development_dependency "bundler", "~> 1.3"
27
27
  spec.add_development_dependency "rake", "~> 10.1.1"
28
- spec.add_development_dependency "octokit", "~> 2.7.2"
29
- spec.add_development_dependency "octorelease"
30
28
  end
@@ -11,6 +11,11 @@ describe package('invalid-package') do
11
11
  it { should_not be_installed }
12
12
  end
13
13
 
14
+ describe package('curl') do
15
+ it { should be_installed.with_version('7.37.0-1') }
16
+ its(:command) { should eq "pacman -Q | grep curl 7.37.0-1" }
17
+ end
18
+
14
19
  package('invalid-package') do
15
20
  it { should_not be_installed.by('pacman') }
16
21
  end
@@ -4,7 +4,7 @@ include SpecInfra::Helper::Darwin
4
4
 
5
5
  describe port(80) do
6
6
  it { should be_listening }
7
- its(:command) { should eq 'netstat -tunl | grep -- :80\\ ' }
7
+ its(:command) { should eq 'lsof -nP -iTCP -sTCP:LISTEN | grep -- :80\\ ' }
8
8
  end
9
9
 
10
10
  describe port('invalid') do
@@ -20,7 +20,7 @@ include SpecInfra::Helper::Darwin
20
20
 
21
21
  describe service('sshd') do
22
22
  it { should be_running }
23
- its(:command) { should eq "service sshd status" }
23
+ its(:command) { should eq "launchctl list | grep sshd | grep -E '^[0-9]+'" }
24
24
  end
25
25
 
26
26
  describe service('invalid-daemon') do
@@ -0,0 +1,421 @@
1
+ require 'spec_helper'
2
+
3
+ include SpecInfra::Helper::NixOS
4
+
5
+ describe file('/etc/ssh/sshd_config') do
6
+ it { should be_file }
7
+ its(:command) { should eq "test -f /etc/ssh/sshd_config" }
8
+ end
9
+
10
+ describe file('/etc/invalid_file') do
11
+ it { should_not be_file }
12
+ end
13
+
14
+ describe file('/etc/ssh') do
15
+ it { should be_directory }
16
+ its(:command) { should eq "test -d /etc/ssh" }
17
+ end
18
+
19
+ describe file('/etc/invalid_directory') do
20
+ it { should_not be_directory }
21
+ end
22
+
23
+ describe file('/var/run/unicorn.sock') do
24
+ it { should be_socket }
25
+ its(:command) { should eq "test -S /var/run/unicorn.sock" }
26
+ end
27
+
28
+ describe file('/etc/invalid_socket') do
29
+ it { should_not be_socket }
30
+ end
31
+
32
+ describe file('/etc/ssh/sshd_config') do
33
+ it { should contain 'This is the sshd server system-wide configuration file' }
34
+ its(:command) { should eq "grep -q -- This\\ is\\ the\\ sshd\\ server\\ system-wide\\ configuration\\ file /etc/ssh/sshd_config || grep -qF -- This\\ is\\ the\\ sshd\\ server\\ system-wide\\ configuration\\ file /etc/ssh/sshd_config" }
35
+ end
36
+
37
+ describe file('/etc/ssh/sshd_config') do
38
+ it { should contain /^This is the sshd server system-wide configuration file/ }
39
+ its(:command) { should eq "grep -q -- \\^This\\ is\\ the\\ sshd\\ server\\ system-wide\\ configuration\\ file /etc/ssh/sshd_config || grep -qF -- \\^This\\ is\\ the\\ sshd\\ server\\ system-wide\\ configuration\\ file /etc/ssh/sshd_config" }
40
+ end
41
+
42
+ describe file('/etc/ssh/sshd_config') do
43
+ it { should_not contain 'This is invalid text!!' }
44
+ end
45
+
46
+ describe file('Gemfile') do
47
+ it { should contain('rspec').from(/^group :test do/).to(/^end/) }
48
+ its(:command) { should eq "sed -n /\\^group\\ :test\\ do/,/\\^end/p Gemfile | grep -q -- rspec - || sed -n /\\^group\\ :test\\ do/,/\\^end/p Gemfile | grep -qF -- rspec -" }
49
+ end
50
+
51
+ describe file('/etc/ssh/sshd_config') do
52
+ it { should_not contain('This is invalid text!!').from(/^group :test do/).to(/^end/) }
53
+ end
54
+
55
+ describe file('Gemfile') do
56
+ it { should contain('rspec').after(/^group :test do/) }
57
+ its(:command) { should eq "sed -n /\\^group\\ :test\\ do/,\\$p Gemfile | grep -q -- rspec - || sed -n /\\^group\\ :test\\ do/,\\$p Gemfile | grep -qF -- rspec -" }
58
+ end
59
+
60
+ describe file('/etc/ssh/sshd_config') do
61
+ it { should_not contain('This is invalid text!!').after(/^group :test do/) }
62
+ end
63
+
64
+ describe file('Gemfile') do
65
+ it { should contain('rspec').before(/^end/) }
66
+ its(:command) { should eq "sed -n 1,/\\^end/p Gemfile | grep -q -- rspec - || sed -n 1,/\\^end/p Gemfile | grep -qF -- rspec -" }
67
+ end
68
+
69
+ describe file('/etc/ssh/sshd_config') do
70
+ it { should_not contain('This is invalid text!!').before(/^end/) }
71
+ end
72
+
73
+ describe file('/etc/passwd') do
74
+ it { should be_mode 644 }
75
+ its(:command) { should eq "stat -c %a /etc/passwd | grep -- \\^644\\$" }
76
+ end
77
+
78
+ describe file('/etc/passwd') do
79
+ it { should_not be_mode 'invalid' }
80
+ end
81
+
82
+ describe file('/etc/passwd') do
83
+ it { should be_owned_by 'root' }
84
+ its(:command) { should eq "stat -c %U /etc/passwd | grep -- \\^root\\$" }
85
+ end
86
+
87
+ describe file('/etc/passwd') do
88
+ it { should_not be_owned_by 'invalid-owner' }
89
+ end
90
+
91
+ describe file('/etc/passwd') do
92
+ it { should be_grouped_into 'root' }
93
+ its(:command) { should eq "stat -c %G /etc/passwd | grep -- \\^root\\$" }
94
+ end
95
+
96
+ describe file('/etc/passwd') do
97
+ it { should_not be_grouped_into 'invalid-group' }
98
+ end
99
+
100
+ describe file('/etc/pam.d/system-auth') do
101
+ it { should be_linked_to '/etc/pam.d/system-auth-ac' }
102
+ its(:command) { should eq "stat -c %N /etc/pam.d/system-auth | egrep -e \"-> ./etc/pam.d/system-auth-ac.\"" }
103
+ end
104
+
105
+ describe file('dummy-link') do
106
+ it { should_not be_linked_to '/invalid/target' }
107
+ end
108
+
109
+ describe file('/dev') do
110
+ let(:stdout) { "755\r\n" }
111
+ it { should be_readable }
112
+ its(:command) { should eq "stat -c %a /dev" }
113
+ end
114
+
115
+ describe file('/dev') do
116
+ let(:stdout) { "333\r\n" }
117
+ it { should_not be_readable }
118
+ end
119
+
120
+ describe file('/dev') do
121
+ let(:stdout) { "400\r\n" }
122
+ it { should be_readable.by('owner') }
123
+ end
124
+
125
+ describe file('/dev') do
126
+ let(:stdout) { "044\r\n" }
127
+ it { should_not be_readable.by('owner') }
128
+ end
129
+
130
+ describe file('/dev') do
131
+ let(:stdout) { "040\r\n" }
132
+ it { should be_readable.by('group') }
133
+ end
134
+
135
+ describe file('/dev') do
136
+ let(:stdout) { "404\r\n" }
137
+ it { should_not be_readable.by('group') }
138
+ end
139
+
140
+ describe file('/dev') do
141
+ let(:stdout) { "044\r\n" }
142
+ it { should be_readable.by('others') }
143
+ end
144
+
145
+ describe file('/dev') do
146
+ let(:stdout) { "443\r\n" }
147
+ it { should_not be_readable.by('others') }
148
+ end
149
+
150
+ describe file('/tmp') do
151
+ it { should be_readable.by_user('mail') }
152
+ its(:command) { should eq "su -s /bin/sh -c \"test -r /tmp\" mail" }
153
+ end
154
+
155
+ describe file('/tmp') do
156
+ it { should_not be_readable.by_user('invalid-user') }
157
+ end
158
+
159
+ describe file('/dev') do
160
+ let(:stdout) { "755\r\n" }
161
+ it { should be_writable }
162
+ its(:command) { should eq "stat -c %a /dev" }
163
+ end
164
+
165
+ describe file('/dev') do
166
+ let(:stdout) { "555\r\n" }
167
+ it { should_not be_writable }
168
+ end
169
+
170
+ describe file('/dev') do
171
+ let(:stdout) { "200\r\n" }
172
+ it { should be_writable.by('owner') }
173
+ end
174
+
175
+ describe file('/dev') do
176
+ let(:stdout) { "555\r\n" }
177
+ it { should_not be_writable.by('owner') }
178
+ end
179
+
180
+ describe file('/dev') do
181
+ let(:stdout) { "030\r\n" }
182
+ it { should be_writable.by('group') }
183
+ end
184
+
185
+ describe file('/dev') do
186
+ let(:stdout) { "555\r\n" }
187
+ it { should_not be_writable.by('group') }
188
+ end
189
+
190
+ describe file('/dev') do
191
+ let(:stdout) { "666\r\n" }
192
+ it { should be_writable.by('others') }
193
+ end
194
+
195
+ describe file('/dev') do
196
+ let(:stdout) { "555\r\n" }
197
+ it { should_not be_writable.by('others') }
198
+ end
199
+
200
+ describe file('/tmp') do
201
+ it { should be_writable.by_user('mail') }
202
+ its(:command) { should eq "su -s /bin/sh -c \"test -w /tmp\" mail" }
203
+ end
204
+
205
+ describe file('/tmp') do
206
+ it { should_not be_writable.by_user('invalid-user') }
207
+ end
208
+
209
+ describe file('/dev') do
210
+ let(:stdout) { "755\r\n" }
211
+ it { should be_executable }
212
+ its(:command) { should eq "stat -c %a /dev" }
213
+ end
214
+
215
+ describe file('/dev') do
216
+ let(:stdout) { "666\r\n" }
217
+ it { should_not be_executable }
218
+ end
219
+
220
+ describe file('/dev') do
221
+ let(:stdout) { "100\r\n" }
222
+ it { should be_executable.by('owner') }
223
+ end
224
+
225
+ describe file('/dev') do
226
+ let(:stdout) { "666\r\n" }
227
+ it { should_not be_executable.by('owner') }
228
+ end
229
+
230
+ describe file('/dev') do
231
+ let(:stdout) { "070\r\n" }
232
+ it { should be_executable.by('group') }
233
+ end
234
+
235
+ describe file('/dev') do
236
+ let(:stdout) { "666\r\n" }
237
+ it { should_not be_executable.by('group') }
238
+ end
239
+
240
+ describe file('/dev') do
241
+ let(:stdout) { "001\r\n" }
242
+ it { should be_executable.by('others') }
243
+ end
244
+
245
+ describe file('/dev') do
246
+ let(:stdout) { "666\r\n" }
247
+ it { should_not be_executable.by('others') }
248
+ end
249
+
250
+ describe file('/tmp') do
251
+ it { should be_executable.by_user('mail') }
252
+ its(:command) { should eq "su -s /bin/sh -c \"test -x /tmp\" mail" }
253
+ end
254
+
255
+ describe file('/tmp') do
256
+ it { should_not be_executable.by_user('invalid-user') }
257
+ end
258
+
259
+ describe file('/') do
260
+ it { should be_mounted }
261
+ its(:command) { should eq "mount | grep -w -- on\\ /" }
262
+ end
263
+
264
+ describe file('/etc/invalid-mount') do
265
+ it { should_not be_mounted }
266
+ end
267
+
268
+ describe file('/') do
269
+ let(:stdout) { "/dev/mapper/VolGroup-lv_root on / type ext4 (rw,mode=620)\r\n" }
270
+ it { should be_mounted.with( :type => 'ext4' ) }
271
+ end
272
+
273
+ describe file('/') do
274
+ let(:stdout) { "/dev/mapper/VolGroup-lv_root on / type ext4 (rw,mode=620)\r\n" }
275
+ it { should be_mounted.with( :type => 'ext4', :options => { :rw => true } ) }
276
+ end
277
+
278
+ describe file('/') do
279
+ let(:stdout) { "/dev/mapper/VolGroup-lv_root on / type ext4 (rw,mode=620)\r\n" }
280
+ it { should be_mounted.with( :type => 'ext4', :options => { :mode => 620 } ) }
281
+ end
282
+
283
+ describe file('/') do
284
+ let(:stdout) { "/dev/mapper/VolGroup-lv_root on / type ext4 (rw,mode=620)\r\n" }
285
+ it { should be_mounted.with( :type => 'ext4', :device => '/dev/mapper/VolGroup-lv_root' ) }
286
+ end
287
+
288
+ describe file('/') do
289
+ let(:stdout) { "/dev/mapper/VolGroup-lv_root on / type ext4 (rw,mode=620)\r\n" }
290
+ it { should_not be_mounted.with( :type => 'xfs' ) }
291
+ end
292
+
293
+ describe file('/') do
294
+ let(:stdout) { "/dev/mapper/VolGroup-lv_root on / type ext4 (rw,mode=620)\r\n" }
295
+ it { should_not be_mounted.with( :type => 'ext4', :options => { :rw => false } ) }
296
+ end
297
+
298
+ describe file('/') do
299
+ let(:stdout) { "/dev/mapper/VolGroup-lv_root on / type ext4 (rw,mode=620)\r\n" }
300
+ it { should_not be_mounted.with( :type => 'ext4', :options => { :mode => 600 } ) }
301
+ end
302
+
303
+ describe file('/') do
304
+ let(:stdout) { "/dev/mapper/VolGroup-lv_root on / type ext4 (rw,mode=620)\r\n" }
305
+ it { should_not be_mounted.with( :type => 'xfs', :device => '/dev/mapper/VolGroup-lv_root' ) }
306
+ end
307
+
308
+ describe file('/') do
309
+ let(:stdout) { "/dev/mapper/VolGroup-lv_root on / type ext4 (rw,mode=620)\r\n" }
310
+ it { should_not be_mounted.with( :type => 'ext4', :device => '/dev/mapper/VolGroup-lv_r00t' ) }
311
+ end
312
+
313
+ describe file('/etc/invalid-mount') do
314
+ let(:stdout) { "/dev/mapper/VolGroup-lv_root on / type ext4 (rw,mode=620)\r\n" }
315
+ it { should_not be_mounted.with( :type => 'ext4' ) }
316
+ end
317
+
318
+ describe file('/') do
319
+ let(:stdout) { "/dev/mapper/VolGroup-lv_root on / type ext4 (rw,mode=620)\r\n" }
320
+ it do
321
+ should be_mounted.only_with(
322
+ :device => '/dev/mapper/VolGroup-lv_root',
323
+ :type => 'ext4',
324
+ :options => {
325
+ :rw => true,
326
+ :mode => 620,
327
+ }
328
+ )
329
+ end
330
+ end
331
+
332
+ describe file('/') do
333
+ let(:stdout) { "/dev/mapper/VolGroup-lv_root on / type ext4 (rw,mode=620)\r\n" }
334
+ it do
335
+ should_not be_mounted.only_with(
336
+ :device => '/dev/mapper/VolGroup-lv_root',
337
+ :type => 'ext4',
338
+ :options => {
339
+ :rw => true,
340
+ :mode => 620,
341
+ :bind => true,
342
+ }
343
+ )
344
+ end
345
+ end
346
+
347
+ describe file('/') do
348
+ let(:stdout) { "/dev/mapper/VolGroup-lv_root on / type ext4 (rw,mode=620)\r\n" }
349
+ it do
350
+ should_not be_mounted.only_with(
351
+ :device => '/dev/mapper/VolGroup-lv_root',
352
+ :type => 'ext4',
353
+ :options => {
354
+ :rw => true,
355
+ }
356
+ )
357
+ end
358
+ end
359
+
360
+ describe file('/') do
361
+ let(:stdout) { "/dev/mapper/VolGroup-lv_root on / type ext4 (rw,mode=620)\r\n" }
362
+ it do
363
+ should_not be_mounted.only_with(
364
+ :device => '/dev/mapper/VolGroup-lv_roooooooooot',
365
+ :type => 'ext4',
366
+ :options => {
367
+ :rw => true,
368
+ :mode => 620,
369
+ }
370
+ )
371
+ end
372
+ end
373
+
374
+ describe file('/etc/invalid-mount') do
375
+ let(:stdout) { "/dev/mapper/VolGroup-lv_root on / type ext4 (rw,mode=620)\r\n" }
376
+ it { should_not be_mounted.only_with( :type => 'ext4' ) }
377
+ end
378
+
379
+ describe file('/etc/services') do
380
+ it { should match_md5checksum '9d39e51e6bd5a30168c26c57b66d2e37' }
381
+ its(:command) { should eq "md5sum /etc/services | grep -iw -- \\^9d39e51e6bd5a30168c26c57b66d2e37" }
382
+ end
383
+
384
+ describe file('invalid-file') do
385
+ it { should_not match_md5checksum 'INVALIDMD5CHECKSUM' }
386
+ end
387
+
388
+ describe file('/etc/services') do
389
+ it { should match_sha256checksum 'b4d36eb75767bebb41c5fa7a35599952e1883b3d3f6332496e1561eeb4067018' }
390
+ its(:command) { should eq "sha256sum /etc/services | grep -iw -- \\^b4d36eb75767bebb41c5fa7a35599952e1883b3d3f6332496e1561eeb4067018" }
391
+ end
392
+
393
+ describe file('invalid-file') do
394
+ it { should_not match_sha256checksum 'INVALIDSHA256CHECKSUM' }
395
+ end
396
+
397
+ describe file('/etc/passwd') do
398
+ let(:stdout) {<<EOF
399
+ root:x:0:0:System administrator:/root:/run/current-system/sw/bin/bash
400
+ nscd:x:1:65534:Name service cache daemon user:/var/empty:/run/current-system/sw/sbin/nologin
401
+ sshd:x:2:65534:SSH privilege separation user:/var/empty:/run/current-system/sw/sbin/nologin
402
+ ntp:x:3:65534:NTP daemon user:/var/lib/ntp:/run/current-system/sw/sbin/nologin
403
+ messagebus:x:4:4:D-Bus system message bus daemon user:/var/run/dbus:/run/current-system/sw/sbin/nologin
404
+ polkituser:x:28:65534:PolKit daemon:/var/empty:/run/current-system/sw/sbin/nologin
405
+ systemd-journal-gateway:x:110:65534::/var/empty:/run/current-system/sw/sbin/nologin
406
+ nixbld1:x:30001:30000:Nix build user 1:/var/empty:/run/current-system/sw/sbin/nologin
407
+ nixbld2:x:30002:30000:Nix build user 2:/var/empty:/run/current-system/sw/sbin/nologin
408
+ nixbld3:x:30003:30000:Nix build user 3:/var/empty:/run/current-system/sw/sbin/nologin
409
+ nixbld4:x:30004:30000:Nix build user 4:/var/empty:/run/current-system/sw/sbin/nologin
410
+ nixbld5:x:30005:30000:Nix build user 5:/var/empty:/run/current-system/sw/sbin/nologin
411
+ nixbld6:x:30006:30000:Nix build user 6:/var/empty:/run/current-system/sw/sbin/nologin
412
+ nixbld7:x:30007:30000:Nix build user 7:/var/empty:/run/current-system/sw/sbin/nologin
413
+ nixbld8:x:30008:30000:Nix build user 8:/var/empty:/run/current-system/sw/sbin/nologin
414
+ nixbld9:x:30009:30000:Nix build user 9:/var/empty:/run/current-system/sw/sbin/nologin
415
+ nixbld10:x:30010:30000:Nix build user 10:/var/empty:/run/current-system/sw/sbin/nologin
416
+ nobody:x:65534:65534:Unprivileged account (don't use!):/var/empty:/run/current-system/sw/sbin/nologin
417
+ EOF
418
+ }
419
+
420
+ its(:content) { should match /root:x:0:0/ }
421
+ end
@@ -0,0 +1,109 @@
1
+ require 'spec_helper'
2
+
3
+ include SpecInfra::Helper::NixOS
4
+
5
+ describe package('apache-httpd') do
6
+ it { should be_installed }
7
+ its(:command) { should eq "nix-store -q --references /var/run/current-system/sw | grep apache-httpd" }
8
+ end
9
+
10
+ describe package('invalid-package') do
11
+ it { should_not be_installed }
12
+ end
13
+
14
+ package('invalid-package') do
15
+ it { should_not be_installed.by('nix') }
16
+ end
17
+
18
+ describe package('apache-httpd') do
19
+ it { should be_installed.with_version('2.4.9') }
20
+ its(:command) { should eq "nix-store -q --references /var/run/current-system/sw | grep apache-httpd-2.4.9" }
21
+ end
22
+
23
+ describe package('httpd') do
24
+ it { should be_installed.by('nix').with_version('2.4.9') }
25
+ its(:command) { should eq "nix-store -q --references /var/run/current-system/sw | grep httpd-2.4.9" }
26
+ end
27
+
28
+ describe package('httpd') do
29
+ it { should_not be_installed.with_version('invalid-version') }
30
+ end
31
+
32
+ describe package('jekyll') do
33
+ it { should be_installed.by('gem') }
34
+ its(:command) { should eq "gem list --local | grep -w -- \\^jekyll" }
35
+ end
36
+
37
+ describe package('invalid-gem') do
38
+ it { should_not be_installed.by('gem') }
39
+ end
40
+
41
+ describe package('jekyll') do
42
+ it { should be_installed.by('gem').with_version('1.1.1') }
43
+ its(:command) { should eq "gem list --local | grep -w -- \\^jekyll | grep -w -- 1.1.1" }
44
+ end
45
+
46
+ describe package('jekyll') do
47
+ it { should_not be_installed.by('gem').with_version('invalid-version') }
48
+ end
49
+
50
+ describe package('bower') do
51
+ it { should be_installed.by('npm') }
52
+ its(:command) { should eq "npm ls bower -g" }
53
+ end
54
+
55
+ describe package('invalid-npm-package') do
56
+ it { should_not be_installed.by('npm') }
57
+ end
58
+
59
+ describe package('bower') do
60
+ it { should be_installed.by('npm').with_version('0.9.2') }
61
+ its(:command) { should eq "npm ls bower -g | grep -w -- 0.9.2" }
62
+ end
63
+
64
+ describe package('bower') do
65
+ it { should_not be_installed.by('npm').with_version('invalid-version') }
66
+ end
67
+
68
+
69
+ describe package('mongo') do
70
+ it { should be_installed.by('pecl') }
71
+ its(:command) { should eq "pecl list | grep -w -- \\^mongo" }
72
+ end
73
+
74
+ describe package('invalid-pecl') do
75
+ it { should_not be_installed.by('pecl') }
76
+ end
77
+
78
+ describe package('mongo') do
79
+ it { should be_installed.by('pecl').with_version('1.4.1') }
80
+ its(:command) { should eq "pecl list | grep -w -- \\^mongo | grep -w -- 1.4.1" }
81
+ end
82
+
83
+ describe package('mongo') do
84
+ it { should_not be_installed.by('pecl').with_version('invalid-version') }
85
+ end
86
+
87
+ describe package('XML_Util') do
88
+ it { should be_installed.by('pear').with_version('1.2.1') }
89
+ its(:command) { should eq "pear list | grep -w -- \\^XML_Util | grep -w -- 1.2.1" }
90
+ end
91
+
92
+ describe package('supervisor') do
93
+ it { should be_installed.by('pip').with_version('3.0') }
94
+ its(:command) { should eq "pip list | grep -w -- \\^supervisor | grep -w -- 3.0" }
95
+ end
96
+
97
+ describe package('invalid-pip') do
98
+ it { should_not be_installed.by('pip').with_version('invalid-version') }
99
+ end
100
+
101
+ describe package('App::Ack') do
102
+ it { should be_installed.by('cpan') }
103
+ its(:command) { should eq "cpan -l | grep -w -- \\^App::Ack" }
104
+ end
105
+
106
+ describe package('App::Ack') do
107
+ it { should be_installed.by('cpan').with_version('2.04') }
108
+ its(:command) { should eq "cpan -l | grep -w -- \\^App::Ack | grep -w -- 2.04" }
109
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ include SpecInfra::Helper::NixOS
4
+
5
+ describe service('sshd') do
6
+ it { should be_enabled }
7
+ its(:command) { should eq "systemctl --plain list-dependencies multi-user.target | grep 'sshd.service$'" }
8
+ end
9
+
10
+ describe service('invalid-service') do
11
+ it { should_not be_enabled }
12
+ end
13
+
14
+ describe service('sshd') do
15
+ it { should be_enabled.with_level(3) }
16
+ its(:command) { should eq "systemctl --plain list-dependencies multi-user.target | grep 'sshd.service$'" }
17
+ end
18
+
19
+ describe service('sshd') do
20
+ it { should be_enabled.with_level("graphical.target") }
21
+ its(:command) { should eq "systemctl --plain list-dependencies graphical.target | grep 'sshd.service$'" }
22
+ end
23
+
24
+ describe service('invalid-service') do
25
+ it { should_not be_enabled.with_level(4) }
26
+ end
27
+
28
+ describe service('sshd') do
29
+ it { should be_running }
30
+ its(:command) { should eq "systemctl is-active sshd.service" }
31
+ end
32
+
33
+ describe service('invalid-daemon') do
34
+ it { should_not be_running }
35
+ end
36
+
37
+ describe service('sshd') do
38
+ let(:stdout) { "sshd is stopped\r\n" }
39
+ it { should be_running }
40
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serverspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.1
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gosuke Miyashita
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-07 00:00:00.000000000 Z
11
+ date: 2014-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: net-ssh
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.13'
75
+ version: '1.17'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.13'
82
+ version: '1.17'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: bundler
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -108,34 +108,6 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: 10.1.1
111
- - !ruby/object:Gem::Dependency
112
- name: octokit
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: 2.7.2
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: 2.7.2
125
- - !ruby/object:Gem::Dependency
126
- name: octorelease
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
111
  description: RSpec tests for your servers configured by Puppet, Chef or anything else
140
112
  email:
141
113
  - gosukenator@gmail.com
@@ -336,6 +308,9 @@ files:
336
308
  - spec/gentoo/zfs_spec.rb
337
309
  - spec/helper/properties_spec.rb
338
310
  - spec/helper/type_spec.rb
311
+ - spec/nixos/file_spec.rb
312
+ - spec/nixos/package_spec.rb
313
+ - spec/nixos/service_spec.rb
339
314
  - spec/plamo/cgroup_spec.rb
340
315
  - spec/plamo/command_spec.rb
341
316
  - spec/plamo/cron_spec.rb
@@ -580,6 +555,9 @@ test_files:
580
555
  - spec/gentoo/zfs_spec.rb
581
556
  - spec/helper/properties_spec.rb
582
557
  - spec/helper/type_spec.rb
558
+ - spec/nixos/file_spec.rb
559
+ - spec/nixos/package_spec.rb
560
+ - spec/nixos/service_spec.rb
583
561
  - spec/plamo/cgroup_spec.rb
584
562
  - spec/plamo/command_spec.rb
585
563
  - spec/plamo/cron_spec.rb