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,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