inspec 0.9.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.
Files changed (247) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/.rubocop.yml +65 -0
  4. data/.travis.yml +23 -0
  5. data/CHANGELOG.md +38 -0
  6. data/Gemfile +33 -0
  7. data/LICENSE +201 -0
  8. data/MAINTAINERS.md +28 -0
  9. data/MAINTAINERS.toml +42 -0
  10. data/README.md +257 -0
  11. data/Rakefile +47 -0
  12. data/bin/inspec +109 -0
  13. data/docs/ctl_inspec.rst +195 -0
  14. data/docs/dsl_inspec.rst +182 -0
  15. data/docs/readme.rst +100 -0
  16. data/docs/resources.rst +4319 -0
  17. data/docs/template.rst +51 -0
  18. data/examples/test-kitchen/.kitchen.yml +20 -0
  19. data/examples/test-kitchen/Berksfile +3 -0
  20. data/examples/test-kitchen/Gemfile +21 -0
  21. data/examples/test-kitchen/README.md +27 -0
  22. data/examples/test-kitchen/metadata.rb +7 -0
  23. data/examples/test-kitchen/recipes/default.rb +6 -0
  24. data/examples/test-kitchen/recipes/nginx.rb +30 -0
  25. data/examples/test-kitchen/test/integration/default/web_spec.rb +28 -0
  26. data/inspec.gemspec +30 -0
  27. data/lib/inspec.rb +20 -0
  28. data/lib/inspec/backend.rb +42 -0
  29. data/lib/inspec/dsl.rb +151 -0
  30. data/lib/inspec/log.rb +34 -0
  31. data/lib/inspec/metadata.rb +79 -0
  32. data/lib/inspec/plugins.rb +9 -0
  33. data/lib/inspec/plugins/resource.rb +62 -0
  34. data/lib/inspec/profile.rb +138 -0
  35. data/lib/inspec/profile_context.rb +170 -0
  36. data/lib/inspec/resource.rb +76 -0
  37. data/lib/inspec/rspec_json_formatter.rb +27 -0
  38. data/lib/inspec/rule.rb +170 -0
  39. data/lib/inspec/runner.rb +154 -0
  40. data/lib/inspec/shell.rb +66 -0
  41. data/lib/inspec/targets.rb +9 -0
  42. data/lib/inspec/targets/core.rb +27 -0
  43. data/lib/inspec/targets/dir.rb +67 -0
  44. data/lib/inspec/targets/file.rb +29 -0
  45. data/lib/inspec/targets/folder.rb +43 -0
  46. data/lib/inspec/targets/tar.rb +34 -0
  47. data/lib/inspec/targets/url.rb +39 -0
  48. data/lib/inspec/targets/zip.rb +47 -0
  49. data/lib/inspec/version.rb +7 -0
  50. data/lib/matchers/matchers.rb +221 -0
  51. data/lib/resources/apache.rb +29 -0
  52. data/lib/resources/apache_conf.rb +113 -0
  53. data/lib/resources/apt.rb +140 -0
  54. data/lib/resources/audit_policy.rb +63 -0
  55. data/lib/resources/auditd_conf.rb +56 -0
  56. data/lib/resources/auditd_rules.rb +53 -0
  57. data/lib/resources/bond.rb +65 -0
  58. data/lib/resources/bridge.rb +114 -0
  59. data/lib/resources/command.rb +57 -0
  60. data/lib/resources/csv.rb +32 -0
  61. data/lib/resources/directory.rb +15 -0
  62. data/lib/resources/etc_group.rb +150 -0
  63. data/lib/resources/file.rb +110 -0
  64. data/lib/resources/gem.rb +46 -0
  65. data/lib/resources/group.rb +132 -0
  66. data/lib/resources/host.rb +143 -0
  67. data/lib/resources/inetd_conf.rb +56 -0
  68. data/lib/resources/interface.rb +127 -0
  69. data/lib/resources/iptables.rb +65 -0
  70. data/lib/resources/json.rb +64 -0
  71. data/lib/resources/kernel_module.rb +40 -0
  72. data/lib/resources/kernel_parameter.rb +55 -0
  73. data/lib/resources/limits_conf.rb +55 -0
  74. data/lib/resources/login_def.rb +60 -0
  75. data/lib/resources/mysql.rb +81 -0
  76. data/lib/resources/mysql_conf.rb +116 -0
  77. data/lib/resources/mysql_session.rb +52 -0
  78. data/lib/resources/npm.rb +44 -0
  79. data/lib/resources/ntp_conf.rb +58 -0
  80. data/lib/resources/oneget.rb +63 -0
  81. data/lib/resources/os.rb +22 -0
  82. data/lib/resources/os_env.rb +34 -0
  83. data/lib/resources/package.rb +169 -0
  84. data/lib/resources/parse_config.rb +75 -0
  85. data/lib/resources/passwd.rb +93 -0
  86. data/lib/resources/pip.rb +75 -0
  87. data/lib/resources/port.rb +296 -0
  88. data/lib/resources/postgres.rb +37 -0
  89. data/lib/resources/postgres_conf.rb +87 -0
  90. data/lib/resources/postgres_session.rb +59 -0
  91. data/lib/resources/processes.rb +57 -0
  92. data/lib/resources/registry_key.rb +54 -0
  93. data/lib/resources/script.rb +34 -0
  94. data/lib/resources/security_policy.rb +73 -0
  95. data/lib/resources/service.rb +379 -0
  96. data/lib/resources/ssh_conf.rb +75 -0
  97. data/lib/resources/user.rb +374 -0
  98. data/lib/resources/windows_feature.rb +77 -0
  99. data/lib/resources/yaml.rb +23 -0
  100. data/lib/resources/yum.rb +154 -0
  101. data/lib/utils/convert.rb +12 -0
  102. data/lib/utils/detect.rb +15 -0
  103. data/lib/utils/find_files.rb +36 -0
  104. data/lib/utils/hash.rb +13 -0
  105. data/lib/utils/modulator.rb +12 -0
  106. data/lib/utils/parser.rb +61 -0
  107. data/lib/utils/simpleconfig.rb +115 -0
  108. data/tasks/maintainers.rb +213 -0
  109. data/test/docker_run.rb +156 -0
  110. data/test/docker_test.rb +51 -0
  111. data/test/helper.rb +200 -0
  112. data/test/integration/.kitchen.yml +42 -0
  113. data/test/integration/Berksfile +4 -0
  114. data/test/integration/cookbooks/os_prepare/metadata.rb +8 -0
  115. data/test/integration/cookbooks/os_prepare/recipes/apt.rb +20 -0
  116. data/test/integration/cookbooks/os_prepare/recipes/default.rb +9 -0
  117. data/test/integration/cookbooks/os_prepare/recipes/file.rb +21 -0
  118. data/test/integration/cookbooks/os_prepare/recipes/package.rb +26 -0
  119. data/test/integration/default/_debug_spec.rb +1 -0
  120. data/test/integration/default/apt_spec.rb +42 -0
  121. data/test/integration/default/file_spec.rb +109 -0
  122. data/test/integration/default/group_spec.rb +32 -0
  123. data/test/integration/default/kernel_module_spec.rb +17 -0
  124. data/test/integration/default/kernel_parameter_spec.rb +56 -0
  125. data/test/integration/default/package_spec.rb +11 -0
  126. data/test/integration/default/service_spec.rb +28 -0
  127. data/test/integration/default/user_spec.rb +44 -0
  128. data/test/resource/command_test.rb +33 -0
  129. data/test/resource/dsl_test.rb +45 -0
  130. data/test/resource/file_test.rb +130 -0
  131. data/test/resource/ssh_config.rb +9 -0
  132. data/test/resource/sshd_config.rb +9 -0
  133. data/test/test-extra.yaml +11 -0
  134. data/test/test.yaml +11 -0
  135. data/test/unit/mock/cmd/Get-NetAdapter +24 -0
  136. data/test/unit/mock/cmd/GetUserAccount +33 -0
  137. data/test/unit/mock/cmd/GetWin32Group +23 -0
  138. data/test/unit/mock/cmd/PATH +1 -0
  139. data/test/unit/mock/cmd/Resolve-DnsName +26 -0
  140. data/test/unit/mock/cmd/Test-NetConnection +4 -0
  141. data/test/unit/mock/cmd/auditctl +7 -0
  142. data/test/unit/mock/cmd/auditpol +2 -0
  143. data/test/unit/mock/cmd/brew-info-jq +1 -0
  144. data/test/unit/mock/cmd/chage-l-root +7 -0
  145. data/test/unit/mock/cmd/dpkg-s-curl +21 -0
  146. data/test/unit/mock/cmd/dscl +5 -0
  147. data/test/unit/mock/cmd/etc-apt +7 -0
  148. data/test/unit/mock/cmd/find-etc-rc-d-name-S +12 -0
  149. data/test/unit/mock/cmd/find-net-interface +9 -0
  150. data/test/unit/mock/cmd/gem-list-local-a-q-rubocop +1 -0
  151. data/test/unit/mock/cmd/get-net-tcpconnection +24 -0
  152. data/test/unit/mock/cmd/get-netadapter-binding-bridge +4 -0
  153. data/test/unit/mock/cmd/get-package-firefox +30 -0
  154. data/test/unit/mock/cmd/get-package-ruby +18 -0
  155. data/test/unit/mock/cmd/get-service-dhcp +10 -0
  156. data/test/unit/mock/cmd/get-windows-feature +7 -0
  157. data/test/unit/mock/cmd/getent-hosts-example.com +1 -0
  158. data/test/unit/mock/cmd/getent-passwd-root +1 -0
  159. data/test/unit/mock/cmd/id-chartmann +1 -0
  160. data/test/unit/mock/cmd/id-root +1 -0
  161. data/test/unit/mock/cmd/initctl-show-config-ssh +3 -0
  162. data/test/unit/mock/cmd/initctl-status-ssh +1 -0
  163. data/test/unit/mock/cmd/iptables-s +6 -0
  164. data/test/unit/mock/cmd/launchctl-list +3 -0
  165. data/test/unit/mock/cmd/ls-1-etc-init.d +2 -0
  166. data/test/unit/mock/cmd/ls-sys-class-net-br +2 -0
  167. data/test/unit/mock/cmd/lsmod +2 -0
  168. data/test/unit/mock/cmd/lsof-np-itcp +4 -0
  169. data/test/unit/mock/cmd/netstat-tulpen +5 -0
  170. data/test/unit/mock/cmd/npm-ls-g--json-bower +9 -0
  171. data/test/unit/mock/cmd/pacman-qi-curl +21 -0
  172. data/test/unit/mock/cmd/ping-example.com +6 -0
  173. data/test/unit/mock/cmd/pip-show-jinja2 +11 -0
  174. data/test/unit/mock/cmd/ps-aux +3 -0
  175. data/test/unit/mock/cmd/pw-usershow-root-7 +1 -0
  176. data/test/unit/mock/cmd/reg_schedule +1 -0
  177. data/test/unit/mock/cmd/rpm-qia-curl +24 -0
  178. data/test/unit/mock/cmd/sbin_sysctl +1 -0
  179. data/test/unit/mock/cmd/secedit-export +7 -0
  180. data/test/unit/mock/cmd/service-e +2 -0
  181. data/test/unit/mock/cmd/service-sendmail-onestatus +3 -0
  182. data/test/unit/mock/cmd/service-sshd-status +1 -0
  183. data/test/unit/mock/cmd/sockstat +5 -0
  184. data/test/unit/mock/cmd/success +0 -0
  185. data/test/unit/mock/cmd/systemctl-show-all-sshd +6 -0
  186. data/test/unit/mock/cmd/win32_product +8 -0
  187. data/test/unit/mock/cmd/yum-repolist-all +52 -0
  188. data/test/unit/mock/files/auditd.conf +4 -0
  189. data/test/unit/mock/files/bond0 +37 -0
  190. data/test/unit/mock/files/etcgroup +3 -0
  191. data/test/unit/mock/files/example.csv +6 -0
  192. data/test/unit/mock/files/inetd.conf +2 -0
  193. data/test/unit/mock/files/kitchen.yml +7 -0
  194. data/test/unit/mock/files/limits.conf +5 -0
  195. data/test/unit/mock/files/login.defs +5 -0
  196. data/test/unit/mock/files/mysql.conf +8 -0
  197. data/test/unit/mock/files/mysql2.conf +2 -0
  198. data/test/unit/mock/files/ntp.conf +5 -0
  199. data/test/unit/mock/files/passwd +2 -0
  200. data/test/unit/mock/files/policyfile.lock.json +12 -0
  201. data/test/unit/mock/files/ssh_config +5 -0
  202. data/test/unit/mock/files/sshd_config +7 -0
  203. data/test/unit/mock/profiles/empty/metadata.rb +0 -0
  204. data/test/unit/mock/profiles/metadata/metadata.rb +1 -0
  205. data/test/unit/profile_context_test.rb +140 -0
  206. data/test/unit/profile_test.rb +49 -0
  207. data/test/unit/resources/apt_test.rb +46 -0
  208. data/test/unit/resources/audit_policy_test.rb +13 -0
  209. data/test/unit/resources/auditd_conf_test.rb +15 -0
  210. data/test/unit/resources/auditd_rules_test.rb +21 -0
  211. data/test/unit/resources/bond_test.rb +24 -0
  212. data/test/unit/resources/bridge_test.rb +56 -0
  213. data/test/unit/resources/csv_test.rb +35 -0
  214. data/test/unit/resources/etc_group_test.rb +37 -0
  215. data/test/unit/resources/gem_test.rb +20 -0
  216. data/test/unit/resources/group_test.rb +96 -0
  217. data/test/unit/resources/host_test.rb +38 -0
  218. data/test/unit/resources/inetd_conf_test.rb +15 -0
  219. data/test/unit/resources/interface_test.rb +54 -0
  220. data/test/unit/resources/iptables_test.rb +30 -0
  221. data/test/unit/resources/json_test.rb +36 -0
  222. data/test/unit/resources/kernel_module_test.rb +23 -0
  223. data/test/unit/resources/kernel_parameter_test.rb +13 -0
  224. data/test/unit/resources/limits_conf_test.rb +14 -0
  225. data/test/unit/resources/login_def_test.rb +16 -0
  226. data/test/unit/resources/mysql_conf_test.rb +14 -0
  227. data/test/unit/resources/npm_test.rb +20 -0
  228. data/test/unit/resources/ntp_conf_test.rb +16 -0
  229. data/test/unit/resources/oneget_test.rb +45 -0
  230. data/test/unit/resources/os_env_test.rb +13 -0
  231. data/test/unit/resources/package_test.rb +51 -0
  232. data/test/unit/resources/passwd_test.rb +24 -0
  233. data/test/unit/resources/pip_test.rb +15 -0
  234. data/test/unit/resources/port_test.rb +46 -0
  235. data/test/unit/resources/processes_test.rb +32 -0
  236. data/test/unit/resources/registry_key_test.rb +19 -0
  237. data/test/unit/resources/script_test.rb +19 -0
  238. data/test/unit/resources/security_policy_test.rb +16 -0
  239. data/test/unit/resources/service_test.rb +116 -0
  240. data/test/unit/resources/ssh_conf_test.rb +33 -0
  241. data/test/unit/resources/user_test.rb +93 -0
  242. data/test/unit/resources/windows_feature.rb +17 -0
  243. data/test/unit/resources/yaml_test.rb +34 -0
  244. data/test/unit/resources/yum_test.rb +68 -0
  245. data/test/unit/simpleconfig_test.rb +80 -0
  246. data/test/unit/utils/content_parser_test.rb +30 -0
  247. metadata +555 -0
@@ -0,0 +1,42 @@
1
+ ---
2
+ driver:
3
+ name: vagrant
4
+
5
+ provisioner:
6
+ name: chef_solo
7
+
8
+ verifier:
9
+ name: inspec
10
+ sudo: true
11
+
12
+ platforms:
13
+ - name: centos-7.1
14
+ - name: centos-6.7
15
+ - name: centos-6.7-i386
16
+ - name: centos-5.11
17
+ - name: centos-5.11-i386
18
+ - name: debian-6.0.10
19
+ - name: debian-6.0.10-i386
20
+ - name: debian-7.8
21
+ - name: debian-7.8-i386
22
+ - name: debian-8.1
23
+ - name: debian-8.1-i386
24
+ - name: fedora-21
25
+ - name: fedora-21-i386
26
+ - name: fedora-22
27
+ - name: freebsd-9.3
28
+ - name: freebsd-10.2
29
+ - name: opensuse-13.2-x86_64
30
+ - name: opensuse-13.2-i386
31
+ - name: ubuntu-14.04
32
+ - name: ubuntu-14.04-i386
33
+ - name: ubuntu-12.04
34
+ - name: ubuntu-12.04-i386
35
+ - name: ubuntu-10.04
36
+ - name: ubuntu-10.04-i386
37
+
38
+ suites:
39
+ - name: default
40
+ run_list:
41
+ - recipe[os_prepare]
42
+ attributes:
@@ -0,0 +1,4 @@
1
+ source 'https://supermarket.chef.io'
2
+
3
+ cookbook 'apt'
4
+ cookbook 'os_prepare', path: './cookbooks/os_prepare'
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+ name 'os_prepare'
3
+ maintainer 'Chef Software, Inc.'
4
+ maintainer_email 'support@chef.io'
5
+ description 'This cookbook prepares the test operating systems'
6
+ version '1.0.0'
7
+ depends 'apt'
8
+ depends 'yum'
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+ # author: Christoph Hartmann
3
+ # author: Dominik Richter
4
+
5
+ # add nginx apt repository
6
+ case node['platform']
7
+ when 'ubuntu'
8
+ include_recipe('apt')
9
+ apt_repository 'nginx' do
10
+ uri 'ppa:nginx/stable'
11
+ distribution node['lsb']['codename']
12
+ end
13
+ when 'debian'
14
+ include_recipe('apt')
15
+ apt_repository 'nginx' do
16
+ uri 'http://nginx.org/packages/debian'
17
+ distribution node['lsb']['codename']
18
+ components ['nginx']
19
+ end
20
+ end
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+ # author: Christoph Hartmann
3
+ # author: Dominik Richter
4
+ #
5
+ # prepare all operating systems with the required configuration
6
+
7
+ include_recipe('os_prepare::apt')
8
+ include_recipe('os_prepare::file')
9
+ include_recipe('os_prepare::package')
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+ # author: Christoph Hartmann
3
+ # author: Dominik Richter
4
+ #
5
+ # prepares a sample file for verification
6
+
7
+ gid = 'root'
8
+ gid = 'wheel' if node['platform_family'] == 'freebsd'
9
+
10
+ file '/tmp/file' do
11
+ mode '0765'
12
+ owner 'root'
13
+ group gid
14
+ content 'hello world'
15
+ end
16
+
17
+ directory '/tmp/folder' do
18
+ mode '0567'
19
+ owner 'root'
20
+ group gid
21
+ end
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+ # author: Christoph Hartmann
3
+ # author: Dominik Richter
4
+ #
5
+ # installs everything to do the package test
6
+
7
+ case node['platform']
8
+ when 'ubuntu'
9
+ include_recipe('apt')
10
+
11
+ package 'curl'
12
+ when 'rhel', 'centos', 'fedora'
13
+ include_recipe('yum')
14
+
15
+ # TODO: support DNF natively
16
+ # Special care for fedora 22, since dnf is not officially supported yet
17
+ # https://github.com/chef/chef/issues/3201
18
+ if node['platform_version'] == '22'
19
+ execute 'dnf install -y yum'
20
+ end
21
+
22
+ package 'curl'
23
+ when 'freebsd'
24
+ # do nothing
25
+ # TODO: implement Freebsd packages
26
+ end
@@ -0,0 +1 @@
1
+ p "You are currently running on OS family: #{os[:family] || 'unknown'}, OS release: #{os[:release] || 'unknown'}"
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+
3
+ if os[:family] == 'ubuntu'
4
+
5
+ describe apt('ppa:nginx/stable') do
6
+ it { should exist }
7
+ it { should be_enabled }
8
+ end
9
+
10
+ describe apt('nginx/stable') do
11
+ it { should exist }
12
+ it { should be_enabled }
13
+ end
14
+
15
+ describe apt('http://ppa.launchpad.net/nginx/stable/ubuntu') do
16
+ it { should exist }
17
+ it { should be_enabled }
18
+ end
19
+
20
+ describe apt('https://deb.nodesource.com/node_4.x/dists/precise/') do
21
+ it { should_not exist }
22
+ it { should_not be_enabled }
23
+ end
24
+
25
+ elsif os[:family] == 'debian'
26
+
27
+ describe apt('http://nginx.org/packages/debian') do
28
+ it { should exist }
29
+ it { should be_enabled }
30
+ end
31
+
32
+ describe apt('http://nginx.org/packages/debian') do
33
+ it { should exist }
34
+ it { should be_enabled }
35
+ end
36
+
37
+ describe apt('https://deb.nodesource.com/node_4.x/dists/precise/') do
38
+ it { should_not exist }
39
+ it { should_not be_enabled }
40
+ end
41
+
42
+ end
@@ -0,0 +1,109 @@
1
+ # encoding: utf-8
2
+
3
+ if os[:family] == 'freebsd'
4
+ filedata = {
5
+ user: 'root',
6
+ group: 'wheel',
7
+ dir_content: "\u0003\u0000",
8
+ dir_md5sum: '598f4fe64aefab8f00bcbea4c9239abf',
9
+ dir_sha256sum: '9b4fb24edd6d1d8830e272398263cdbf026b97392cc35387b991dc0248a628f9',
10
+ }
11
+ else
12
+ filedata = {
13
+ user: 'root',
14
+ group: 'root',
15
+ dir_content: nil,
16
+ dir_md5sum: nil,
17
+ dir_sha256sum: nil,
18
+ }
19
+ end
20
+
21
+ if os.unix?
22
+
23
+ # test regular file
24
+ describe file('/tmp/file') do
25
+ it { should exist }
26
+ it { should be_file }
27
+
28
+ it { should_not be_directory }
29
+ it { should_not be_block_device }
30
+ it { should_not be_character_device }
31
+ it { should_not be_pipe }
32
+ it { should_not be_socket }
33
+ it { should_not be_symlink }
34
+ it { should_not be_mounted }
35
+
36
+ # check owner
37
+ it { should be_owned_by filedata[:user] }
38
+ it { should be_grouped_into filedata[:group] }
39
+
40
+ # it { should have_mode }
41
+ its('mode') { should eq 00765 }
42
+ it { should be_mode 00765 }
43
+
44
+ it { should be_readable }
45
+ it { should be_readable.by('owner') }
46
+ it { should be_readable.by('group') }
47
+ it { should be_readable.by('other') }
48
+ it { should be_readable.by_user(filedata[:user]) }
49
+ it { should_not be_readable.by_user('noroot') }
50
+ # for server spec compatibility
51
+ it { should be_readable.by('others') }
52
+
53
+ it { should be_writable }
54
+ it { should be_writable.by('owner') }
55
+ it { should be_writable.by('group') }
56
+ it { should_not be_writable.by('other') }
57
+ it { should be_writable.by_user(filedata[:user]) }
58
+ # it { should_not be_writable.by_user('noroot') }
59
+ # for server spec compatibility
60
+ it { should_not be_writable.by('others') }
61
+
62
+ it { should be_executable }
63
+ it { should be_executable.by('owner') }
64
+ it { should_not be_executable.by('group') }
65
+ it { should be_executable.by('other') }
66
+ it { should be_executable.by_user(filedata[:user]) }
67
+ # it { should_not be_executable.by_user('noroot') }
68
+ # for server spec compatibility
69
+ it { should be_executable.by('others') }
70
+
71
+ # test extended linux attributes
72
+ # it { should be_immutable }
73
+
74
+ its('content') { should eq 'hello world' }
75
+ its('content') { should match('world') }
76
+ its('size') { should eq 11 }
77
+ its('md5sum') { should eq '5eb63bbbe01eeed093cb22bb8f5acdc3' }
78
+ its('sha256sum') { should eq 'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9' }
79
+ its('product_version') { should eq nil }
80
+ its('file_version') { should eq nil }
81
+
82
+ its('owner') { should eq filedata[:user] }
83
+ its('group') { should eq filedata[:group] }
84
+ its('type') { should eq :file }
85
+ end
86
+
87
+ describe file('/tmp/folder') do
88
+ it { should exist }
89
+ it { should be_directory }
90
+
91
+ it { should_not be_file }
92
+ it { should_not be_block_device }
93
+ it { should_not be_character_device }
94
+ it { should_not be_pipe }
95
+ it { should_not be_socket }
96
+ it { should_not be_symlink }
97
+
98
+ its('content') { should eq filedata[:dir_content] }
99
+ its('md5sum') { should eq filedata[:dir_md5sum] }
100
+ its('sha256sum') { should eq filedata[:dir_sha256sum] }
101
+ its('product_version') { should eq nil }
102
+ its('file_version') { should eq nil }
103
+
104
+ its('owner') { should eq filedata[:user] }
105
+ its('group') { should eq filedata[:group] }
106
+ its('type') { should eq :directory }
107
+ end
108
+
109
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+
3
+ # test root group on linux
4
+ if os.linux?
5
+ describe group('root') do
6
+ it { should exist }
7
+ its('gid') { should eq 0 }
8
+ end
9
+
10
+ describe group('noroot') do
11
+ it { should_not exist }
12
+ its('gid') { should eq nil }
13
+ end
14
+ end
15
+
16
+ if os[:family] == 'freebsd'
17
+
18
+ describe group('wheel') do
19
+ it { should exist }
20
+ its('gid') { should eq 0 }
21
+ end
22
+
23
+ describe group('root') do
24
+ it { should_not exist }
25
+ its('gid') { should eq nil }
26
+ end
27
+
28
+ describe group('noroot') do
29
+ it { should_not exist }
30
+ its('gid') { should eq nil }
31
+ end
32
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ # Test kernel modules on all linux systems
4
+ if os.linux?
5
+
6
+ describe kernel_module('video') do
7
+ it { should be_loaded }
8
+ end
9
+
10
+ describe kernel_module('bridge') do
11
+ it { should_not be_loaded }
12
+ end
13
+
14
+ describe kernel_module('dhcp') do
15
+ it { should_not be_loaded }
16
+ end
17
+ end
@@ -0,0 +1,56 @@
1
+ # encoding: utf-8
2
+
3
+ # prepare values
4
+ if ['ubuntu', 'centos', 'fedora', 'opensuse', 'debian'].include?(os[:family])
5
+ test_values = {
6
+ kernel_panic: 0,
7
+ ip_local_port_range: "32768\t61000",
8
+ forwarding: 0,
9
+ sched_autogroup_enabled: 1,
10
+ nf_log: 'NONE',
11
+ }
12
+
13
+ # configue parameter derivations for different OS
14
+ test_values[:sched_autogroup_enabled] = 0 if ['centos', 'debian'].include?(os[:family])
15
+
16
+ if (os[:family] == 'ubuntu' && os[:release].to_f == 10.04) ||
17
+ (os[:family] == 'debian' && os[:release].to_i == 6) ||
18
+ (os[:family] == 'centos' && os[:release].to_i == 5) ||
19
+ (os[:family] == 'opensuse')
20
+ test_values[:sched_autogroup_enabled] = nil
21
+ end
22
+
23
+ test_values[:nf_log] = nil if os[:family] == 'centos' && os[:release].to_i == 5
24
+ test_values[:kernel_panic] = 90 if os[:family] == 'opensuse'
25
+
26
+ else
27
+ test_values = {}
28
+ end
29
+
30
+ # test on all linux systems
31
+ if os.linux?
32
+ describe kernel_parameter('kernel.panic') do
33
+ its(:value) { should eq test_values[:kernel_panic] }
34
+ end
35
+
36
+ describe kernel_parameter('net.netfilter.nf_log.0') do
37
+ its(:value) { should eq test_values[:nf_log] }
38
+ end
39
+
40
+ describe kernel_parameter('kernel.sched_autogroup_enabled') do
41
+ its(:value) { should eq test_values[:sched_autogroup_enabled] }
42
+ end
43
+
44
+ describe kernel_parameter('net.ipv4.ip_local_port_range') do
45
+ its(:value) { should eq test_values[:ip_local_port_range] }
46
+ end
47
+
48
+ describe kernel_parameter('net.ipv4.conf.all.forwarding') do
49
+ its(:value) { should eq test_values[:forwarding] }
50
+ end
51
+
52
+ # serverspec compatability
53
+ describe linux_kernel_parameter('net.ipv4.conf.all.forwarding') do
54
+ its(:value) { should eq test_values[:forwarding] }
55
+ end
56
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+
3
+ if ['centos', 'fedora', 'opensuse', 'debian', 'ubuntu'].include?(os[:family])
4
+ describe package('curl') do
5
+ it { should be_installed }
6
+ end
7
+
8
+ describe package('nginx') do
9
+ it { should_not be_installed }
10
+ end
11
+ end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+
3
+ # based on operating system we select the available service
4
+ if ['centos', 'fedora', 'freebsd', 'opensuse'].include?(os[:family])
5
+ # CentOS, Fedora
6
+ unavailable_service = 'ssh'
7
+ available_service = 'sshd'
8
+ elsif ['debian'].include?(os[:family])
9
+ # Debian
10
+ unavailable_service = 'clamav'
11
+ available_service = 'ssh'
12
+ else
13
+ # Ubuntu
14
+ unavailable_service = 'sshd'
15
+ available_service = 'ssh'
16
+ end
17
+
18
+ describe service(unavailable_service) do
19
+ it { should_not be_enabled }
20
+ it { should_not be_installed }
21
+ it { should_not be_running }
22
+ end
23
+
24
+ describe service(available_service) do
25
+ it { should be_enabled }
26
+ it { should be_installed }
27
+ it { should be_running }
28
+ end