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,60 +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::XinetdConf' do
9
- let(:resource) { load_resource('xinetd_conf') }
10
- it 'reads default params' do
11
- d = resource.params['defaults']
12
- _(d).must_be_kind_of SimpleConfig
13
- _(d.params['instances']).must_equal '50'
14
- _(d.params['log_type']).must_equal 'SYSLOG daemon info'
15
- _(d.params.length).must_equal 2
16
- end
17
-
18
- describe 'with services from child configs' do
19
- it 'has one service name' do
20
- _(resource.services.uniq).must_equal %w{chargen}
21
- end
22
-
23
- it 'has multiple service definitions' do
24
- _(resource.ids).must_equal %w{chargen-stream chargen-dgram}
25
- end
26
-
27
- it 'can filter by name' do
28
- _(resource.services('not here').services).must_be_empty
29
- end
30
-
31
- it 'can chain filters' do
32
- one = resource.services('chargen').socket_types('dgram')
33
- _(one.services.length).must_equal 1
34
- _(one.ids).must_equal %w{chargen-dgram}
35
- end
36
-
37
- it 'checks if all are disabled on one disabled service' do
38
- one = resource.ids('chargen-stream')
39
- _(one.disabled?).must_equal true
40
- end
41
-
42
- it 'checks if all are disabled on multiple mixed' do
43
- _(resource.disabled?).must_equal false
44
- end
45
-
46
- it 'checks if all are enabled on one enabled service' do
47
- one = resource.ids(/dgram$/)
48
- _(one.enabled?).must_equal true
49
- end
50
-
51
- it 'checks if all are enabled on one enabled service' do
52
- one = resource.ids(/stream$/)
53
- _(one.enabled?).must_equal false
54
- end
55
-
56
- it 'checks if all are enabled on multiple mixed' do
57
- _(resource.enabled?).must_equal false
58
- end
59
- end
60
- end
@@ -1,34 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'helper'
4
- require 'inspec/resource'
5
-
6
- describe 'Inspec::Resources::YAML' do
7
- describe 'when loading a valid yaml' do
8
- let (:resource) { load_resource('yaml', 'kitchen.yml') }
9
-
10
- it 'gets params as a hashmap' do
11
- _(resource.params).must_be_kind_of Hash
12
- end
13
-
14
- it 'retrieves nil if a param is missing' do
15
- _(resource.params['missing']).must_be_nil
16
- end
17
-
18
- it 'retrieves params by name' do
19
- _(resource.send('name')).must_equal 'vagrant'
20
- end
21
-
22
- it 'retrieves an array by name' do
23
- _(resource.send('platforms')).must_equal %w{linux mac}
24
- end
25
-
26
- it 'doesnt resolve dot-notation names' do
27
- _(resource.send('driver.customize.memory')).must_be_nil
28
- end
29
-
30
- it 'doesnt resolve symbol-notation names' do
31
- _(resource.send(:'driver.customize.memory')).must_be_nil
32
- end
33
- end
34
- end
@@ -1,68 +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::YumRepo' do
9
- it 'get repository details' do
10
- resource = MockLoader.new(:centos7).load_resource('yum')
11
- _(resource.repositories).must_equal [{
12
- 'id'=>'base/7/x86_64',
13
- 'name'=>'CentOS-7 - Base',
14
- 'status'=>'enabled',
15
- 'revision'=>'1427842153',
16
- 'updated'=>'Tue Mar 31 22:50:46 2015',
17
- 'pkgs'=>'8652',
18
- 'size'=>'6.3 G',
19
- 'mirrors'=>'http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock',
20
- 'baseurl'=>'http://ftp.hosteurope.de/mirror/centos.org/7.1.1503/os/x86_64/ (9 more)',
21
- 'expire'=>'21600 second(s) (last: Sun Sep 6 10:20:46 2015)',
22
- 'filename'=>'/etc/yum.repos.d/CentOS-Base.repo',
23
- }, {
24
- 'id'=>'base-debuginfo/x86_64',
25
- 'name'=>'CentOS-7 - Debuginfo',
26
- 'status'=>'disabled',
27
- 'baseurl'=>'http://debuginfo.centos.org/7/x86_64/',
28
- 'expire'=>'21600 second(s) (last: Unknown)',
29
- 'filename'=>'/etc/yum.repos.d/CentOS-Debuginfo.repo',
30
- }, {
31
- 'id'=>'extras/7/x86_64',
32
- 'name'=>'CentOS-7 - Extras',
33
- 'status'=>'enabled',
34
- 'revision'=>'1441314199',
35
- 'updated'=>'Thu Sep 3 21:03:33 2015',
36
- 'pkgs'=>'181',
37
- 'size'=>'742 M',
38
- 'mirrors'=>'http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=extras&infra=stock',
39
- 'baseurl'=>'http://mirror.informatik.hs-fulda.de/centos7.1.1503/extras/x86_64/ (9 more)',
40
- 'expire'=>'21600 second(s) (last: Sun Sep 6 10:20:48 2015)',
41
- 'filename'=>'/etc/yum.repos.d/CentOS-Base.repo',
42
- }]
43
- _(resource.repos.length).must_equal 3
44
- # get repository details
45
- _(resource.repos).must_equal %w{base/7/x86_64 base-debuginfo/x86_64 extras/7/x86_64}
46
- # test its syntax repo
47
- _(resource.extras.exist?).must_equal true
48
- _(resource.extras.enabled?).must_equal true
49
- # test enabled extra repo
50
- extras = resource.repo('extras/7/x86_64')
51
- _(extras.exist?).must_equal true
52
- _(extras.enabled?).must_equal true
53
- # test enabled extra repo with short name
54
- extras = resource.repo('extras')
55
- _(extras.exist?).must_equal true
56
- _(extras.enabled?).must_equal true
57
- # test disabled extra-source repo
58
- extras = resource.repo('base-debuginfo/x86_64')
59
- _(extras.exist?).must_equal true
60
- _(extras.enabled?).must_equal false
61
- end
62
-
63
- it 'test enabled extra repo (serverspec backwards comptability)' do
64
- serverspec = load_resource('yumrepo', 'extras')
65
- _(serverspec.exists?).must_equal true
66
- _(serverspec.enabled?).must_equal true
67
- end
68
- end
@@ -1,78 +0,0 @@
1
- # encoding: utf-8
2
- # author: Steven Danna <steve@chef.io>
3
- #
4
- require 'helper'
5
- require 'rbconfig'
6
- require 'mocha/test_unit'
7
- require 'inspec/shell_detector'
8
-
9
- module ShellDetectorTestHelpers
10
- def no_proc
11
- Dir.expects(:exist?).with('/proc').returns(false)
12
- end
13
-
14
- def with_proc(shell)
15
- Dir.expects(:exist?).with('/proc').returns(true)
16
- File.expects(:readlink).with("/proc/#{ppid}/exe").returns(shell)
17
- end
18
-
19
- def with_ps(output)
20
- subject.expects(:'`').with("ps -cp #{ppid} -o command=").returns(output)
21
- end
22
-
23
- def with_env(shell)
24
- ENV.expects(:[]).with('SHELL').returns(shell)
25
- end
26
-
27
- def with_pwuid(shell)
28
- Process.expects(:uid).returns(9999)
29
- @mock_user = Minitest::Mock.new
30
- @mock_user.expect :shell, shell
31
- Etc.expects(:getpwuid).with(9999).returns(@mock_user)
32
- end
33
- end
34
-
35
- describe Inspec::ShellDetector do
36
- include ShellDetectorTestHelpers
37
-
38
- let(:subject) { Inspec::ShellDetector.new }
39
- let(:ppid) { Process.ppid }
40
-
41
- # Small hack to ensure we can test on windows
42
- it "returns nil immediately if running on windows" do
43
- RbConfig::CONFIG.expects(:[]).with('host_os').returns('mswin')
44
- subject.shell!.must_equal(nil)
45
- end
46
-
47
- describe "not on windows" do
48
- before do
49
- RbConfig::CONFIG.expects(:[]).with('host_os').returns('beos')
50
- end
51
-
52
- it "detects the shell via /proc if it exists" do
53
- with_proc("/usr/bin/fish")
54
- subject.shell!.must_equal("fish")
55
- end
56
-
57
- it "detects via `ps` if /proc doesn't exist" do
58
- no_proc; with_ps("/usr/bin/ksh")
59
- subject.shell!.must_equal("ksh")
60
- end
61
-
62
- it "detects via ENV if parent process methods failed" do
63
- no_proc; with_ps(""); with_env("fish")
64
- subject.shell!.must_equal("fish")
65
- end
66
-
67
- it "detects via getpwuid if all else fails" do
68
- no_proc; with_ps(""); with_env(""); with_pwuid("/usr/bin/fish")
69
- subject.shell!.must_equal("fish")
70
- @mock_user.verify
71
- end
72
-
73
- it "returns nil if the shell isn't in the whitelist" do
74
- no_proc; with_ps(""); with_env("badshell"); with_pwuid("/usr/bin/badshell")
75
- subject.shell!.must_equal(nil)
76
- end
77
- end
78
- end
@@ -1,17 +0,0 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Christoph Hartmann
4
-
5
- require 'helper'
6
-
7
- describe Inspec::SourceReader do
8
- let(:reg) { Inspec::SourceReader }
9
-
10
- it 'resolves nil-targets to nil' do
11
- _(reg.resolve(nil)).must_be_nil
12
- end
13
-
14
- it 'only supports Fetchers' do
15
- proc { reg.resolve("not supported") }.must_raise StandardError
16
- end
17
- end
@@ -1,61 +0,0 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Christoph Hartmann
4
-
5
- require 'helper'
6
-
7
- describe SourceReaders::Flat do
8
- let(:reader) { SourceReaders::Flat }
9
-
10
- it 'registers with the source readers registry' do
11
- reg = Inspec::SourceReader.registry
12
- _(reg['flat']).must_equal reader
13
- end
14
-
15
- describe 'with a flat file' do
16
- let(:target) { Inspec::Fetcher.resolve(__FILE__) }
17
- let(:res) { Inspec::SourceReader.resolve(target.relative_target) }
18
-
19
- it 'resolves the target' do
20
- _(res).must_be_kind_of reader
21
- end
22
-
23
- it 'has no metadata' do
24
- _(res.metadata.params).must_equal({})
25
- end
26
-
27
- it 'retrieves all files' do
28
- _(res.tests.keys).must_equal [File.basename(__FILE__)]
29
- _(res.tests.values[0]).must_equal File.read(__FILE__)
30
- end
31
-
32
- it 'has no libraries' do
33
- _(res.libraries).must_be_empty
34
- end
35
- end
36
-
37
- describe 'with a flat folder' do
38
- let(:target) { Inspec::Fetcher.resolve(File.dirname(__FILE__)) }
39
- let(:res) { Inspec::SourceReader.resolve(target.relative_target) }
40
-
41
- it 'resolves the target' do
42
- _(res).must_be_kind_of reader
43
- end
44
-
45
- it 'has no metadata' do
46
- _(res.metadata.params).must_equal({})
47
- end
48
-
49
- it 'retrieves all files' do
50
- dir = File.dirname(__FILE__)
51
- full_files = Dir[File.join(dir, '**')]
52
- files = full_files.map { |x| x.sub(dir+'/', '') }
53
- _(res.tests.keys).must_equal files
54
- _(res.tests.values[0]).must_equal File.read(full_files[0])
55
- end
56
-
57
- it 'has no libraries' do
58
- _(res.libraries).must_be_empty
59
- end
60
- end
61
- end
@@ -1,38 +0,0 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Christoph Hartmann
4
-
5
- require 'helper'
6
-
7
- describe SourceReaders::InspecReader do
8
- let(:reader) { SourceReaders::InspecReader }
9
-
10
- it 'registers with the source readers registry' do
11
- reg = Inspec::SourceReader.registry
12
- _(reg['inspec']).must_equal reader
13
- end
14
-
15
- describe 'with a valid profile' do
16
- let(:mock_file) { mock_file = MockLoader.profile_tgz('complete-profile') }
17
- let(:target) { Inspec::Fetcher.resolve(mock_file) }
18
- let(:res) { Inspec::SourceReader.resolve(target) }
19
-
20
- it 'resolves the target to inspec' do
21
- _(res).must_be_kind_of reader
22
- end
23
-
24
- it 'retrieves metadata' do
25
- _(res.metadata.params[:name]).must_equal 'complete'
26
- end
27
-
28
- it 'retrieves all files' do
29
- _(res.tests.keys).must_equal %w{controls/filesystem_spec.rb}
30
- _(res.tests.values[0]).must_match /^control 'test01' do$/
31
- end
32
-
33
- it 'retrieves all libraries' do
34
- _(res.libraries.keys).must_equal %w{libraries/testlib.rb}
35
- _(res.libraries.values[0]).must_match /^# Library resource$/
36
- end
37
- end
38
- end
@@ -1,59 +0,0 @@
1
- # author: Stephan Renatus
2
-
3
- require 'helper'
4
-
5
- describe FilterArray do
6
- let (:data) {[
7
- { foo: 3, bar: true, baz: 'yay' },
8
- { foo: 2, bar: false, baz: 'noo' },
9
- { foo: 2, bar: false, baz: 'whatever' },
10
- ]}
11
-
12
- let (:instance) do
13
- FilterArray.new data
14
- end
15
-
16
- describe '#content' do
17
- it 'returns the current set' do
18
- instance.content.must_equal data
19
- end
20
-
21
- it 'can also be referred to as #rules' do
22
- instance.rules.must_equal instance.content
23
- end
24
- end
25
-
26
- describe '#field' do
27
- it 'retrieves (unique) values' do
28
- instance.field('foo').must_equal [3, 2]
29
- end
30
-
31
- it 'filters the current set' do
32
- instance.field('foo', 2).content.must_equal [
33
- { foo: 2, bar: false, baz: 'noo' },
34
- { foo: 2, bar: false, baz: 'whatever' },
35
- ]
36
- end
37
-
38
- it 'can be chained' do
39
- instance.field('foo', 2).field('baz', 'noo').content.must_equal [
40
- { foo: 2, bar: false, baz: 'noo' },
41
- ]
42
- end
43
-
44
- it 'can be abbreviated for retrieval' do
45
- instance.foo.must_equal [3, 2]
46
- end
47
-
48
- it 'can be abbreviated for querying' do
49
- instance.foo(2).content.must_equal [
50
- { foo: 2, bar: false, baz: 'noo' },
51
- { foo: 2, bar: false, baz: 'whatever' },
52
- ]
53
- end
54
-
55
- it 'returns `[nil]` when queried for a non-existing key' do
56
- instance.what.must_equal [nil]
57
- end
58
- end
59
- end
@@ -1,177 +0,0 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Stephan Renatus
4
- # author: Christoph Hartmann
5
-
6
- require 'helper'
7
-
8
- describe FilterTable do
9
- let (:data) {[
10
- { foo: 3, bar: true, baz: 'yay', num: nil, snum: "0" },
11
- { foo: 2, bar: false, baz: 'noo', num: 1, snum: nil },
12
- { foo: 2, bar: false, baz: 'whatever', num: 2, snum: "1.00" },
13
- ]}
14
-
15
- let (:resource) {
16
- Class.new do
17
- attr_reader :data
18
- def initialize(data)
19
- @data = data
20
- end
21
- end
22
- }
23
-
24
- let (:factory) { FilterTable.create }
25
- let (:instance) { resource.new(data) }
26
-
27
- it 'has a create utility which creates a filter factory' do
28
- factory.must_be_kind_of FilterTable::Factory
29
- end
30
-
31
- it 'retrieves the resource from all entries' do
32
- factory.add_accessor(:where)
33
- .add(:baz?) { |x| x.resource }
34
- .connect(resource, :data)
35
- instance.baz?.must_equal instance
36
- end
37
-
38
- describe 'when calling add_accessor' do
39
- it 'is chainable' do
40
- factory.add_accessor(:sth).must_equal factory
41
- end
42
-
43
- it 'wont add nil' do
44
- proc { factory.add_accessor(nil) }.must_throw RuntimeError
45
- end
46
-
47
- it 'can expose the where method' do
48
- factory.add_accessor(:where).connect(resource, :data)
49
- _(instance.respond_to?(:where)).must_equal true
50
- instance.where({ baz: 'yay' }).params.must_equal [data[0]]
51
- end
52
-
53
- it 'will delegate even non-existing methods' do
54
- factory.add_accessor(:not_here).connect(resource, :data)
55
- _(instance.respond_to?(:not_here)).must_equal true
56
- end
57
- end
58
-
59
- describe 'when calling add' do
60
- it 'is chainable' do
61
- factory.add(:sth).must_equal factory
62
- end
63
-
64
- it 'wont add nil' do
65
- proc { factory.add(nil) }.must_throw RuntimeError
66
- end
67
-
68
- it 'can expose a data column' do
69
- factory.add(:baz).connect(resource, :data)
70
- instance.baz(123).must_be_kind_of(FilterTable::Table)
71
- end
72
-
73
- it 'retrieves all entries' do
74
- factory.add(:foo).connect(resource, :data)
75
- instance.foo.must_equal([3, 2, 2])
76
- end
77
-
78
- it 'retrieves entries with simple style' do
79
- factory.add(:foo, style: :simple)
80
- .add(:num, style: :simple)
81
- .connect(resource, :data)
82
- instance.foo.must_equal([3, 2])
83
- instance.num.must_equal([1, 2])
84
- end
85
- end
86
-
87
- describe 'when calling entries' do
88
- before { factory.add(:baz).connect(resource, :data) }
89
- let(:entries) { instance.baz(/.*/).entries }
90
- let(:entry) { instance.baz('yay').entries }
91
-
92
- it 'retrieves all entries with this field' do
93
- entries.length.must_equal 3
94
- entry.length.must_equal 1
95
- end
96
-
97
- it 'retrieves all entries with this field' do
98
- entry[0].must_be_kind_of(Struct)
99
- end
100
-
101
- it 'retrieves all entries with this field' do
102
- entry[0].baz.must_equal 'yay'
103
- end
104
-
105
- it 'prints nicely' do
106
- entry[0].to_s.must_match(/ with baz == "yay" one entry/)
107
- end
108
- end
109
-
110
- describe 'with the number field' do
111
- before { factory.add(:num).connect(resource, :data) }
112
-
113
- it 'filter by nil' do
114
- instance.num(nil).params.must_equal [data[0]]
115
- end
116
-
117
- it 'filter by existing numbers' do
118
- instance.num(1).params.must_equal [data[1]]
119
- end
120
-
121
- it 'filter by missing number' do
122
- instance.num(-1).params.must_equal []
123
- end
124
- end
125
-
126
- describe 'with the string-number field' do
127
- before { factory.add(:snum).connect(resource, :data) }
128
-
129
- it 'retrieves the number 0' do
130
- instance.snum(0).params.must_equal [data[0]]
131
- end
132
-
133
- it 'retrieves the number 1' do
134
- instance.snum(1).params.must_equal []
135
- end
136
- end
137
-
138
- describe 'with the string-float field' do
139
- before { factory.add(:snum).connect(resource, :data) }
140
-
141
- it 'retrieves the float 0.0' do
142
- instance.snum(0.0).params.must_equal [data[0]]
143
- end
144
-
145
- it 'retrieves the float 1.0' do
146
- instance.snum(1.0).params.must_equal [data[2]]
147
- end
148
- end
149
-
150
- describe 'with a regex check' do
151
- before { factory.add(:baz).connect(resource, :data) }
152
-
153
- it 'retrieves the number 0' do
154
- instance.baz(/ever$/).params.must_equal [data[2]]
155
- end
156
- end
157
-
158
- describe 'with the string field' do
159
- before { factory.add(:baz).connect(resource, :data) }
160
-
161
- it 'filter by existing strings' do
162
- instance.baz('yay').params.must_equal [data[0]]
163
- end
164
-
165
- it 'filter by missing string' do
166
- instance.baz('num').params.must_equal []
167
- end
168
-
169
- it 'filter by existing regex' do
170
- instance.baz(/A/i).params.must_equal [data[0], data[2]]
171
- end
172
-
173
- it 'filter by missing regex' do
174
- instance.baz(/zzz/).params.must_equal []
175
- end
176
- end
177
- end
@@ -1,23 +0,0 @@
1
- # encoding: utf-8
2
- # author: Stephan Renatus
3
-
4
- require 'helper'
5
-
6
- describe FindFiles do
7
- let (:findfiles) do
8
- class FindFilesTest
9
- include FindFiles
10
- def inspec
11
- Inspec::Backend.create(backend: :mock)
12
- end
13
- end
14
- FindFilesTest.new
15
- end
16
-
17
- describe '#find_files' do
18
- it 'returns an array (of findings)' do
19
- files = findfiles.find_files('/no/such/mock', type: 'file', depth: 1)
20
- files.must_equal([])
21
- end
22
- end
23
- end
@@ -1,32 +0,0 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Christoph Hartmann
4
-
5
- require 'helper'
6
-
7
- describe PasswdParser do
8
- let (:parser) { Class.new() { include PasswdParser }.new }
9
-
10
- describe '#parse_passwd' do
11
- it 'parses nil content' do
12
- parser.parse_passwd(nil).must_equal([])
13
- end
14
-
15
- it 'parses an empty passwd line' do
16
- parser.parse_passwd('').must_equal([])
17
- end
18
-
19
- it 'parses a valid passwd line' do
20
- info = [{
21
- "user"=>"root",
22
- "password"=>"x",
23
- "uid"=>"0",
24
- "gid"=>"0",
25
- "desc"=>"root",
26
- "home"=>"/root",
27
- "shell"=>"/bin/sh"
28
- }]
29
- parser.parse_passwd('root:x:0:0:root:/root:/bin/sh').must_equal(info)
30
- end
31
- end
32
- end