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