inspec 0.30.0 → 0.31.0

Sign up to get free protection for your applications and to get access to all the features.
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,146 +0,0 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Christoph Hartmann
4
-
5
- #
6
- # On most systems I've used a link to /proc/kcore is placed at
7
- # /dev/core. However, on TravisCI we also see it at /dev/kcore.
8
- #
9
- # Since we are using this file to test some properties of symlinks, we
10
- # don't particularly care where it is, so here we use /dev/kcore if it
11
- # exists and otherwise fall back to /dev/core.
12
- #
13
- kcore_dev = if file('/dev/kcore').exist?
14
- '/dev/kcore'
15
- else
16
- '/dev/core'
17
- end
18
-
19
- describe file('/tmp') do
20
- it { should exist }
21
- end
22
-
23
- describe file('/tmpest') do
24
- it { should_not exist }
25
- end
26
-
27
- describe file('/tmp') do
28
- its('type') { should eq :directory }
29
- it { should be_directory }
30
- end
31
-
32
- describe file('/proc/version') do
33
- its('type') { should eq :file }
34
- it { should be_file }
35
- it { should_not be_directory }
36
- end
37
-
38
- describe file('/dev/stdout') do
39
- its('type') { should eq :pipe }
40
- its('source.type') { should eq :symlink }
41
- it { should be_symlink }
42
- it { should be_pipe }
43
- it { should_not be_file }
44
- it { should_not be_directory }
45
- end
46
-
47
- describe file('/dev/zero') do
48
- its('type') { should eq :character_device }
49
- it { should be_character_device }
50
- it { should_not be_file }
51
- it { should_not be_directory }
52
- end
53
-
54
- # describe file('...') do
55
- # its('type') { should eq :block_device }
56
- # it { should be_block_device }
57
- # end
58
-
59
- # describe file('...') do
60
- # its('type') { should eq :socket }
61
- # it { should be_socket }
62
- # end
63
-
64
- # describe file('...') do
65
- # its('type') { should eq :pipe }
66
- # it { should be_pipe }
67
- # end
68
-
69
- describe file('/dev') do
70
- its('mode') { should eq 00755 }
71
- end
72
-
73
- describe file('/dev') do
74
- it { should be_mode 00755 }
75
- end
76
-
77
- describe file('/root') do
78
- its('owner') { should eq 'root' }
79
- end
80
-
81
- describe file('/dev') do
82
- it { should be_owned_by 'root' }
83
- end
84
-
85
- describe file('/root') do
86
- its('group') { should eq 'root' }
87
- end
88
-
89
- describe file('/dev') do
90
- it { should be_grouped_into 'root' }
91
- end
92
-
93
- describe file(kcore_dev) do
94
- its('link_path') { should eq '/proc/kcore' }
95
- end
96
-
97
- describe file(kcore_dev) do
98
- it { should be_linked_to '/proc/kcore' }
99
- end
100
-
101
- describe file('/proc/cpuinfo') do
102
- its('content') { should match /^processor/ }
103
- end
104
-
105
- describe file('/').mtime.to_i do
106
- it { should <= Time.now.to_i }
107
- it { should >= Time.now.to_i - 1000}
108
- end
109
-
110
- describe file('/') do
111
- its('size') { should be > 64 }
112
- its('size') { should be < 10240 }
113
- end
114
-
115
- describe file('/proc/cpuinfo') do
116
- its('size') { should be 0 }
117
- end
118
-
119
- # @TODO selinux_label
120
-
121
- # @TODO skip as the mount command is not reliably present on all test containers
122
- # describe file('/proc') do
123
- # it { should be_mounted }
124
- # end
125
-
126
- describe file('/proc/cpuinfo') do
127
- it { should_not be_mounted }
128
- end
129
-
130
- # @TODO immutable?
131
- # @TODO product_version
132
- # @TODO file_version
133
- # @TODO version?
134
-
135
- require 'digest'
136
- cpuinfo = file('/proc/cpuinfo').content
137
-
138
- md5sum = Digest::MD5.hexdigest(cpuinfo)
139
- describe file('/proc/cpuinfo') do
140
- its('md5sum') { should eq md5sum }
141
- end
142
-
143
- sha256sum = Digest::SHA256.hexdigest(cpuinfo)
144
- describe file('/proc/cpuinfo') do
145
- its('sha256sum') { should eq sha256sum }
146
- end
@@ -1,9 +0,0 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Christoph Hartmann
4
-
5
- return unless command('ssh').exist?
6
-
7
- describe ssh_config do
8
- its('SendEnv') { should include('GORDON_CLIENT') }
9
- end
@@ -1,9 +0,0 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Christoph Hartmann
4
-
5
- return unless command('sshd').exist?
6
-
7
- describe sshd_config do
8
- its('AcceptEnv') { should include('GORDON_SERVER') }
9
- end
data/test/test-extra.yaml DELETED
@@ -1,11 +0,0 @@
1
- images:
2
- - centos:5.11
3
- - centos:7.0.1406
4
- - debian:6.0.10
5
- - fedora:20
6
- - oraclelinux:5.11
7
- - oraclelinux:6.7
8
- - oraclelinux:7.1
9
- - ubuntu:10.04
10
- - ubuntu:13.04
11
- - ubuntu:15.10
data/test/test.yaml DELETED
@@ -1,11 +0,0 @@
1
- images:
2
- - centos:6.6
3
- - centos:6.7
4
- - centos:7.1.1503
5
- - debian:7.9
6
- - debian:8.2
7
- - fedora:21
8
- - fedora:22
9
- - ubuntu:12.04
10
- - ubuntu:14.04
11
- - ubuntu:15.04
@@ -1,58 +0,0 @@
1
- # encoding: utf-8
2
- # author: Christoph Hartmann
3
- # author: Dominik Richter
4
-
5
- require 'helper'
6
-
7
- describe 'controls' do
8
- def load(content)
9
- data = {
10
- 'inspec.yml' => "name: mock",
11
- 'controls/mock.rb' => "control '1' do\n#{content}\nend\n",
12
- }
13
- opts = { test_collector: Inspec::RunnerMock.new }
14
- Inspec::Profile.for_target(data, opts)
15
- .params[:controls]['1']
16
- end
17
-
18
- it 'works with empty refs' do
19
- load('ref')[:refs].must_be :empty?
20
- end
21
-
22
- it 'defines a simple ref' do
23
- s = rand.to_s
24
- load("ref #{s.inspect}")[:refs].must_equal [{:ref=>s}]
25
- end
26
-
27
- it 'defines a ref with url' do
28
- s = rand.to_s
29
- u = rand.to_s
30
- load("ref #{s.inspect}, url: #{u.inspect}")[:refs].must_equal [{ref: s, url: u}]
31
- end
32
-
33
- it 'defines a ref without content but with url' do
34
- u = rand.to_s
35
- load("ref url: #{u.inspect}")[:refs].must_equal [{url: u}]
36
- end
37
-
38
- it 'works with empty tags' do
39
- load('tag')[:tags].must_be :empty?
40
- end
41
-
42
- it 'defines a simple tag' do
43
- s = rand.to_s
44
- load("tag #{s.inspect}")[:tags].must_equal({ s => nil })
45
- end
46
-
47
- it 'define multiple tags' do
48
- a, b, c = rand.to_s, rand.to_s, rand.to_s
49
- load("tag #{a.inspect}, #{b.inspect}, #{c.inspect}")[:tags].must_equal(
50
- { a => nil, b => nil, c => nil })
51
- end
52
-
53
- it 'tag by key=value' do
54
- a, b = rand.to_s, rand.to_s
55
- load("tag #{a.inspect} => #{b.inspect}")[:tags].must_equal(
56
- { a => b })
57
- end
58
- end
@@ -1,67 +0,0 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Christoph Hartmann
4
-
5
- require 'helper'
6
-
7
- describe Fetchers::Local do
8
- let(:fetcher) { Fetchers::Local }
9
-
10
- it 'registers with the fetchers registry' do
11
- reg = Inspec::Fetcher.registry
12
- _(reg['local']).must_equal fetcher
13
- end
14
-
15
- describe 'applied to this file' do
16
- let(:res) { fetcher.resolve(__FILE__) }
17
-
18
- it 'must be resolved' do
19
- _(res).must_be_kind_of fetcher
20
- end
21
-
22
- it 'must only contain this file' do
23
- _(res.files).must_equal [__FILE__]
24
- end
25
-
26
- it 'must not read if the file doesnt exist' do
27
- _(res.read('file-does-not-exist')).must_be_nil
28
- end
29
-
30
- it 'must not read files not covered' do
31
- not_covered = File.expand_path('../tar_test.rb', __FILE__)
32
- _(File.file?(not_covered)).must_equal true
33
- _(res.read(not_covered)).must_be_nil
34
- end
35
-
36
- it 'must read the contents of the file' do
37
- _(res.read(__FILE__)).must_equal File.read(__FILE__)
38
- end
39
- end
40
-
41
- describe 'applied to this folder' do
42
- let(:path) { File.dirname(__FILE__) }
43
- let(:res) { fetcher.resolve(path) }
44
-
45
- it 'must be resolved' do
46
- _(res).must_be_kind_of fetcher
47
- end
48
-
49
- it 'must contain all files' do
50
- _(res.files).must_include __FILE__
51
- end
52
-
53
- it 'must not read if the file doesnt exist' do
54
- _(res.read('file-not-in-folder')).must_be_nil
55
- end
56
-
57
- it 'must not read files not covered' do
58
- not_covered = File.expand_path('../../../helper.rb', __FILE__)
59
- _(File.file?(not_covered)).must_equal true
60
- _(res.read(not_covered)).must_be_nil
61
- end
62
-
63
- it 'must read the contents of the file' do
64
- _(res.read(__FILE__)).must_equal File.read(__FILE__)
65
- end
66
- end
67
- end
@@ -1,43 +0,0 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Christoph Hartmann
4
-
5
- require 'helper'
6
-
7
- describe Fetchers::Mock do
8
- let(:fetcher) { Fetchers::Mock }
9
-
10
- it 'registers with the fetchers registry' do
11
- reg = Inspec::Fetcher.registry
12
- _(reg['mock']).must_equal fetcher
13
- end
14
-
15
- it 'wont load nil' do
16
- fetcher.resolve(nil).must_be :nil?
17
- end
18
-
19
- it 'wont load a string' do
20
- fetcher.resolve(rand.to_s).must_be :nil?
21
- end
22
-
23
- describe 'applied to a map' do
24
- it 'must be resolved' do
25
- fetcher.resolve({}).must_be_kind_of fetcher
26
- end
27
-
28
- it 'has no files on empty' do
29
- fetcher.resolve({}).files.must_equal []
30
- end
31
-
32
- it 'has files' do
33
- f = rand.to_s
34
- fetcher.resolve({f => nil}).files.must_equal [f]
35
- end
36
-
37
- it 'can read a file' do
38
- f = rand.to_s
39
- s = rand.to_s
40
- fetcher.resolve({f => s}).read(f).must_equal s
41
- end
42
- end
43
- end
@@ -1,36 +0,0 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Christoph Hartmann
4
-
5
- require 'helper'
6
-
7
- describe Fetchers::Tar do
8
- let(:fetcher) { Fetchers::Tar }
9
-
10
- it 'registers with the fetchers registry' do
11
- reg = Inspec::Fetcher.registry
12
- _(reg['tar']).must_equal fetcher
13
- end
14
-
15
- describe 'applied to a tar archive' do
16
- let(:target) { MockLoader.profile_tgz('complete-profile') }
17
- let(:res) { fetcher.resolve(target) }
18
-
19
- it 'must be resolved' do
20
- _(res).must_be_kind_of fetcher
21
- end
22
-
23
- it 'must contain all files' do
24
- _(res.files.sort).must_equal %w{inspec.yml libraries libraries/testlib.rb
25
- controls controls/filesystem_spec.rb}.sort
26
- end
27
-
28
- it 'must not read if the file isnt included' do
29
- _(res.read('file-not-in-archive')).must_be_nil
30
- end
31
-
32
- it 'must read the contents of the file' do
33
- _(res.read('inspec.yml')).must_match /^name: complete$/
34
- end
35
- end
36
- end
@@ -1,152 +0,0 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Christoph Hartmann
4
-
5
- require 'helper'
6
-
7
- describe Fetchers::Url do
8
- let(:fetcher) { Fetchers::Url }
9
-
10
- it 'registers with the fetchers registry' do
11
- reg = Inspec::Fetcher.registry
12
- _(reg['url']).must_equal fetcher
13
- end
14
-
15
- describe 'testing different urls' do
16
- let(:mock_file) { MockLoader.profile_path('complete-metadata') }
17
- let(:fetcher) {
18
- Class.new(Fetchers::Url) do
19
- attr_reader :target, :archive
20
- def initialize(target, opts)
21
- @target = target
22
- @archive = File.new(__FILE__)
23
- end
24
- end
25
- }
26
-
27
- it 'handles a http url' do
28
- url = 'http://chef.io/some.tar.gz'
29
- res = fetcher.resolve(url)
30
- _(res).must_be_kind_of Fetchers::Local
31
- _(res.parent).must_be_kind_of Fetchers::Url
32
- _(res.parent.target).must_equal 'http://chef.io/some.tar.gz'
33
- end
34
-
35
- it 'handles a https url' do
36
- url = 'https://chef.io/some.tar.gz'
37
- res = fetcher.resolve(url)
38
- _(res).must_be_kind_of Fetchers::Local
39
- _(res.parent).must_be_kind_of Fetchers::Url
40
- _(res.parent.target).must_equal 'https://chef.io/some.tar.gz'
41
- end
42
-
43
- it 'doesnt handle other schemas' do
44
- fetcher.resolve('gopher://chef.io/some.tar.gz').must_be_nil
45
- end
46
-
47
- it 'only handles URLs' do
48
- fetcher.resolve(__FILE__).must_be_nil
49
- end
50
-
51
- %w{https://github.com/chef/inspec
52
- https://github.com/chef/inspec.git
53
- https://www.github.com/chef/inspec.git
54
- http://github.com/chef/inspec
55
- http://github.com/chef/inspec.git
56
- http://www.github.com/chef/inspec.git}.each do |github|
57
- it "resolves a github url #{github}" do
58
- res = fetcher.resolve(github)
59
- _(res).wont_be_nil
60
- _(res.parent.target).must_equal 'https://github.com/chef/inspec/archive/master.tar.gz'
61
- end
62
- end
63
-
64
- it "resolves a github branch url" do
65
- github = 'https://github.com/hardening-io/tests-os-hardening/tree/2.0'
66
- res = fetcher.resolve(github)
67
- _(res).wont_be_nil
68
- _(res.parent.target).must_equal 'https://github.com/hardening-io/tests-os-hardening/archive/2.0.tar.gz'
69
- end
70
-
71
- it "resolves a github commit url" do
72
- github = 'https://github.com/hardening-io/tests-os-hardening/tree/48bd4388ddffde68badd83aefa654e7af3231876'
73
- res = fetcher.resolve(github)
74
- _(res).wont_be_nil
75
- _(res.parent.target).must_equal 'https://github.com/hardening-io/tests-os-hardening/archive/48bd4388ddffde68badd83aefa654e7af3231876.tar.gz'
76
- end
77
- end
78
-
79
- describe 'applied to a valid url (mocked tar.gz)' do
80
- let(:mock_file) { MockLoader.profile_tgz('complete-profile') }
81
- let(:target) { 'http://myurl/file.tar.gz' }
82
- let(:res) {
83
- mock_open = Minitest::Mock.new
84
- mock_open.expect :meta, {'content-type' => 'application/gzip'}
85
- mock_open.expect :read, File.open(mock_file, 'rb').read
86
- fetcher.expects(:open).returns(mock_open)
87
- fetcher.resolve(target)
88
- }
89
-
90
- it 'must be resolved to the final format' do
91
- _(res).must_be_kind_of Fetchers::Tar
92
- end
93
-
94
- it 'must be resolved to the final format' do
95
- _(res.parent).must_be_kind_of fetcher
96
- end
97
-
98
- it 'must contain all files' do
99
- _(res.files.sort).must_equal %w{inspec.yml libraries libraries/testlib.rb
100
- controls controls/filesystem_spec.rb}.sort
101
- end
102
-
103
- it 'must not read if the file isnt included' do
104
- _(res.read('file-not-in-archive')).must_be_nil
105
- end
106
-
107
- it 'must read the contents of the file' do
108
- _(res.read('inspec.yml')).must_match /^name: complete$/
109
- end
110
- end
111
-
112
- describe 'applied to a valid url (mocked zip)' do
113
- let(:mock_file) { MockLoader.profile_zip('complete-profile') }
114
- let(:target) { 'http://myurl/file.tar.gz' }
115
- let(:res) {
116
- mock_open = Minitest::Mock.new
117
- mock_open.expect :meta, {'content-type' => 'application/zip'}
118
- mock_open.expect :read, File.open(mock_file, 'rb').read
119
- fetcher.expects(:open).returns(mock_open)
120
- fetcher.resolve(target)
121
- }
122
-
123
- it 'must be resolved to the final format' do
124
- _(res).must_be_kind_of Fetchers::Zip
125
- end
126
-
127
- it 'must contain all files' do
128
- _(res.files.sort).must_equal %w{inspec.yml libraries libraries/testlib.rb
129
- controls controls/filesystem_spec.rb}.sort
130
- end
131
-
132
- it 'must not read if the file isnt included' do
133
- _(res.read('file-not-in-archive')).must_be_nil
134
- end
135
-
136
- it 'must read the contents of the file' do
137
- _(res.read('inspec.yml')).must_match /^name: complete$/
138
- end
139
- end
140
-
141
- describe 'applied to a valid url with wrong content-type' do
142
- let(:mock_file) { MockLoader.profile_zip('complete-profile') }
143
- let(:target) { 'http://myurl/file.tar.gz' }
144
-
145
- it 'must be resolved to the final format' do
146
- mock_open = Minitest::Mock.new
147
- mock_open.expect :meta, {'content-type' => 'wrong'}
148
- fetcher.expects(:open).returns(mock_open)
149
- proc { fetcher.resolve(target) }.must_throw RuntimeError
150
- end
151
- end
152
- end
@@ -1,36 +0,0 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Christoph Hartmann
4
-
5
- require 'helper'
6
-
7
- describe Fetchers::Zip do
8
- let(:fetcher) { Fetchers::Zip }
9
-
10
- it 'registers with the fetchers registry' do
11
- reg = Inspec::Fetcher.registry
12
- _(reg['zip']).must_equal fetcher
13
- end
14
-
15
- describe 'applied to a zipped archive' do
16
- let(:target) { MockLoader.profile_zip('complete-profile') }
17
- let(:res) { fetcher.resolve(target) }
18
-
19
- it 'must be resolved' do
20
- _(res).must_be_kind_of fetcher
21
- end
22
-
23
- it 'must contain all files' do
24
- _(res.files.sort).must_equal %w{inspec.yml libraries libraries/testlib.rb
25
- controls controls/filesystem_spec.rb}.sort
26
- end
27
-
28
- it 'must not read if the file isnt included' do
29
- _(res.read('file-not-in-archive')).must_be_nil
30
- end
31
-
32
- it 'must read the contents of the file' do
33
- _(res.read('inspec.yml')).must_match /^name: complete$/
34
- end
35
- end
36
- end
@@ -1,65 +0,0 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Christoph Hartmann
4
-
5
- require 'helper'
6
-
7
- describe Inspec::Fetcher do
8
- it 'loads the local fetcher for this file' do
9
- res = Inspec::Fetcher.resolve(__FILE__)
10
- res.must_be_kind_of Fetchers::Local
11
- end
12
- end
13
-
14
- describe Inspec::Plugins::RelFetcher do
15
- def fetcher
16
- src_fetcher.expects(:files).returns(in_files).at_least_once
17
- Inspec::Plugins::RelFetcher.new(src_fetcher)
18
- end
19
-
20
- let(:src_fetcher) { mock() }
21
-
22
- IN_AND_OUT = {
23
- [] => [],
24
- %w{file} => %w{file},
25
- # don't prefix just by filename
26
- %w{file file_a} => %w{file file_a},
27
- %w{path/file path/file_a} => %w{file file_a},
28
- %w{path/to/file} => %w{file},
29
- %w{/path/to/file} => %w{file},
30
- %w{alice bob} => %w{alice bob},
31
- # mixed paths
32
- %w{x/a y/b} => %w{x/a y/b},
33
- %w{/x/a /y/b} => %w{x/a y/b},
34
- %w{z/x/a z/y/b} => %w{x/a y/b},
35
- %w{/z/x/a /z/y/b} => %w{x/a y/b},
36
- # mixed with relative path
37
- %w{a path/to/b} => %w{a path/to/b},
38
- %w{path/to/b a} => %w{path/to/b a},
39
- %w{path/to/b path/a} => %w{to/b a},
40
- %w{path/to/b path/a c} => %w{path/to/b path/a c},
41
- # mixed with absolute paths
42
- %w{/path/to/b /a} => %w{path/to/b a},
43
- %w{/path/to/b /path/a} => %w{to/b a},
44
- %w{/path/to/b /path/a /c} => %w{path/to/b path/a c},
45
- # mixing absolute and relative paths
46
- %w{path/a /path/b} => %w{path/a /path/b},
47
- %w{/path/a path/b} => %w{/path/a path/b},
48
- # extract folder structure buildup
49
- %w{/a /a/b /a/b/c} => %w{c},
50
- %w{/a /a/b /a/b/c/d/e} => %w{e},
51
- # ignore pax_global_header, which are commonly seen in github tars and are not
52
- # ignored by all tar streaming tools, its not extracted by GNU tar since 1.14
53
- %w{/pax_global_header /a/b} => %w{b},
54
- %w{pax_global_header a/b} => %w{b},
55
- }.each do |ins, outs|
56
- describe 'empty profile' do
57
- let(:in_files) { ins }
58
-
59
- it 'also has no files' do
60
- fetcher.files.must_equal outs
61
- end
62
- end
63
- end
64
-
65
- end