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,10 +0,0 @@
1
- name: complete
2
- title: complete example profile
3
- maintainer: Chef Software, Inc.
4
- copyright: Chef Software, Inc.
5
- copyright_email: support@chef.io
6
- license: Proprietary, All rights reserved
7
- summary: Testing stub
8
- version: 1.0.0
9
- supports:
10
- - os-family: linux
@@ -1,2 +0,0 @@
1
- module GordonLib
2
- end
@@ -1,12 +0,0 @@
1
- # Library resource
2
-
3
- require 'gordonlib'
4
- require 'hashie'
5
-
6
- class Gordon < Inspec.resource(1)
7
- name 'gordon'
8
- include GordonLib
9
- def enabled?
10
- true
11
- end
12
- end
@@ -1,10 +0,0 @@
1
- name: complete
2
- title: complete example profile
3
- maintainer: Chef Software, Inc.
4
- copyright: Chef Software, Inc.
5
- copyright_email: support@chef.io
6
- license: Proprietary, All rights reserved
7
- summary: Testing stub
8
- version: 1.0.0
9
- supports:
10
- - os-family: linux
@@ -1,3 +0,0 @@
1
- class Tiny < Inspec.resource(1)
2
- name 'tiny'
3
- end
@@ -1 +0,0 @@
1
- name: yumyum profile
@@ -1,3 +0,0 @@
1
- describe command('touch /tmp/inspec_test_DONT_CREATE') do
2
- its('exit_status') { should eq 123 }
3
- end
@@ -1,5 +0,0 @@
1
- name: skippy
2
- title: skip-like functionality
3
- version: 1.0.0
4
- supports:
5
- - os-family: definitely_not_supported
@@ -1,11 +0,0 @@
1
- describe 'working' do
2
- it { should eq 'working' }
3
- end
4
-
5
- describe 'skippy' do
6
- skip 'This will be skipped intentionally.'
7
- end
8
-
9
- describe 'failing' do
10
- it { should eq 'as intended' }
11
- end
@@ -1,2 +0,0 @@
1
- supports:
2
- - inspec: 0.18
@@ -1,2 +0,0 @@
1
- supports:
2
- - inspec: '>= 99.0.0'
@@ -1,65 +0,0 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Christoph Hartmann
4
-
5
- require 'helper'
6
- require 'inspec/objects'
7
-
8
- describe 'Objects' do
9
- describe 'Test' do
10
- let(:obj) { Inspec::Test.new }
11
- it 'constructs a simple resource+argument' do
12
- obj.qualifier = [['resource'], ['arg']]
13
- obj.to_ruby.must_equal "
14
- describe resource do
15
- its(\"arg\") { should }
16
- end
17
- ".strip
18
- end
19
-
20
- it 'constructs a simple resource+argument with to_s' do
21
- obj.qualifier = [['resource'], ['to_s']]
22
- obj.to_ruby.must_equal "
23
- describe resource.to_s do
24
- it { should }
25
- end
26
- ".strip
27
- end
28
-
29
- it 'constructs a simple resource+argument with to_i' do
30
- obj.qualifier = [['resource'], ['to_i']]
31
- obj.to_ruby.must_equal "
32
- describe resource.to_i do
33
- it { should }
34
- end
35
- ".strip
36
- end
37
-
38
- it 'constructs a simple resource+argument with array accessors' do
39
- obj.qualifier = [['resource'], ['name[2]']]
40
- obj.to_ruby.must_equal "
41
- describe resource.name[2] do
42
- it { should }
43
- end
44
- ".strip
45
- end
46
-
47
- it 'constructs a simple resource+argument with method calls' do
48
- obj.qualifier = [['resource'], ['hello', 'world']]
49
- obj.to_ruby.must_equal "
50
- describe resource.hello(\"world\") do
51
- it { should }
52
- end
53
- ".strip
54
- end
55
-
56
- it 'constructs a simple resource+argument with method calls' do
57
- obj.qualifier = [['resource'], [:world]]
58
- obj.to_ruby.must_equal "
59
- describe resource do
60
- its(\"world\") { should }
61
- end
62
- ".strip
63
- end
64
- end
65
- end
@@ -1,44 +0,0 @@
1
- # encoding: utf-8
2
- # author: Christoph Hartmann
3
- # author: Dominik Richter
4
-
5
- # TODO: do not use helper, since all plugins are loaded statically
6
- require 'minitest/autorun'
7
- require 'minitest/spec'
8
- require 'mocha/setup'
9
-
10
- require 'inspec/plugins/cli'
11
- require 'thor'
12
-
13
- describe 'plugin system' do
14
- describe 'with an empty profile' do
15
- let(:cli_reg) { Inspec::Plugins::CLI }
16
-
17
- before do
18
- # since the registry is a global singleton, clean it before using
19
- cli_reg.subcommands.clear
20
- end
21
-
22
- it 'is empty' do
23
- cli_reg.subcommands.must_equal({})
24
- end
25
-
26
- it 'stores one cli plugin' do
27
- plugin = {
28
- klass: Thor.new,
29
- subcommand_name: 'my_cmd',
30
- usage: 'usage my_cmd',
31
- description: 'desc of my_cmd',
32
- options: { test: 1 }
33
- }
34
- cli_reg.add_subcommand(
35
- plugin[:klass],
36
- plugin[:subcommand_name],
37
- plugin[:usage],
38
- plugin[:description],
39
- plugin[:options]
40
- )
41
- cli_reg.subcommands['my_cmd'].must_equal(plugin)
42
- end
43
- end
44
- end
@@ -1,60 +0,0 @@
1
- require 'helper'
2
-
3
- describe Inspec::Plugins::Resource do
4
- let(:base) { Inspec::Plugins::Resource }
5
-
6
- describe '#name' do
7
- it "won't register a nil resource" do
8
- Class.new(base) do name nil; end
9
- Inspec::Resource.registry.keys.wont_include nil
10
- Inspec::Resource.registry.keys.wont_include ''
11
- end
12
-
13
- it "will register a valid name" do
14
- Class.new(base) do name 'hello'; end
15
- Inspec::Resource.registry['hello'].wont_be :nil?
16
- end
17
-
18
- it "will create a good class name" do
19
- Class.new(base) do name 'hello_world'; end
20
- Inspec::Resource.registry['hello_world'].to_s
21
- .must_equal 'Inspec::Resource::Registry::HelloWorld'
22
- end
23
- end
24
-
25
- def create(&block)
26
- random_name = (0...50).map { (65 + rand(26)).chr }.join
27
- Class.new(base) do
28
- name random_name
29
- instance_eval &block
30
- end
31
- Inspec::Resource.registry[random_name]
32
- end
33
-
34
- describe '#desc' do
35
- it "will register a description" do
36
- expected = rand.to_s
37
- create { desc expected }.desc.must_equal expected
38
- end
39
-
40
- it "can change the description" do
41
- c = create { desc rand.to_s }
42
- c.desc(x = rand.to_s)
43
- c.desc.must_equal x
44
- end
45
- end
46
-
47
- describe '#example' do
48
- it "will register a description" do
49
- expected = rand.to_s
50
- create { example expected }.example.must_equal expected
51
- end
52
-
53
- it "can change the description" do
54
- c = create { example rand.to_s }
55
- c.example(x = rand.to_s)
56
- c.example.must_equal x
57
- end
58
- end
59
-
60
- end
@@ -1,345 +0,0 @@
1
- # encoding: utf-8
2
- # author: Dominik Richter
3
- # author: Christoph Hartmann
4
-
5
- require 'helper'
6
- require 'inspec/profile_context'
7
-
8
- class Module
9
- include Minitest::Spec::DSL
10
- end
11
-
12
- module DescribeOneTest
13
- it 'loads an empty describe.one' do
14
- profile.load(format(context_format, 'describe.one'))
15
- get_checks.must_equal([])
16
- end
17
-
18
- it 'loads an empty describe.one block' do
19
- profile.load(format(context_format, 'describe.one do; end'))
20
- get_checks.must_equal([['describe.one', [], nil]])
21
- end
22
-
23
- it 'loads a simple describe.one block' do
24
- profile.load(format(context_format, '
25
- describe.one do
26
- describe true do; it { should eq true }; end
27
- end'))
28
- c = get_checks[0]
29
- c[0].must_equal 'describe.one'
30
- childs = c[1]
31
- childs.length.must_equal 1
32
- childs[0][0].must_equal 'describe'
33
- childs[0][1].must_equal [true]
34
- end
35
-
36
- it 'loads a complex describe.one block' do
37
- profile.load(format(context_format, '
38
- describe.one do
39
- describe 0 do; it { should eq true }; end
40
- describe 1 do; it { should eq true }; end
41
- describe 2 do; it { should eq true }; end
42
- end'))
43
- c = get_checks[0]
44
- c[0].must_equal 'describe.one'
45
- childs = c[1]
46
- childs.length.must_equal 3
47
- childs.each_with_index do |ci, idx|
48
- ci[0].must_equal 'describe'
49
- ci[1].must_equal [idx]
50
- end
51
- end
52
- end
53
-
54
- describe Inspec::ProfileContext do
55
- let(:backend) { MockLoader.new.backend }
56
- let(:profile) { Inspec::ProfileContext.new(nil, backend, {}) }
57
-
58
- def get_rule
59
- profile.rules.values[0]
60
- end
61
-
62
- def get_checks
63
- Inspec::Rule.prepare_checks(get_rule)
64
- end
65
-
66
- it 'must be able to load empty content' do
67
- profile.load('', 'dummy', 1).must_be_nil
68
- end
69
-
70
- describe 'its default DSL' do
71
- def load(call)
72
- proc { profile.load(call) }
73
- end
74
-
75
- let(:context_format) { '%s' }
76
-
77
- include DescribeOneTest
78
-
79
- it 'must provide os resource' do
80
- load('print os[:family]').must_output 'debian'
81
- end
82
-
83
- it 'must provide file resource' do
84
- load('print file("").type').must_output 'unknown'
85
- end
86
-
87
- it 'must provide command resource' do
88
- load('print command("").stdout').must_output ''
89
- end
90
-
91
- it 'supports empty describe calls' do
92
- load('describe').must_output ''
93
- profile.rules.keys.length.must_equal 1
94
- profile.rules.keys[0].must_match /^\(generated from \(eval\):1 [0-9a-f]+\)$/
95
- profile.rules.values[0].must_be_kind_of Inspec::Rule
96
- end
97
-
98
- it 'provides the describe keyword in the global DSL' do
99
- load('describe true do; it { should_eq true }; end')
100
- .must_output ''
101
- profile.rules.keys.length.must_equal 1
102
- profile.rules.keys[0].must_match /^\(generated from \(eval\):1 [0-9a-f]+\)$/
103
- profile.rules.values[0].must_be_kind_of Inspec::Rule
104
- end
105
-
106
- it 'loads multiple computed calls to describe correctly' do
107
- load("%w{1 2 3}.each do\ndescribe true do; it { should_eq true }; end\nend")
108
- .must_output ''
109
- profile.rules.keys.length.must_equal 3
110
- [0, 1, 2].each do |i|
111
- profile.rules.keys[i].must_match /^\(generated from \(eval\):2 [0-9a-f]+\)$/
112
- profile.rules.values[i].must_be_kind_of Inspec::Rule
113
- end
114
- end
115
-
116
- it 'does not provide the expect keyword in the global DLS' do
117
- load('expect(true).to_eq true').must_raise NoMethodError
118
- end
119
-
120
- describe 'global only_if' do
121
- let(:if_true) { "only_if { true }\n" }
122
- let(:if_false) { "only_if { false }\n" }
123
- let(:describe) { "describe nil do its(:to_i) { should eq rand } end\n" }
124
- let(:control) { "control 1 do\n#{describe}end" }
125
-
126
- it 'provides the keyword' do
127
- profile.load(if_true)
128
- profile.rules.must_equal({})
129
- end
130
-
131
- it 'doesnt affect controls when positive' do
132
- profile.load(if_true + 'control 1')
133
- profile.rules.values[0].must_be_kind_of Inspec::Rule
134
- end
135
-
136
- it 'doesnt remove controls when negative' do
137
- profile.load(if_false + 'control 1')
138
- profile.rules.values[0].must_be_kind_of Inspec::Rule
139
- end
140
-
141
- it 'alters controls when positive' do
142
- profile.load(if_false + control)
143
- get_checks.length.must_equal 1
144
- get_checks[0][1][0].resource_skipped.must_equal 'Skipped control due to only_if condition.'
145
- end
146
-
147
- it 'alters non-controls when positive' do
148
- profile.load(if_false + describe)
149
- get_checks.length.must_equal 1
150
- get_checks[0][1][0].resource_skipped.must_equal 'Skipped control due to only_if condition.'
151
- end
152
-
153
- it 'doesnt alter controls when negative' do
154
- profile.load(if_true + control)
155
- get_checks.length.must_equal 1
156
- get_checks[0][1][0].must_be_nil
157
- end
158
-
159
- it 'doesnt alter non-controls when negative' do
160
- profile.load(if_true + describe)
161
- get_checks.length.must_equal 1
162
- get_checks[0][1][0].must_be_nil
163
- end
164
-
165
- it 'doesnt overwrite falsy only_ifs' do
166
- profile.load(if_false + if_true + control)
167
- get_checks.length.must_equal 1
168
- get_checks[0][1][0].resource_skipped.must_equal 'Skipped control due to only_if condition.'
169
- end
170
-
171
- it 'doesnt overwrite falsy only_ifs' do
172
- profile.load(if_true + if_false + control)
173
- get_checks.length.must_equal 1
174
- get_checks[0][1][0].resource_skipped.must_equal 'Skipped control due to only_if condition.'
175
- end
176
- end
177
-
178
- it 'provides the control keyword in the global DSL' do
179
- profile.load('control 1')
180
- profile.rules.keys.must_equal ['1']
181
- profile.rules.values[0].must_be_kind_of Inspec::Rule
182
- end
183
-
184
- it 'provides the rule keyword in the global DSL (legacy mode)' do
185
- profile.load('rule 1')
186
- profile.rules.keys.must_equal ['1']
187
- profile.rules.values[0].must_be_kind_of Inspec::Rule
188
- end
189
- end
190
-
191
- describe 'rule DSL' do
192
- let(:rule_id) { rand.to_s }
193
- let(:context_format) { "rule #{rule_id.inspect} do\n%s\nend" }
194
-
195
- def get_rule
196
- profile.rules[rule_id]
197
- end
198
-
199
- include DescribeOneTest
200
-
201
- it 'doesnt add any checks if none are provided' do
202
- profile.load("rule #{rule_id.inspect}")
203
- rule = profile.rules[rule_id]
204
- ::Inspec::Rule.prepare_checks(rule).must_equal([])
205
- end
206
-
207
- describe 'supports empty describe blocks' do
208
- it 'doesnt crash, but doesnt add anything either' do
209
- profile.load(format(context_format, 'describe'))
210
- profile.rules.keys.must_include(rule_id)
211
- get_checks.must_equal([])
212
- end
213
- end
214
-
215
- describe 'adds a check via describe' do
216
- let(:check) {
217
- profile.load(format(context_format,
218
- "describe os[:family] { it { must_equal 'debian' } }"
219
- ))
220
- get_checks[0]
221
- }
222
-
223
- it 'registers the check with describe' do
224
- check[0].must_equal 'describe'
225
- end
226
-
227
- it 'registers the check with the describe argument' do
228
- check[1].must_equal %w{debian}
229
- end
230
-
231
- it 'registers the check with the provided proc' do
232
- check[2].must_be_kind_of Proc
233
- end
234
- end
235
-
236
- describe 'adds a check via expect' do
237
- let(:check) {
238
- profile.load(format(context_format,
239
- "expect(os[:family]).to eq('debian')"
240
- ))
241
- get_checks[0]
242
- }
243
-
244
- it 'registers the check with describe' do
245
- check[0].must_equal 'expect'
246
- end
247
-
248
- it 'registers the check with the describe argument' do
249
- check[1].must_equal %w{debian}
250
- end
251
-
252
- it 'registers the check with the provided proc' do
253
- check[2].must_be_kind_of Inspec::Expect
254
- end
255
- end
256
-
257
- describe 'adds a check via describe + expect' do
258
- let(:check) {
259
- profile.load(format(context_format,
260
- "describe 'the actual test' do
261
- expect(os[:family]).to eq('debian')
262
- end"
263
- ))
264
- get_checks[0]
265
- }
266
-
267
- it 'registers the check with describe' do
268
- check[0].must_equal 'describe'
269
- end
270
-
271
- it 'registers the check with the describe argument' do
272
- check[1].must_equal ['the actual test']
273
- end
274
-
275
- it 'registers the check with the provided proc' do
276
- check[2].must_be_kind_of Proc
277
- end
278
- end
279
-
280
- describe 'with only_if' do
281
- it 'provides the only_if keyword' do
282
- profile.load(format(context_format, 'only_if'))
283
- get_checks.must_equal([])
284
- end
285
-
286
- it 'skips with only_if == false' do
287
- profile.load(format(context_format, 'only_if { false }'))
288
- get_checks.length.must_equal 1
289
- get_checks[0][1][0].resource_skipped.must_equal 'Skipped control due to only_if condition.'
290
- end
291
-
292
- it 'does nothing with only_if == false' do
293
- profile.load(format(context_format, 'only_if { true }'))
294
- get_checks.length.must_equal 0
295
- end
296
-
297
- it 'doesnt overwrite falsy only_ifs' do
298
- profile.load(format(context_format, "only_if { false }\nonly_if { true }"))
299
- get_checks.length.must_equal 1
300
- get_checks[0][1][0].resource_skipped.must_equal 'Skipped control due to only_if condition.'
301
- end
302
-
303
- it 'doesnt overwrite falsy only_ifs' do
304
- profile.load(format(context_format, "only_if { true }\nonly_if { false }"))
305
- get_checks.length.must_equal 1
306
- get_checks[0][1][0].resource_skipped.must_equal 'Skipped control due to only_if condition.'
307
- end
308
- end
309
- end
310
-
311
- describe 'library loading' do
312
- it 'supports simple ruby require statements' do
313
- # Please note: we do discourage the use of Gems in inspec resources at
314
- # this time. Resources should be well packaged whenever possible.
315
- proc { profile.load('Net::POP3') }.must_raise NameError
316
- profile.load_libraries([['require "net/pop"', 'libraries/a.rb']])
317
- profile.load('Net::POP3').to_s.must_equal 'Net::POP3'
318
- end
319
-
320
- it 'supports loading across the library' do
321
- profile.load_libraries([
322
- ["require 'a'\nA", 'libraries/b.rb'],
323
- ['module A; end', 'libraries/a.rb']
324
- ])
325
- profile.load('A').to_s.must_equal 'A'
326
- end
327
-
328
- it 'fails loading if reference error occur' do
329
- proc {
330
- profile.load_libraries([
331
- ["require 'a'\nB", 'libraries/b.rb'],
332
- ['module A; end', 'libraries/a.rb']
333
- ])
334
- }.must_raise NameError
335
- end
336
-
337
- it 'fails loading if a reference dependency isnt found' do
338
- proc {
339
- profile.load_libraries([
340
- ["require 'a'\nA", 'libraries/b.rb'],
341
- ])
342
- }.must_raise LoadError
343
- end
344
- end
345
- end