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
@@ -69,7 +69,7 @@ describe Chef::Provider::Service do
69
69
  describe "action_start" do
70
70
  it "should start the service if it isn't running and set the resource as updated" do
71
71
  @current_resource.running(false)
72
- expect(@provider).to receive(:start_service).with.and_return(true)
72
+ expect(@provider).to receive(:start_service).with(no_args).and_return(true)
73
73
  @provider.run_action(:start)
74
74
  expect(@provider.new_resource).to be_updated
75
75
  end
@@ -171,7 +171,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
171
171
 
172
172
  describe "uid_used?" do
173
173
  it "should return false if not given any valid uid number" do
174
- expect(provider.uid_used?(nil)).to be_false
174
+ expect(provider.uid_used?(nil)).to be_falsey
175
175
  end
176
176
 
177
177
  describe "when called with a user id" do
@@ -180,11 +180,11 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
180
180
  end
181
181
 
182
182
  it "should return true for a used uid number" do
183
- expect(provider.uid_used?(500)).to be_true
183
+ expect(provider.uid_used?(500)).to be_truthy
184
184
  end
185
185
 
186
186
  it "should return false for an unused uid number" do
187
- expect(provider.uid_used?(501)).to be_false
187
+ expect(provider.uid_used?(501)).to be_falsey
188
188
  end
189
189
  end
190
190
  end
@@ -400,7 +400,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
400
400
 
401
401
  it "should set @user_exists" do
402
402
  provider.load_current_resource
403
- expect(provider.instance_variable_get(:@user_exists)).to be_false
403
+ expect(provider.instance_variable_get(:@user_exists)).to be_falsey
404
404
  end
405
405
 
406
406
  it "should set username" do
@@ -422,7 +422,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
422
422
  it "collects the user data correctly" do
423
423
  provider.load_current_resource
424
424
  expect(provider.current_resource.comment).to eq("vagrant")
425
- expect(provider.current_resource.uid).to eq("11112222-3333-4444-AAAA-BBBBCCCCDDDD")
425
+ expect(provider.current_resource.uid).to eq("501")
426
426
  expect(provider.current_resource.gid).to eq("80")
427
427
  expect(provider.current_resource.home).to eq("/Users/vagrant")
428
428
  expect(provider.current_resource.shell).to eq("/bin/bash")
@@ -434,7 +434,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
434
434
 
435
435
  it "diverged_password? should report false" do
436
436
  provider.load_current_resource
437
- expect(provider.diverged_password?).to be_false
437
+ expect(provider.diverged_password?).to be_falsey
438
438
  end
439
439
  end
440
440
 
@@ -443,7 +443,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
443
443
 
444
444
  it "diverged_password? should report true" do
445
445
  provider.load_current_resource
446
- expect(provider.diverged_password?).to be_true
446
+ expect(provider.diverged_password?).to be_truthy
447
447
  end
448
448
  end
449
449
 
@@ -453,7 +453,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
453
453
 
454
454
  it "diverged_password? should report false" do
455
455
  provider.load_current_resource
456
- expect(provider.diverged_password?).to be_false
456
+ expect(provider.diverged_password?).to be_falsey
457
457
  end
458
458
  end
459
459
 
@@ -462,7 +462,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
462
462
 
463
463
  it "diverged_password? should report true" do
464
464
  provider.load_current_resource
465
- expect(provider.diverged_password?).to be_true
465
+ expect(provider.diverged_password?).to be_truthy
466
466
  end
467
467
  end
468
468
 
@@ -472,7 +472,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
472
472
 
473
473
  it "diverged_password? should report false" do
474
474
  provider.load_current_resource
475
- expect(provider.diverged_password?).to be_false
475
+ expect(provider.diverged_password?).to be_falsey
476
476
  end
477
477
  end
478
478
  end
@@ -487,7 +487,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
487
487
  it "collects the user data correctly" do
488
488
  provider.load_current_resource
489
489
  expect(provider.current_resource.comment).to eq("vagrant")
490
- expect(provider.current_resource.uid).to eq("11112222-3333-4444-AAAA-BBBBCCCCDDDD")
490
+ expect(provider.current_resource.uid).to eq("501")
491
491
  expect(provider.current_resource.gid).to eq("80")
492
492
  expect(provider.current_resource.home).to eq("/Users/vagrant")
493
493
  expect(provider.current_resource.shell).to eq("/bin/bash")
@@ -513,7 +513,7 @@ e68d1f9821b26689312366")
513
513
  it "collects the user data correctly" do
514
514
  provider.load_current_resource
515
515
  expect(provider.current_resource.comment).to eq("vagrant")
516
- expect(provider.current_resource.uid).to eq("11112222-3333-4444-AAAA-BBBBCCCCDDDD")
516
+ expect(provider.current_resource.uid).to eq("501")
517
517
  expect(provider.current_resource.gid).to eq("80")
518
518
  expect(provider.current_resource.home).to eq("/Users/vagrant")
519
519
  expect(provider.current_resource.shell).to eq("/bin/bash")
@@ -525,7 +525,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
525
525
  describe "when a plain text password is set" do
526
526
  it "reports password needs to be updated" do
527
527
  provider.load_current_resource
528
- expect(provider.diverged_password?).to be_true
528
+ expect(provider.diverged_password?).to be_truthy
529
529
  end
530
530
  end
531
531
 
@@ -536,7 +536,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
536
536
 
537
537
  it "reports password needs to be updated" do
538
538
  provider.load_current_resource
539
- expect(provider.diverged_password?).to be_true
539
+ expect(provider.diverged_password?).to be_truthy
540
540
  end
541
541
  end
542
542
  end
@@ -551,7 +551,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
551
551
  it "collects the user data correctly" do
552
552
  provider.load_current_resource
553
553
  expect(provider.current_resource.comment).to eq("vagrant")
554
- expect(provider.current_resource.uid).to eq("11112222-3333-4444-AAAA-BBBBCCCCDDDD")
554
+ expect(provider.current_resource.uid).to eq("501")
555
555
  expect(provider.current_resource.gid).to eq("80")
556
556
  expect(provider.current_resource.home).to eq("/Users/vagrant")
557
557
  expect(provider.current_resource.shell).to eq("/bin/bash")
@@ -565,7 +565,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
565
565
 
566
566
  it "diverged_password? should report false" do
567
567
  provider.load_current_resource
568
- expect(provider.diverged_password?).to be_false
568
+ expect(provider.diverged_password?).to be_falsey
569
569
  end
570
570
  end
571
571
 
@@ -574,7 +574,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
574
574
 
575
575
  it "diverged_password? should report true" do
576
576
  provider.load_current_resource
577
- expect(provider.diverged_password?).to be_true
577
+ expect(provider.diverged_password?).to be_truthy
578
578
  end
579
579
  end
580
580
 
@@ -585,7 +585,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
585
585
 
586
586
  it "diverged_password? should report true" do
587
587
  provider.load_current_resource
588
- expect(provider.diverged_password?).to be_true
588
+ expect(provider.diverged_password?).to be_truthy
589
589
  end
590
590
  end
591
591
 
@@ -596,7 +596,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
596
596
 
597
597
  it "diverged_password? should report true" do
598
598
  provider.load_current_resource
599
- expect(provider.diverged_password?).to be_true
599
+ expect(provider.diverged_password?).to be_truthy
600
600
  end
601
601
  end
602
602
 
@@ -607,7 +607,15 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
607
607
 
608
608
  it "diverged_password? should report true" do
609
609
  provider.load_current_resource
610
- expect(provider.diverged_password?).to be_true
610
+ expect(provider.diverged_password?).to be_truthy
611
+ end
612
+ end
613
+
614
+ describe "when salt isn't found" do
615
+ it "diverged_password? should report true" do
616
+ provider.load_current_resource
617
+ provider.current_resource.salt(nil)
618
+ expect(provider.diverged_password?).to be_truthy
611
619
  end
612
620
  end
613
621
  end
@@ -616,23 +624,23 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
616
624
 
617
625
  describe "salted_sha512_pbkdf2?" do
618
626
  it "should return true when the string is a salted_sha512_pbkdf2 hash" do
619
- expect(provider.salted_sha512_pbkdf2?(salted_sha512_pbkdf2_password)).to be_true
627
+ expect(provider.salted_sha512_pbkdf2?(salted_sha512_pbkdf2_password)).to be_truthy
620
628
  end
621
629
 
622
630
  it "should return false otherwise" do
623
- expect(provider.salted_sha512_pbkdf2?(salted_sha512_password)).to be_false
624
- expect(provider.salted_sha512_pbkdf2?("any other string")).to be_false
631
+ expect(provider.salted_sha512_pbkdf2?(salted_sha512_password)).to be_falsey
632
+ expect(provider.salted_sha512_pbkdf2?("any other string")).to be_falsey
625
633
  end
626
634
  end
627
635
 
628
636
  describe "salted_sha512?" do
629
637
  it "should return true when the string is a salted_sha512_pbkdf2 hash" do
630
- expect(provider.salted_sha512_pbkdf2?(salted_sha512_pbkdf2_password)).to be_true
638
+ expect(provider.salted_sha512_pbkdf2?(salted_sha512_pbkdf2_password)).to be_truthy
631
639
  end
632
640
 
633
641
  it "should return false otherwise" do
634
- expect(provider.salted_sha512?(salted_sha512_pbkdf2_password)).to be_false
635
- expect(provider.salted_sha512?("any other string")).to be_false
642
+ expect(provider.salted_sha512?(salted_sha512_pbkdf2_password)).to be_falsey
643
+ expect(provider.salted_sha512?("any other string")).to be_falsey
636
644
  end
637
645
  end
638
646
 
@@ -649,7 +657,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
649
657
  shadow_info = provider.prepare_password_shadow_info
650
658
  expect(shadow_info).to have_key("SALTED-SHA512")
651
659
  info = shadow_info["SALTED-SHA512"].string.unpack('H*').first
652
- expect(provider.salted_sha512?(info)).to be_true
660
+ expect(provider.salted_sha512?(info)).to be_truthy
653
661
  end
654
662
  end
655
663
 
@@ -660,7 +668,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
660
668
  shadow_info = provider.prepare_password_shadow_info
661
669
  expect(shadow_info).to have_key("SALTED-SHA512")
662
670
  info = shadow_info["SALTED-SHA512"].string.unpack('H*').first
663
- expect(provider.salted_sha512?(info)).to be_true
671
+ expect(provider.salted_sha512?(info)).to be_truthy
664
672
  expect(info).to eq(vagrant_sha_512)
665
673
  end
666
674
  end
@@ -682,7 +690,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
682
690
  expect(shadow_info["SALTED-SHA512-PBKDF2"]).to have_key("salt")
683
691
  expect(shadow_info["SALTED-SHA512-PBKDF2"]).to have_key("iterations")
684
692
  info = shadow_info["SALTED-SHA512-PBKDF2"]["entropy"].string.unpack('H*').first
685
- expect(provider.salted_sha512_pbkdf2?(info)).to be_true
693
+ expect(provider.salted_sha512_pbkdf2?(info)).to be_truthy
686
694
  end
687
695
  end
688
696
 
@@ -698,7 +706,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
698
706
  expect(shadow_info["SALTED-SHA512-PBKDF2"]).to have_key("salt")
699
707
  expect(shadow_info["SALTED-SHA512-PBKDF2"]).to have_key("iterations")
700
708
  info = shadow_info["SALTED-SHA512-PBKDF2"]["entropy"].string.unpack('H*').first
701
- expect(provider.salted_sha512_pbkdf2?(info)).to be_true
709
+ expect(provider.salted_sha512_pbkdf2?(info)).to be_truthy
702
710
  expect(info).to eq(vagrant_sha_512_pbkdf2)
703
711
  end
704
712
  end
@@ -91,7 +91,7 @@ describe Chef::Provider::User do
91
91
  expect(@current_resource.username).to eq(@new_resource.username)
92
92
  end
93
93
 
94
- it "should change the encoding of gecos to the encoding of the new resource", :ruby_gte_19_only do
94
+ it "should change the encoding of gecos to the encoding of the new resource" do
95
95
  @pw_user.gecos.force_encoding('ASCII-8BIT')
96
96
  @provider.load_current_resource
97
97
  expect(@provider.current_resource.comment.encoding).to eq(@new_resource.comment.encoding)
@@ -511,10 +511,11 @@ describe Chef::ProviderResolver do
511
511
 
512
512
  supported_providers = [
513
513
  :apt_package, :bash, :breakpoint, :chef_gem, :cookbook_file, :csh, :deploy,
514
- :deploy_revision, :directory, :dpkg_package, :easy_install_package,
515
- :erl_call, :execute, :file, :gem_package, :git, :http_request, :link, :log, :pacman_package, :paludis_package,
516
- :perl, :python, :remote_directory, :route, :rpm_package, :ruby, :ruby_block, :script,
517
- :subversion, :template, :timestamped_deploy, :whyrun_safe_ruby_block, :yum_package, :homebrew_package,
514
+ :deploy_revision, :directory, :dpkg_package, :easy_install_package, :erl_call,
515
+ :execute, :file, :gem_package, :git, :homebrew_package, :http_request, :link,
516
+ :log, :macports_package, :pacman_package, :paludis_package, :perl, :python,
517
+ :remote_directory, :route, :rpm_package, :ruby, :ruby_block, :script, :subversion,
518
+ :template, :timestamped_deploy, :whyrun_safe_ruby_block, :yum_package,
518
519
  ]
519
520
 
520
521
  supported_providers.each do |static_resource|
@@ -530,9 +531,8 @@ describe Chef::ProviderResolver do
530
531
  end
531
532
 
532
533
  unsupported_providers = [
533
- :bff_package, :dsc_script, :ips_package, :macports_package,
534
- :smartos_package, :solaris_package, :windows_package,
535
- :windows_service,
534
+ :bff_package, :dsc_script, :ips_package, :smartos_package,
535
+ :solaris_package, :windows_package, :windows_service,
536
536
  ]
537
537
 
538
538
  unsupported_providers.each do |static_resource|
@@ -74,23 +74,23 @@ describe Chef::Provider do
74
74
  end
75
75
 
76
76
  it "should store the resource passed to new as new_resource" do
77
- @provider.new_resource.should eql(@resource)
77
+ expect(@provider.new_resource).to eql(@resource)
78
78
  end
79
79
 
80
80
  it "should store the node passed to new as node" do
81
- @provider.node.should eql(@node)
81
+ expect(@provider.node).to eql(@node)
82
82
  end
83
83
 
84
84
  it "should have nil for current_resource by default" do
85
- @provider.current_resource.should eql(nil)
85
+ expect(@provider.current_resource).to eql(nil)
86
86
  end
87
87
 
88
88
  it "should not support whyrun by default" do
89
- @provider.send(:whyrun_supported?).should eql(false)
89
+ expect(@provider.send(:whyrun_supported?)).to eql(false)
90
90
  end
91
91
 
92
92
  it "should return true for action_nothing" do
93
- @provider.action_nothing.should eql(true)
93
+ expect(@provider.action_nothing).to eql(true)
94
94
  end
95
95
 
96
96
  it "evals embedded recipes with a pristine resource collection" do
@@ -98,27 +98,27 @@ describe Chef::Provider do
98
98
  temporary_collection = nil
99
99
  snitch = Proc.new {temporary_collection = @run_context.resource_collection}
100
100
  @provider.send(:recipe_eval, &snitch)
101
- temporary_collection.should be_an_instance_of(Chef::ResourceCollection)
102
- @provider.run_context.instance_variable_get(:@resource_collection).should == "doesn't matter what this is"
101
+ expect(temporary_collection).to be_an_instance_of(Chef::ResourceCollection)
102
+ expect(@provider.run_context.instance_variable_get(:@resource_collection)).to eq("doesn't matter what this is")
103
103
  end
104
104
 
105
105
  it "does not re-load recipes when creating the temporary run context" do
106
106
  # we actually want to test that RunContext#load is never called, but we
107
107
  # can't stub all instances of an object with rspec's mocks. :/
108
- Chef::RunContext.stub(:new).and_raise("not supposed to happen")
108
+ allow(Chef::RunContext).to receive(:new).and_raise("not supposed to happen")
109
109
  snitch = Proc.new {temporary_collection = @run_context.resource_collection}
110
110
  @provider.send(:recipe_eval, &snitch)
111
111
  end
112
112
 
113
113
  context "when no converge actions are queued" do
114
114
  before do
115
- @provider.stub(:whyrun_supported?).and_return(true)
116
- @provider.stub(:load_current_resource)
115
+ allow(@provider).to receive(:whyrun_supported?).and_return(true)
116
+ allow(@provider).to receive(:load_current_resource)
117
117
  end
118
118
 
119
119
  it "does not mark the new resource as updated" do
120
- @resource.should_not be_updated
121
- @resource.should_not be_updated_by_last_action
120
+ expect(@resource).not_to be_updated
121
+ expect(@resource).not_to be_updated_by_last_action
122
122
  end
123
123
  end
124
124
 
@@ -129,23 +129,23 @@ describe Chef::Provider do
129
129
  end
130
130
 
131
131
  it "should tell us that it does support whyrun" do
132
- @provider.should be_whyrun_supported
132
+ expect(@provider).to be_whyrun_supported
133
133
  end
134
134
 
135
135
  it "queues up converge actions" do
136
136
  @provider.action_foo
137
- @provider.send(:converge_actions).should have(1).actions
137
+ expect(@provider.send(:converge_actions).actions.size).to eq(1)
138
138
  end
139
139
 
140
140
  it "executes pending converge actions to converge the system" do
141
141
  @provider.run_action(:foo)
142
- @provider.instance_variable_get(:@system_state_altered).should be_true
142
+ expect(@provider.instance_variable_get(:@system_state_altered)).to be_truthy
143
143
  end
144
144
 
145
145
  it "marks the resource as updated" do
146
146
  @provider.run_action(:foo)
147
- @resource.should be_updated
148
- @resource.should be_updated_by_last_action
147
+ expect(@resource).to be_updated
148
+ expect(@resource).to be_updated_by_last_action
149
149
  end
150
150
  end
151
151
 
@@ -160,20 +160,20 @@ describe Chef::Provider do
160
160
  end
161
161
 
162
162
  it "should tell us that it doesn't support whyrun" do
163
- @provider.should_not be_whyrun_supported
163
+ expect(@provider).not_to be_whyrun_supported
164
164
  end
165
165
 
166
166
  it "should automatically generate a converge_by block on the provider's behalf" do
167
167
  @provider.run_action(:foo)
168
- @provider.send(:converge_actions).should have(0).actions
169
- @provider.system_state_altered.should be_false
168
+ expect(@provider.send(:converge_actions).actions.size).to eq(0)
169
+ expect(@provider.system_state_altered).to be_falsey
170
170
  end
171
171
 
172
172
  it "should automatically execute the generated converge_by block" do
173
173
  @provider.run_action(:foo)
174
- @provider.system_state_altered.should be_false
175
- @resource.should_not be_updated
176
- @resource.should_not be_updated_by_last_action
174
+ expect(@provider.system_state_altered).to be_falsey
175
+ expect(@resource).not_to be_updated
176
+ expect(@resource).not_to be_updated_by_last_action
177
177
  end
178
178
  end
179
179
  end
@@ -52,50 +52,50 @@ describe Chef::Recipe do
52
52
  describe "method_missing" do
53
53
  describe "resources" do
54
54
  it "should load a two word (zen_master) resource" do
55
- lambda do
55
+ expect do
56
56
  recipe.zen_master "monkey" do
57
57
  peace true
58
58
  end
59
- end.should_not raise_error
59
+ end.not_to raise_error
60
60
  end
61
61
 
62
62
  it "should load a one word (cat) resource" do
63
- lambda do
63
+ expect do
64
64
  recipe.cat "loulou" do
65
65
  pretty_kitty true
66
66
  end
67
- end.should_not raise_error
67
+ end.not_to raise_error
68
68
  end
69
69
 
70
70
  it "should load a four word (one_two_three_four) resource" do
71
- lambda do
71
+ expect do
72
72
  recipe.one_two_three_four "numbers" do
73
73
  i_can_count true
74
74
  end
75
- end.should_not raise_error
75
+ end.not_to raise_error
76
76
  end
77
77
 
78
78
  it "should throw an error if you access a resource that we can't find" do
79
- lambda { recipe.not_home("not_home_resource") }.should raise_error(NameError)
79
+ expect { recipe.not_home("not_home_resource") }.to raise_error(NameError)
80
80
  end
81
81
 
82
82
  it "should require a name argument" do
83
- lambda {
83
+ expect {
84
84
  recipe.cat
85
- }.should raise_error(ArgumentError, "You must supply a name when declaring a cat resource")
85
+ }.to raise_error(ArgumentError, "You must supply a name when declaring a cat resource")
86
86
  end
87
87
 
88
88
  it "should allow regular errors (not NameErrors) to pass unchanged" do
89
- lambda {
89
+ expect {
90
90
  recipe.cat("felix") { raise ArgumentError, "You Suck" }
91
- }.should raise_error(ArgumentError)
91
+ }.to raise_error(ArgumentError)
92
92
  end
93
93
 
94
94
  it "should add our zen_master to the collection" do
95
95
  recipe.zen_master "monkey" do
96
96
  peace true
97
97
  end
98
- run_context.resource_collection.lookup("zen_master[monkey]").name.should eql("monkey")
98
+ expect(run_context.resource_collection.lookup("zen_master[monkey]").name).to eql("monkey")
99
99
  end
100
100
 
101
101
  it "should add our zen masters to the collection in the order they appear" do
@@ -105,15 +105,15 @@ describe Chef::Recipe do
105
105
  end
106
106
  end
107
107
 
108
- run_context.resource_collection.map{|r| r.name}.should eql(["monkey", "dog", "cat"])
108
+ expect(run_context.resource_collection.map{|r| r.name}).to eql(["monkey", "dog", "cat"])
109
109
  end
110
110
 
111
111
  it "should return the new resource after creating it" do
112
112
  res = recipe.zen_master "makoto" do
113
113
  peace true
114
114
  end
115
- res.resource_name.should eql(:zen_master)
116
- res.name.should eql("makoto")
115
+ expect(res.resource_name).to eql(:zen_master)
116
+ expect(res.name).to eql("makoto")
117
117
  end
118
118
 
119
119
  describe "should locate platform mapped resources" do
@@ -124,7 +124,7 @@ describe Chef::Recipe do
124
124
  node.automatic[:platform] = "television"
125
125
  node.automatic[:platform_version] = "123"
126
126
  res = recipe.laughter "timmy"
127
- res.name.should eql("timmy")
127
+ expect(res.name).to eql("timmy")
128
128
  res.kind_of?(ShaunTheSheep)
129
129
  end
130
130
 
@@ -132,7 +132,7 @@ describe Chef::Recipe do
132
132
  YourMom = Class.new(Chef::Resource)
133
133
  YourMom.provides :love_and_caring
134
134
  res = recipe.love_and_caring "mommy"
135
- res.name.should eql("mommy")
135
+ expect(res.name).to eql("mommy")
136
136
  res.kind_of?(YourMom)
137
137
  end
138
138
 
@@ -147,21 +147,96 @@ describe Chef::Recipe do
147
147
  end
148
148
 
149
149
  it "applies attributes from the block to the resource" do
150
- zm_resource.something.should == "bvb"
150
+ expect(zm_resource.something).to eq("bvb")
151
151
  end
152
152
 
153
153
  it "sets contextual attributes on the resource" do
154
- zm_resource.recipe_name.should == "test"
155
- zm_resource.cookbook_name.should == "hjk"
156
- zm_resource.source_line.should include(__FILE__)
157
- zm_resource.declared_type.should == :zen_master
154
+ expect(zm_resource.recipe_name).to eq("test")
155
+ expect(zm_resource.cookbook_name).to eq("hjk")
156
+ expect(zm_resource.source_line).to include(__FILE__)
157
+ expect(zm_resource.declared_type).to eq(:zen_master)
158
158
  end
159
159
 
160
160
  it "does not add the resource to the resource collection" do
161
161
  zm_resource # force let binding evaluation
162
162
  expect { run_context.resource_collection.resources(:zen_master => "klopp") }.to raise_error(Chef::Exceptions::ResourceNotFound)
163
163
  end
164
+ end
165
+
166
+ describe "when cloning resources" do
167
+ def expect_warning
168
+ expect(Chef::Log).to receive(:warn).with(/3694/)
169
+ expect(Chef::Log).to receive(:warn).with(/Previous/)
170
+ expect(Chef::Log).to receive(:warn).with(/Current/)
171
+ end
172
+
173
+ it "should emit a 3694 warning when attributes change" do
174
+ recipe.zen_master "klopp" do
175
+ something "bvb"
176
+ end
177
+ expect_warning
178
+ recipe.zen_master "klopp" do
179
+ something "vbv"
180
+ end
181
+ end
182
+
183
+ it "should emit a 3694 warning when attributes change" do
184
+ recipe.zen_master "klopp" do
185
+ something "bvb"
186
+ end
187
+ expect_warning
188
+ recipe.zen_master "klopp" do
189
+ something "bvb"
190
+ peace true
191
+ end
192
+ end
193
+
194
+ it "should emit a 3694 warning when attributes change" do
195
+ recipe.zen_master "klopp" do
196
+ something "bvb"
197
+ peace true
198
+ end
199
+ expect_warning
200
+ recipe.zen_master "klopp" do
201
+ something "bvb"
202
+ end
203
+ end
204
+
205
+ it "should emit a 3694 warning for non-trivial attributes (unfortunately)" do
206
+ recipe.zen_master "klopp" do
207
+ something "bvb"
208
+ end
209
+ expect_warning
210
+ recipe.zen_master "klopp" do
211
+ something "bvb"
212
+ end
213
+ end
164
214
 
215
+ it "should not emit a 3694 warning for completely trivial resource cloning" do
216
+ recipe.zen_master "klopp"
217
+ expect(Chef::Log).to_not receive(:warn)
218
+ recipe.zen_master "klopp"
219
+ end
220
+
221
+ it "should not emit a 3694 warning when attributes do not change and the first action is :nothing" do
222
+ recipe.zen_master "klopp" do
223
+ action :nothing
224
+ end
225
+ expect(Chef::Log).to_not receive(:warn)
226
+ recipe.zen_master "klopp" do
227
+ action :score
228
+ end
229
+ end
230
+
231
+ it "should not emit a 3694 warning when attributes do not change and the second action is :nothing" do
232
+ recipe.zen_master "klopp" do
233
+ action :score
234
+ end
235
+ expect(Chef::Log).to_not receive(:warn)
236
+ recipe.zen_master "klopp" do
237
+ action :nothing
238
+ end
239
+ end
165
240
  end
166
241
 
167
242
  describe "creating resources via declare_resource" do
@@ -172,18 +247,18 @@ describe Chef::Recipe do
172
247
  end
173
248
 
174
249
  it "applies attributes from the block to the resource" do
175
- zm_resource.something.should == "bvb"
250
+ expect(zm_resource.something).to eq("bvb")
176
251
  end
177
252
 
178
253
  it "sets contextual attributes on the resource" do
179
- zm_resource.recipe_name.should == "test"
180
- zm_resource.cookbook_name.should == "hjk"
181
- zm_resource.source_line.should include(__FILE__)
254
+ expect(zm_resource.recipe_name).to eq("test")
255
+ expect(zm_resource.cookbook_name).to eq("hjk")
256
+ expect(zm_resource.source_line).to include(__FILE__)
182
257
  end
183
258
 
184
259
  it "adds the resource to the resource collection" do
185
260
  zm_resource # force let binding evaluation
186
- run_context.resource_collection.resources(:zen_master => "klopp").should == zm_resource
261
+ expect(run_context.resource_collection.resources(:zen_master => "klopp")).to eq(zm_resource)
187
262
  end
188
263
  end
189
264
 
@@ -202,7 +277,7 @@ describe Chef::Recipe do
202
277
 
203
278
  it "defines the resource using the declaration name with short name" do
204
279
  resource_follower
205
- run_context.resource_collection.lookup("follower[srst]").should_not be_nil
280
+ expect(run_context.resource_collection.lookup("follower[srst]")).not_to be_nil
206
281
  end
207
282
  end
208
283
 
@@ -216,25 +291,25 @@ describe Chef::Recipe do
216
291
 
217
292
  it "defines the resource using the declaration name with long name" do
218
293
  resource_zn_follower
219
- run_context.resource_collection.lookup("zen_follower[srst]").should_not be_nil
294
+ expect(run_context.resource_collection.lookup("zen_follower[srst]")).not_to be_nil
220
295
  end
221
296
  end
222
297
 
223
298
  describe "when attempting to create a resource of an invalid type" do
224
299
 
225
300
  it "gives a sane error message when using method_missing" do
226
- lambda do
301
+ expect do
227
302
  recipe.no_such_resource("foo")
228
- end.should raise_error(NoMethodError, %q[No resource or method named `no_such_resource' for `Chef::Recipe "test"'])
303
+ end.to raise_error(NoMethodError, %q[No resource or method named `no_such_resource' for `Chef::Recipe "test"'])
229
304
  end
230
305
 
231
306
  it "gives a sane error message when using method_missing 'bare'" do
232
- lambda do
307
+ expect do
233
308
  recipe.instance_eval do
234
309
  # Giving an argument will change this from NameError to NoMethodError
235
310
  no_such_resource
236
311
  end
237
- end.should raise_error(NameError, %q[No resource, method, or local variable named `no_such_resource' for `Chef::Recipe "test"'])
312
+ end.to raise_error(NameError, %q[No resource, method, or local variable named `no_such_resource' for `Chef::Recipe "test"'])
238
313
  end
239
314
 
240
315
  it "gives a sane error message when using build_resource" do
@@ -250,11 +325,11 @@ describe Chef::Recipe do
250
325
  describe "when creating a resource that contains an error in the attributes block" do
251
326
 
252
327
  it "does not obfuscate the error source" do
253
- lambda do
328
+ expect do
254
329
  recipe.zen_master("klopp") do
255
330
  this_method_doesnt_exist
256
331
  end
257
- end.should raise_error(NoMethodError, "undefined method `this_method_doesnt_exist' for Chef::Resource::ZenMaster")
332
+ end.to raise_error(NoMethodError, "undefined method `this_method_doesnt_exist' for Chef::Resource::ZenMaster")
258
333
 
259
334
  end
260
335
 
@@ -281,28 +356,28 @@ describe Chef::Recipe do
281
356
  end
282
357
 
283
358
  it "copies attributes from the first resource" do
284
- duplicated_resource.something.should == "bvb09"
359
+ expect(duplicated_resource.something).to eq("bvb09")
285
360
  end
286
361
 
287
362
  it "does not copy the action from the first resource" do
288
- original_resource.action.should == [:score]
289
- duplicated_resource.action.should == :nothing
363
+ expect(original_resource.action).to eq([:score])
364
+ expect(duplicated_resource.action).to eq(:nothing)
290
365
  end
291
366
 
292
367
  it "does not copy the source location of the first resource" do
293
368
  # sanity check source location:
294
- original_resource.source_line.should include(__FILE__)
295
- duplicated_resource.source_line.should include(__FILE__)
369
+ expect(original_resource.source_line).to include(__FILE__)
370
+ expect(duplicated_resource.source_line).to include(__FILE__)
296
371
  # actual test:
297
- original_resource.source_line.should_not == duplicated_resource.source_line
372
+ expect(original_resource.source_line).not_to eq(duplicated_resource.source_line)
298
373
  end
299
374
 
300
375
  it "sets the cookbook name on the cloned resource to that resource's cookbook" do
301
- duplicated_resource.cookbook_name.should == "second_cb"
376
+ expect(duplicated_resource.cookbook_name).to eq("second_cb")
302
377
  end
303
378
 
304
379
  it "sets the recipe name on the cloned resource to that resoure's recipe" do
305
- duplicated_resource.recipe_name.should == "second_recipe"
380
+ expect(duplicated_resource.recipe_name).to eq("second_recipe")
306
381
  end
307
382
 
308
383
  end
@@ -320,8 +395,8 @@ describe Chef::Recipe do
320
395
  recipe.crow "mine" do
321
396
  peace true
322
397
  end
323
- run_context.resource_collection.resources(:zen_master => "lao tzu").name.should eql("lao tzu")
324
- run_context.resource_collection.resources(:zen_master => "lao tzu").something.should eql(true)
398
+ expect(run_context.resource_collection.resources(:zen_master => "lao tzu").name).to eql("lao tzu")
399
+ expect(run_context.resource_collection.resources(:zen_master => "lao tzu").something).to eql(true)
325
400
  end
326
401
 
327
402
  it "should set the node on defined resources" do
@@ -337,7 +412,7 @@ describe Chef::Recipe do
337
412
  recipe.crow "mine" do
338
413
  something node[:foo]
339
414
  end
340
- recipe.resources(:zen_master => "lao tzu").something.should eql(false)
415
+ expect(recipe.resources(:zen_master => "lao tzu").something).to eql(false)
341
416
  end
342
417
 
343
418
  it "should return the last statement in the definition as the retval" do
@@ -346,9 +421,10 @@ describe Chef::Recipe do
346
421
  "the return val"
347
422
  end
348
423
  run_context.definitions[:crow] = crow_define
349
- recipe.crow "mine" do
424
+ crow_block = recipe.crow "mine" do
350
425
  peace true
351
- end.should eql("the return val")
426
+ end
427
+ expect(crow_block).to eql("the return val")
352
428
  end
353
429
  end
354
430
 
@@ -361,8 +437,8 @@ describe Chef::Recipe do
361
437
  peace = true
362
438
  end
363
439
  CODE
364
- lambda { recipe.instance_eval(code) }.should_not raise_error
365
- recipe.resources(:zen_master => "gnome").name.should eql("gnome")
440
+ expect { recipe.instance_eval(code) }.not_to raise_error
441
+ expect(recipe.resources(:zen_master => "gnome").name).to eql("gnome")
366
442
  end
367
443
  end
368
444
 
@@ -371,7 +447,7 @@ describe Chef::Recipe do
371
447
  code = <<-CODE
372
448
  exec 'do_not_try_to_exec'
373
449
  CODE
374
- lambda { recipe.instance_eval(code) }.should raise_error(Chef::Exceptions::ResourceNotFound)
450
+ expect { recipe.instance_eval(code) }.to raise_error(Chef::Exceptions::ResourceNotFound)
375
451
  end
376
452
  end
377
453
 
@@ -379,52 +455,80 @@ describe Chef::Recipe do
379
455
  it "should load a resource from a ruby file" do
380
456
  recipe.from_file(File.join(CHEF_SPEC_DATA, "recipes", "test.rb"))
381
457
  res = recipe.resources(:file => "/etc/nsswitch.conf")
382
- res.name.should eql("/etc/nsswitch.conf")
383
- res.action.should eql([:create])
384
- res.owner.should eql("root")
385
- res.group.should eql("root")
386
- res.mode.should eql(0644)
458
+ expect(res.name).to eql("/etc/nsswitch.conf")
459
+ expect(res.action).to eql([:create])
460
+ expect(res.owner).to eql("root")
461
+ expect(res.group).to eql("root")
462
+ expect(res.mode).to eql(0644)
387
463
  end
388
464
 
389
465
  it "should raise an exception if the file cannot be found or read" do
390
- lambda { recipe.from_file("/tmp/monkeydiving") }.should raise_error(IOError)
466
+ expect { recipe.from_file("/tmp/monkeydiving") }.to raise_error(IOError)
391
467
  end
392
468
  end
393
469
 
394
470
  describe "include_recipe" do
395
471
  it "should evaluate another recipe with include_recipe" do
396
- node.should_receive(:loaded_recipe).with(:openldap, "gigantor")
397
- run_context.stub(:unreachable_cookbook?).with(:openldap).and_return(false)
472
+ expect(node).to receive(:loaded_recipe).with(:openldap, "gigantor")
473
+ allow(run_context).to receive(:unreachable_cookbook?).with(:openldap).and_return(false)
398
474
  run_context.include_recipe "openldap::gigantor"
399
475
  res = run_context.resource_collection.resources(:cat => "blanket")
400
- res.name.should eql("blanket")
401
- res.pretty_kitty.should eql(false)
476
+ expect(res.name).to eql("blanket")
477
+ expect(res.pretty_kitty).to eql(false)
402
478
  end
403
479
 
404
480
  it "should load the default recipe for a cookbook if include_recipe is called without a ::" do
405
- node.should_receive(:loaded_recipe).with(:openldap, "default")
406
- run_context.stub(:unreachable_cookbook?).with(:openldap).and_return(false)
481
+ expect(node).to receive(:loaded_recipe).with(:openldap, "default")
482
+ allow(run_context).to receive(:unreachable_cookbook?).with(:openldap).and_return(false)
407
483
  run_context.include_recipe "openldap"
408
484
  res = run_context.resource_collection.resources(:cat => "blanket")
409
- res.name.should eql("blanket")
410
- res.pretty_kitty.should eql(true)
485
+ expect(res.name).to eql("blanket")
486
+ expect(res.pretty_kitty).to eql(true)
411
487
  end
412
488
 
413
489
  it "should store that it has seen a recipe in the run_context" do
414
- node.should_receive(:loaded_recipe).with(:openldap, "default")
415
- run_context.stub(:unreachable_cookbook?).with(:openldap).and_return(false)
490
+ expect(node).to receive(:loaded_recipe).with(:openldap, "default")
491
+ allow(run_context).to receive(:unreachable_cookbook?).with(:openldap).and_return(false)
416
492
  run_context.include_recipe "openldap"
417
- run_context.loaded_recipe?("openldap").should be_true
493
+ expect(run_context.loaded_recipe?("openldap")).to be_truthy
418
494
  end
419
495
 
420
496
  it "should not include the same recipe twice" do
421
- node.should_receive(:loaded_recipe).with(:openldap, "default").exactly(:once)
422
- run_context.stub(:unreachable_cookbook?).with(:openldap).and_return(false)
423
- cookbook_collection[:openldap].should_receive(:load_recipe).with("default", run_context)
497
+ expect(node).to receive(:loaded_recipe).with(:openldap, "default").exactly(:once)
498
+ allow(run_context).to receive(:unreachable_cookbook?).with(:openldap).and_return(false)
499
+ expect(cookbook_collection[:openldap]).to receive(:load_recipe).with("default", run_context)
424
500
  recipe.include_recipe "openldap"
425
- cookbook_collection[:openldap].should_not_receive(:load_recipe).with("default", run_context)
501
+ expect(cookbook_collection[:openldap]).not_to receive(:load_recipe).with("default", run_context)
426
502
  recipe.include_recipe "openldap"
427
503
  end
504
+
505
+ it "will load a recipe out of the current cookbook when include_recipe is called with a leading ::" do
506
+ openldap_recipe = Chef::Recipe.new("openldap", "test", run_context)
507
+ expect(node).to receive(:loaded_recipe).with(:openldap, "default").exactly(:once)
508
+ allow(run_context).to receive(:unreachable_cookbook?).with(:openldap).and_return(false)
509
+ expect(cookbook_collection[:openldap]).to receive(:load_recipe).with("default", run_context)
510
+ openldap_recipe.include_recipe "::default"
511
+ end
512
+
513
+ it "will not include the same recipe twice when using leading :: syntax" do
514
+ openldap_recipe = Chef::Recipe.new("openldap", "test", run_context)
515
+ expect(node).to receive(:loaded_recipe).with(:openldap, "default").exactly(:once)
516
+ allow(run_context).to receive(:unreachable_cookbook?).with(:openldap).and_return(false)
517
+ expect(cookbook_collection[:openldap]).to receive(:load_recipe).with("default", run_context)
518
+ openldap_recipe.include_recipe "::default"
519
+ expect(cookbook_collection[:openldap]).not_to receive(:load_recipe).with("default", run_context)
520
+ openldap_recipe.include_recipe "openldap::default"
521
+ end
522
+
523
+ it "will not include the same recipe twice when using leading :: syntax (reversed order)" do
524
+ openldap_recipe = Chef::Recipe.new("openldap", "test", run_context)
525
+ expect(node).to receive(:loaded_recipe).with(:openldap, "default").exactly(:once)
526
+ allow(run_context).to receive(:unreachable_cookbook?).with(:openldap).and_return(false)
527
+ expect(cookbook_collection[:openldap]).to receive(:load_recipe).with("default", run_context)
528
+ openldap_recipe.include_recipe "openldap::default"
529
+ expect(cookbook_collection[:openldap]).not_to receive(:load_recipe).with("default", run_context)
530
+ openldap_recipe.include_recipe "::default"
531
+ end
428
532
  end
429
533
 
430
534
  describe "tags" do
@@ -432,55 +536,62 @@ describe Chef::Recipe do
432
536
  let(:node) { Chef::Node.new }
433
537
 
434
538
  it "should return false for any tags" do
435
- recipe.tagged?("foo").should be(false)
539
+ expect(recipe.tagged?("foo")).to be(false)
436
540
  end
437
541
  end
438
542
 
439
543
  it "should set tags via tag" do
440
544
  recipe.tag "foo"
441
- node[:tags].should include("foo")
545
+ expect(node[:tags]).to include("foo")
442
546
  end
443
547
 
444
548
  it "should set multiple tags via tag" do
445
549
  recipe.tag "foo", "bar"
446
- node[:tags].should include("foo")
447
- node[:tags].should include("bar")
550
+ expect(node[:tags]).to include("foo")
551
+ expect(node[:tags]).to include("bar")
448
552
  end
449
553
 
450
554
  it "should not set the same tag twice via tag" do
451
555
  recipe.tag "foo"
452
556
  recipe.tag "foo"
453
- node[:tags].should eql([ "foo" ])
557
+ expect(node[:tags]).to eql([ "foo" ])
454
558
  end
455
559
 
456
560
  it "should return the current list of tags from tag with no arguments" do
457
561
  recipe.tag "foo"
458
- recipe.tag.should eql([ "foo" ])
562
+ expect(recipe.tag).to eql([ "foo" ])
459
563
  end
460
564
 
461
565
  it "should return true from tagged? if node is tagged" do
462
566
  recipe.tag "foo"
463
- recipe.tagged?("foo").should be(true)
567
+ expect(recipe.tagged?("foo")).to be(true)
464
568
  end
465
569
 
466
570
  it "should return false from tagged? if node is not tagged" do
467
- recipe.tagged?("foo").should be(false)
571
+ expect(recipe.tagged?("foo")).to be(false)
468
572
  end
469
573
 
470
574
  it "should return false from tagged? if node is not tagged" do
471
- recipe.tagged?("foo").should be(false)
575
+ expect(recipe.tagged?("foo")).to be(false)
472
576
  end
473
577
 
474
578
  it "should remove a tag from the tag list via untag" do
475
579
  recipe.tag "foo"
476
580
  recipe.untag "foo"
477
- node[:tags].should eql([])
581
+ expect(node[:tags]).to eql([])
478
582
  end
479
583
 
480
584
  it "should remove multiple tags from the tag list via untag" do
481
585
  recipe.tag "foo", "bar"
482
586
  recipe.untag "bar", "foo"
483
- node[:tags].should eql([])
587
+ expect(node[:tags]).to eql([])
588
+ end
589
+ end
590
+
591
+ describe "included DSL" do
592
+ it "should include features from Chef::DSL::Audit" do
593
+ expect(recipe.singleton_class.included_modules).to include(Chef::DSL::Audit)
594
+ expect(recipe.respond_to?(:control_group)).to be true
484
595
  end
485
596
  end
486
597
  end