chef 12.0.3-x86-mingw32 → 12.1.0.rc.0-x86-mingw32

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 (653) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +4 -1
  3. data/README.md +42 -18
  4. data/distro/common/html/_sources/ctl_chef_client.txt +1 -1
  5. data/distro/common/html/_sources/ctl_chef_server.txt +53 -35
  6. data/distro/common/html/_sources/ctl_chef_solo.txt +1 -1
  7. data/distro/common/html/_sources/knife_bootstrap.txt +1 -1
  8. data/distro/common/html/_sources/knife_cookbook_site.txt +1 -1
  9. data/distro/common/html/_sources/knife_data_bag.txt +4 -4
  10. data/distro/common/html/_sources/knife_status.txt +1 -1
  11. data/distro/common/html/_static/searchtools.js +1 -1
  12. data/distro/common/html/ctl_chef_client.html +55 -7
  13. data/distro/common/html/ctl_chef_server.html +84 -41
  14. data/distro/common/html/ctl_chef_shell.html +45 -1
  15. data/distro/common/html/ctl_chef_solo.html +51 -5
  16. data/distro/common/html/index.html +2 -2
  17. data/distro/common/html/knife.html +1 -1
  18. data/distro/common/html/knife_bootstrap.html +30 -10
  19. data/distro/common/html/knife_cookbook_site.html +2 -0
  20. data/distro/common/html/knife_data_bag.html +4 -4
  21. data/distro/common/html/knife_node.html +2 -2
  22. data/distro/common/html/knife_raw.html +1 -1
  23. data/distro/common/html/knife_role.html +1 -1
  24. data/distro/common/html/knife_search.html +3 -3
  25. data/distro/common/html/knife_status.html +4 -0
  26. data/distro/common/html/searchindex.js +1 -1
  27. data/distro/common/man/man1/chef-shell.1 +72 -1
  28. data/distro/common/man/man1/knife-bootstrap.1 +71 -63
  29. data/distro/common/man/man1/knife-client.1 +1 -1
  30. data/distro/common/man/man1/knife-configure.1 +1 -1
  31. data/distro/common/man/man1/knife-cookbook-site.1 +4 -1
  32. data/distro/common/man/man1/knife-cookbook.1 +1 -1
  33. data/distro/common/man/man1/knife-data-bag.1 +5 -5
  34. data/distro/common/man/man1/knife-delete.1 +1 -1
  35. data/distro/common/man/man1/knife-deps.1 +1 -1
  36. data/distro/common/man/man1/knife-diff.1 +1 -1
  37. data/distro/common/man/man1/knife-download.1 +1 -1
  38. data/distro/common/man/man1/knife-edit.1 +1 -1
  39. data/distro/common/man/man1/knife-environment.1 +1 -1
  40. data/distro/common/man/man1/knife-exec.1 +1 -1
  41. data/distro/common/man/man1/knife-index-rebuild.1 +1 -1
  42. data/distro/common/man/man1/knife-list.1 +1 -1
  43. data/distro/common/man/man1/knife-node.1 +3 -3
  44. data/distro/common/man/man1/knife-raw.1 +2 -2
  45. data/distro/common/man/man1/knife-recipe-list.1 +1 -1
  46. data/distro/common/man/man1/knife-role.1 +2 -2
  47. data/distro/common/man/man1/knife-search.1 +4 -4
  48. data/distro/common/man/man1/knife-serve.1 +1 -1
  49. data/distro/common/man/man1/knife-show.1 +1 -1
  50. data/distro/common/man/man1/knife-ssh.1 +1 -1
  51. data/distro/common/man/man1/knife-ssl-check.1 +1 -1
  52. data/distro/common/man/man1/knife-ssl-fetch.1 +1 -1
  53. data/distro/common/man/man1/knife-status.1 +1 -1
  54. data/distro/common/man/man1/knife-tag.1 +1 -1
  55. data/distro/common/man/man1/knife-upload.1 +1 -1
  56. data/distro/common/man/man1/knife-user.1 +1 -1
  57. data/distro/common/man/man1/knife-xargs.1 +1 -1
  58. data/distro/common/man/man1/knife.1 +1 -1
  59. data/distro/common/man/man8/chef-apply.8 +86 -0
  60. data/distro/common/man/man8/chef-client.8 +76 -5
  61. data/distro/common/man/man8/chef-solo.8 +79 -6
  62. data/distro/common/markdown/man1/knife-bootstrap.mkd +1 -1
  63. data/distro/common/markdown/man1/knife-cookbook-site.mkd +1 -1
  64. data/distro/common/markdown/man1/knife-data-bag.mkd +1 -1
  65. data/distro/common/markdown/man1/knife-environment.mkd +1 -1
  66. data/distro/common/markdown/man1/knife.mkd +1 -1
  67. data/lib/chef.rb +0 -7
  68. data/lib/chef/api_client.rb +10 -2
  69. data/lib/chef/api_client/registration.rb +7 -9
  70. data/lib/chef/application.rb +28 -12
  71. data/lib/chef/application/apply.rb +17 -1
  72. data/lib/chef/application/client.rb +74 -6
  73. data/lib/chef/application/knife.rb +1 -2
  74. data/lib/chef/application/solo.rb +30 -0
  75. data/lib/chef/application/windows_service.rb +1 -0
  76. data/lib/chef/application/windows_service_manager.rb +8 -2
  77. data/lib/chef/applications.rb +0 -1
  78. data/lib/chef/audit/audit_event_proxy.rb +93 -0
  79. data/lib/chef/audit/audit_reporter.rb +169 -0
  80. data/lib/chef/audit/control_group_data.rb +140 -0
  81. data/lib/chef/audit/rspec_formatter.rb +37 -0
  82. data/lib/chef/audit/runner.rb +178 -0
  83. data/lib/chef/chef_fs/chef_fs_data_store.rb +11 -2
  84. data/lib/chef/chef_fs/config.rb +25 -4
  85. data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +15 -0
  86. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -0
  87. data/lib/chef/chef_fs/file_system.rb +1 -1
  88. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +5 -0
  89. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +3 -2
  90. data/lib/chef/{shef/ext.rb → chef_fs/file_system/chef_repository_file_system_policies_dir.rb} +22 -3
  91. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +4 -0
  92. data/lib/chef/client.rb +81 -52
  93. data/lib/chef/config.rb +35 -3
  94. data/lib/chef/cookbook/metadata.rb +3 -3
  95. data/lib/chef/cookbook_manifest.rb +275 -0
  96. data/lib/chef/cookbook_site_streaming_uploader.rb +24 -23
  97. data/lib/chef/cookbook_uploader.rb +11 -2
  98. data/lib/chef/cookbook_version.rb +71 -194
  99. data/lib/chef/data_bag.rb +5 -2
  100. data/lib/chef/data_bag_item.rb +6 -3
  101. data/lib/chef/deprecation/warnings.rb +5 -4
  102. data/lib/chef/dsl/audit.rb +51 -0
  103. data/lib/chef/dsl/include_recipe.rb +2 -3
  104. data/lib/chef/dsl/reboot_pending.rb +1 -1
  105. data/lib/chef/dsl/recipe.rb +49 -31
  106. data/lib/chef/encrypted_data_bag_item/assertions.rb +0 -3
  107. data/lib/chef/environment.rb +5 -2
  108. data/lib/chef/event_dispatch/base.rb +36 -1
  109. data/lib/chef/event_dispatch/dispatcher.rb +3 -5
  110. data/lib/chef/exceptions.rb +61 -2
  111. data/lib/chef/file_access_control/unix.rb +12 -0
  112. data/lib/chef/file_access_control/windows.rb +14 -0
  113. data/lib/chef/formatters/doc.rb +47 -1
  114. data/{spec/unit/monkey_patches/string_spec.rb → lib/chef/guard_interpreter.rb} +11 -16
  115. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +3 -2
  116. data/lib/chef/http.rb +1 -2
  117. data/lib/chef/knife.rb +5 -3
  118. data/lib/chef/knife/bootstrap.rb +84 -15
  119. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +165 -0
  120. data/lib/chef/knife/bootstrap/client_builder.rb +190 -0
  121. data/lib/chef/knife/bootstrap/{README.md → templates/README.md} +0 -0
  122. data/lib/chef/knife/bootstrap/{archlinux-gems.erb → templates/archlinux-gems.erb} +9 -0
  123. data/lib/chef/knife/bootstrap/{chef-aix.erb → templates/chef-aix.erb} +9 -0
  124. data/lib/chef/knife/bootstrap/{chef-full.erb → templates/chef-full.erb} +10 -1
  125. data/lib/chef/knife/client_create.rb +8 -7
  126. data/lib/chef/knife/cookbook_site_download.rb +1 -1
  127. data/lib/chef/knife/cookbook_site_install.rb +1 -1
  128. data/lib/chef/knife/cookbook_site_list.rb +1 -1
  129. data/lib/chef/knife/cookbook_site_search.rb +1 -1
  130. data/lib/chef/knife/cookbook_site_share.rb +39 -28
  131. data/lib/chef/knife/cookbook_site_show.rb +3 -3
  132. data/lib/chef/knife/cookbook_site_unshare.rb +1 -1
  133. data/lib/chef/knife/cookbook_test.rb +1 -0
  134. data/lib/chef/knife/cookbook_upload.rb +13 -8
  135. data/lib/chef/knife/core/bootstrap_context.rb +14 -3
  136. data/lib/chef/knife/core/generic_presenter.rb +5 -2
  137. data/lib/chef/knife/core/object_loader.rb +1 -1
  138. data/lib/chef/knife/core/subcommand_loader.rb +24 -0
  139. data/lib/chef/knife/core/ui.rb +9 -1
  140. data/lib/chef/knife/node_run_list_remove.rb +11 -3
  141. data/lib/chef/knife/raw.rb +14 -3
  142. data/lib/chef/knife/role_env_run_list_add.rb +86 -0
  143. data/lib/chef/knife/role_env_run_list_clear.rb +55 -0
  144. data/lib/chef/knife/role_env_run_list_remove.rb +57 -0
  145. data/lib/chef/knife/role_env_run_list_replace.rb +59 -0
  146. data/lib/chef/knife/role_env_run_list_set.rb +70 -0
  147. data/lib/chef/knife/role_run_list_add.rb +86 -0
  148. data/lib/chef/knife/role_run_list_clear.rb +55 -0
  149. data/lib/chef/knife/role_run_list_remove.rb +57 -0
  150. data/lib/chef/knife/role_run_list_replace.rb +59 -0
  151. data/lib/chef/knife/role_run_list_set.rb +70 -0
  152. data/lib/chef/knife/search.rb +4 -4
  153. data/lib/chef/knife/serve.rb +3 -0
  154. data/lib/chef/knife/ssh.rb +1 -1
  155. data/lib/chef/knife/ssl_check.rb +2 -2
  156. data/lib/chef/knife/ssl_fetch.rb +14 -1
  157. data/lib/chef/log.rb +10 -1
  158. data/lib/chef/mixin/command.rb +1 -1
  159. data/lib/chef/mixin/command/windows.rb +1 -5
  160. data/lib/chef/mixin/get_source_from_package.rb +1 -0
  161. data/lib/chef/mixin/params_validate.rb +2 -2
  162. data/lib/chef/mixin/securable.rb +1 -7
  163. data/lib/chef/mixin/shell_out.rb +7 -1
  164. data/lib/chef/mixin/template.rb +2 -14
  165. data/lib/chef/mixin/why_run.rb +1 -1
  166. data/lib/chef/monkey_patches/net_http.rb +4 -0
  167. data/lib/chef/monologger.rb +0 -2
  168. data/lib/chef/node.rb +5 -2
  169. data/lib/chef/node/attribute.rb +11 -9
  170. data/lib/chef/node/attribute_collections.rb +8 -12
  171. data/lib/chef/node/immutable_collections.rb +4 -10
  172. data/lib/chef/org.rb +148 -0
  173. data/lib/chef/platform/provider_mapping.rb +3 -2
  174. data/lib/chef/platform/provider_priority_map.rb +2 -0
  175. data/lib/chef/platform/query_helpers.rb +0 -3
  176. data/lib/chef/policy_builder/policyfile.rb +51 -8
  177. data/lib/chef/provider/deploy.rb +1 -2
  178. data/lib/chef/provider/directory.rb +3 -3
  179. data/lib/chef/provider/dsc_script.rb +13 -7
  180. data/lib/chef/provider/env.rb +8 -8
  181. data/lib/chef/provider/execute.rb +55 -36
  182. data/lib/chef/provider/file.rb +8 -0
  183. data/lib/chef/provider/group.rb +2 -0
  184. data/lib/chef/provider/group/dscl.rb +3 -4
  185. data/lib/chef/provider/ifconfig.rb +25 -25
  186. data/lib/chef/provider/ifconfig/aix.rb +25 -27
  187. data/lib/chef/provider/lwrp_base.rb +1 -1
  188. data/lib/chef/provider/mount.rb +2 -2
  189. data/lib/chef/provider/mount/mount.rb +3 -4
  190. data/lib/chef/provider/mount/solaris.rb +1 -1
  191. data/lib/chef/provider/package.rb +297 -48
  192. data/lib/chef/provider/package/aix.rb +25 -30
  193. data/lib/chef/provider/package/apt.rb +63 -19
  194. data/lib/chef/provider/package/dpkg.rb +15 -16
  195. data/lib/chef/provider/package/macports.rb +7 -7
  196. data/lib/chef/provider/package/openbsd.rb +107 -0
  197. data/lib/chef/provider/package/pacman.rb +13 -15
  198. data/lib/chef/provider/package/portage.rb +3 -4
  199. data/lib/chef/provider/package/rpm.rb +28 -17
  200. data/lib/chef/provider/package/rubygems.rb +9 -9
  201. data/lib/chef/provider/package/solaris.rb +17 -21
  202. data/lib/chef/provider/package/windows/msi.rb +1 -1
  203. data/lib/chef/provider/package/yum-dump.py +2 -2
  204. data/lib/chef/provider/package/yum.rb +117 -51
  205. data/lib/chef/provider/package/zypper.rb +17 -18
  206. data/lib/chef/provider/powershell_script.rb +4 -4
  207. data/lib/chef/provider/registry_key.rb +2 -2
  208. data/lib/chef/provider/remote_directory.rb +1 -1
  209. data/lib/chef/provider/script.rb +25 -16
  210. data/lib/chef/provider/service.rb +1 -1
  211. data/lib/chef/provider/service/freebsd.rb +1 -1
  212. data/lib/chef/provider/service/openbsd.rb +216 -0
  213. data/lib/chef/provider/service/upstart.rb +1 -1
  214. data/lib/chef/provider/service/windows.rb +99 -1
  215. data/lib/chef/provider/user.rb +1 -1
  216. data/lib/chef/provider/user/dscl.rb +19 -4
  217. data/lib/chef/providers.rb +2 -0
  218. data/lib/chef/recipe.rb +11 -5
  219. data/lib/chef/request_id.rb +1 -1
  220. data/lib/chef/resource.rb +839 -444
  221. data/lib/chef/resource/chef_gem.rb +20 -3
  222. data/lib/chef/resource/conditional.rb +3 -14
  223. data/lib/chef/resource/dsc_script.rb +14 -0
  224. data/lib/chef/resource/execute.rb +14 -7
  225. data/lib/chef/resource/file.rb +14 -0
  226. data/lib/chef/resource/file/verification.rb +122 -0
  227. data/lib/chef/resource/ips_package.rb +1 -1
  228. data/lib/chef/resource/lwrp_base.rb +2 -11
  229. data/lib/chef/resource/macports_package.rb +2 -1
  230. data/lib/chef/resource/openbsd_package.rb +51 -0
  231. data/lib/chef/resource/package.rb +2 -2
  232. data/lib/chef/resource/paludis_package.rb +1 -1
  233. data/lib/chef/resource/reboot.rb +1 -1
  234. data/lib/chef/resource/remote_file.rb +1 -0
  235. data/lib/chef/resource/rpm_package.rb +9 -0
  236. data/lib/chef/resource/script.rb +11 -0
  237. data/lib/chef/resource/template.rb +2 -3
  238. data/lib/chef/resource/windows_package.rb +1 -1
  239. data/lib/chef/resource/windows_service.rb +18 -0
  240. data/lib/chef/resource_builder.rb +137 -0
  241. data/lib/chef/resource_definition.rb +1 -1
  242. data/lib/chef/resource_reporter.rb +1 -1
  243. data/lib/chef/resources.rb +1 -0
  244. data/lib/chef/role.rb +17 -4
  245. data/lib/chef/run_context.rb +10 -6
  246. data/lib/chef/search/query.rb +66 -87
  247. data/lib/chef/shell/ext.rb +2 -2
  248. data/lib/chef/util/diff.rb +1 -4
  249. data/lib/chef/util/dsc/configuration_generator.rb +30 -6
  250. data/lib/chef/util/dsc/lcm_output_parser.rb +7 -3
  251. data/lib/chef/util/dsc/local_configuration_manager.rb +8 -8
  252. data/lib/chef/util/file_edit.rb +2 -2
  253. data/lib/chef/util/path_helper.rb +1 -4
  254. data/lib/chef/util/windows/net_use.rb +3 -3
  255. data/lib/chef/version.rb +1 -1
  256. data/lib/chef/win32/api.rb +1 -0
  257. data/lib/chef/win32/api/security.rb +26 -0
  258. data/lib/chef/win32/file.rb +21 -0
  259. data/lib/chef/win32/security.rb +46 -0
  260. data/lib/chef/win32/security/token.rb +8 -0
  261. data/lib/chef/win32/version.rb +0 -4
  262. data/spec/data/recipes.tgz +0 -0
  263. data/spec/functional/application_spec.rb +1 -1
  264. data/spec/functional/audit/rspec_formatter_spec.rb +54 -0
  265. data/spec/functional/audit/runner_spec.rb +137 -0
  266. data/spec/functional/dsl/reboot_pending_spec.rb +10 -10
  267. data/spec/functional/dsl/registry_helper_spec.rb +6 -6
  268. data/spec/functional/event_loggers/windows_eventlog_spec.rb +5 -5
  269. data/spec/functional/file_content_management/deploy_strategies_spec.rb +12 -21
  270. data/spec/functional/http/simple_spec.rb +1 -1
  271. data/spec/functional/knife/cookbook_delete_spec.rb +24 -24
  272. data/spec/functional/knife/exec_spec.rb +2 -4
  273. data/spec/functional/knife/smoke_test.rb +1 -1
  274. data/spec/functional/knife/ssh_spec.rb +23 -23
  275. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +8 -8
  276. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +2 -2
  277. data/spec/functional/rebooter_spec.rb +1 -1
  278. data/spec/functional/resource/aix_service_spec.rb +3 -0
  279. data/spec/functional/resource/aixinit_service_spec.rb +3 -3
  280. data/spec/functional/resource/bash_spec.rb +88 -0
  281. data/spec/functional/resource/deploy_revision_spec.rb +99 -100
  282. data/spec/functional/resource/env_spec.rb +3 -3
  283. data/spec/functional/resource/execute_spec.rb +97 -63
  284. data/spec/functional/resource/file_spec.rb +7 -7
  285. data/spec/functional/resource/git_spec.rb +13 -13
  286. data/spec/functional/resource/group_spec.rb +28 -25
  287. data/spec/functional/resource/ifconfig_spec.rb +2 -2
  288. data/spec/functional/resource/link_spec.rb +77 -78
  289. data/spec/functional/resource/mount_spec.rb +5 -5
  290. data/spec/functional/resource/ohai_spec.rb +1 -1
  291. data/spec/functional/resource/package_spec.rb +22 -22
  292. data/spec/functional/resource/powershell_spec.rb +57 -42
  293. data/spec/functional/resource/reboot_spec.rb +2 -2
  294. data/spec/functional/resource/registry_spec.rb +91 -91
  295. data/spec/functional/resource/remote_directory_spec.rb +19 -19
  296. data/spec/functional/resource/remote_file_spec.rb +18 -18
  297. data/spec/functional/resource/template_spec.rb +4 -4
  298. data/spec/functional/resource/user/dscl_spec.rb +4 -4
  299. data/spec/functional/resource/user/useradd_spec.rb +64 -51
  300. data/spec/functional/resource/windows_service_spec.rb +98 -0
  301. data/spec/functional/run_lock_spec.rb +9 -9
  302. data/spec/functional/shell_spec.rb +3 -3
  303. data/spec/functional/tiny_server_spec.rb +12 -12
  304. data/spec/functional/util/path_helper_spec.rb +1 -1
  305. data/spec/functional/version_spec.rb +1 -1
  306. data/spec/functional/win32/registry_helper_spec.rb +125 -125
  307. data/spec/functional/win32/security_spec.rb +65 -2
  308. data/spec/functional/win32/service_manager_spec.rb +30 -84
  309. data/spec/functional/win32/versions_spec.rb +6 -6
  310. data/spec/integration/client/client_spec.rb +102 -9
  311. data/spec/integration/knife/chef_fs_data_store_spec.rb +12 -8
  312. data/spec/integration/knife/common_options_spec.rb +3 -3
  313. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +2 -2
  314. data/spec/integration/knife/deps_spec.rb +4 -4
  315. data/spec/integration/knife/diff_spec.rb +6 -6
  316. data/spec/integration/knife/download_spec.rb +6 -6
  317. data/spec/integration/knife/list_spec.rb +2 -2
  318. data/spec/integration/knife/raw_spec.rb +5 -5
  319. data/spec/integration/knife/serve_spec.rb +3 -3
  320. data/spec/integration/knife/show_spec.rb +3 -3
  321. data/spec/integration/knife/upload_spec.rb +18 -18
  322. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
  323. data/spec/integration/solo/solo_spec.rb +11 -12
  324. data/spec/spec_helper.rb +27 -15
  325. data/spec/stress/win32/file_spec.rb +4 -4
  326. data/spec/stress/win32/security_spec.rb +4 -4
  327. data/spec/support/chef_helpers.rb +3 -3
  328. data/spec/support/matchers/leak.rb +2 -2
  329. data/spec/support/mock/platform.rb +1 -1
  330. data/spec/support/pedant/Gemfile +3 -0
  331. data/spec/support/pedant/pedant_config.rb +9 -2
  332. data/spec/support/pedant/run_pedant.rb +15 -16
  333. data/spec/support/platform_helpers.rb +8 -12
  334. data/spec/support/shared/functional/directory_resource.rb +13 -13
  335. data/spec/support/shared/functional/file_resource.rb +83 -83
  336. data/spec/support/shared/functional/http.rb +1 -1
  337. data/spec/support/shared/functional/securable_resource.rb +64 -64
  338. data/spec/support/shared/functional/securable_resource_with_reporting.rb +43 -41
  339. data/spec/support/shared/functional/win32_service.rb +60 -0
  340. data/spec/support/shared/functional/windows_script.rb +8 -8
  341. data/spec/support/shared/integration/knife_support.rb +8 -5
  342. data/spec/support/shared/matchers/exit_with_code.rb +6 -2
  343. data/spec/support/shared/unit/api_error_inspector.rb +8 -8
  344. data/spec/support/shared/unit/execute_resource.rb +24 -20
  345. data/spec/support/shared/unit/file_system_support.rb +2 -2
  346. data/spec/support/shared/unit/platform_introspector.rb +21 -21
  347. data/spec/support/shared/unit/provider/file.rb +239 -210
  348. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +69 -69
  349. data/spec/support/shared/unit/script_resource.rb +40 -32
  350. data/spec/support/shared/unit/windows_script_resource.rb +8 -8
  351. data/spec/unit/api_client/registration_spec.rb +47 -47
  352. data/spec/unit/api_client_spec.rb +107 -69
  353. data/spec/unit/application/apply_spec.rb +31 -15
  354. data/spec/unit/application/client_spec.rb +146 -45
  355. data/spec/unit/application/knife_spec.rb +31 -31
  356. data/spec/unit/application/solo_spec.rb +59 -43
  357. data/spec/unit/application_spec.rb +109 -74
  358. data/spec/unit/audit/audit_event_proxy_spec.rb +311 -0
  359. data/spec/unit/audit/audit_reporter_spec.rb +393 -0
  360. data/spec/unit/audit/control_group_data_spec.rb +478 -0
  361. data/{lib/chef/monkey_patches/file.rb → spec/unit/audit/rspec_formatter_spec.rb} +11 -8
  362. data/spec/unit/audit/runner_spec.rb +135 -0
  363. data/spec/unit/chef_fs/config_spec.rb +52 -0
  364. data/spec/unit/chef_fs/diff_spec.rb +12 -12
  365. data/spec/unit/chef_fs/file_pattern_spec.rb +276 -277
  366. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +6 -6
  367. data/spec/unit/chef_fs/file_system_spec.rb +26 -13
  368. data/spec/unit/chef_fs/parallelizer.rb +87 -87
  369. data/spec/unit/chef_spec.rb +1 -1
  370. data/spec/unit/client_spec.rb +263 -97
  371. data/spec/unit/config_fetcher_spec.rb +13 -13
  372. data/spec/unit/config_spec.rb +105 -66
  373. data/spec/unit/cookbook/chefignore_spec.rb +6 -6
  374. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +3 -3
  375. data/spec/unit/cookbook/metadata_spec.rb +149 -149
  376. data/spec/unit/cookbook/syntax_check_spec.rb +36 -31
  377. data/spec/unit/cookbook_loader_spec.rb +62 -58
  378. data/spec/unit/cookbook_manifest_spec.rb +141 -468
  379. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +27 -27
  380. data/spec/unit/cookbook_spec.rb +15 -15
  381. data/spec/unit/cookbook_uploader_spec.rb +37 -3
  382. data/spec/unit/cookbook_version_file_specificity_spec.rb +554 -0
  383. data/spec/unit/cookbook_version_spec.rb +98 -240
  384. data/spec/unit/daemon_spec.rb +31 -31
  385. data/spec/unit/data_bag_item_spec.rb +121 -89
  386. data/spec/unit/data_bag_spec.rb +35 -35
  387. data/spec/unit/deprecation_spec.rb +27 -14
  388. data/spec/unit/digester_spec.rb +3 -3
  389. data/spec/unit/dsl/audit_spec.rb +43 -0
  390. data/spec/unit/dsl/data_query_spec.rb +1 -1
  391. data/spec/unit/dsl/platform_introspection_spec.rb +14 -14
  392. data/spec/unit/dsl/reboot_pending_spec.rb +18 -18
  393. data/spec/unit/dsl/regsitry_helper_spec.rb +6 -6
  394. data/spec/unit/encrypted_data_bag_item_spec.rb +58 -82
  395. data/spec/unit/environment_spec.rb +105 -105
  396. data/spec/unit/exceptions_spec.rb +47 -1
  397. data/spec/unit/file_access_control_spec.rb +62 -56
  398. data/spec/unit/file_cache_spec.rb +11 -11
  399. data/spec/unit/file_content_management/deploy/cp_spec.rb +2 -2
  400. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +10 -10
  401. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +23 -23
  402. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +14 -14
  403. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +12 -12
  404. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +1 -1
  405. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +16 -16
  406. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +4 -4
  407. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +103 -13
  408. data/spec/unit/guard_interpreter_spec.rb +41 -0
  409. data/spec/unit/handler/json_file_spec.rb +10 -10
  410. data/spec/unit/handler_spec.rb +39 -39
  411. data/spec/unit/http/basic_client_spec.rb +3 -3
  412. data/spec/unit/http/http_request_spec.rb +10 -10
  413. data/spec/unit/http/simple_spec.rb +3 -3
  414. data/spec/unit/http/ssl_policies_spec.rb +15 -15
  415. data/spec/unit/http/validate_content_length_spec.rb +18 -13
  416. data/spec/unit/http_spec.rb +16 -9
  417. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +153 -0
  418. data/spec/unit/knife/bootstrap/client_builder_spec.rb +178 -0
  419. data/spec/unit/knife/bootstrap_spec.rb +144 -91
  420. data/spec/unit/knife/client_bulk_delete_spec.rb +24 -24
  421. data/spec/unit/knife/client_create_spec.rb +57 -43
  422. data/spec/unit/knife/client_delete_spec.rb +15 -15
  423. data/spec/unit/knife/client_edit_spec.rb +4 -4
  424. data/spec/unit/knife/client_list_spec.rb +2 -2
  425. data/spec/unit/knife/client_reregister_spec.rb +9 -9
  426. data/spec/unit/knife/configure_client_spec.rb +20 -20
  427. data/spec/unit/knife/configure_spec.rb +85 -85
  428. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +15 -15
  429. data/spec/unit/knife/cookbook_create_spec.rb +59 -59
  430. data/spec/unit/knife/cookbook_delete_spec.rb +49 -49
  431. data/spec/unit/knife/cookbook_download_spec.rb +56 -56
  432. data/spec/unit/knife/cookbook_list_spec.rb +9 -9
  433. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +8 -8
  434. data/spec/unit/knife/cookbook_metadata_spec.rb +44 -44
  435. data/spec/unit/knife/cookbook_show_spec.rb +29 -29
  436. data/spec/unit/knife/cookbook_site_download_spec.rb +26 -26
  437. data/spec/unit/knife/cookbook_site_install_spec.rb +5 -1
  438. data/spec/unit/knife/cookbook_site_share_spec.rb +68 -59
  439. data/spec/unit/knife/cookbook_site_unshare_spec.rb +15 -15
  440. data/spec/unit/knife/cookbook_test_spec.rb +16 -16
  441. data/spec/unit/knife/cookbook_upload_spec.rb +105 -71
  442. data/spec/unit/knife/core/bootstrap_context_spec.rb +37 -22
  443. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +36 -36
  444. data/spec/unit/knife/core/object_loader_spec.rb +3 -3
  445. data/spec/unit/knife/core/subcommand_loader_spec.rb +107 -33
  446. data/spec/unit/knife/core/ui_spec.rb +84 -72
  447. data/spec/unit/knife/data_bag_from_file_spec.rb +1 -1
  448. data/spec/unit/knife/environment_compare_spec.rb +12 -12
  449. data/spec/unit/knife/environment_create_spec.rb +16 -16
  450. data/spec/unit/knife/environment_delete_spec.rb +14 -14
  451. data/spec/unit/knife/environment_edit_spec.rb +15 -15
  452. data/spec/unit/knife/environment_from_file_spec.rb +17 -17
  453. data/spec/unit/knife/environment_list_spec.rb +7 -7
  454. data/spec/unit/knife/environment_show_spec.rb +10 -10
  455. data/spec/unit/knife/index_rebuild_spec.rb +17 -17
  456. data/spec/unit/knife/knife_help.rb +24 -24
  457. data/spec/unit/knife/node_bulk_delete_spec.rb +14 -14
  458. data/spec/unit/knife/node_delete_spec.rb +11 -11
  459. data/spec/unit/knife/node_edit_spec.rb +17 -17
  460. data/spec/unit/knife/node_environment_set_spec.rb +12 -12
  461. data/spec/unit/knife/node_from_file_spec.rb +8 -8
  462. data/spec/unit/knife/node_list_spec.rb +9 -9
  463. data/spec/unit/knife/node_run_list_add_spec.rb +29 -29
  464. data/spec/unit/knife/node_run_list_remove_spec.rb +28 -13
  465. data/spec/unit/knife/node_run_list_set_spec.rb +27 -27
  466. data/spec/unit/knife/raw_spec.rb +43 -0
  467. data/spec/unit/knife/role_bulk_delete_spec.rb +12 -12
  468. data/spec/unit/knife/role_create_spec.rb +12 -12
  469. data/spec/unit/knife/role_delete_spec.rb +10 -10
  470. data/spec/unit/knife/role_edit_spec.rb +13 -13
  471. data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -0
  472. data/spec/unit/knife/role_env_run_list_clear_spec.rb +100 -0
  473. data/spec/unit/knife/role_env_run_list_remove_spec.rb +108 -0
  474. data/spec/unit/knife/role_env_run_list_replace_spec.rb +108 -0
  475. data/spec/unit/knife/role_env_run_list_set_spec.rb +102 -0
  476. data/spec/unit/knife/role_from_file_spec.rb +10 -10
  477. data/spec/unit/knife/role_list_spec.rb +7 -7
  478. data/spec/unit/knife/role_run_list_add_spec.rb +179 -0
  479. data/spec/unit/knife/role_run_list_clear_spec.rb +90 -0
  480. data/spec/unit/knife/role_run_list_remove_spec.rb +98 -0
  481. data/spec/unit/knife/role_run_list_replace_spec.rb +101 -0
  482. data/spec/unit/knife/role_run_list_set_spec.rb +92 -0
  483. data/spec/unit/knife/ssh_spec.rb +66 -66
  484. data/spec/unit/knife/ssl_check_spec.rb +27 -27
  485. data/spec/unit/knife/ssl_fetch_spec.rb +45 -12
  486. data/spec/unit/knife/status_spec.rb +5 -5
  487. data/spec/unit/knife/tag_create_spec.rb +5 -5
  488. data/spec/unit/knife/tag_delete_spec.rb +6 -6
  489. data/spec/unit/knife/tag_list_spec.rb +4 -4
  490. data/spec/unit/knife/user_create_spec.rb +18 -18
  491. data/spec/unit/knife/user_delete_spec.rb +4 -4
  492. data/spec/unit/knife/user_edit_spec.rb +7 -7
  493. data/spec/unit/knife/user_list_spec.rb +2 -2
  494. data/spec/unit/knife/user_reregister_spec.rb +10 -10
  495. data/spec/unit/knife/user_show_spec.rb +5 -5
  496. data/spec/unit/knife_spec.rb +36 -36
  497. data/spec/unit/lwrp_spec.rb +63 -39
  498. data/spec/unit/mash_spec.rb +6 -6
  499. data/spec/unit/mixin/checksum_spec.rb +2 -2
  500. data/spec/unit/mixin/command_spec.rb +13 -13
  501. data/spec/unit/mixin/convert_to_class_name_spec.rb +6 -6
  502. data/spec/unit/mixin/deep_merge_spec.rb +49 -49
  503. data/spec/unit/mixin/deprecation_spec.rb +5 -5
  504. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +14 -14
  505. data/spec/unit/mixin/homebrew_user_spec.rb +3 -3
  506. data/spec/unit/mixin/params_validate_spec.rb +71 -71
  507. data/spec/unit/mixin/path_sanity_spec.rb +14 -14
  508. data/spec/unit/mixin/securable_spec.rb +177 -177
  509. data/spec/unit/mixin/shell_out_spec.rb +56 -27
  510. data/spec/unit/mixin/template_spec.rb +31 -31
  511. data/spec/unit/mixin/windows_architecture_helper_spec.rb +5 -5
  512. data/spec/unit/mixin/xml_escape_spec.rb +7 -7
  513. data/spec/unit/monkey_patches/uri_spec.rb +1 -1
  514. data/spec/unit/monologger_spec.rb +3 -3
  515. data/spec/unit/node/attribute_spec.rb +185 -136
  516. data/spec/unit/node/immutable_collections_spec.rb +22 -22
  517. data/spec/unit/node_spec.rb +210 -179
  518. data/spec/unit/org_spec.rb +196 -0
  519. data/spec/unit/platform/query_helpers_spec.rb +5 -5
  520. data/spec/unit/platform_spec.rb +46 -46
  521. data/spec/unit/policy_builder/expand_node_object_spec.rb +17 -18
  522. data/spec/unit/policy_builder/policyfile_spec.rb +159 -71
  523. data/spec/unit/provider/directory_spec.rb +5 -5
  524. data/spec/unit/provider/dsc_script_spec.rb +6 -6
  525. data/spec/unit/provider/env_spec.rb +27 -14
  526. data/spec/unit/provider/execute_spec.rb +139 -68
  527. data/spec/unit/provider/file/content_spec.rb +8 -8
  528. data/spec/unit/provider/git_spec.rb +10 -5
  529. data/spec/unit/provider/group/dscl_spec.rb +8 -11
  530. data/spec/unit/provider/group_spec.rb +13 -13
  531. data/spec/unit/provider/ifconfig/aix_spec.rb +3 -2
  532. data/spec/unit/provider/ifconfig/debian_spec.rb +19 -19
  533. data/spec/unit/provider/ifconfig_spec.rb +2 -2
  534. data/spec/unit/provider/mdadm_spec.rb +2 -2
  535. data/spec/unit/provider/mount/aix_spec.rb +5 -5
  536. data/spec/unit/provider/mount/mount_spec.rb +22 -22
  537. data/spec/unit/provider/mount/solaris_spec.rb +20 -20
  538. data/spec/unit/provider/package/aix_spec.rb +23 -22
  539. data/spec/unit/provider/package/apt_spec.rb +23 -4
  540. data/spec/unit/provider/package/dpkg_spec.rb +14 -15
  541. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +1 -1
  542. data/spec/unit/provider/package/freebsd/port_spec.rb +1 -1
  543. data/spec/unit/provider/package/ips_spec.rb +1 -2
  544. data/spec/unit/provider/package/macports_spec.rb +14 -14
  545. data/spec/unit/provider/package/openbsd_spec.rb +66 -0
  546. data/spec/unit/provider/package/pacman_spec.rb +15 -14
  547. data/spec/unit/provider/package/portage_spec.rb +11 -11
  548. data/spec/unit/provider/package/rpm_spec.rb +132 -84
  549. data/spec/unit/provider/package/rubygems_spec.rb +54 -25
  550. data/spec/unit/provider/package/solaris_spec.rb +22 -25
  551. data/spec/unit/provider/package/yum_spec.rb +237 -36
  552. data/spec/unit/provider/package/zypper_spec.rb +9 -12
  553. data/spec/unit/provider/package_spec.rb +276 -2
  554. data/spec/unit/provider/package_spec.rbe +0 -0
  555. data/spec/unit/provider/remote_directory_spec.rb +25 -25
  556. data/spec/unit/provider/remote_file/ftp_spec.rb +3 -3
  557. data/spec/unit/provider/route_spec.rb +3 -3
  558. data/spec/unit/provider/script_spec.rb +61 -43
  559. data/spec/unit/provider/service/aix_service_spec.rb +5 -5
  560. data/spec/unit/provider/service/arch_service_spec.rb +5 -5
  561. data/spec/unit/provider/service/debian_service_spec.rb +8 -8
  562. data/spec/unit/provider/service/freebsd_service_spec.rb +16 -2
  563. data/spec/unit/provider/service/gentoo_service_spec.rb +8 -8
  564. data/spec/unit/provider/service/init_service_spec.rb +5 -5
  565. data/spec/unit/provider/service/insserv_service_spec.rb +2 -2
  566. data/spec/unit/provider/service/invokercd_service_spec.rb +5 -5
  567. data/spec/unit/provider/service/macosx_spec.rb +7 -7
  568. data/spec/unit/provider/service/openbsd_service_spec.rb +543 -0
  569. data/spec/unit/provider/service/redhat_spec.rb +4 -4
  570. data/spec/unit/provider/service/simple_service_spec.rb +2 -2
  571. data/spec/unit/provider/service/solaris_smf_service_spec.rb +14 -14
  572. data/spec/unit/provider/service/systemd_service_spec.rb +15 -7
  573. data/spec/unit/provider/service/upstart_service_spec.rb +4 -4
  574. data/spec/unit/provider/service/windows_spec.rb +119 -25
  575. data/spec/unit/provider/service_spec.rb +1 -1
  576. data/spec/unit/provider/user/dscl_spec.rb +38 -30
  577. data/spec/unit/provider/user_spec.rb +1 -1
  578. data/spec/unit/provider_resolver_spec.rb +7 -7
  579. data/spec/unit/provider_spec.rb +23 -23
  580. data/spec/unit/recipe_spec.rb +194 -83
  581. data/spec/unit/registry_helper_spec.rb +143 -143
  582. data/spec/unit/resource/chef_gem_spec.rb +117 -3
  583. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +2 -2
  584. data/spec/unit/resource/conditional_spec.rb +56 -15
  585. data/spec/unit/resource/deploy_spec.rb +2 -2
  586. data/spec/unit/resource/dsc_script_spec.rb +32 -0
  587. data/spec/unit/resource/execute_spec.rb +4 -0
  588. data/spec/unit/resource/file/verification_spec.rb +111 -0
  589. data/spec/unit/resource/file_spec.rb +14 -0
  590. data/spec/unit/resource/openbsd_package_spec.rb +49 -0
  591. data/spec/unit/resource/remote_file_spec.rb +12 -12
  592. data/spec/unit/resource/resource_notification_spec.rb +18 -18
  593. data/spec/unit/resource/rpm_package_spec.rb +12 -0
  594. data/spec/unit/resource/scm_spec.rb +4 -4
  595. data/spec/unit/resource/script_spec.rb +3 -5
  596. data/spec/unit/resource/subversion_spec.rb +1 -1
  597. data/spec/unit/resource_builder_spec.rb +1 -0
  598. data/spec/unit/resource_collection/resource_list_spec.rb +2 -2
  599. data/spec/unit/resource_collection/resource_set_spec.rb +3 -3
  600. data/spec/unit/resource_collection/stepable_iterator_spec.rb +24 -24
  601. data/spec/unit/resource_collection_spec.rb +52 -52
  602. data/spec/unit/resource_definition_spec.rb +1 -1
  603. data/spec/unit/resource_reporter_spec.rb +118 -118
  604. data/spec/unit/resource_spec.rb +131 -125
  605. data/spec/unit/rest/auth_credentials_spec.rb +73 -73
  606. data/spec/unit/rest_spec.rb +12 -12
  607. data/spec/unit/role_spec.rb +85 -84
  608. data/spec/unit/run_context/cookbook_compiler_spec.rb +18 -18
  609. data/spec/unit/run_context_spec.rb +39 -68
  610. data/spec/unit/run_list/run_list_expansion_spec.rb +21 -21
  611. data/spec/unit/run_list/run_list_item_spec.rb +28 -28
  612. data/spec/unit/run_list/versioned_recipe_list_spec.rb +14 -14
  613. data/spec/unit/run_list_spec.rb +55 -55
  614. data/spec/unit/run_lock_spec.rb +14 -14
  615. data/spec/unit/run_status_spec.rb +24 -24
  616. data/spec/unit/scan_access_control_spec.rb +23 -23
  617. data/spec/unit/search/query_spec.rb +54 -66
  618. data/spec/unit/shell/model_wrapper_spec.rb +13 -13
  619. data/spec/unit/shell/shell_ext_spec.rb +32 -32
  620. data/spec/unit/shell/shell_session_spec.rb +24 -24
  621. data/spec/unit/shell_out_spec.rb +4 -4
  622. data/spec/unit/shell_spec.rb +27 -27
  623. data/spec/unit/user_spec.rb +50 -50
  624. data/spec/unit/util/backup_spec.rb +32 -32
  625. data/spec/unit/util/diff_spec.rb +31 -31
  626. data/spec/unit/util/dsc/configuration_generator_spec.rb +38 -16
  627. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +21 -26
  628. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +10 -10
  629. data/spec/unit/util/editor_spec.rb +10 -10
  630. data/spec/unit/util/file_edit_spec.rb +10 -10
  631. data/spec/unit/util/path_helper_spec.rb +38 -46
  632. data/spec/unit/util/powershell/cmdlet_spec.rb +9 -9
  633. data/spec/unit/util/selinux_spec.rb +30 -30
  634. data/spec/unit/util/threaded_job_queue_spec.rb +6 -6
  635. data/spec/unit/version/platform_spec.rb +5 -5
  636. data/spec/unit/version_class_spec.rb +15 -15
  637. data/spec/unit/version_constraint/platform_spec.rb +7 -7
  638. data/spec/unit/version_constraint_spec.rb +43 -43
  639. data/spec/unit/windows_service_spec.rb +15 -15
  640. data/spec/unit/workstation_config_loader_spec.rb +2 -2
  641. data/tasks/rspec.rb +16 -18
  642. metadata +126 -49
  643. data/bin/shef +0 -35
  644. data/lib/chef/application/agent.rb +0 -18
  645. data/lib/chef/monkey_patches/fileutils.rb +0 -65
  646. data/lib/chef/monkey_patches/numeric.rb +0 -15
  647. data/lib/chef/monkey_patches/object.rb +0 -9
  648. data/lib/chef/monkey_patches/pathname.rb +0 -32
  649. data/lib/chef/monkey_patches/regexp.rb +0 -34
  650. data/lib/chef/monkey_patches/securerandom.rb +0 -44
  651. data/lib/chef/monkey_patches/string.rb +0 -49
  652. data/lib/chef/monkey_patches/tempfile.rb +0 -64
  653. data/lib/chef/monkey_patches/uri.rb +0 -70
@@ -1,6 +1,8 @@
1
1
  #
2
- # Author:: Daniel DeLeo (<dan@opscode.com>)
3
- # Copyright:: Copyright (c) 2013 Opscode, Inc.
2
+ # Author:: Tyler Ball (<tball@chef.io>)
3
+ # Author:: Claire McQuin (<claire@getchef.com>)
4
+ #
5
+ # Copyright:: Copyright (c) 2014 Chef Software, Inc.
4
6
  # License:: Apache License, Version 2.0
5
7
  #
6
8
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,11 +18,12 @@
16
18
  # limitations under the License.
17
19
  #
18
20
 
19
- if !File.respond_to?(:realpath)
20
- require 'pathname'
21
- class File
22
- def self.realpath(path)
23
- Pathname.new(path).realpath.to_s
24
- end
21
+ require 'spec_helper'
22
+ require 'chef/audit/rspec_formatter'
23
+
24
+ describe Chef::Audit::RspecFormatter do
25
+ let(:formatter) { Chef::Audit::RspecFormatter.new(nil) }
26
+ it "should respond to close" do
27
+ expect(formatter).to respond_to(:close)
25
28
  end
26
29
  end
@@ -0,0 +1,135 @@
1
+ #
2
+ # Author:: Tyler Ball (<tball@chef.io>)
3
+ # Copyright:: Copyright (c) 2014 Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'spec_helper'
20
+ require 'rspec/core/sandbox'
21
+ require 'chef/audit/runner'
22
+ require 'chef/audit/audit_event_proxy'
23
+ require 'chef/audit/rspec_formatter'
24
+ require 'rspec/support/spec/in_sub_process'
25
+ require 'rspec/support/spec/stderr_splitter'
26
+
27
+
28
+ describe Chef::Audit::Runner do
29
+ include RSpec::Support::InSubProcess
30
+
31
+ let(:events) { double("events") }
32
+ let(:run_context) { instance_double(Chef::RunContext, :events => events) }
33
+ let(:runner) { Chef::Audit::Runner.new(run_context) }
34
+
35
+ around(:each) do |ex|
36
+ RSpec::Core::Sandbox.sandboxed { ex.run }
37
+ end
38
+
39
+ describe "#initialize" do
40
+ it "correctly sets the run_context during initialization" do
41
+ expect(runner.instance_variable_get(:@run_context)).to eq(run_context)
42
+ end
43
+ end
44
+
45
+ context "during #run" do
46
+
47
+ describe "#setup" do
48
+ let(:log_location) { File.join(Dir.tmpdir, 'audit_log') }
49
+ let(:color) { false }
50
+
51
+ before do
52
+ Chef::Config[:log_location] = log_location
53
+ Chef::Config[:color] = color
54
+ end
55
+
56
+ it "sets all the config values" do
57
+ # This runs the Serverspec includes - we don't want these hanging around in all subsequent tests so
58
+ # we run this in a forked process. Keeps Serverspec files from getting loaded into main process.
59
+ in_sub_process do
60
+ runner.send(:setup)
61
+
62
+ expect(RSpec.configuration.output_stream).to eq(log_location)
63
+ expect(RSpec.configuration.error_stream).to eq(log_location)
64
+
65
+ expect(RSpec.configuration.formatters.size).to eq(2)
66
+ expect(RSpec.configuration.formatters).to include(instance_of(Chef::Audit::AuditEventProxy))
67
+ expect(RSpec.configuration.formatters).to include(instance_of(Chef::Audit::RspecFormatter))
68
+ expect(Chef::Audit::AuditEventProxy.class_variable_get(:@@events)).to eq(run_context.events)
69
+
70
+ expect(RSpec.configuration.expectation_frameworks).to eq([RSpec::Matchers])
71
+ expect(RSpec::Matchers.configuration.syntax).to eq([:expect])
72
+
73
+ expect(RSpec.configuration.color).to eq(color)
74
+ expect(RSpec.configuration.expose_dsl_globally?).to eq(false)
75
+
76
+ expect(Specinfra.configuration.backend).to eq(:exec)
77
+ end
78
+ end
79
+ end
80
+
81
+ describe "#register_control_groups" do
82
+ let(:audits) { [] }
83
+ let(:run_context) { instance_double(Chef::RunContext, :audits => audits) }
84
+
85
+ it "adds the control group aliases" do
86
+ runner.send(:register_control_groups)
87
+
88
+ expect(RSpec::Core::DSL.example_group_aliases).to include(:__control_group__)
89
+ expect(RSpec::Core::DSL.example_group_aliases).to include(:control)
90
+ end
91
+
92
+ context "audits exist" do
93
+ let(:audits) { {"audit_name" => group} }
94
+ let(:group) {Struct.new(:args, :block).new(["group_name"], nil)}
95
+
96
+ it "sends the audits to the world" do
97
+ runner.send(:register_control_groups)
98
+
99
+ expect(RSpec.world.example_groups.size).to eq(1)
100
+ # For whatever reason, `kind_of` is not working
101
+ # expect(RSpec.world.example_groups).to include(kind_of(RSpec::Core::ExampleGroup)) => FAIL
102
+ g = RSpec.world.example_groups[0]
103
+ expect(g.ancestors).to include(RSpec::Core::ExampleGroup)
104
+ expect(g.description).to eq("group_name")
105
+ end
106
+ end
107
+ end
108
+
109
+ describe "#do_run" do
110
+ let(:rspec_runner) { instance_double(RSpec::Core::Runner) }
111
+
112
+ it "executes the runner" do
113
+ expect(RSpec::Core::Runner).to receive(:new).with(nil).and_return(rspec_runner)
114
+ expect(rspec_runner).to receive(:run_specs).with([])
115
+
116
+ runner.send(:do_run)
117
+ end
118
+ end
119
+ end
120
+
121
+ describe "counters" do
122
+ it "correctly calculates failed?" do
123
+ expect(runner.failed?).to eq(false)
124
+ end
125
+
126
+ it "correctly calculates num_failed" do
127
+ expect(runner.num_failed).to eq(0)
128
+ end
129
+
130
+ it "correctly calculates num_total" do
131
+ expect(runner.num_total).to eq(0)
132
+ end
133
+ end
134
+
135
+ end
@@ -55,4 +55,56 @@ describe Chef::ChefFS::Config do
55
55
  Chef::ChefFS::Config.new(base_config, Dir.pwd, {}, ui)
56
56
  end
57
57
  end
58
+
59
+ describe "local FS configuration" do
60
+
61
+ let(:chef_config) do
62
+ Mash.new({
63
+ client_path: "/base_path/clients",
64
+ cookbook_path: "/base_path/cookbooks",
65
+ data_bag_path: "/base_path/data_bags",
66
+ environment_path: "/base_path/environments",
67
+ node_path: "/base_path/nodes",
68
+ role_path: "/base_path/roles",
69
+ user_path: "/base_path/users",
70
+ policy_path: "/base_path/policies"
71
+ })
72
+ end
73
+
74
+ let(:chef_fs_config) { Chef::ChefFS::Config.new(chef_config, Dir.pwd) }
75
+
76
+ subject(:local_fs) { chef_fs_config.local_fs }
77
+
78
+ def platform_path(*args)
79
+ File.expand_path(*args)
80
+ end
81
+
82
+ it "sets the correct nodes path on the local FS object" do
83
+ expect(local_fs.child_paths["nodes"]).to eq([platform_path("/base_path/nodes")])
84
+ end
85
+
86
+ it "sets the correct cookbook path on the local FS object" do
87
+ expect(local_fs.child_paths["cookbooks"]).to eq([platform_path("/base_path/cookbooks")])
88
+ end
89
+
90
+ it "sets the correct data bag path on the local FS object" do
91
+ expect(local_fs.child_paths["data_bags"]).to eq([platform_path("/base_path/data_bags")])
92
+ end
93
+
94
+ it "sets the correct environment path on the local FS object" do
95
+ expect(local_fs.child_paths["environments"]).to eq([platform_path("/base_path/environments")])
96
+ end
97
+
98
+ it "sets the correct role path on the local FS object" do
99
+ expect(local_fs.child_paths["roles"]).to eq([platform_path("/base_path/roles")])
100
+ end
101
+
102
+ it "sets the correct user path on the local FS object" do
103
+ expect(local_fs.child_paths["users"]).to eq([platform_path("/base_path/users")])
104
+ end
105
+
106
+ it "sets the correct policy path on the local FS object" do
107
+ expect(local_fs.child_paths["policies"]).to eq([platform_path("/base_path/policies")])
108
+ end
109
+ end
58
110
  end
@@ -91,7 +91,7 @@ describe 'diff', :uses_diff => true do
91
91
  Chef::ChefFS::CommandLine.diff_print(pattern('/'), a, b, nil, nil) do |diff|
92
92
  results << remove_os_differences(diff)
93
93
  end
94
- results.should =~ [
94
+ expect(results).to match_array([
95
95
  'diff --knife a/both_dirs/sub_both_files_different b/both_dirs/sub_both_files_different
96
96
  --- a/both_dirs/sub_both_files_different DATE
97
97
  +++ b/both_dirs/sub_both_files_different DATE
@@ -160,14 +160,14 @@ new file
160
160
  +++ b/b_only_file DATE
161
161
  CONTEXT_LINE_NUMBERS
162
162
  +b_only_file
163
- ' ]
163
+ ' ])
164
164
  end
165
165
  it 'Chef::ChefFS::CommandLine.diff_print(/both_dirs)' do
166
166
  results = []
167
167
  Chef::ChefFS::CommandLine.diff_print(pattern('/both_dirs'), a, b, nil, nil) do |diff|
168
168
  results << remove_os_differences(diff)
169
169
  end
170
- results.should =~ [
170
+ expect(results).to match_array([
171
171
  'diff --knife a/both_dirs/sub_both_files_different b/both_dirs/sub_both_files_different
172
172
  --- a/both_dirs/sub_both_files_different DATE
173
173
  +++ b/both_dirs/sub_both_files_different DATE
@@ -202,14 +202,14 @@ new file
202
202
  +++ b/both_dirs/sub_b_only_file DATE
203
203
  CONTEXT_LINE_NUMBERS
204
204
  +sub_b_only_file
205
- ' ]
205
+ ' ])
206
206
  end
207
207
  it 'Chef::ChefFS::CommandLine.diff_print(/) with depth 1' do
208
208
  results = []
209
209
  Chef::ChefFS::CommandLine.diff_print(pattern('/'), a, b, 1, nil) do |diff|
210
210
  results << remove_os_differences(diff)
211
211
  end
212
- results.should =~ [
212
+ expect(results).to match_array([
213
213
  'Common subdirectories: b/both_dirs
214
214
  ','diff --knife a/both_files_different b/both_files_different
215
215
  --- a/both_files_different DATE
@@ -236,14 +236,14 @@ new file
236
236
  +++ b/b_only_file DATE
237
237
  CONTEXT_LINE_NUMBERS
238
238
  +b_only_file
239
- ' ]
239
+ ' ])
240
240
  end
241
241
  it 'Chef::ChefFS::CommandLine.diff_print(/*_*) with depth 0' do
242
242
  results = []
243
243
  Chef::ChefFS::CommandLine.diff_print(pattern('/*_*'), a, b, 0, nil) do |diff|
244
244
  results << remove_os_differences(diff)
245
245
  end
246
- results.should =~ [
246
+ expect(results).to match_array([
247
247
  'Common subdirectories: b/both_dirs
248
248
  ','diff --knife a/both_files_different b/both_files_different
249
249
  --- a/both_files_different DATE
@@ -270,14 +270,14 @@ new file
270
270
  +++ b/b_only_file DATE
271
271
  CONTEXT_LINE_NUMBERS
272
272
  +b_only_file
273
- ' ]
273
+ ' ])
274
274
  end
275
275
  it 'Chef::ChefFS::CommandLine.diff_print(/) in name-only mode' do
276
276
  results = []
277
277
  Chef::ChefFS::CommandLine.diff_print(pattern('/'), a, b, nil, :name_only) do |diff|
278
278
  results << remove_os_differences(diff)
279
279
  end
280
- results.should =~ [
280
+ expect(results).to match_array([
281
281
  "b/both_dirs/sub_both_files_different\n",
282
282
  "b/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub\n",
283
283
  "b/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub\n",
@@ -296,14 +296,14 @@ CONTEXT_LINE_NUMBERS
296
296
  "b/b_only_file\n",
297
297
  "b/dir_in_a_file_in_b\n",
298
298
  "b/file_in_a_dir_in_b\n"
299
- ]
299
+ ])
300
300
  end
301
301
  it 'Chef::ChefFS::CommandLine.diff_print(/) in name-status mode' do
302
302
  results = []
303
303
  Chef::ChefFS::CommandLine.diff_print(pattern('/'), a, b, nil, :name_status) do |diff|
304
304
  results << remove_os_differences(diff)
305
305
  end
306
- results.should =~ [
306
+ expect(results).to match_array([
307
307
  "M\tb/both_dirs/sub_both_files_different\n",
308
308
  "D\tb/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub\n",
309
309
  "A\tb/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub\n",
@@ -322,7 +322,7 @@ CONTEXT_LINE_NUMBERS
322
322
  "A\tb/b_only_file\n",
323
323
  "T\tb/dir_in_a_file_in_b\n",
324
324
  "T\tb/file_in_a_dir_in_b\n"
325
- ]
325
+ ])
326
326
  end
327
327
  end
328
328
  end
@@ -28,466 +28,465 @@ describe Chef::ChefFS::FilePattern do
28
28
  context 'with empty pattern ""' do
29
29
  let(:pattern) { Chef::ChefFS::FilePattern.new('') }
30
30
  it 'match?' do
31
- pattern.match?('').should be_true
32
- pattern.match?('/').should be_false
33
- pattern.match?('a').should be_false
34
- pattern.match?('a/b').should be_false
31
+ expect(pattern.match?('')).to be_truthy
32
+ expect(pattern.match?('/')).to be_falsey
33
+ expect(pattern.match?('a')).to be_falsey
34
+ expect(pattern.match?('a/b')).to be_falsey
35
35
  end
36
36
  it 'exact_path' do
37
- pattern.exact_path.should == ''
37
+ expect(pattern.exact_path).to eq('')
38
38
  end
39
39
  it 'could_match_children?' do
40
- pattern.could_match_children?('').should be_false
41
- pattern.could_match_children?('a/b').should be_false
40
+ expect(pattern.could_match_children?('')).to be_falsey
41
+ expect(pattern.could_match_children?('a/b')).to be_falsey
42
42
  end
43
43
  end
44
44
 
45
45
  context 'with root pattern "/"' do
46
46
  let(:pattern) { Chef::ChefFS::FilePattern.new('/') }
47
47
  it 'match?' do
48
- pattern.match?('/').should be_true
49
- pattern.match?('').should be_false
50
- pattern.match?('a').should be_false
51
- pattern.match?('/a').should be_false
48
+ expect(pattern.match?('/')).to be_truthy
49
+ expect(pattern.match?('')).to be_falsey
50
+ expect(pattern.match?('a')).to be_falsey
51
+ expect(pattern.match?('/a')).to be_falsey
52
52
  end
53
53
  it 'exact_path' do
54
- pattern.exact_path.should == '/'
54
+ expect(pattern.exact_path).to eq('/')
55
55
  end
56
56
  it 'could_match_children?' do
57
- pattern.could_match_children?('').should be_false
58
- pattern.could_match_children?('/').should be_false
59
- pattern.could_match_children?('a').should be_false
60
- pattern.could_match_children?('a/b').should be_false
61
- pattern.could_match_children?('/a').should be_false
57
+ expect(pattern.could_match_children?('')).to be_falsey
58
+ expect(pattern.could_match_children?('/')).to be_falsey
59
+ expect(pattern.could_match_children?('a')).to be_falsey
60
+ expect(pattern.could_match_children?('a/b')).to be_falsey
61
+ expect(pattern.could_match_children?('/a')).to be_falsey
62
62
  end
63
63
  end
64
64
 
65
65
  context 'with simple pattern "abc"' do
66
66
  let(:pattern) { Chef::ChefFS::FilePattern.new('abc') }
67
67
  it 'match?' do
68
- pattern.match?('abc').should be_true
69
- pattern.match?('a').should be_false
70
- pattern.match?('abcd').should be_false
71
- pattern.match?('/abc').should be_false
72
- pattern.match?('').should be_false
73
- pattern.match?('/').should be_false
68
+ expect(pattern.match?('abc')).to be_truthy
69
+ expect(pattern.match?('a')).to be_falsey
70
+ expect(pattern.match?('abcd')).to be_falsey
71
+ expect(pattern.match?('/abc')).to be_falsey
72
+ expect(pattern.match?('')).to be_falsey
73
+ expect(pattern.match?('/')).to be_falsey
74
74
  end
75
75
  it 'exact_path' do
76
- pattern.exact_path.should == 'abc'
76
+ expect(pattern.exact_path).to eq('abc')
77
77
  end
78
78
  it 'could_match_children?' do
79
- pattern.could_match_children?('').should be_false
80
- pattern.could_match_children?('abc').should be_false
81
- pattern.could_match_children?('/abc').should be_false
79
+ expect(pattern.could_match_children?('')).to be_falsey
80
+ expect(pattern.could_match_children?('abc')).to be_falsey
81
+ expect(pattern.could_match_children?('/abc')).to be_falsey
82
82
  end
83
83
  end
84
84
 
85
85
  context 'with simple pattern "/abc"' do
86
86
  let(:pattern) { Chef::ChefFS::FilePattern.new('/abc') }
87
87
  it 'match?' do
88
- pattern.match?('/abc').should be_true
89
- pattern.match?('abc').should be_false
90
- pattern.match?('a').should be_false
91
- pattern.match?('abcd').should be_false
92
- pattern.match?('').should be_false
93
- pattern.match?('/').should be_false
88
+ expect(pattern.match?('/abc')).to be_truthy
89
+ expect(pattern.match?('abc')).to be_falsey
90
+ expect(pattern.match?('a')).to be_falsey
91
+ expect(pattern.match?('abcd')).to be_falsey
92
+ expect(pattern.match?('')).to be_falsey
93
+ expect(pattern.match?('/')).to be_falsey
94
94
  end
95
95
  it 'exact_path' do
96
- pattern.exact_path.should == '/abc'
96
+ expect(pattern.exact_path).to eq('/abc')
97
97
  end
98
98
  it 'could_match_children?' do
99
- pattern.could_match_children?('abc').should be_false
100
- pattern.could_match_children?('/abc').should be_false
101
- pattern.could_match_children?('/').should be_true
102
- pattern.could_match_children?('').should be_false
99
+ expect(pattern.could_match_children?('abc')).to be_falsey
100
+ expect(pattern.could_match_children?('/abc')).to be_falsey
101
+ expect(pattern.could_match_children?('/')).to be_truthy
102
+ expect(pattern.could_match_children?('')).to be_falsey
103
103
  end
104
104
  it 'exact_child_name_under' do
105
- pattern.exact_child_name_under('/').should == 'abc'
105
+ expect(pattern.exact_child_name_under('/')).to eq('abc')
106
106
  end
107
107
  end
108
108
 
109
109
  context 'with simple pattern "abc/def/ghi"' do
110
110
  let(:pattern) { Chef::ChefFS::FilePattern.new('abc/def/ghi') }
111
111
  it 'match?' do
112
- pattern.match?('abc/def/ghi').should be_true
113
- pattern.match?('/abc/def/ghi').should be_false
114
- pattern.match?('abc').should be_false
115
- pattern.match?('abc/def').should be_false
112
+ expect(pattern.match?('abc/def/ghi')).to be_truthy
113
+ expect(pattern.match?('/abc/def/ghi')).to be_falsey
114
+ expect(pattern.match?('abc')).to be_falsey
115
+ expect(pattern.match?('abc/def')).to be_falsey
116
116
  end
117
117
  it 'exact_path' do
118
- pattern.exact_path.should == 'abc/def/ghi'
118
+ expect(pattern.exact_path).to eq('abc/def/ghi')
119
119
  end
120
120
  it 'could_match_children?' do
121
- pattern.could_match_children?('abc').should be_true
122
- pattern.could_match_children?('xyz').should be_false
123
- pattern.could_match_children?('/abc').should be_false
124
- pattern.could_match_children?('abc/def').should be_true
125
- pattern.could_match_children?('abc/xyz').should be_false
126
- pattern.could_match_children?('abc/def/ghi').should be_false
121
+ expect(pattern.could_match_children?('abc')).to be_truthy
122
+ expect(pattern.could_match_children?('xyz')).to be_falsey
123
+ expect(pattern.could_match_children?('/abc')).to be_falsey
124
+ expect(pattern.could_match_children?('abc/def')).to be_truthy
125
+ expect(pattern.could_match_children?('abc/xyz')).to be_falsey
126
+ expect(pattern.could_match_children?('abc/def/ghi')).to be_falsey
127
127
  end
128
128
  it 'exact_child_name_under' do
129
- pattern.exact_child_name_under('abc').should == 'def'
130
- pattern.exact_child_name_under('abc/def').should == 'ghi'
129
+ expect(pattern.exact_child_name_under('abc')).to eq('def')
130
+ expect(pattern.exact_child_name_under('abc/def')).to eq('ghi')
131
131
  end
132
132
  end
133
133
 
134
134
  context 'with simple pattern "/abc/def/ghi"' do
135
135
  let(:pattern) { Chef::ChefFS::FilePattern.new('/abc/def/ghi') }
136
136
  it 'match?' do
137
- pattern.match?('/abc/def/ghi').should be_true
138
- pattern.match?('abc/def/ghi').should be_false
139
- pattern.match?('/abc').should be_false
140
- pattern.match?('/abc/def').should be_false
137
+ expect(pattern.match?('/abc/def/ghi')).to be_truthy
138
+ expect(pattern.match?('abc/def/ghi')).to be_falsey
139
+ expect(pattern.match?('/abc')).to be_falsey
140
+ expect(pattern.match?('/abc/def')).to be_falsey
141
141
  end
142
142
  it 'exact_path' do
143
- pattern.exact_path.should == '/abc/def/ghi'
143
+ expect(pattern.exact_path).to eq('/abc/def/ghi')
144
144
  end
145
145
  it 'could_match_children?' do
146
- pattern.could_match_children?('/abc').should be_true
147
- pattern.could_match_children?('/xyz').should be_false
148
- pattern.could_match_children?('abc').should be_false
149
- pattern.could_match_children?('/abc/def').should be_true
150
- pattern.could_match_children?('/abc/xyz').should be_false
151
- pattern.could_match_children?('/abc/def/ghi').should be_false
146
+ expect(pattern.could_match_children?('/abc')).to be_truthy
147
+ expect(pattern.could_match_children?('/xyz')).to be_falsey
148
+ expect(pattern.could_match_children?('abc')).to be_falsey
149
+ expect(pattern.could_match_children?('/abc/def')).to be_truthy
150
+ expect(pattern.could_match_children?('/abc/xyz')).to be_falsey
151
+ expect(pattern.could_match_children?('/abc/def/ghi')).to be_falsey
152
152
  end
153
153
  it 'exact_child_name_under' do
154
- pattern.exact_child_name_under('/').should == 'abc'
155
- pattern.exact_child_name_under('/abc').should == 'def'
156
- pattern.exact_child_name_under('/abc/def').should == 'ghi'
154
+ expect(pattern.exact_child_name_under('/')).to eq('abc')
155
+ expect(pattern.exact_child_name_under('/abc')).to eq('def')
156
+ expect(pattern.exact_child_name_under('/abc/def')).to eq('ghi')
157
157
  end
158
158
  end
159
159
 
160
160
  context 'with simple pattern "a\*\b"', :pending => (Chef::Platform.windows?) do
161
161
  let(:pattern) { Chef::ChefFS::FilePattern.new('a\*\b') }
162
162
  it 'match?' do
163
- pattern.match?('a*b').should be_true
164
- pattern.match?('ab').should be_false
165
- pattern.match?('acb').should be_false
166
- pattern.match?('ab').should be_false
163
+ expect(pattern.match?('a*b')).to be_truthy
164
+ expect(pattern.match?('ab')).to be_falsey
165
+ expect(pattern.match?('acb')).to be_falsey
166
+ expect(pattern.match?('ab')).to be_falsey
167
167
  end
168
168
  it 'exact_path' do
169
- pattern.exact_path.should == 'a*b'
169
+ expect(pattern.exact_path).to eq('a*b')
170
170
  end
171
171
  it 'could_match_children?' do
172
- pattern.could_match_children?('a/*b').should be_false
172
+ expect(pattern.could_match_children?('a/*b')).to be_falsey
173
173
  end
174
174
  end
175
175
 
176
176
  context 'with star pattern "/abc/*/ghi"' do
177
177
  let(:pattern) { Chef::ChefFS::FilePattern.new('/abc/*/ghi') }
178
178
  it 'match?' do
179
- pattern.match?('/abc/def/ghi').should be_true
180
- pattern.match?('/abc/ghi').should be_false
179
+ expect(pattern.match?('/abc/def/ghi')).to be_truthy
180
+ expect(pattern.match?('/abc/ghi')).to be_falsey
181
181
  end
182
182
  it 'exact_path' do
183
- pattern.exact_path.should be_nil
183
+ expect(pattern.exact_path).to be_nil
184
184
  end
185
185
  it 'could_match_children?' do
186
- pattern.could_match_children?('/abc').should be_true
187
- pattern.could_match_children?('/xyz').should be_false
188
- pattern.could_match_children?('abc').should be_false
189
- pattern.could_match_children?('/abc/def').should be_true
190
- pattern.could_match_children?('/abc/xyz').should be_true
191
- pattern.could_match_children?('/abc/def/ghi').should be_false
186
+ expect(pattern.could_match_children?('/abc')).to be_truthy
187
+ expect(pattern.could_match_children?('/xyz')).to be_falsey
188
+ expect(pattern.could_match_children?('abc')).to be_falsey
189
+ expect(pattern.could_match_children?('/abc/def')).to be_truthy
190
+ expect(pattern.could_match_children?('/abc/xyz')).to be_truthy
191
+ expect(pattern.could_match_children?('/abc/def/ghi')).to be_falsey
192
192
  end
193
193
  it 'exact_child_name_under' do
194
- pattern.exact_child_name_under('/').should == 'abc'
195
- pattern.exact_child_name_under('/abc').should == nil
196
- pattern.exact_child_name_under('/abc/def').should == 'ghi'
194
+ expect(pattern.exact_child_name_under('/')).to eq('abc')
195
+ expect(pattern.exact_child_name_under('/abc')).to eq(nil)
196
+ expect(pattern.exact_child_name_under('/abc/def')).to eq('ghi')
197
197
  end
198
198
  end
199
199
 
200
200
  context 'with star pattern "/abc/d*f/ghi"' do
201
201
  let(:pattern) { Chef::ChefFS::FilePattern.new('/abc/d*f/ghi') }
202
202
  it 'match?' do
203
- pattern.match?('/abc/def/ghi').should be_true
204
- pattern.match?('/abc/dxf/ghi').should be_true
205
- pattern.match?('/abc/df/ghi').should be_true
206
- pattern.match?('/abc/dxyzf/ghi').should be_true
207
- pattern.match?('/abc/d/ghi').should be_false
208
- pattern.match?('/abc/f/ghi').should be_false
209
- pattern.match?('/abc/ghi').should be_false
210
- pattern.match?('/abc/xyz/ghi').should be_false
203
+ expect(pattern.match?('/abc/def/ghi')).to be_truthy
204
+ expect(pattern.match?('/abc/dxf/ghi')).to be_truthy
205
+ expect(pattern.match?('/abc/df/ghi')).to be_truthy
206
+ expect(pattern.match?('/abc/dxyzf/ghi')).to be_truthy
207
+ expect(pattern.match?('/abc/d/ghi')).to be_falsey
208
+ expect(pattern.match?('/abc/f/ghi')).to be_falsey
209
+ expect(pattern.match?('/abc/ghi')).to be_falsey
210
+ expect(pattern.match?('/abc/xyz/ghi')).to be_falsey
211
211
  end
212
212
  it 'exact_path' do
213
- pattern.exact_path.should be_nil
213
+ expect(pattern.exact_path).to be_nil
214
214
  end
215
215
  it 'could_match_children?' do
216
- pattern.could_match_children?('/abc').should be_true
217
- pattern.could_match_children?('/xyz').should be_false
218
- pattern.could_match_children?('abc').should be_false
219
- pattern.could_match_children?('/abc/def').should be_true
220
- pattern.could_match_children?('/abc/xyz').should be_false
221
- pattern.could_match_children?('/abc/dxyzf').should be_true
222
- pattern.could_match_children?('/abc/df').should be_true
223
- pattern.could_match_children?('/abc/d').should be_false
224
- pattern.could_match_children?('/abc/f').should be_false
225
- pattern.could_match_children?('/abc/def/ghi').should be_false
216
+ expect(pattern.could_match_children?('/abc')).to be_truthy
217
+ expect(pattern.could_match_children?('/xyz')).to be_falsey
218
+ expect(pattern.could_match_children?('abc')).to be_falsey
219
+ expect(pattern.could_match_children?('/abc/def')).to be_truthy
220
+ expect(pattern.could_match_children?('/abc/xyz')).to be_falsey
221
+ expect(pattern.could_match_children?('/abc/dxyzf')).to be_truthy
222
+ expect(pattern.could_match_children?('/abc/df')).to be_truthy
223
+ expect(pattern.could_match_children?('/abc/d')).to be_falsey
224
+ expect(pattern.could_match_children?('/abc/f')).to be_falsey
225
+ expect(pattern.could_match_children?('/abc/def/ghi')).to be_falsey
226
226
  end
227
227
  it 'exact_child_name_under' do
228
- pattern.exact_child_name_under('/').should == 'abc'
229
- pattern.exact_child_name_under('/abc').should == nil
230
- pattern.exact_child_name_under('/abc/def').should == 'ghi'
228
+ expect(pattern.exact_child_name_under('/')).to eq('abc')
229
+ expect(pattern.exact_child_name_under('/abc')).to eq(nil)
230
+ expect(pattern.exact_child_name_under('/abc/def')).to eq('ghi')
231
231
  end
232
232
  end
233
233
 
234
234
  context 'with star pattern "/abc/d??f/ghi"' do
235
235
  let(:pattern) { Chef::ChefFS::FilePattern.new('/abc/d??f/ghi') }
236
236
  it 'match?' do
237
- pattern.match?('/abc/deef/ghi').should be_true
238
- pattern.match?('/abc/deeef/ghi').should be_false
239
- pattern.match?('/abc/def/ghi').should be_false
240
- pattern.match?('/abc/df/ghi').should be_false
241
- pattern.match?('/abc/d/ghi').should be_false
242
- pattern.match?('/abc/f/ghi').should be_false
243
- pattern.match?('/abc/ghi').should be_false
237
+ expect(pattern.match?('/abc/deef/ghi')).to be_truthy
238
+ expect(pattern.match?('/abc/deeef/ghi')).to be_falsey
239
+ expect(pattern.match?('/abc/def/ghi')).to be_falsey
240
+ expect(pattern.match?('/abc/df/ghi')).to be_falsey
241
+ expect(pattern.match?('/abc/d/ghi')).to be_falsey
242
+ expect(pattern.match?('/abc/f/ghi')).to be_falsey
243
+ expect(pattern.match?('/abc/ghi')).to be_falsey
244
244
  end
245
245
  it 'exact_path' do
246
- pattern.exact_path.should be_nil
246
+ expect(pattern.exact_path).to be_nil
247
247
  end
248
248
  it 'could_match_children?' do
249
- pattern.could_match_children?('/abc').should be_true
250
- pattern.could_match_children?('/xyz').should be_false
251
- pattern.could_match_children?('abc').should be_false
252
- pattern.could_match_children?('/abc/deef').should be_true
253
- pattern.could_match_children?('/abc/deeef').should be_false
254
- pattern.could_match_children?('/abc/def').should be_false
255
- pattern.could_match_children?('/abc/df').should be_false
256
- pattern.could_match_children?('/abc/d').should be_false
257
- pattern.could_match_children?('/abc/f').should be_false
258
- pattern.could_match_children?('/abc/deef/ghi').should be_false
249
+ expect(pattern.could_match_children?('/abc')).to be_truthy
250
+ expect(pattern.could_match_children?('/xyz')).to be_falsey
251
+ expect(pattern.could_match_children?('abc')).to be_falsey
252
+ expect(pattern.could_match_children?('/abc/deef')).to be_truthy
253
+ expect(pattern.could_match_children?('/abc/deeef')).to be_falsey
254
+ expect(pattern.could_match_children?('/abc/def')).to be_falsey
255
+ expect(pattern.could_match_children?('/abc/df')).to be_falsey
256
+ expect(pattern.could_match_children?('/abc/d')).to be_falsey
257
+ expect(pattern.could_match_children?('/abc/f')).to be_falsey
258
+ expect(pattern.could_match_children?('/abc/deef/ghi')).to be_falsey
259
259
  end
260
260
  it 'exact_child_name_under' do
261
- pattern.exact_child_name_under('/').should == 'abc'
262
- pattern.exact_child_name_under('/abc').should == nil
263
- pattern.exact_child_name_under('/abc/deef').should == 'ghi'
261
+ expect(pattern.exact_child_name_under('/')).to eq('abc')
262
+ expect(pattern.exact_child_name_under('/abc')).to eq(nil)
263
+ expect(pattern.exact_child_name_under('/abc/deef')).to eq('ghi')
264
264
  end
265
265
  end
266
266
 
267
267
  context 'with star pattern "/abc/d[a-z][0-9]f/ghi"', :pending => (Chef::Platform.windows?) do
268
268
  let(:pattern) { Chef::ChefFS::FilePattern.new('/abc/d[a-z][0-9]f/ghi') }
269
269
  it 'match?' do
270
- pattern.match?('/abc/de1f/ghi').should be_true
271
- pattern.match?('/abc/deef/ghi').should be_false
272
- pattern.match?('/abc/d11f/ghi').should be_false
273
- pattern.match?('/abc/de11f/ghi').should be_false
274
- pattern.match?('/abc/dee1f/ghi').should be_false
275
- pattern.match?('/abc/df/ghi').should be_false
276
- pattern.match?('/abc/d/ghi').should be_false
277
- pattern.match?('/abc/f/ghi').should be_false
278
- pattern.match?('/abc/ghi').should be_false
270
+ expect(pattern.match?('/abc/de1f/ghi')).to be_truthy
271
+ expect(pattern.match?('/abc/deef/ghi')).to be_falsey
272
+ expect(pattern.match?('/abc/d11f/ghi')).to be_falsey
273
+ expect(pattern.match?('/abc/de11f/ghi')).to be_falsey
274
+ expect(pattern.match?('/abc/dee1f/ghi')).to be_falsey
275
+ expect(pattern.match?('/abc/df/ghi')).to be_falsey
276
+ expect(pattern.match?('/abc/d/ghi')).to be_falsey
277
+ expect(pattern.match?('/abc/f/ghi')).to be_falsey
278
+ expect(pattern.match?('/abc/ghi')).to be_falsey
279
279
  end
280
280
  it 'exact_path' do
281
- pattern.exact_path.should be_nil
281
+ expect(pattern.exact_path).to be_nil
282
282
  end
283
283
  it 'could_match_children?' do
284
- pattern.could_match_children?('/abc').should be_true
285
- pattern.could_match_children?('/xyz').should be_false
286
- pattern.could_match_children?('abc').should be_false
287
- pattern.could_match_children?('/abc/de1f').should be_true
288
- pattern.could_match_children?('/abc/deef').should be_false
289
- pattern.could_match_children?('/abc/d11f').should be_false
290
- pattern.could_match_children?('/abc/de11f').should be_false
291
- pattern.could_match_children?('/abc/dee1f').should be_false
292
- pattern.could_match_children?('/abc/def').should be_false
293
- pattern.could_match_children?('/abc/df').should be_false
294
- pattern.could_match_children?('/abc/d').should be_false
295
- pattern.could_match_children?('/abc/f').should be_false
296
- pattern.could_match_children?('/abc/de1f/ghi').should be_false
284
+ expect(pattern.could_match_children?('/abc')).to be_truthy
285
+ expect(pattern.could_match_children?('/xyz')).to be_falsey
286
+ expect(pattern.could_match_children?('abc')).to be_falsey
287
+ expect(pattern.could_match_children?('/abc/de1f')).to be_truthy
288
+ expect(pattern.could_match_children?('/abc/deef')).to be_falsey
289
+ expect(pattern.could_match_children?('/abc/d11f')).to be_falsey
290
+ expect(pattern.could_match_children?('/abc/de11f')).to be_falsey
291
+ expect(pattern.could_match_children?('/abc/dee1f')).to be_falsey
292
+ expect(pattern.could_match_children?('/abc/def')).to be_falsey
293
+ expect(pattern.could_match_children?('/abc/df')).to be_falsey
294
+ expect(pattern.could_match_children?('/abc/d')).to be_falsey
295
+ expect(pattern.could_match_children?('/abc/f')).to be_falsey
296
+ expect(pattern.could_match_children?('/abc/de1f/ghi')).to be_falsey
297
297
  end
298
298
  it 'exact_child_name_under' do
299
- pattern.exact_child_name_under('/').should == 'abc'
300
- pattern.exact_child_name_under('/abc').should == nil
301
- pattern.exact_child_name_under('/abc/de1f').should == 'ghi'
299
+ expect(pattern.exact_child_name_under('/')).to eq('abc')
300
+ expect(pattern.exact_child_name_under('/abc')).to eq(nil)
301
+ expect(pattern.exact_child_name_under('/abc/de1f')).to eq('ghi')
302
302
  end
303
303
  end
304
304
 
305
305
  context 'with star pattern "/abc/**/ghi"' do
306
306
  let(:pattern) { Chef::ChefFS::FilePattern.new('/abc/**/ghi') }
307
307
  it 'match?' do
308
- pattern.match?('/abc/def/ghi').should be_true
309
- pattern.match?('/abc/d/e/f/ghi').should be_true
310
- pattern.match?('/abc/ghi').should be_false
311
- pattern.match?('/abcdef/d/ghi').should be_false
312
- pattern.match?('/abc/d/defghi').should be_false
313
- pattern.match?('/xyz').should be_false
308
+ expect(pattern.match?('/abc/def/ghi')).to be_truthy
309
+ expect(pattern.match?('/abc/d/e/f/ghi')).to be_truthy
310
+ expect(pattern.match?('/abc/ghi')).to be_falsey
311
+ expect(pattern.match?('/abcdef/d/ghi')).to be_falsey
312
+ expect(pattern.match?('/abc/d/defghi')).to be_falsey
313
+ expect(pattern.match?('/xyz')).to be_falsey
314
314
  end
315
315
  it 'exact_path' do
316
- pattern.exact_path.should be_nil
316
+ expect(pattern.exact_path).to be_nil
317
317
  end
318
318
  it 'could_match_children?' do
319
- pattern.could_match_children?('/abc').should be_true
320
- pattern.could_match_children?('/abc/d').should be_true
321
- pattern.could_match_children?('/abc/d/e').should be_true
322
- pattern.could_match_children?('/abc/d/e/f').should be_true
323
- pattern.could_match_children?('/abc/def/ghi').should be_true
324
- pattern.could_match_children?('abc').should be_false
325
- pattern.could_match_children?('/xyz').should be_false
319
+ expect(pattern.could_match_children?('/abc')).to be_truthy
320
+ expect(pattern.could_match_children?('/abc/d')).to be_truthy
321
+ expect(pattern.could_match_children?('/abc/d/e')).to be_truthy
322
+ expect(pattern.could_match_children?('/abc/d/e/f')).to be_truthy
323
+ expect(pattern.could_match_children?('/abc/def/ghi')).to be_truthy
324
+ expect(pattern.could_match_children?('abc')).to be_falsey
325
+ expect(pattern.could_match_children?('/xyz')).to be_falsey
326
326
  end
327
327
  it 'exact_child_name_under' do
328
- pattern.exact_child_name_under('/').should == 'abc'
329
- pattern.exact_child_name_under('/abc').should == nil
330
- pattern.exact_child_name_under('/abc/def').should == nil
328
+ expect(pattern.exact_child_name_under('/')).to eq('abc')
329
+ expect(pattern.exact_child_name_under('/abc')).to eq(nil)
330
+ expect(pattern.exact_child_name_under('/abc/def')).to eq(nil)
331
331
  end
332
332
  end
333
333
 
334
334
  context 'with star pattern "/abc**/ghi"' do
335
335
  let(:pattern) { Chef::ChefFS::FilePattern.new('/abc**/ghi') }
336
336
  it 'match?' do
337
- pattern.match?('/abc/def/ghi').should be_true
338
- pattern.match?('/abc/d/e/f/ghi').should be_true
339
- pattern.match?('/abc/ghi').should be_true
340
- pattern.match?('/abcdef/ghi').should be_true
341
- pattern.match?('/abc/defghi').should be_false
342
- pattern.match?('/xyz').should be_false
337
+ expect(pattern.match?('/abc/def/ghi')).to be_truthy
338
+ expect(pattern.match?('/abc/d/e/f/ghi')).to be_truthy
339
+ expect(pattern.match?('/abc/ghi')).to be_truthy
340
+ expect(pattern.match?('/abcdef/ghi')).to be_truthy
341
+ expect(pattern.match?('/abc/defghi')).to be_falsey
342
+ expect(pattern.match?('/xyz')).to be_falsey
343
343
  end
344
344
  it 'exact_path' do
345
- pattern.exact_path.should be_nil
345
+ expect(pattern.exact_path).to be_nil
346
346
  end
347
347
  it 'could_match_children?' do
348
- pattern.could_match_children?('/abc').should be_true
349
- pattern.could_match_children?('/abcdef').should be_true
350
- pattern.could_match_children?('/abc/d/e').should be_true
351
- pattern.could_match_children?('/abc/d/e/f').should be_true
352
- pattern.could_match_children?('/abc/def/ghi').should be_true
353
- pattern.could_match_children?('abc').should be_false
348
+ expect(pattern.could_match_children?('/abc')).to be_truthy
349
+ expect(pattern.could_match_children?('/abcdef')).to be_truthy
350
+ expect(pattern.could_match_children?('/abc/d/e')).to be_truthy
351
+ expect(pattern.could_match_children?('/abc/d/e/f')).to be_truthy
352
+ expect(pattern.could_match_children?('/abc/def/ghi')).to be_truthy
353
+ expect(pattern.could_match_children?('abc')).to be_falsey
354
354
  end
355
355
  it 'could_match_children? /abc** returns false for /xyz' do
356
- pending 'Make could_match_children? more rigorous' do
357
- # At the moment, we return false for this, but in the end it would be nice to return true:
358
- pattern.could_match_children?('/xyz').should be_false
359
- end
356
+ pending 'Make could_match_children? more rigorous'
357
+ # At the moment, we return false for this, but in the end it would be nice to return true:
358
+ expect(pattern.could_match_children?('/xyz')).to be_falsey
360
359
  end
361
360
  it 'exact_child_name_under' do
362
- pattern.exact_child_name_under('/').should == nil
363
- pattern.exact_child_name_under('/abc').should == nil
364
- pattern.exact_child_name_under('/abc/def').should == nil
361
+ expect(pattern.exact_child_name_under('/')).to eq(nil)
362
+ expect(pattern.exact_child_name_under('/abc')).to eq(nil)
363
+ expect(pattern.exact_child_name_under('/abc/def')).to eq(nil)
365
364
  end
366
365
  end
367
366
 
368
367
  context 'with star pattern "/abc/**ghi"' do
369
368
  let(:pattern) { Chef::ChefFS::FilePattern.new('/abc/**ghi') }
370
369
  it 'match?' do
371
- pattern.match?('/abc/def/ghi').should be_true
372
- pattern.match?('/abc/def/ghi/ghi').should be_true
373
- pattern.match?('/abc/def/ghi/jkl').should be_false
374
- pattern.match?('/abc/d/e/f/ghi').should be_true
375
- pattern.match?('/abc/ghi').should be_true
376
- pattern.match?('/abcdef/ghi').should be_false
377
- pattern.match?('/abc/defghi').should be_true
378
- pattern.match?('/xyz').should be_false
370
+ expect(pattern.match?('/abc/def/ghi')).to be_truthy
371
+ expect(pattern.match?('/abc/def/ghi/ghi')).to be_truthy
372
+ expect(pattern.match?('/abc/def/ghi/jkl')).to be_falsey
373
+ expect(pattern.match?('/abc/d/e/f/ghi')).to be_truthy
374
+ expect(pattern.match?('/abc/ghi')).to be_truthy
375
+ expect(pattern.match?('/abcdef/ghi')).to be_falsey
376
+ expect(pattern.match?('/abc/defghi')).to be_truthy
377
+ expect(pattern.match?('/xyz')).to be_falsey
379
378
  end
380
379
  it 'exact_path' do
381
- pattern.exact_path.should be_nil
380
+ expect(pattern.exact_path).to be_nil
382
381
  end
383
382
  it 'could_match_children?' do
384
- pattern.could_match_children?('/abc').should be_true
385
- pattern.could_match_children?('/abcdef').should be_false
386
- pattern.could_match_children?('/abc/d/e').should be_true
387
- pattern.could_match_children?('/abc/d/e/f').should be_true
388
- pattern.could_match_children?('/abc/def/ghi').should be_true
389
- pattern.could_match_children?('abc').should be_false
390
- pattern.could_match_children?('/xyz').should be_false
383
+ expect(pattern.could_match_children?('/abc')).to be_truthy
384
+ expect(pattern.could_match_children?('/abcdef')).to be_falsey
385
+ expect(pattern.could_match_children?('/abc/d/e')).to be_truthy
386
+ expect(pattern.could_match_children?('/abc/d/e/f')).to be_truthy
387
+ expect(pattern.could_match_children?('/abc/def/ghi')).to be_truthy
388
+ expect(pattern.could_match_children?('abc')).to be_falsey
389
+ expect(pattern.could_match_children?('/xyz')).to be_falsey
391
390
  end
392
391
  it 'exact_child_name_under' do
393
- pattern.exact_child_name_under('/').should == 'abc'
394
- pattern.exact_child_name_under('/abc').should == nil
395
- pattern.exact_child_name_under('/abc/def').should == nil
392
+ expect(pattern.exact_child_name_under('/')).to eq('abc')
393
+ expect(pattern.exact_child_name_under('/abc')).to eq(nil)
394
+ expect(pattern.exact_child_name_under('/abc/def')).to eq(nil)
396
395
  end
397
396
  end
398
397
 
399
398
  context 'with star pattern "a**b**c"' do
400
399
  let(:pattern) { Chef::ChefFS::FilePattern.new('a**b**c') }
401
400
  it 'match?' do
402
- pattern.match?('axybzwc').should be_true
403
- pattern.match?('abc').should be_true
404
- pattern.match?('axyzwc').should be_false
405
- pattern.match?('ac').should be_false
406
- pattern.match?('a/x/y/b/z/w/c').should be_true
401
+ expect(pattern.match?('axybzwc')).to be_truthy
402
+ expect(pattern.match?('abc')).to be_truthy
403
+ expect(pattern.match?('axyzwc')).to be_falsey
404
+ expect(pattern.match?('ac')).to be_falsey
405
+ expect(pattern.match?('a/x/y/b/z/w/c')).to be_truthy
407
406
  end
408
407
  it 'exact_path' do
409
- pattern.exact_path.should be_nil
408
+ expect(pattern.exact_path).to be_nil
410
409
  end
411
410
  end
412
411
 
413
412
  context 'normalization tests' do
414
413
  it 'handles trailing slashes' do
415
- p('abc/').normalized_pattern.should == 'abc'
416
- p('abc/').exact_path.should == 'abc'
417
- p('abc/').match?('abc').should be_true
418
- p('//').normalized_pattern.should == '/'
419
- p('//').exact_path.should == '/'
420
- p('//').match?('/').should be_true
421
- p('/./').normalized_pattern.should == '/'
422
- p('/./').exact_path.should == '/'
423
- p('/./').match?('/').should be_true
414
+ expect(p('abc/').normalized_pattern).to eq('abc')
415
+ expect(p('abc/').exact_path).to eq('abc')
416
+ expect(p('abc/').match?('abc')).to be_truthy
417
+ expect(p('//').normalized_pattern).to eq('/')
418
+ expect(p('//').exact_path).to eq('/')
419
+ expect(p('//').match?('/')).to be_truthy
420
+ expect(p('/./').normalized_pattern).to eq('/')
421
+ expect(p('/./').exact_path).to eq('/')
422
+ expect(p('/./').match?('/')).to be_truthy
424
423
  end
425
424
  it 'handles multiple slashes' do
426
- p('abc//def').normalized_pattern.should == 'abc/def'
427
- p('abc//def').exact_path.should == 'abc/def'
428
- p('abc//def').match?('abc/def').should be_true
429
- p('abc//').normalized_pattern.should == 'abc'
430
- p('abc//').exact_path.should == 'abc'
431
- p('abc//').match?('abc').should be_true
425
+ expect(p('abc//def').normalized_pattern).to eq('abc/def')
426
+ expect(p('abc//def').exact_path).to eq('abc/def')
427
+ expect(p('abc//def').match?('abc/def')).to be_truthy
428
+ expect(p('abc//').normalized_pattern).to eq('abc')
429
+ expect(p('abc//').exact_path).to eq('abc')
430
+ expect(p('abc//').match?('abc')).to be_truthy
432
431
  end
433
432
  it 'handles dot' do
434
- p('abc/./def').normalized_pattern.should == 'abc/def'
435
- p('abc/./def').exact_path.should == 'abc/def'
436
- p('abc/./def').match?('abc/def').should be_true
437
- p('./abc/def').normalized_pattern.should == 'abc/def'
438
- p('./abc/def').exact_path.should == 'abc/def'
439
- p('./abc/def').match?('abc/def').should be_true
440
- p('/.').normalized_pattern.should == '/'
441
- p('/.').exact_path.should == '/'
442
- p('/.').match?('/').should be_true
433
+ expect(p('abc/./def').normalized_pattern).to eq('abc/def')
434
+ expect(p('abc/./def').exact_path).to eq('abc/def')
435
+ expect(p('abc/./def').match?('abc/def')).to be_truthy
436
+ expect(p('./abc/def').normalized_pattern).to eq('abc/def')
437
+ expect(p('./abc/def').exact_path).to eq('abc/def')
438
+ expect(p('./abc/def').match?('abc/def')).to be_truthy
439
+ expect(p('/.').normalized_pattern).to eq('/')
440
+ expect(p('/.').exact_path).to eq('/')
441
+ expect(p('/.').match?('/')).to be_truthy
443
442
  end
444
443
  it 'handles dot by itself', :pending => "decide what to do with dot by itself" do
445
- p('.').normalized_pattern.should == '.'
446
- p('.').exact_path.should == '.'
447
- p('.').match?('.').should be_true
448
- p('./').normalized_pattern.should == '.'
449
- p('./').exact_path.should == '.'
450
- p('./').match?('.').should be_true
444
+ expect(p('.').normalized_pattern).to eq('.')
445
+ expect(p('.').exact_path).to eq('.')
446
+ expect(p('.').match?('.')).to be_truthy
447
+ expect(p('./').normalized_pattern).to eq('.')
448
+ expect(p('./').exact_path).to eq('.')
449
+ expect(p('./').match?('.')).to be_truthy
451
450
  end
452
451
  it 'handles dotdot' do
453
- p('abc/../def').normalized_pattern.should == 'def'
454
- p('abc/../def').exact_path.should == 'def'
455
- p('abc/../def').match?('def').should be_true
456
- p('abc/def/../..').normalized_pattern.should == ''
457
- p('abc/def/../..').exact_path.should == ''
458
- p('abc/def/../..').match?('').should be_true
459
- p('/*/../def').normalized_pattern.should == '/def'
460
- p('/*/../def').exact_path.should == '/def'
461
- p('/*/../def').match?('/def').should be_true
462
- p('/*/*/../def').normalized_pattern.should == '/*/def'
463
- p('/*/*/../def').exact_path.should be_nil
464
- p('/*/*/../def').match?('/abc/def').should be_true
465
- p('/abc/def/../..').normalized_pattern.should == '/'
466
- p('/abc/def/../..').exact_path.should == '/'
467
- p('/abc/def/../..').match?('/').should be_true
468
- p('abc/../../def').normalized_pattern.should == '../def'
469
- p('abc/../../def').exact_path.should == '../def'
470
- p('abc/../../def').match?('../def').should be_true
452
+ expect(p('abc/../def').normalized_pattern).to eq('def')
453
+ expect(p('abc/../def').exact_path).to eq('def')
454
+ expect(p('abc/../def').match?('def')).to be_truthy
455
+ expect(p('abc/def/../..').normalized_pattern).to eq('')
456
+ expect(p('abc/def/../..').exact_path).to eq('')
457
+ expect(p('abc/def/../..').match?('')).to be_truthy
458
+ expect(p('/*/../def').normalized_pattern).to eq('/def')
459
+ expect(p('/*/../def').exact_path).to eq('/def')
460
+ expect(p('/*/../def').match?('/def')).to be_truthy
461
+ expect(p('/*/*/../def').normalized_pattern).to eq('/*/def')
462
+ expect(p('/*/*/../def').exact_path).to be_nil
463
+ expect(p('/*/*/../def').match?('/abc/def')).to be_truthy
464
+ expect(p('/abc/def/../..').normalized_pattern).to eq('/')
465
+ expect(p('/abc/def/../..').exact_path).to eq('/')
466
+ expect(p('/abc/def/../..').match?('/')).to be_truthy
467
+ expect(p('abc/../../def').normalized_pattern).to eq('../def')
468
+ expect(p('abc/../../def').exact_path).to eq('../def')
469
+ expect(p('abc/../../def').match?('../def')).to be_truthy
471
470
  end
472
471
  it 'handles dotdot with double star' do
473
- p('abc**/def/../ghi').exact_path.should be_nil
474
- p('abc**/def/../ghi').match?('abc/ghi').should be_true
475
- p('abc**/def/../ghi').match?('abc/x/y/z/ghi').should be_true
476
- p('abc**/def/../ghi').match?('ghi').should be_false
472
+ expect(p('abc**/def/../ghi').exact_path).to be_nil
473
+ expect(p('abc**/def/../ghi').match?('abc/ghi')).to be_truthy
474
+ expect(p('abc**/def/../ghi').match?('abc/x/y/z/ghi')).to be_truthy
475
+ expect(p('abc**/def/../ghi').match?('ghi')).to be_falsey
477
476
  end
478
477
  it 'raises error on dotdot with overlapping double star' do
479
- lambda { Chef::ChefFS::FilePattern.new('abc/**/../def').exact_path }.should raise_error(ArgumentError)
480
- lambda { Chef::ChefFS::FilePattern.new('abc/**/abc/../../def').exact_path }.should raise_error(ArgumentError)
478
+ expect { Chef::ChefFS::FilePattern.new('abc/**/../def').exact_path }.to raise_error(ArgumentError)
479
+ expect { Chef::ChefFS::FilePattern.new('abc/**/abc/../../def').exact_path }.to raise_error(ArgumentError)
481
480
  end
482
481
  it 'handles leading dotdot' do
483
- p('../abc/def').exact_path.should == '../abc/def'
484
- p('../abc/def').match?('../abc/def').should be_true
485
- p('/../abc/def').exact_path.should == '/abc/def'
486
- p('/../abc/def').match?('/abc/def').should be_true
487
- p('..').exact_path.should == '..'
488
- p('..').match?('..').should be_true
489
- p('/..').exact_path.should == '/'
490
- p('/..').match?('/').should be_true
482
+ expect(p('../abc/def').exact_path).to eq('../abc/def')
483
+ expect(p('../abc/def').match?('../abc/def')).to be_truthy
484
+ expect(p('/../abc/def').exact_path).to eq('/abc/def')
485
+ expect(p('/../abc/def').match?('/abc/def')).to be_truthy
486
+ expect(p('..').exact_path).to eq('..')
487
+ expect(p('..').match?('..')).to be_truthy
488
+ expect(p('/..').exact_path).to eq('/')
489
+ expect(p('/..').match?('/')).to be_truthy
491
490
  end
492
491
  end
493
492