inspec 0.30.0 → 0.31.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 (316) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +50 -2
  3. data/Gemfile +2 -1
  4. data/docs/cli.rst +1 -17
  5. data/docs/resources.rst +128 -0
  6. data/docs/shell.rst +130 -0
  7. data/inspec.gemspec +3 -4
  8. data/lib/bundles/inspec-compliance/.kitchen.yml +0 -1
  9. data/lib/bundles/inspec-compliance/README.md +8 -3
  10. data/lib/bundles/inspec-compliance/api.rb +21 -6
  11. data/lib/bundles/inspec-compliance/bootstrap.sh +13 -9
  12. data/lib/bundles/inspec-compliance/cli.rb +23 -19
  13. data/lib/bundles/inspec-compliance/target.rb +1 -0
  14. data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +42 -5
  15. data/lib/bundles/inspec-init/cli.rb +9 -0
  16. data/lib/bundles/inspec-supermarket/cli.rb +9 -0
  17. data/lib/bundles/inspec-supermarket/target.rb +2 -1
  18. data/lib/fetchers/local.rb +5 -2
  19. data/lib/fetchers/url.rb +1 -0
  20. data/lib/inspec/base_cli.rb +2 -1
  21. data/lib/inspec/cli.rb +14 -5
  22. data/lib/inspec/dependencies/dependency_set.rb +38 -0
  23. data/lib/inspec/dependencies/requirement.rb +103 -0
  24. data/lib/inspec/{dependencies.rb → dependencies/resolver.rb} +13 -132
  25. data/lib/inspec/dependencies/vendor_index.rb +98 -0
  26. data/lib/inspec/plugins/source_reader.rb +4 -0
  27. data/lib/inspec/profile.rb +2 -2
  28. data/lib/inspec/resource.rb +2 -0
  29. data/lib/inspec/runner.rb +13 -1
  30. data/lib/inspec/runner_mock.rb +4 -0
  31. data/lib/inspec/runner_rspec.rb +6 -2
  32. data/lib/inspec/shell.rb +22 -1
  33. data/lib/inspec/version.rb +1 -1
  34. data/lib/resources/iis_site.rb +107 -0
  35. data/lib/resources/port.rb +11 -4
  36. data/lib/resources/ssh_conf.rb +10 -2
  37. data/lib/resources/ssl.rb +94 -0
  38. data/lib/resources/xinetd.rb +11 -2
  39. data/lib/utils/parser.rb +6 -1
  40. metadata +17 -561
  41. data/lib/utils/hash_map.rb +0 -37
  42. data/tasks/maintainers.rb +0 -213
  43. data/test/bench/startup/startup.flat.txt +0 -1005
  44. data/test/bench/startup/startup.graph.html +0 -71958
  45. data/test/bench/startup/startup.grind.dat +0 -101602
  46. data/test/bench/startup/startup.stack.html +0 -24516
  47. data/test/bench/startup.flat.txt +0 -998
  48. data/test/bench/startup.graph.html +0 -71420
  49. data/test/bench/startup.grind.dat +0 -103554
  50. data/test/bench/startup.stack.html +0 -25015
  51. data/test/cookbooks/os_prepare/attributes/default.rb +0 -2
  52. data/test/cookbooks/os_prepare/files/empty.iso +0 -0
  53. data/test/cookbooks/os_prepare/files/example.csv +0 -7
  54. data/test/cookbooks/os_prepare/files/example.ini +0 -6
  55. data/test/cookbooks/os_prepare/files/example.json +0 -12
  56. data/test/cookbooks/os_prepare/files/example.yml +0 -7
  57. data/test/cookbooks/os_prepare/metadata.rb +0 -13
  58. data/test/cookbooks/os_prepare/recipes/_runit_service_centos.rb +0 -34
  59. data/test/cookbooks/os_prepare/recipes/_upstart_service_centos.rb +0 -25
  60. data/test/cookbooks/os_prepare/recipes/apache.rb +0 -14
  61. data/test/cookbooks/os_prepare/recipes/apt.rb +0 -20
  62. data/test/cookbooks/os_prepare/recipes/auditctl.rb +0 -8
  63. data/test/cookbooks/os_prepare/recipes/default.rb +0 -29
  64. data/test/cookbooks/os_prepare/recipes/file.rb +0 -46
  65. data/test/cookbooks/os_prepare/recipes/iptables.rb +0 -13
  66. data/test/cookbooks/os_prepare/recipes/json_yaml_csv_ini.rb +0 -34
  67. data/test/cookbooks/os_prepare/recipes/mount.rb +0 -33
  68. data/test/cookbooks/os_prepare/recipes/package.rb +0 -25
  69. data/test/cookbooks/os_prepare/recipes/postgres.rb +0 -20
  70. data/test/cookbooks/os_prepare/recipes/prep_container.rb +0 -15
  71. data/test/cookbooks/os_prepare/recipes/registry_key.rb +0 -87
  72. data/test/cookbooks/os_prepare/recipes/service.rb +0 -19
  73. data/test/cookbooks/os_prepare/templates/default/sv-default-svlog-run.erb +0 -2
  74. data/test/docker_run.rb +0 -162
  75. data/test/docker_test.rb +0 -58
  76. data/test/functional/helper.rb +0 -37
  77. data/test/functional/inheritance_test.rb +0 -62
  78. data/test/functional/inspec_archive_test.rb +0 -80
  79. data/test/functional/inspec_compliance_test.rb +0 -61
  80. data/test/functional/inspec_exec_json_test.rb +0 -122
  81. data/test/functional/inspec_exec_jsonmin_test.rb +0 -59
  82. data/test/functional/inspec_exec_test.rb +0 -123
  83. data/test/functional/inspec_json_profile_test.rb +0 -103
  84. data/test/functional/inspec_test.rb +0 -91
  85. data/test/helper.rb +0 -329
  86. data/test/integration/default/_debug_spec.rb +0 -8
  87. data/test/integration/default/apache_conf_spec.rb +0 -21
  88. data/test/integration/default/apt_spec.rb +0 -37
  89. data/test/integration/default/auditd_rules_spec.rb +0 -32
  90. data/test/integration/default/cmp_matcher_spec.rb +0 -115
  91. data/test/integration/default/csv_spec.rb +0 -11
  92. data/test/integration/default/etc_group_spec.rb +0 -29
  93. data/test/integration/default/file_spec.rb +0 -195
  94. data/test/integration/default/group_spec.rb +0 -59
  95. data/test/integration/default/ini_spec.rb +0 -11
  96. data/test/integration/default/iptables_spec.rb +0 -29
  97. data/test/integration/default/json_spec.rb +0 -11
  98. data/test/integration/default/kernel_module_spec.rb +0 -23
  99. data/test/integration/default/kernel_parameter_spec.rb +0 -60
  100. data/test/integration/default/mount_spec.rb +0 -19
  101. data/test/integration/default/os_spec.rb +0 -13
  102. data/test/integration/default/package_spec.rb +0 -30
  103. data/test/integration/default/port_spec.rb +0 -27
  104. data/test/integration/default/postgres_session_spec.rb +0 -13
  105. data/test/integration/default/powershell_spec.rb +0 -42
  106. data/test/integration/default/registry_key_spec.rb +0 -109
  107. data/test/integration/default/secpol_spec.rb +0 -11
  108. data/test/integration/default/service_spec.rb +0 -128
  109. data/test/integration/default/user_spec.rb +0 -96
  110. data/test/integration/default/vbscript_spec.rb +0 -22
  111. data/test/integration/default/wmi_spec.rb +0 -66
  112. data/test/integration/default/yaml_spec.rb +0 -11
  113. data/test/resource/command_test.rb +0 -33
  114. data/test/resource/dsl_test.rb +0 -45
  115. data/test/resource/file_test.rb +0 -146
  116. data/test/resource/ssh_config.rb +0 -9
  117. data/test/resource/sshd_config.rb +0 -9
  118. data/test/test-extra.yaml +0 -11
  119. data/test/test.yaml +0 -11
  120. data/test/unit/control_test.rb +0 -58
  121. data/test/unit/fetchers/local_test.rb +0 -67
  122. data/test/unit/fetchers/mock_test.rb +0 -43
  123. data/test/unit/fetchers/tar_test.rb +0 -36
  124. data/test/unit/fetchers/url_test.rb +0 -152
  125. data/test/unit/fetchers/zip_test.rb +0 -36
  126. data/test/unit/fetchers_test.rb +0 -65
  127. data/test/unit/metadata_test.rb +0 -137
  128. data/test/unit/mock/cmd/$env-PATH +0 -1
  129. data/test/unit/mock/cmd/Get-NetAdapter +0 -24
  130. data/test/unit/mock/cmd/GetUserAccount +0 -33
  131. data/test/unit/mock/cmd/GetWin32Group +0 -23
  132. data/test/unit/mock/cmd/Resolve-DnsName +0 -26
  133. data/test/unit/mock/cmd/Test-NetConnection +0 -4
  134. data/test/unit/mock/cmd/auditctl +0 -3
  135. data/test/unit/mock/cmd/auditctl-legacy +0 -7
  136. data/test/unit/mock/cmd/auditctl-s +0 -8
  137. data/test/unit/mock/cmd/auditpol +0 -2
  138. data/test/unit/mock/cmd/brew-info-jq +0 -1
  139. data/test/unit/mock/cmd/chage-l-root +0 -7
  140. data/test/unit/mock/cmd/dpkg-s-curl +0 -21
  141. data/test/unit/mock/cmd/dscl +0 -5
  142. data/test/unit/mock/cmd/env +0 -1
  143. data/test/unit/mock/cmd/etc-apt +0 -7
  144. data/test/unit/mock/cmd/find-apache2-conf-enabled +0 -1
  145. data/test/unit/mock/cmd/find-apache2-ports-conf +0 -1
  146. data/test/unit/mock/cmd/find-etc-rc-d-name-S +0 -12
  147. data/test/unit/mock/cmd/find-net-interface +0 -9
  148. data/test/unit/mock/cmd/find-xinetd.d +0 -2
  149. data/test/unit/mock/cmd/gem-list-local-a-q-rubocop +0 -1
  150. data/test/unit/mock/cmd/get-net-tcpconnection +0 -24
  151. data/test/unit/mock/cmd/get-netadapter-binding-bridge +0 -4
  152. data/test/unit/mock/cmd/get-package-firefox +0 -30
  153. data/test/unit/mock/cmd/get-package-ruby +0 -18
  154. data/test/unit/mock/cmd/get-service-dhcp +0 -10
  155. data/test/unit/mock/cmd/get-windows-feature +0 -7
  156. data/test/unit/mock/cmd/get-wmiobject +0 -9
  157. data/test/unit/mock/cmd/getent-hosts-example.com +0 -1
  158. data/test/unit/mock/cmd/getent-passwd-jfolmer +0 -1
  159. data/test/unit/mock/cmd/getent-passwd-root +0 -1
  160. data/test/unit/mock/cmd/hpux-netstat-inet +0 -10
  161. data/test/unit/mock/cmd/hpux-netstat-inet6 +0 -11
  162. data/test/unit/mock/cmd/id-chartmann +0 -1
  163. data/test/unit/mock/cmd/id-jfolmer +0 -1
  164. data/test/unit/mock/cmd/id-root +0 -1
  165. data/test/unit/mock/cmd/initctl--version +0 -5
  166. data/test/unit/mock/cmd/initctl-show-config-ssh +0 -3
  167. data/test/unit/mock/cmd/initctl-status-ssh +0 -1
  168. data/test/unit/mock/cmd/iptables-s +0 -6
  169. data/test/unit/mock/cmd/launchctl-list +0 -3
  170. data/test/unit/mock/cmd/logins-x +0 -4
  171. data/test/unit/mock/cmd/ls-1-etc-init.d +0 -2
  172. data/test/unit/mock/cmd/ls-sys-class-net-br +0 -2
  173. data/test/unit/mock/cmd/lsmod +0 -2
  174. data/test/unit/mock/cmd/lsof-nP-i-FpctPn +0 -63
  175. data/test/unit/mock/cmd/mount +0 -1
  176. data/test/unit/mock/cmd/mount-multiple +0 -2
  177. data/test/unit/mock/cmd/netstat-an.utf8 +0 -13
  178. data/test/unit/mock/cmd/netstat-tulpen +0 -6
  179. data/test/unit/mock/cmd/npm-ls-g--json-bower +0 -9
  180. data/test/unit/mock/cmd/pacman-qi-curl +0 -21
  181. data/test/unit/mock/cmd/ping-example.com +0 -6
  182. data/test/unit/mock/cmd/pip-show-jinja2 +0 -11
  183. data/test/unit/mock/cmd/pkg-info-system-file-system-zfs +0 -8
  184. data/test/unit/mock/cmd/pkginfo-l-SUNWzfsr +0 -7
  185. data/test/unit/mock/cmd/ps-aux +0 -5
  186. data/test/unit/mock/cmd/ps-auxZ +0 -3
  187. data/test/unit/mock/cmd/pw-usershow-root-7 +0 -1
  188. data/test/unit/mock/cmd/reg_schedule +0 -6
  189. data/test/unit/mock/cmd/rpm-qia-curl +0 -24
  190. data/test/unit/mock/cmd/s11-netstat-an-finet-finet6 +0 -32
  191. data/test/unit/mock/cmd/sbin_sysctl +0 -1
  192. data/test/unit/mock/cmd/secedit-export +0 -7
  193. data/test/unit/mock/cmd/service-e +0 -2
  194. data/test/unit/mock/cmd/service-sendmail-onestatus +0 -3
  195. data/test/unit/mock/cmd/service-sshd-status +0 -1
  196. data/test/unit/mock/cmd/sockstat +0 -5
  197. data/test/unit/mock/cmd/success +0 -0
  198. data/test/unit/mock/cmd/swlist-l-product +0 -1
  199. data/test/unit/mock/cmd/systemctl-show-all-dbus +0 -6
  200. data/test/unit/mock/cmd/systemctl-show-all-sshd +0 -7
  201. data/test/unit/mock/cmd/win32_product +0 -8
  202. data/test/unit/mock/cmd/yum-repolist-all +0 -52
  203. data/test/unit/mock/files/apache2.conf +0 -14
  204. data/test/unit/mock/files/auditd.conf +0 -4
  205. data/test/unit/mock/files/bond0 +0 -37
  206. data/test/unit/mock/files/etcgroup +0 -3
  207. data/test/unit/mock/files/example.csv +0 -6
  208. data/test/unit/mock/files/grub.conf +0 -21
  209. data/test/unit/mock/files/inetd.conf +0 -2
  210. data/test/unit/mock/files/kitchen.yml +0 -7
  211. data/test/unit/mock/files/limits.conf +0 -5
  212. data/test/unit/mock/files/login.defs +0 -5
  213. data/test/unit/mock/files/mysql.conf +0 -8
  214. data/test/unit/mock/files/mysql2.conf +0 -2
  215. data/test/unit/mock/files/ntp.conf +0 -5
  216. data/test/unit/mock/files/passwd +0 -2
  217. data/test/unit/mock/files/policyfile.lock.json +0 -12
  218. data/test/unit/mock/files/ports.conf +0 -6
  219. data/test/unit/mock/files/rootwrap.conf +0 -7
  220. data/test/unit/mock/files/serve-cgi-bin.conf +0 -20
  221. data/test/unit/mock/files/shadow +0 -2
  222. data/test/unit/mock/files/ssh_config +0 -5
  223. data/test/unit/mock/files/sshd_config +0 -7
  224. data/test/unit/mock/files/sysctl.conf +0 -7
  225. data/test/unit/mock/files/xinetd.conf +0 -9
  226. data/test/unit/mock/files/xinetd.d/.gitkeep +0 -0
  227. data/test/unit/mock/files/xinetd.d_chargen-dgram +0 -9
  228. data/test/unit/mock/files/xinetd.d_chargen-stream +0 -9
  229. data/test/unit/mock/profiles/complete-metadata/inspec.yml +0 -7
  230. data/test/unit/mock/profiles/complete-profile/controls/filesystem_spec.rb +0 -16
  231. data/test/unit/mock/profiles/complete-profile/inspec.yml +0 -10
  232. data/test/unit/mock/profiles/complete-profile/libraries/testlib.rb +0 -1
  233. data/test/unit/mock/profiles/empty-metadata/inspec.yml +0 -0
  234. data/test/unit/mock/profiles/legacy-complete-metadata/metadata.rb +0 -7
  235. data/test/unit/mock/profiles/legacy-complete-metadata/test/.gitkeep +0 -0
  236. data/test/unit/mock/profiles/legacy-empty-metadata/controls/.gitkeep +0 -0
  237. data/test/unit/mock/profiles/legacy-empty-metadata/metadata.rb +0 -0
  238. data/test/unit/mock/profiles/legacy-simple-metadata/metadata.rb +0 -1
  239. data/test/unit/mock/profiles/legacy-simple-metadata/test/.gitkeep +0 -0
  240. data/test/unit/mock/profiles/library/controls/filesystem_spec.rb +0 -7
  241. data/test/unit/mock/profiles/library/inspec.yml +0 -10
  242. data/test/unit/mock/profiles/library/libraries/gordonlib.rb +0 -2
  243. data/test/unit/mock/profiles/library/libraries/testlib.rb +0 -12
  244. data/test/unit/mock/profiles/resource-tiny/inspec.yml +0 -10
  245. data/test/unit/mock/profiles/resource-tiny/libraries/resource.rb +0 -3
  246. data/test/unit/mock/profiles/simple-metadata/inspec.yml +0 -1
  247. data/test/unit/mock/profiles/skippy-profile-os/controls/one.rb +0 -3
  248. data/test/unit/mock/profiles/skippy-profile-os/inspec.yml +0 -5
  249. data/test/unit/mock/profiles/spec_only/specfile.rb +0 -11
  250. data/test/unit/mock/profiles/supported_inspec/inspec.yml +0 -2
  251. data/test/unit/mock/profiles/unsupported_inspec/inspec.yml +0 -2
  252. data/test/unit/objects_test.rb +0 -65
  253. data/test/unit/plugin_test.rb +0 -44
  254. data/test/unit/plugins/resource_test.rb +0 -60
  255. data/test/unit/profile_context_test.rb +0 -345
  256. data/test/unit/profile_test.rb +0 -252
  257. data/test/unit/resources/apache_conf_test.rb +0 -31
  258. data/test/unit/resources/apt_test.rb +0 -46
  259. data/test/unit/resources/audit_policy_test.rb +0 -13
  260. data/test/unit/resources/auditd_conf_test.rb +0 -15
  261. data/test/unit/resources/auditd_rules_test.rb +0 -91
  262. data/test/unit/resources/bash_test.rb +0 -29
  263. data/test/unit/resources/bond_test.rb +0 -24
  264. data/test/unit/resources/bridge_test.rb +0 -56
  265. data/test/unit/resources/csv_test.rb +0 -35
  266. data/test/unit/resources/etc_group_test.rb +0 -37
  267. data/test/unit/resources/file_test.rb +0 -202
  268. data/test/unit/resources/gem_test.rb +0 -20
  269. data/test/unit/resources/group_test.rb +0 -96
  270. data/test/unit/resources/grub_conf_test.rb +0 -29
  271. data/test/unit/resources/host_test.rb +0 -38
  272. data/test/unit/resources/inetd_conf_test.rb +0 -15
  273. data/test/unit/resources/ini_test.rb +0 -16
  274. data/test/unit/resources/interface_test.rb +0 -54
  275. data/test/unit/resources/iptables_test.rb +0 -35
  276. data/test/unit/resources/json_test.rb +0 -36
  277. data/test/unit/resources/kernel_module_test.rb +0 -23
  278. data/test/unit/resources/kernel_parameter_test.rb +0 -13
  279. data/test/unit/resources/limits_conf_test.rb +0 -14
  280. data/test/unit/resources/login_def_test.rb +0 -16
  281. data/test/unit/resources/mount_test.rb +0 -26
  282. data/test/unit/resources/mysql_conf_test.rb +0 -14
  283. data/test/unit/resources/npm_test.rb +0 -20
  284. data/test/unit/resources/ntp_conf_test.rb +0 -16
  285. data/test/unit/resources/oneget_test.rb +0 -45
  286. data/test/unit/resources/os_env_test.rb +0 -18
  287. data/test/unit/resources/os_test.rb +0 -40
  288. data/test/unit/resources/package_test.rb +0 -87
  289. data/test/unit/resources/parse_config_test.rb +0 -26
  290. data/test/unit/resources/passwd_test.rb +0 -111
  291. data/test/unit/resources/pip_test.rb +0 -15
  292. data/test/unit/resources/port_test.rb +0 -165
  293. data/test/unit/resources/powershell_test.rb +0 -32
  294. data/test/unit/resources/processes_test.rb +0 -72
  295. data/test/unit/resources/registry_key_test.rb +0 -18
  296. data/test/unit/resources/security_policy_test.rb +0 -16
  297. data/test/unit/resources/service_test.rb +0 -305
  298. data/test/unit/resources/shadow_test.rb +0 -67
  299. data/test/unit/resources/ssh_conf_test.rb +0 -33
  300. data/test/unit/resources/user_test.rb +0 -124
  301. data/test/unit/resources/vbscript_test.rb +0 -18
  302. data/test/unit/resources/windows_feature.rb +0 -17
  303. data/test/unit/resources/wmi_test.rb +0 -42
  304. data/test/unit/resources/xinetd_test.rb +0 -60
  305. data/test/unit/resources/yaml_test.rb +0 -34
  306. data/test/unit/resources/yum_test.rb +0 -68
  307. data/test/unit/shell_detector_test.rb +0 -78
  308. data/test/unit/source_reader_test.rb +0 -17
  309. data/test/unit/source_readers/flat_test.rb +0 -61
  310. data/test/unit/source_readers/inspec_test.rb +0 -38
  311. data/test/unit/utils/filter_array_test.rb +0 -59
  312. data/test/unit/utils/filter_table_test.rb +0 -177
  313. data/test/unit/utils/find_files_test.rb +0 -23
  314. data/test/unit/utils/passwd_parser_test.rb +0 -32
  315. data/test/unit/utils/simpleconfig_test.rb +0 -80
  316. data/test/unit/utils/solaris_netstat_parser.rb +0 -124
@@ -1,252 +0,0 @@
1
- # encoding: utf-8
2
- # author: Christoph Hartmann
3
- # author: Dominik Richter
4
-
5
- require 'helper'
6
- require 'inspec/profile_context'
7
-
8
- describe Inspec::Profile do
9
- let(:logger) { Minitest::Mock.new }
10
- let(:home) { MockLoader.home }
11
-
12
- describe 'with an empty profile' do
13
- let(:profile) { MockLoader.load_profile('empty-metadata') }
14
-
15
- it 'has no metadata' do
16
- profile.params[:name].must_be_nil
17
- end
18
-
19
- it 'has no controls' do
20
- profile.params[:controls].must_equal({})
21
- end
22
- end
23
-
24
- describe 'with an empty profile (legacy mode)' do
25
- let(:profile) { MockLoader.load_profile('legacy-empty-metadata') }
26
-
27
- it 'has no metadata' do
28
- profile.params[:name].must_be_nil
29
- end
30
-
31
- it 'has no controls' do
32
- profile.params[:controls].must_equal({})
33
- end
34
- end
35
-
36
- describe 'with simple metadata in profile' do
37
- let(:profile_id) { 'simple-metadata' }
38
- let(:profile) { MockLoader.load_profile(profile_id) }
39
-
40
- it 'has metadata' do
41
- profile.params[:name].must_equal 'yumyum profile'
42
- end
43
-
44
- it 'has no controls' do
45
- profile.params[:controls].must_equal({})
46
- end
47
-
48
- it 'can overwrite the profile ID' do
49
- testID = rand.to_s
50
- res = MockLoader.load_profile(profile_id, id: testID)
51
- res.params[:name].must_equal testID
52
- end
53
- end
54
-
55
- describe 'with simple metadata in profile (legacy mode)' do
56
- let(:profile) { MockLoader.load_profile('legacy-simple-metadata') }
57
-
58
- it 'has metadata' do
59
- profile.params[:name].must_equal 'metadata profile'
60
- end
61
-
62
- it 'has no controls' do
63
- profile.params[:controls].must_equal({})
64
- end
65
- end
66
-
67
- describe 'when checking' do
68
- describe 'an empty profile' do
69
- let(:profile_id) { 'empty-metadata' }
70
-
71
- it 'prints loads of warnings' do
72
- logger.expect :info, nil, ["Checking profile in #{home}/mock/profiles/#{profile_id}"]
73
- logger.expect :error, nil, ["Missing profile name in inspec.yml"]
74
- logger.expect :error, nil, ["Missing profile version in inspec.yml"]
75
- logger.expect :warn, nil, ["Missing profile title in inspec.yml"]
76
- logger.expect :warn, nil, ["Missing profile summary in inspec.yml"]
77
- logger.expect :warn, nil, ["Missing profile maintainer in inspec.yml"]
78
- logger.expect :warn, nil, ["Missing profile copyright in inspec.yml"]
79
- logger.expect :warn, nil, ['No controls or tests were defined.']
80
-
81
- result = MockLoader.load_profile(profile_id, {logger: logger}).check
82
- # verify logger output
83
- logger.verify
84
-
85
- # verify hash result
86
- result[:summary][:valid].must_equal false
87
- result[:summary][:location].must_equal "#{home}/mock/profiles/#{profile_id}"
88
- result[:summary][:profile].must_equal nil
89
- result[:summary][:controls].must_equal 0
90
- result[:errors].length.must_equal 2
91
- result[:warnings].length.must_equal 5
92
- end
93
- end
94
-
95
- describe 'an empty profile (legacy mode)' do
96
- let(:profile_id) { 'legacy-empty-metadata' }
97
-
98
- it 'prints loads of warnings' do
99
- metadata_rb = "#{home}/mock/profiles/#{profile_id}/metadata.rb"
100
- logger.expect :info, nil, ["Checking profile in #{home}/mock/profiles/#{profile_id}"]
101
- logger.expect :error, nil, ["Missing profile name in metadata.rb"]
102
- logger.expect :warn, nil, ['The use of `metadata.rb` is deprecated. Use `inspec.yml`.']
103
- logger.expect :error, nil, ["Missing profile version in metadata.rb"]
104
- logger.expect :warn, nil, ["Missing profile title in metadata.rb"]
105
- logger.expect :warn, nil, ["Missing profile summary in metadata.rb"]
106
- logger.expect :warn, nil, ["Missing profile maintainer in metadata.rb"]
107
- logger.expect :warn, nil, ["Missing profile copyright in metadata.rb"]
108
- logger.expect :warn, nil, ['No controls or tests were defined.']
109
-
110
- result = MockLoader.load_profile(profile_id, {logger: logger}).check
111
- # verify logger output
112
- logger.verify
113
-
114
- # verify hash result
115
- result[:summary][:valid].must_equal false
116
- result[:summary][:location].must_equal "#{home}/mock/profiles/#{profile_id}"
117
- result[:summary][:profile].must_equal nil
118
- result[:summary][:controls].must_equal 0
119
- result[:errors].length.must_equal 2
120
- result[:warnings].length.must_equal 6
121
- end
122
- end
123
-
124
- describe 'a complete metadata profile' do
125
- let(:profile_id) { 'complete-metadata' }
126
- let(:profile) { MockLoader.load_profile(profile_id, {logger: logger}) }
127
-
128
- it 'prints ok messages' do
129
- logger.expect :info, nil, ["Checking profile in #{home}/mock/profiles/#{profile_id}"]
130
- logger.expect :info, nil, ['Metadata OK.']
131
- logger.expect :warn, nil, ['No controls or tests were defined.']
132
-
133
- result = profile.check
134
-
135
- # verify logger output
136
- logger.verify
137
-
138
- # verify hash result
139
- result[:summary][:valid].must_equal true
140
- result[:summary][:location].must_equal "#{home}/mock/profiles/#{profile_id}"
141
- result[:summary][:profile].must_equal 'name'
142
- result[:summary][:controls].must_equal 0
143
- result[:errors].length.must_equal 0
144
- result[:warnings].length.must_equal 1
145
- end
146
- end
147
-
148
- describe 'a complete metadata profile (legacy mode)' do
149
- let(:profile_id) { 'legacy-complete-metadata' }
150
- let(:profile) { MockLoader.load_profile(profile_id, {logger: logger}) }
151
-
152
- it 'prints ok messages' do
153
- logger.expect :info, nil, ["Checking profile in #{home}/mock/profiles/#{profile_id}"]
154
- logger.expect :warn, nil, ['The use of `metadata.rb` is deprecated. Use `inspec.yml`.']
155
- logger.expect :info, nil, ['Metadata OK.']
156
- # NB we only look at content that is loaded, i.e., there're no empty directories anymore
157
- # logger.expect :warn, nil, ["Profile uses deprecated `test` directory, rename it to `controls`."]
158
- logger.expect :warn, nil, ['No controls or tests were defined.']
159
-
160
- result = profile.check
161
-
162
- # verify logger output
163
- logger.verify
164
-
165
- # verify hash result
166
- result[:summary][:valid].must_equal true
167
- result[:summary][:location].must_equal "#{home}/mock/profiles/#{profile_id}"
168
- result[:summary][:profile].must_equal 'name'
169
- result[:summary][:controls].must_equal 0
170
- result[:errors].length.must_equal 0
171
- result[:warnings].length.must_equal 2
172
- end
173
-
174
- it 'doesnt have constraints on supported systems' do
175
- profile.metadata.params[:supports].must_equal([])
176
- end
177
- end
178
-
179
- describe 'a complete metadata profile with controls' do
180
- let(:profile_id) { 'complete-profile' }
181
-
182
- it 'prints ok messages and counts the controls' do
183
- logger.expect :info, nil, ["Checking profile in #{home}/mock/profiles/#{profile_id}"]
184
- logger.expect :info, nil, ['Metadata OK.']
185
- logger.expect :info, nil, ['Found 1 controls.']
186
- logger.expect :info, nil, ['Control definitions OK.']
187
-
188
- result = MockLoader.load_profile(profile_id, {logger: logger}).check
189
- # verify logger output
190
- logger.verify
191
-
192
- # verify hash result
193
- result[:summary][:valid].must_equal true
194
- result[:summary][:location].must_equal "#{home}/mock/profiles/#{profile_id}"
195
- result[:summary][:profile].must_equal 'complete'
196
- result[:summary][:controls].must_equal 1
197
- result[:errors].length.must_equal 0
198
- result[:warnings].length.must_equal 0
199
- end
200
- end
201
-
202
- describe 'a complete metadata profile with controls in a tarball' do
203
- let(:profile_id) { 'complete-profile' }
204
- let(:profile_path) { MockLoader.profile_tgz(profile_id) }
205
- let(:profile) { MockLoader.load_profile(profile_path, {logger: logger}) }
206
-
207
- it 'prints ok messages and counts the controls' do
208
- logger.expect :info, nil, ["Checking profile in #{home}/mock/profiles/#{profile_id}"]
209
- logger.expect :info, nil, ['Metadata OK.']
210
- logger.expect :info, nil, ['Found 1 controls.']
211
- logger.expect :info, nil, ['Control definitions OK.']
212
-
213
- result = MockLoader.load_profile(profile_id, {logger: logger}).check
214
- # verify logger output
215
- logger.verify
216
-
217
- # verify hash result
218
- result[:summary][:valid].must_equal true
219
- result[:summary][:location].must_equal "#{home}/mock/profiles/#{profile_id}"
220
- result[:summary][:profile].must_equal 'complete'
221
- result[:summary][:controls].must_equal 1
222
- result[:errors].length.must_equal 0
223
- result[:warnings].length.must_equal 0
224
- end
225
- end
226
-
227
- describe 'a complete metadata profile with controls in zipfile' do
228
- let(:profile_id) { 'complete-profile' }
229
- let(:profile_path) { MockLoader.profile_zip(profile_id) }
230
- let(:profile) { MockLoader.load_profile(profile_path, {logger: logger}) }
231
-
232
- it 'prints ok messages and counts the controls' do
233
- logger.expect :info, nil, ["Checking profile in #{home}/mock/profiles/#{profile_id}"]
234
- logger.expect :info, nil, ['Metadata OK.']
235
- logger.expect :info, nil, ['Found 1 controls.']
236
- logger.expect :info, nil, ['Control definitions OK.']
237
-
238
- result = MockLoader.load_profile(profile_id, {logger: logger}).check
239
- # verify logger output
240
- logger.verify
241
-
242
- # verify hash result
243
- result[:summary][:valid].must_equal true
244
- result[:summary][:location].must_equal "#{home}/mock/profiles/#{profile_id}"
245
- result[:summary][:profile].must_equal 'complete'
246
- result[:summary][:controls].must_equal 1
247
- result[:errors].length.must_equal 0
248
- result[:warnings].length.must_equal 0
249
- end
250
- end
251
- end
252
- end
@@ -1,31 +0,0 @@
1
- # encoding: utf-8
2
- # author: Stephan Renatus
3
-
4
- require 'helper'
5
-
6
- describe 'Inspec::Resources::ApacheConf' do
7
- let(:resource) { load_resource('apache_conf') }
8
-
9
- it 'verify content is a string' do
10
- _(resource.content).must_be_kind_of String
11
- end
12
-
13
- it 'verify params is a hashmap' do
14
- _(resource.params).must_be_kind_of Hash
15
- end
16
-
17
- it 'reads values in apache2.conf' do
18
- _(resource.params('ServerRoot')).must_equal ['"/etc/apache2"']
19
- end
20
-
21
- it 'reads values in from the direct include ports.conf' do
22
- _(resource.params('Listen').sort).must_equal ['443', '80']
23
- end
24
-
25
- it 'reads values in from wildcard include serve-cgi-bin.conf' do
26
- # TODO(sr) currently, the parser only merges parameter across separate
27
- # source files, not in one file
28
- _(resource.params('Define')).must_equal ['ENABLE_USR_LIB_CGI_BIN',
29
- 'ENABLE_USR_LIB_CGI_BIN']
30
- end
31
- end
@@ -1,46 +0,0 @@
1
- # encoding: utf-8
2
- # author: Christoph Hartmann
3
- # author: Dominik Richter
4
-
5
- require 'helper'
6
- require 'inspec/resource'
7
-
8
- describe 'Inspec::Resources::AptRepo' do
9
-
10
- it 'check apt on ubuntu' do
11
- resource = MockLoader.new(:ubuntu1504).load_resource('apt', 'http://archive.ubuntu.com/ubuntu/')
12
- _(resource.exists?).must_equal true
13
- _(resource.enabled?).must_equal true
14
- end
15
-
16
- it 'check apt on ubuntu with ppa' do
17
- resource = MockLoader.new(:ubuntu1504).load_resource('apt', 'ubuntu-wine/ppa')
18
- _(resource.exists?).must_equal true
19
- _(resource.enabled?).must_equal true
20
- end
21
-
22
- it 'check apt on ubuntu with ppa' do
23
- resource = MockLoader.new(:ubuntu1504).load_resource('apt', 'ppa:ubuntu-wine/ppa')
24
- _(resource.exists?).must_equal true
25
- _(resource.enabled?).must_equal true
26
- end
27
-
28
- it 'check apt on debian' do
29
- resource = MockLoader.new(:ubuntu1504).load_resource('apt', 'http://archive.ubuntu.com/ubuntu/')
30
- _(resource.exists?).must_equal true
31
- _(resource.enabled?).must_equal true
32
- end
33
-
34
- it 'check apt on unknown os' do
35
- resource = MockLoader.new(:undefined).load_resource('apt', 'ubuntu-wine/ppa')
36
- _(resource.exists?).must_equal false
37
- _(resource.enabled?).must_equal false
38
- end
39
-
40
- # check ppa resource
41
- it 'check apt on ubuntu' do
42
- resource = MockLoader.new(:ubuntu1504).load_resource('ppa', 'ubuntu-wine/ppa')
43
- _(resource.exists?).must_equal true
44
- _(resource.enabled?).must_equal true
45
- end
46
- end
@@ -1,13 +0,0 @@
1
- # encoding: utf-8
2
- # author: Christoph Hartmann
3
- # author: Dominik Richter
4
-
5
- require 'helper'
6
- require 'inspec/resource'
7
-
8
- describe 'Inspec::Resources::AuditPolicy' do
9
- it 'check audit policy parsing' do
10
- resource = MockLoader.new(:windows).load_resource('audit_policy')
11
- _(resource.send('User Account Management')).must_equal 'Success'
12
- end
13
- end
@@ -1,15 +0,0 @@
1
- # encoding: utf-8
2
- # author: Christoph Hartmann
3
- # author: Dominik Richter
4
-
5
- require 'helper'
6
- require 'inspec/resource'
7
-
8
- describe 'Inspec::Resources::AuditDaemonConf' do
9
- it 'check audit daemon config parsing' do
10
- resource = MockLoader.new(:windows).load_resource('auditd_conf')
11
- _(resource.space_left_action).must_equal 'SYSLOG'
12
- _(resource.action_mail_acct).must_equal 'root'
13
- _(resource.tcp_listen_queue).must_equal '5'
14
- end
15
- end
@@ -1,91 +0,0 @@
1
- # encoding: utf-8
2
- # author: Christoph Hartmann
3
- # author: Dominik Richter
4
-
5
- require 'helper'
6
- require 'inspec/resource'
7
-
8
- describe 'Inspec::Resources::AuditDaemonRules' do
9
- it 'auditd_rules interface' do
10
- resource = MockLoader.new(:centos7).load_resource('auditd_rules')
11
- _(resource.send('lines')).must_equal [
12
- '-a always,exit -F arch=b64 -S open,openat -F exit=-EACCES -F key=access',
13
- '-a always,exit -F arch=b32 -S chmod,fchmod,fchmodat -F auid>=500 f24!=0 -F key=perm_mod',
14
- '-w /etc/ssh/sshd_config -p rwxa -k CFG_sshd_config',
15
- ]
16
- end
17
-
18
- it 'auditd_rules syscall interface' do
19
- resource = MockLoader.new(:centos7).load_resource('auditd_rules')
20
- _(resource.send('syscall', 'open').send('rules')).must_equal [
21
- {:syscall=>"open", :list=>"exit", :action=>"always", :fields=>["arch=b64", "exit=-EACCES", "key=access"], :arch=>"b64", :exit=>"-EACCES", :key=>"access"}
22
- ]
23
- end
24
-
25
- it 'auditd_rules syscall query chaining' do
26
- resource = MockLoader.new(:centos7).load_resource('auditd_rules')
27
- _(resource.send('syscall', 'open').field('key', 'access').send('rules')).must_equal [
28
- {:syscall=>"open", :list=>"exit", :action=>"always", :fields=>["arch=b64", "exit=-EACCES", "key=access"], :arch=>"b64", :exit=>"-EACCES", :key=>"access"}
29
- ]
30
- end
31
-
32
- it 'auditd_rules syscall query chaining with short syntax' do
33
- resource = MockLoader.new(:centos7).load_resource('auditd_rules')
34
- _(resource.send('syscall', 'open').key('access').list('exit').send('rules')).must_equal [
35
- {:syscall=>"open", :list=>"exit", :action=>"always", :fields=>["arch=b64", "exit=-EACCES", "key=access"], :arch=>"b64", :exit=>"-EACCES", :key=>"access"}
36
- ]
37
- end
38
-
39
- it 'check auditd_rules syscall query chaining empty results' do
40
- resource = MockLoader.new(:centos7).load_resource('auditd_rules')
41
- _(resource.send('syscall', 'open').field('key', 'access').field('foo', 'bar').send('rules')).must_equal []
42
- end
43
-
44
-
45
- it 'check auditd_rules file interface' do
46
- resource = MockLoader.new(:centos7).load_resource('auditd_rules')
47
- _(resource.send('file', '/etc/ssh/sshd_config').send('rules')).must_equal [
48
- { file: '/etc/ssh/sshd_config', key: 'CFG_sshd_config', permissions: 'rwxa'},
49
- ]
50
- end
51
-
52
- it 'check auditd_rules key interface' do
53
- resource = MockLoader.new(:centos7).load_resource('auditd_rules')
54
- _(resource.send('key', 'CFG_sshd_config').send('rules')).must_equal [
55
- { file: '/etc/ssh/sshd_config', key: 'CFG_sshd_config', permissions: 'rwxa'},
56
- ]
57
- end
58
-
59
- it 'check auditd_rules status interface' do
60
- resource = MockLoader.new(:centos7).load_resource('auditd_rules')
61
- _(resource.send('status')).must_equal({
62
- 'enabled' => '1',
63
- 'flag' => '2',
64
- 'pid' => '547',
65
- 'rate_limit' => '0',
66
- 'backlog_limit' => '8192',
67
- 'lost' => '0',
68
- 'backlog' => '0',
69
- 'loginuid_immutable' => '0 unlocked',
70
- })
71
- end
72
-
73
- it 'check auditd_rules status interface querying a key' do
74
- resource = MockLoader.new(:centos7).load_resource('auditd_rules')
75
- _(resource.send('status', 'enabled')).must_equal('1')
76
- end
77
-
78
- # TODO(sr) figure out how to feed resource the legacy auditctl mock cmd output
79
- # it 'check legacy audit policy parsing' do
80
- # resource = MockLoader.new(:undefined).load_resource('auditd_rules')
81
- # _(resource.send('LIST_RULES')).must_equal [
82
- # 'exit,always syscall=rmdir,unlink',
83
- # 'exit,always auid=1001 (0x3e9) syscall=open',
84
- # 'exit,always watch=/etc/group perm=wa',
85
- # 'exit,always watch=/etc/passwd perm=wa',
86
- # 'exit,always watch=/etc/shadow perm=wa',
87
- # 'exit,always watch=/etc/sudoers perm=wa',
88
- # 'exit,always watch=/etc/secret_directory perm=r',
89
- # ]
90
- # end
91
- end
@@ -1,29 +0,0 @@
1
- # encoding: utf-8
2
- # author: Christoph Hartmann
3
- # author: Dominik Richter
4
-
5
- require 'helper'
6
- require 'inspec/resource'
7
-
8
- describe Inspec::Resources::Bash do
9
- let(:x) { rand.to_s }
10
- let(:resource) { load_resource('bash', '$("'+x+'")') }
11
-
12
- it 'prints as a bash command' do
13
- resource.to_s.must_equal 'Bash command $("'+x+'")'
14
- end
15
-
16
- it 'wraps the command' do
17
- resource.command.must_equal "bash -c \\$\\(\\\"#{x}\\\"\\)"
18
- end
19
-
20
- it 'can specify an executable path' do
21
- resource = load_resource('bash', '$("'+x+'")', path: '/bin/bash')
22
- resource.command.must_equal "/bin/bash -c \\$\\(\\\"#{x}\\\"\\)"
23
- end
24
-
25
- it 'can specify a arguments' do
26
- resource = load_resource('bash', '$("'+x+'")', args: '-x -c')
27
- resource.command.must_equal "bash -x -c \\$\\(\\\"#{x}\\\"\\)"
28
- end
29
- end
@@ -1,24 +0,0 @@
1
- # encoding: utf-8
2
- # author: Christoph Hartmann
3
- # author: Dominik Richter
4
-
5
- require 'helper'
6
- require 'inspec/resource'
7
-
8
- describe 'Inspec::Resources::Bond' do
9
-
10
- it 'check linux bond on ubuntu' do
11
- resource = MockLoader.new(:ubuntu1404).load_resource('bond', 'bond0')
12
- # bond must be available
13
- resource.exist?.must_equal true
14
- # eth0 is part of bond
15
- _(resource.has_interface?('eth0')).must_equal true
16
- _(resource.has_interface?('eth1')).must_equal false
17
- _(resource.has_interface?('eth2')).must_equal true
18
- # get all interfaces
19
- _(resource.interfaces).must_equal %w{eth0 eth2}
20
- # get proc content
21
- _(resource.content).wont_equal nil
22
- _(resource.content).wont_equal ''
23
- end
24
- end
@@ -1,56 +0,0 @@
1
- # encoding: utf-8
2
- # author: Christoph Hartmann
3
- # author: Dominik Richter
4
-
5
- require 'helper'
6
- require 'inspec/resource'
7
-
8
- describe 'Inspec::Resources::Bridge' do
9
-
10
- it 'check linux bridge on ubuntu' do
11
- resource = MockLoader.new(:ubuntu1404).load_resource('bridge', 'br0')
12
- _(resource.exists?).must_equal true
13
-
14
- # check network interfaced attached to bridge
15
- _(resource.has_interface?('eth0')).must_equal false
16
- _(resource.has_interface?('eth1')).must_equal true
17
- _(resource.has_interface?('eth2')).must_equal true
18
-
19
- # get associated interfaces
20
- _(resource.interfaces).must_equal %w{eth1 eth2}
21
- end
22
-
23
- it 'check linux bridge on centos 7' do
24
- resource = MockLoader.new(:centos7).load_resource('bridge', 'br0')
25
- _(resource.exists?).must_equal true
26
-
27
- # check network interfaced attached to bridge
28
- _(resource.has_interface?('eth0')).must_equal false
29
- _(resource.has_interface?('eth1')).must_equal true
30
- _(resource.has_interface?('eth2')).must_equal true
31
-
32
- # get associated interfaces
33
- _(resource.interfaces).must_equal %w{eth1 eth2}
34
- end
35
-
36
- it 'check windows bridge' do
37
- resource = MockLoader.new(:windows).load_resource('bridge', 'Network Bridge')
38
- _(resource.exists?).must_equal true
39
-
40
- # get associated interfaces is not supported on windows
41
- _(resource.interfaces).must_equal nil
42
- end
43
-
44
- it 'check bridge on unsupported os' do
45
- resource = MockLoader.new(:undefined).load_resource('bridge', 'br0')
46
- _(resource.exists?).must_equal false
47
-
48
- # check network interfaced attached to bridge
49
- _(resource.has_interface?('eth0')).must_equal false
50
- _(resource.has_interface?('eth1')).must_equal false
51
- _(resource.has_interface?('eth2')).must_equal false
52
-
53
- # get associated interfaces
54
- _(resource.interfaces).must_equal nil
55
- end
56
- end
@@ -1,35 +0,0 @@
1
- # encoding: utf-8
2
- # author: Christoph Hartmann
3
- # author: Dominik Richter
4
-
5
- require 'helper'
6
- require 'inspec/resource'
7
-
8
- describe 'Inspec::Resources::CSV' do
9
- describe 'when loading a valid csv' do
10
- let (:resource) { load_resource('csv', 'example.csv') }
11
- let (:params) {
12
- {}
13
- }
14
-
15
- it 'captures an array of params' do
16
- _(resource.params).must_be_kind_of Array
17
- end
18
-
19
- it 'gets all value lines' do
20
- _(resource.params.length).must_equal 3
21
- end
22
-
23
- it 'captures a hashmap of entries of a line' do
24
- _(resource.params[0]).must_be_kind_of Hash
25
- end
26
-
27
- it 'gets params by header fields' do
28
- _(resource.params[0]['addressable']).must_equal 'ast'
29
- end
30
-
31
- it 'retrieves nil if a param is missing' do
32
- _(resource.params[0]['missing']).must_be_nil
33
- end
34
- end
35
- end
@@ -1,37 +0,0 @@
1
- # encoding: utf-8
2
- # author: Christoph Hartmann
3
- # author: Dominik Richter
4
-
5
- require 'helper'
6
- require 'inspec/resource'
7
-
8
- describe 'Inspec::Resources::EtcGroup' do
9
- let(:resource) { load_resource('etc_group') }
10
-
11
- it 'verify /etc/group config parsing' do
12
- _(resource.gids).must_equal [0, 33]
13
- _(resource.groups).must_equal %w{ root www-data }
14
- _(resource.users).must_equal %w{ www-data root }
15
- end
16
-
17
- it 'verify group filter with no users' do
18
- root_filter = resource.where(name: 'root')
19
- _(root_filter.gids).must_equal [0]
20
- _(root_filter.groups).must_equal ['root']
21
- _(root_filter.users).must_equal []
22
- end
23
-
24
- it 'verify group filter with users' do
25
- www_filter = resource.where(name: 'www-data')
26
- _(www_filter.gids).must_equal [33]
27
- _(www_filter.groups).must_equal ['www-data']
28
- _(www_filter.users).must_equal ['www-data', 'root']
29
- end
30
-
31
- it 'verify group filter with wrong group' do
32
- wrong_filter = resource.where(name: 'wrong_group')
33
- _(wrong_filter.gids).must_equal []
34
- _(wrong_filter.groups).must_equal []
35
- _(wrong_filter.users).must_equal []
36
- end
37
- end