chef 12.0.3 → 12.1.0.rc.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (655) 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 -53
  643. data/bin/chef-service-manager +0 -37
  644. data/bin/chef-windows-service +0 -35
  645. data/bin/shef +0 -35
  646. data/lib/chef/application/agent.rb +0 -18
  647. data/lib/chef/monkey_patches/fileutils.rb +0 -65
  648. data/lib/chef/monkey_patches/numeric.rb +0 -15
  649. data/lib/chef/monkey_patches/object.rb +0 -9
  650. data/lib/chef/monkey_patches/pathname.rb +0 -32
  651. data/lib/chef/monkey_patches/regexp.rb +0 -34
  652. data/lib/chef/monkey_patches/securerandom.rb +0 -44
  653. data/lib/chef/monkey_patches/string.rb +0 -49
  654. data/lib/chef/monkey_patches/tempfile.rb +0 -64
  655. data/lib/chef/monkey_patches/uri.rb +0 -70
@@ -62,18 +62,18 @@ describe Chef::REST::AuthCredentials do
62
62
  end
63
63
 
64
64
  it "has a client name" do
65
- @auth_credentials.client_name.should == "client-name"
65
+ expect(@auth_credentials.client_name).to eq("client-name")
66
66
  end
67
67
 
68
68
  it "loads the private key when initialized with the path to the key" do
69
- @auth_credentials.key.should respond_to(:private_encrypt)
70
- @auth_credentials.key.to_s.should == KEY_DOT_PEM
69
+ expect(@auth_credentials.key).to respond_to(:private_encrypt)
70
+ expect(@auth_credentials.key.to_s).to eq(KEY_DOT_PEM)
71
71
  end
72
72
 
73
73
  describe "when loading the private key" do
74
74
  it "strips extra whitespace before checking the key" do
75
75
  key_file_fixture = CHEF_SPEC_DATA + '/ssl/private_key_with_whitespace.pem'
76
- lambda {Chef::REST::AuthCredentials.new("client-name", @key_file_fixture)}.should_not raise_error
76
+ expect {Chef::REST::AuthCredentials.new("client-name", @key_file_fixture)}.not_to raise_error
77
77
  end
78
78
  end
79
79
 
@@ -84,19 +84,19 @@ describe Chef::REST::AuthCredentials do
84
84
  end
85
85
 
86
86
  it "generates signature headers for the request" do
87
- Time.stub(:now).and_return(@request_time)
87
+ allow(Time).to receive(:now).and_return(@request_time)
88
88
  actual = @auth_credentials.signature_headers(@request_params)
89
- actual["HOST"].should == "localhost"
90
- actual["X-OPS-AUTHORIZATION-1"].should == "kBssX1ENEwKtNYFrHElN9vYGWS7OeowepN9EsYc9csWfh8oUovryPKDxytQ/"
91
- actual["X-OPS-AUTHORIZATION-2"].should == "Wc2/nSSyxdWJjjfHzrE+YrqNQTaArOA7JkAf5p75eTUonCWcvNPjFrZVgKGS"
92
- actual["X-OPS-AUTHORIZATION-3"].should == "yhzHJQh+lcVA9wwARg5Hu9q+ddS8xBOdm3Vp5atl5NGHiP0loiigMYvAvzPO"
93
- actual["X-OPS-AUTHORIZATION-4"].should == "r9853eIxwYMhn5hLGhAGFQznJbE8+7F/lLU5Zmk2t2MlPY8q3o1Q61YD8QiJ"
94
- actual["X-OPS-AUTHORIZATION-5"].should == "M8lIt53ckMyUmSU0DDURoiXLVkE9mag/6Yq2tPNzWq2AdFvBqku9h2w+DY5k"
95
- actual["X-OPS-AUTHORIZATION-6"].should == "qA5Rnzw5rPpp3nrWA9jKkPw4Wq3+4ufO2Xs6w7GCjA=="
96
- actual["X-OPS-CONTENT-HASH"].should == "1tuzs5XKztM1ANrkGNPah6rW9GY="
97
- actual["X-OPS-SIGN"].should =~ %r{(version=1\.0)|(algorithm=sha1;version=1.0;)}
98
- actual["X-OPS-TIMESTAMP"].should == "2010-04-10T17:34:20Z"
99
- actual["X-OPS-USERID"].should == "client-name"
89
+ expect(actual["HOST"]).to eq("localhost")
90
+ expect(actual["X-OPS-AUTHORIZATION-1"]).to eq("kBssX1ENEwKtNYFrHElN9vYGWS7OeowepN9EsYc9csWfh8oUovryPKDxytQ/")
91
+ expect(actual["X-OPS-AUTHORIZATION-2"]).to eq("Wc2/nSSyxdWJjjfHzrE+YrqNQTaArOA7JkAf5p75eTUonCWcvNPjFrZVgKGS")
92
+ expect(actual["X-OPS-AUTHORIZATION-3"]).to eq("yhzHJQh+lcVA9wwARg5Hu9q+ddS8xBOdm3Vp5atl5NGHiP0loiigMYvAvzPO")
93
+ expect(actual["X-OPS-AUTHORIZATION-4"]).to eq("r9853eIxwYMhn5hLGhAGFQznJbE8+7F/lLU5Zmk2t2MlPY8q3o1Q61YD8QiJ")
94
+ expect(actual["X-OPS-AUTHORIZATION-5"]).to eq("M8lIt53ckMyUmSU0DDURoiXLVkE9mag/6Yq2tPNzWq2AdFvBqku9h2w+DY5k")
95
+ expect(actual["X-OPS-AUTHORIZATION-6"]).to eq("qA5Rnzw5rPpp3nrWA9jKkPw4Wq3+4ufO2Xs6w7GCjA==")
96
+ expect(actual["X-OPS-CONTENT-HASH"]).to eq("1tuzs5XKztM1ANrkGNPah6rW9GY=")
97
+ expect(actual["X-OPS-SIGN"]).to match(%r{(version=1\.0)|(algorithm=sha1;version=1.0;)})
98
+ expect(actual["X-OPS-TIMESTAMP"]).to eq("2010-04-10T17:34:20Z")
99
+ expect(actual["X-OPS-USERID"]).to eq("client-name")
100
100
 
101
101
  end
102
102
 
@@ -110,13 +110,13 @@ describe Chef::REST::AuthCredentials do
110
110
  end
111
111
 
112
112
  it "generates the correct signature for version 1.1" do
113
- Time.stub(:now).and_return(@request_time)
113
+ allow(Time).to receive(:now).and_return(@request_time)
114
114
  actual = @auth_credentials.signature_headers(@request_params)
115
- actual["HOST"].should == "localhost"
116
- actual["X-OPS-CONTENT-HASH"].should == "1tuzs5XKztM1ANrkGNPah6rW9GY="
117
- actual["X-OPS-SIGN"].should == "algorithm=sha1;version=1.1;"
118
- actual["X-OPS-TIMESTAMP"].should == "2010-04-10T17:34:20Z"
119
- actual["X-OPS-USERID"].should == "client-name"
115
+ expect(actual["HOST"]).to eq("localhost")
116
+ expect(actual["X-OPS-CONTENT-HASH"]).to eq("1tuzs5XKztM1ANrkGNPah6rW9GY=")
117
+ expect(actual["X-OPS-SIGN"]).to eq("algorithm=sha1;version=1.1;")
118
+ expect(actual["X-OPS-TIMESTAMP"]).to eq("2010-04-10T17:34:20Z")
119
+ expect(actual["X-OPS-USERID"]).to eq("client-name")
120
120
 
121
121
  # mixlib-authN will test the actual signature stuff for each version of
122
122
  # the protocol so we won't test it again here.
@@ -143,63 +143,63 @@ describe Chef::REST::RESTRequest do
143
143
  end
144
144
 
145
145
  it "stores the url it was created with" do
146
- @request.url.should == @url
146
+ expect(@request.url).to eq(@url)
147
147
  end
148
148
 
149
149
  it "stores the HTTP method" do
150
- @request.method.should == :POST
150
+ expect(@request.method).to eq(:POST)
151
151
  end
152
152
 
153
153
  it "adds the chef version header" do
154
- @request.headers.should == @headers.merge("X-Chef-Version" => ::Chef::VERSION)
154
+ expect(@request.headers).to eq(@headers.merge("X-Chef-Version" => ::Chef::VERSION))
155
155
  end
156
156
 
157
157
  describe "configuring the HTTP request" do
158
158
  it "configures GET requests" do
159
159
  @req_body = nil
160
160
  rest_req = new_request(:GET)
161
- rest_req.http_request.should be_a_kind_of(Net::HTTP::Get)
162
- rest_req.http_request.path.should == "/?q=chef_is_awesome"
163
- rest_req.http_request.body.should be_nil
161
+ expect(rest_req.http_request).to be_a_kind_of(Net::HTTP::Get)
162
+ expect(rest_req.http_request.path).to eq("/?q=chef_is_awesome")
163
+ expect(rest_req.http_request.body).to be_nil
164
164
  end
165
165
 
166
166
  it "configures POST requests, including the body" do
167
- @request.http_request.should be_a_kind_of(Net::HTTP::Post)
168
- @request.http_request.path.should == "/?q=chef_is_awesome"
169
- @request.http_request.body.should == @req_body
167
+ expect(@request.http_request).to be_a_kind_of(Net::HTTP::Post)
168
+ expect(@request.http_request.path).to eq("/?q=chef_is_awesome")
169
+ expect(@request.http_request.body).to eq(@req_body)
170
170
  end
171
171
 
172
172
  it "configures PUT requests, including the body" do
173
173
  rest_req = new_request(:PUT)
174
- rest_req.http_request.should be_a_kind_of(Net::HTTP::Put)
175
- rest_req.http_request.path.should == "/?q=chef_is_awesome"
176
- rest_req.http_request.body.should == @req_body
174
+ expect(rest_req.http_request).to be_a_kind_of(Net::HTTP::Put)
175
+ expect(rest_req.http_request.path).to eq("/?q=chef_is_awesome")
176
+ expect(rest_req.http_request.body).to eq(@req_body)
177
177
  end
178
178
 
179
179
  it "configures DELETE requests" do
180
180
  rest_req = new_request(:DELETE)
181
- rest_req.http_request.should be_a_kind_of(Net::HTTP::Delete)
182
- rest_req.http_request.path.should == "/?q=chef_is_awesome"
183
- rest_req.http_request.body.should be_nil
181
+ expect(rest_req.http_request).to be_a_kind_of(Net::HTTP::Delete)
182
+ expect(rest_req.http_request.path).to eq("/?q=chef_is_awesome")
183
+ expect(rest_req.http_request.body).to be_nil
184
184
  end
185
185
 
186
186
  it "configures HTTP basic auth" do
187
187
  @url = URI.parse("http://homie:theclown@chef.example.com:4000/?q=chef_is_awesome")
188
188
  rest_req = new_request(:GET)
189
- rest_req.http_request.to_hash["authorization"].should == ["Basic aG9taWU6dGhlY2xvd24="]
189
+ expect(rest_req.http_request.to_hash["authorization"]).to eq(["Basic aG9taWU6dGhlY2xvd24="])
190
190
  end
191
191
  end
192
192
 
193
193
  describe "configuring the HTTP client" do
194
194
  it "configures the HTTP client for the host and port" do
195
195
  http_client = new_request.http_client
196
- http_client.address.should == "chef.example.com"
197
- http_client.port.should == 4000
196
+ expect(http_client.address).to eq("chef.example.com")
197
+ expect(http_client.port).to eq(4000)
198
198
  end
199
199
 
200
200
  it "configures the HTTP client with the read timeout set in the config file" do
201
201
  Chef::Config[:rest_timeout] = 9001
202
- new_request.http_client.read_timeout.should == 9001
202
+ expect(new_request.http_client.read_timeout).to eq(9001)
203
203
  end
204
204
 
205
205
  describe "for proxy" do
@@ -226,21 +226,21 @@ describe Chef::REST::RESTRequest do
226
226
  describe "with :no_proxy nil" do
227
227
  it "configures the proxy address and port when using http scheme" do
228
228
  http_client = new_request.http_client
229
- http_client.proxy?.should == true
230
- http_client.proxy_address.should == "proxy.example.com"
231
- http_client.proxy_port.should == 3128
232
- http_client.proxy_user.should be_nil
233
- http_client.proxy_pass.should be_nil
229
+ expect(http_client.proxy?).to eq(true)
230
+ expect(http_client.proxy_address).to eq("proxy.example.com")
231
+ expect(http_client.proxy_port).to eq(3128)
232
+ expect(http_client.proxy_user).to be_nil
233
+ expect(http_client.proxy_pass).to be_nil
234
234
  end
235
235
 
236
236
  it "configures the proxy address and port when using https scheme" do
237
237
  @url.scheme = "https"
238
238
  http_client = new_request.http_client
239
- http_client.proxy?.should == true
240
- http_client.proxy_address.should == "sproxy.example.com"
241
- http_client.proxy_port.should == 3129
242
- http_client.proxy_user.should be_nil
243
- http_client.proxy_pass.should be_nil
239
+ expect(http_client.proxy?).to eq(true)
240
+ expect(http_client.proxy_address).to eq("sproxy.example.com")
241
+ expect(http_client.proxy_port).to eq(3129)
242
+ expect(http_client.proxy_user).to be_nil
243
+ expect(http_client.proxy_pass).to be_nil
244
244
  end
245
245
  end
246
246
 
@@ -251,21 +251,21 @@ describe Chef::REST::RESTRequest do
251
251
 
252
252
  it "does not configure the proxy address and port when using http scheme" do
253
253
  http_client = new_request.http_client
254
- http_client.proxy?.should == false
255
- http_client.proxy_address.should be_nil
256
- http_client.proxy_port.should be_nil
257
- http_client.proxy_user.should be_nil
258
- http_client.proxy_pass.should be_nil
254
+ expect(http_client.proxy?).to eq(false)
255
+ expect(http_client.proxy_address).to be_nil
256
+ expect(http_client.proxy_port).to be_nil
257
+ expect(http_client.proxy_user).to be_nil
258
+ expect(http_client.proxy_pass).to be_nil
259
259
  end
260
260
 
261
261
  it "does not configure the proxy address and port when using https scheme" do
262
262
  @url.scheme = "https"
263
263
  http_client = new_request.http_client
264
- http_client.proxy?.should == false
265
- http_client.proxy_address.should be_nil
266
- http_client.proxy_port.should be_nil
267
- http_client.proxy_user.should be_nil
268
- http_client.proxy_pass.should be_nil
264
+ expect(http_client.proxy?).to eq(false)
265
+ expect(http_client.proxy_address).to be_nil
266
+ expect(http_client.proxy_port).to be_nil
267
+ expect(http_client.proxy_user).to be_nil
268
+ expect(http_client.proxy_pass).to be_nil
269
269
  end
270
270
  end
271
271
 
@@ -282,17 +282,17 @@ describe Chef::REST::RESTRequest do
282
282
 
283
283
  it "configures the proxy user and pass when using http scheme" do
284
284
  http_client = new_request.http_client
285
- http_client.proxy?.should == true
286
- http_client.proxy_user.should == "homie"
287
- http_client.proxy_pass.should == "theclown"
285
+ expect(http_client.proxy?).to eq(true)
286
+ expect(http_client.proxy_user).to eq("homie")
287
+ expect(http_client.proxy_pass).to eq("theclown")
288
288
  end
289
289
 
290
290
  it "does not configure the proxy user and pass when using https scheme" do
291
291
  @url.scheme = "https"
292
292
  http_client = new_request.http_client
293
- http_client.proxy?.should == true
294
- http_client.proxy_user.should be_nil
295
- http_client.proxy_pass.should be_nil
293
+ expect(http_client.proxy?).to eq(true)
294
+ expect(http_client.proxy_user).to be_nil
295
+ expect(http_client.proxy_pass).to be_nil
296
296
  end
297
297
  end
298
298
 
@@ -309,17 +309,17 @@ describe Chef::REST::RESTRequest do
309
309
 
310
310
  it "does not configure the proxy user and pass when using http scheme" do
311
311
  http_client = new_request.http_client
312
- http_client.proxy?.should == true
313
- http_client.proxy_user.should be_nil
314
- http_client.proxy_pass.should be_nil
312
+ expect(http_client.proxy?).to eq(true)
313
+ expect(http_client.proxy_user).to be_nil
314
+ expect(http_client.proxy_pass).to be_nil
315
315
  end
316
316
 
317
317
  it "configures the proxy user and pass when using https scheme" do
318
318
  @url.scheme = "https"
319
319
  http_client = new_request.http_client
320
- http_client.proxy?.should == true
321
- http_client.proxy_user.should == "homie"
322
- http_client.proxy_pass.should == "theclown"
320
+ expect(http_client.proxy?).to eq(true)
321
+ expect(http_client.proxy_user).to eq("homie")
322
+ expect(http_client.proxy_pass).to eq("theclown")
323
323
  end
324
324
  end
325
325
  end
@@ -83,7 +83,7 @@ describe Chef::REST do
83
83
 
84
84
  expect(content_length).not_to be_nil
85
85
  expect(decompressor).not_to be_nil
86
- expect(decompressor < content_length).to be_true
86
+ expect(decompressor < content_length).to be_truthy
87
87
  end
88
88
 
89
89
  it "should allow the options hash to be frozen" do
@@ -214,7 +214,7 @@ describe Chef::REST do
214
214
 
215
215
  it "indicates that requests should not be signed when it has no credentials" do
216
216
  rest = Chef::REST.new(base_url, nil, nil)
217
- expect(rest.sign_requests?).to be_false
217
+ expect(rest.sign_requests?).to be_falsey
218
218
  end
219
219
 
220
220
  it "raises PrivateKeyMissing when the key file doesn't exist" do
@@ -462,7 +462,7 @@ describe Chef::REST do
462
462
  end
463
463
 
464
464
  it "should return `false`" do
465
- expect(rest.request(:GET, url)).to be_false
465
+ expect(rest.request(:GET, url)).to be_falsey
466
466
  end
467
467
  end
468
468
 
@@ -616,10 +616,10 @@ describe Chef::REST do
616
616
  tempfile_path = nil
617
617
  rest.streaming_request(url, {}) do |tempfile|
618
618
  tempfile_path = tempfile.path
619
- expect(File.exist?(tempfile.path)).to be_true
619
+ expect(File.exist?(tempfile.path)).to be_truthy
620
620
  expect(IO.read(tempfile.path).chomp).to eq("realultimatepower")
621
621
  end
622
- expect(File.exist?(tempfile_path)).to be_false
622
+ expect(File.exist?(tempfile_path)).to be_falsey
623
623
  end
624
624
 
625
625
  it "does not raise a divide by zero exception if the content's actual size is 0" do
@@ -648,7 +648,7 @@ describe Chef::REST do
648
648
  tempfile_path = tempfile.path
649
649
  expect(IO.read(tempfile.path).chomp).to eq("realultimatepower")
650
650
  end
651
- expect(File.exist?(tempfile_path)).to be_false
651
+ expect(File.exist?(tempfile_path)).to be_falsey
652
652
  end
653
653
 
654
654
  it "closes and unlinks the tempfile if there is an error while streaming the content to the tempfile" do
@@ -656,7 +656,7 @@ describe Chef::REST do
656
656
  expect(path).not_to be_nil
657
657
  allow(tempfile).to receive(:write).and_raise(IOError)
658
658
  rest.fetch("cookbooks/a_cookbook") {|tmpfile| "shouldn't get here"}
659
- expect(File.exists?(path)).to be_false
659
+ expect(File.exists?(path)).to be_falsey
660
660
  end
661
661
 
662
662
  it "closes and unlinks the tempfile when the response is a redirect" do
@@ -683,7 +683,7 @@ describe Chef::REST do
683
683
  rest.fetch("cookbooks/a_cookbook") do |tmpfile|
684
684
  block_called = true
685
685
  end
686
- expect(block_called).to be_true
686
+ expect(block_called).to be_truthy
687
687
  end
688
688
  end
689
689
  end
@@ -718,15 +718,15 @@ describe Chef::REST do
718
718
 
719
719
  it "does not sign the redirected request when sign_on_redirect is false" do
720
720
  rest.sign_on_redirect = false
721
- rest.follow_redirect { expect(rest.sign_requests?).to be_false }
721
+ rest.follow_redirect { expect(rest.sign_requests?).to be_falsey }
722
722
  end
723
723
 
724
724
  it "resets sign_requests to the original value after following an unsigned redirect" do
725
725
  rest.sign_on_redirect = false
726
- expect(rest.sign_requests?).to be_true
726
+ expect(rest.sign_requests?).to be_truthy
727
727
 
728
- rest.follow_redirect { expect(rest.sign_requests?).to be_false }
729
- expect(rest.sign_requests?).to be_true
728
+ rest.follow_redirect { expect(rest.sign_requests?).to be_falsey }
729
+ expect(rest.sign_requests?).to be_truthy
730
730
  end
731
731
 
732
732
  it "configures the redirect limit" do
@@ -21,21 +21,21 @@ require 'chef/role'
21
21
 
22
22
  describe Chef::Role do
23
23
  before(:each) do
24
- Chef::Platform.stub(:windows?) { false }
24
+ allow(Chef::Platform).to receive(:windows?) { false }
25
25
  @role = Chef::Role.new
26
26
  @role.name("ops_master")
27
27
  end
28
28
 
29
29
  it "has a name" do
30
- @role.name("ops_master").should == "ops_master"
30
+ expect(@role.name("ops_master")).to eq("ops_master")
31
31
  end
32
32
 
33
33
  it "does not accept a name with spaces" do
34
- lambda { @role.name "ops master" }.should raise_error(ArgumentError)
34
+ expect { @role.name "ops master" }.to raise_error(ArgumentError)
35
35
  end
36
36
 
37
37
  it "does not accept non-String objects for the name" do
38
- lambda { @role.name({}) }.should raise_error(ArgumentError)
38
+ expect { @role.name({}) }.to raise_error(ArgumentError)
39
39
  end
40
40
 
41
41
  describe "when a run list is set" do
@@ -46,7 +46,7 @@ describe Chef::Role do
46
46
 
47
47
 
48
48
  it "returns the run list" do
49
- @role.run_list.should == %w{ nginx recipe[ree] role[base]}
49
+ expect(@role.run_list).to eq(%w{ nginx recipe[ree] role[base]})
50
50
  end
51
51
 
52
52
  describe "and per-environment run lists are set" do
@@ -58,28 +58,28 @@ describe Chef::Role do
58
58
  end
59
59
 
60
60
  it "uses the default run list as *the* run_list" do
61
- @role.run_list.should == Chef::RunList.new("recipe[nagios::client]", "recipe[tims-acl::bork]")
61
+ expect(@role.run_list).to eq(Chef::RunList.new("recipe[nagios::client]", "recipe[tims-acl::bork]"))
62
62
  end
63
63
 
64
64
  it "gives the default run list as the when getting the _default run list" do
65
- @role.run_list_for("_default").should == @role.run_list
65
+ expect(@role.run_list_for("_default")).to eq(@role.run_list)
66
66
  end
67
67
 
68
68
  it "gives an environment specific run list" do
69
- @role.run_list_for("prod").should == Chef::RunList.new("recipe[nagios::client]", "recipe[tims-acl::bork]", "recipe[prod-base]")
69
+ expect(@role.run_list_for("prod")).to eq(Chef::RunList.new("recipe[nagios::client]", "recipe[tims-acl::bork]", "recipe[prod-base]"))
70
70
  end
71
71
 
72
72
  it "gives the default run list when no run list exists for the given environment" do
73
- @role.run_list_for("qa").should == @role.run_list
73
+ expect(@role.run_list_for("qa")).to eq(@role.run_list)
74
74
  end
75
75
 
76
76
  it "gives the environment specific run list even if it is empty" do
77
- @role.run_list_for("dev").should == Chef::RunList.new
77
+ expect(@role.run_list_for("dev")).to eq(Chef::RunList.new)
78
78
  end
79
79
 
80
80
  it "env_run_lists can only be set with _default run list in it" do
81
81
  long_exception_name = Chef::Exceptions::InvalidEnvironmentRunListSpecification
82
- lambda {@role.env_run_lists({})}.should raise_error(long_exception_name)
82
+ expect {@role.env_run_lists({})}.to raise_error(long_exception_name)
83
83
  end
84
84
 
85
85
  end
@@ -87,17 +87,17 @@ describe Chef::Role do
87
87
 
88
88
  describe "using the old #recipes API" do
89
89
  it "should let you set the recipe array" do
90
- @role.recipes([ "one", "two" ]).should == [ "one", "two" ]
90
+ expect(@role.recipes([ "one", "two" ])).to eq([ "one", "two" ])
91
91
  end
92
92
 
93
93
  it "should let you return the recipe array" do
94
94
  @role.recipes([ "one", "two" ])
95
- @role.recipes.should == [ "one", "two" ]
95
+ expect(@role.recipes).to eq([ "one", "two" ])
96
96
  end
97
97
 
98
98
  it "should not list roles in the recipe array" do
99
99
  @role.run_list([ "one", "role[two]"])
100
- @role.recipes.should == [ "recipe[one]", "role[two]" ]
100
+ expect(@role.recipes).to eq([ "recipe[one]", "role[two]" ])
101
101
  end
102
102
 
103
103
  end
@@ -108,31 +108,31 @@ describe Chef::Role do
108
108
 
109
109
  describe "default_attributes" do
110
110
  it "should let you set the default attributes hash explicitly" do
111
- @role.default_attributes({ :one => 'two' }).should == { :one => 'two' }
111
+ expect(@role.default_attributes({ :one => 'two' })).to eq({ :one => 'two' })
112
112
  end
113
113
 
114
114
  it "should let you return the default attributes hash" do
115
115
  @role.default_attributes({ :one => 'two' })
116
- @role.default_attributes.should == { :one => 'two' }
116
+ expect(@role.default_attributes).to eq({ :one => 'two' })
117
117
  end
118
118
 
119
119
  it "should throw an ArgumentError if we aren't a kind of hash" do
120
- lambda { @role.default_attributes(Array.new) }.should raise_error(ArgumentError)
120
+ expect { @role.default_attributes(Array.new) }.to raise_error(ArgumentError)
121
121
  end
122
122
  end
123
123
 
124
124
  describe "override_attributes" do
125
125
  it "should let you set the override attributes hash explicitly" do
126
- @role.override_attributes({ :one => 'two' }).should == { :one => 'two' }
126
+ expect(@role.override_attributes({ :one => 'two' })).to eq({ :one => 'two' })
127
127
  end
128
128
 
129
129
  it "should let you return the override attributes hash" do
130
130
  @role.override_attributes({ :one => 'two' })
131
- @role.override_attributes.should == { :one => 'two' }
131
+ expect(@role.override_attributes).to eq({ :one => 'two' })
132
132
  end
133
133
 
134
134
  it "should throw an ArgumentError if we aren't a kind of hash" do
135
- lambda { @role.override_attributes(Array.new) }.should raise_error(ArgumentError)
135
+ expect { @role.override_attributes(Array.new) }.to raise_error(ArgumentError)
136
136
  end
137
137
  end
138
138
 
@@ -154,11 +154,11 @@ describe Chef::Role do
154
154
 
155
155
  it "should update all fields except for name" do
156
156
  @role.update_from!(@example)
157
- @role.name.should == "mars_volta"
158
- @role.description.should == @example.description
159
- @role.run_list.should == @example.run_list
160
- @role.default_attributes.should == @example.default_attributes
161
- @role.override_attributes.should == @example.override_attributes
157
+ expect(@role.name).to eq("mars_volta")
158
+ expect(@role.description).to eq(@example.description)
159
+ expect(@role.run_list).to eq(@example.run_list)
160
+ expect(@role.default_attributes).to eq(@example.default_attributes)
161
+ expect(@role.override_attributes).to eq(@example.override_attributes)
162
162
  end
163
163
  end
164
164
 
@@ -173,29 +173,29 @@ describe Chef::Role do
173
173
  end
174
174
 
175
175
  it "should serialize to a json hash" do
176
- Chef::JSONCompat.to_json(@role).should match(/^\{.+\}$/)
176
+ expect(Chef::JSONCompat.to_json(@role)).to match(/^\{.+\}$/)
177
177
  end
178
178
 
179
179
  it "includes the name in the JSON output" do
180
- @serialized_role.should =~ /"name":"mars_volta"/
180
+ expect(@serialized_role).to match(/"name":"mars_volta"/)
181
181
  end
182
182
 
183
183
  it "includes its description in the JSON" do
184
- @serialized_role.should match(/"description":"Great band!"/)
184
+ expect(@serialized_role).to match(/"description":"Great band!"/)
185
185
  end
186
186
 
187
187
  it "should include 'default_attributes'" do
188
- @serialized_role.should =~ /"default_attributes":\{"el_groupo":"nuevo"\}/
188
+ expect(@serialized_role).to match(/"default_attributes":\{"el_groupo":"nuevo"\}/)
189
189
  end
190
190
 
191
191
  it "should include 'override_attributes'" do
192
- @serialized_role.should =~ /"override_attributes":\{"deloused":"in the comatorium"\}/
192
+ expect(@serialized_role).to match(/"override_attributes":\{"deloused":"in the comatorium"\}/)
193
193
  end
194
194
 
195
195
  it "should include 'run_list'" do
196
196
  #Activesupport messes with Chef json formatting
197
197
  #This test should pass with and without activesupport
198
- @serialized_role.should =~ /"run_list":\["recipe\[one\]","recipe\[two\]","role\[a\]"\]/
198
+ expect(@serialized_role).to match(/"run_list":\["recipe\[one\]","recipe\[two\]","role\[a\]"\]/)
199
199
  end
200
200
 
201
201
  describe "and it has per-environment run lists" do
@@ -207,12 +207,12 @@ describe Chef::Role do
207
207
  it "includes the per-environment run lists" do
208
208
  #Activesupport messes with Chef json formatting
209
209
  #This test should pass with and without activesupport
210
- @serialized_role["env_run_lists"]["production"].should == ['role[monitoring]', 'role[auditing]', 'role[apache]']
211
- @serialized_role["env_run_lists"]["dev"].should == ["role[nginx]"]
210
+ expect(@serialized_role["env_run_lists"]["production"]).to eq(['role[monitoring]', 'role[auditing]', 'role[apache]'])
211
+ expect(@serialized_role["env_run_lists"]["dev"]).to eq(["role[nginx]"])
212
212
  end
213
213
 
214
214
  it "does not include the default environment in the per-environment run lists" do
215
- @serialized_role["env_run_lists"].should_not have_key("_default")
215
+ expect(@serialized_role["env_run_lists"]).not_to have_key("_default")
216
216
  end
217
217
 
218
218
  end
@@ -233,7 +233,7 @@ describe Chef::Role do
233
233
  end
234
234
 
235
235
  it "should deserialize to a Chef::Role object" do
236
- @deserial.should be_a_kind_of(Chef::Role)
236
+ expect(@deserial).to be_a_kind_of(Chef::Role)
237
237
  end
238
238
 
239
239
  %w{
@@ -244,7 +244,7 @@ describe Chef::Role do
244
244
  run_list
245
245
  }.each do |t|
246
246
  it "should preserves the '#{t}' attribute from the JSON object" do
247
- @deserial.send(t.to_sym).should == @role.send(t.to_sym)
247
+ expect(@deserial.send(t.to_sym)).to eq(@role.send(t.to_sym))
248
248
  end
249
249
  end
250
250
  end
@@ -257,56 +257,57 @@ EOR
257
257
  describe "when loading from disk" do
258
258
  before do
259
259
  default_cache_path = windows? ? 'C:\chef' : '/var/chef'
260
- Chef::Config.stub(:cache_path).and_return(default_cache_path)
260
+ allow(Chef::Config).to receive(:cache_path).and_return(default_cache_path)
261
261
  end
262
262
 
263
263
  it "should return a Chef::Role object from JSON" do
264
- Dir.should_receive(:glob).and_return(["#{Chef::Config[:role_path]}/memes", "#{Chef::Config[:role_path]}/memes/lolcat.json"])
264
+ expect(Dir).to receive(:glob).and_return(["#{Chef::Config[:role_path]}/memes", "#{Chef::Config[:role_path]}/memes/lolcat.json"])
265
265
  file_path = File.join(Chef::Config[:role_path], 'memes/lolcat.json')
266
- File.should_receive(:exists?).with(file_path).exactly(1).times.and_return(true)
267
- IO.should_receive(:read).with(file_path).and_return('{"name": "ceiling_cat", "json_class": "Chef::Role" }')
268
- @role.should be_a_kind_of(Chef::Role)
266
+ expect(File).to receive(:exists?).with(file_path).exactly(1).times.and_return(true)
267
+ expect(IO).to receive(:read).with(file_path).and_return('{"name": "ceiling_cat", "json_class": "Chef::Role" }')
268
+ expect(@role).to be_a_kind_of(Chef::Role)
269
269
  @role.class.from_disk("lolcat")
270
270
  end
271
271
 
272
272
  it "should return a Chef::Role object from a Ruby DSL" do
273
- Dir.should_receive(:glob).and_return(["#{Chef::Config[:role_path]}/memes", "#{Chef::Config[:role_path]}/memes/lolcat.rb"])
273
+ expect(Dir).to receive(:glob).and_return(["#{Chef::Config[:role_path]}/memes", "#{Chef::Config[:role_path]}/memes/lolcat.rb"])
274
274
  rb_path = File.join(Chef::Config[:role_path], 'memes/lolcat.rb')
275
- File.should_receive(:exists?).with(rb_path).exactly(2).times.and_return(true)
276
- File.should_receive(:readable?).with(rb_path).exactly(1).times.and_return(true)
277
- IO.should_receive(:read).with(rb_path).and_return(ROLE_DSL)
278
- @role.should be_a_kind_of(Chef::Role)
275
+ expect(File).to receive(:exists?).with(rb_path).exactly(2).times.and_return(true)
276
+ expect(File).to receive(:readable?).with(rb_path).exactly(1).times.and_return(true)
277
+ expect(IO).to receive(:read).with(rb_path).and_return(ROLE_DSL)
278
+ expect(@role).to be_a_kind_of(Chef::Role)
279
279
  @role.class.from_disk("lolcat")
280
280
  end
281
281
 
282
282
  it "should prefer a Chef::Role Object from JSON over one from a Ruby DSL" do
283
- Dir.should_receive(:glob).and_return(["#{Chef::Config[:role_path]}/memes", "#{Chef::Config[:role_path]}/memes/lolcat.json", "#{Chef::Config[:role_path]}/memes/lolcat.rb"])
283
+ expect(Dir).to receive(:glob).and_return(["#{Chef::Config[:role_path]}/memes", "#{Chef::Config[:role_path]}/memes/lolcat.json", "#{Chef::Config[:role_path]}/memes/lolcat.rb"])
284
284
  js_path = File.join(Chef::Config[:role_path], 'memes/lolcat.json')
285
285
  rb_path = File.join(Chef::Config[:role_path], 'memes/lolcat.rb')
286
- File.should_receive(:exists?).with(js_path).exactly(1).times.and_return(true)
287
- File.should_not_receive(:exists?).with(rb_path)
288
- IO.should_receive(:read).with(js_path).and_return('{"name": "ceiling_cat", "json_class": "Chef::Role" }')
289
- @role.should be_a_kind_of(Chef::Role)
286
+ expect(File).to receive(:exists?).with(js_path).exactly(1).times.and_return(true)
287
+ expect(File).not_to receive(:exists?).with(rb_path)
288
+ expect(IO).to receive(:read).with(js_path).and_return('{"name": "ceiling_cat", "json_class": "Chef::Role" }')
289
+ expect(@role).to be_a_kind_of(Chef::Role)
290
290
  @role.class.from_disk("lolcat")
291
291
  end
292
292
 
293
293
  it "should raise an exception if the file does not exist" do
294
- Dir.should_receive(:glob).and_return(["#{Chef::Config[:role_path]}/meme.rb"])
295
- File.should_not_receive(:exists?)
296
- lambda {@role.class.from_disk("lolcat")}.should raise_error(Chef::Exceptions::RoleNotFound)
294
+ expect(Dir).to receive(:glob).and_return(["#{Chef::Config[:role_path]}/meme.rb"])
295
+ expect(File).not_to receive(:exists?)
296
+ expect {@role.class.from_disk("lolcat")}.to raise_error(Chef::Exceptions::RoleNotFound)
297
297
  end
298
298
 
299
299
  it "should raise an exception if two files exist with the same name" do
300
- Dir.should_receive(:glob).and_return(["#{Chef::Config[:role_path]}/memes/lolcat.rb", "#{Chef::Config[:role_path]}/lolcat.rb"])
301
- File.should_not_receive(:exists?)
302
- lambda {@role.class.from_disk("lolcat")}.should raise_error(Chef::Exceptions::DuplicateRole)
300
+ expect(Dir).to receive(:glob).and_return(["#{Chef::Config[:role_path]}/memes/lolcat.rb", "#{Chef::Config[:role_path]}/lolcat.rb"])
301
+ expect(File).not_to receive(:exists?)
302
+ expect {@role.class.from_disk("lolcat")}.to raise_error(Chef::Exceptions::DuplicateRole)
303
303
  end
304
304
 
305
305
  it "should not raise an exception if two files exist with a similar name" do
306
- Dir.should_receive(:glob).and_return(["#{Chef::Config[:role_path]}/memes/lolcat.rb", "#{Chef::Config[:role_path]}/super_lolcat.rb"])
307
- File.should_not_receive(:exists?)
308
- lambda {@role.class.from_disk("lolcat")}.should_not raise_error(Chef::Exceptions::DuplicateRole)
309
- end
306
+ expect(Dir).to receive(:glob).and_return(["#{Chef::Config[:role_path]}/memes/lolcat.rb", "#{Chef::Config[:role_path]}/super_lolcat.rb"])
307
+ expect(File).to receive(:exists?).with("#{Chef::Config[:role_path]}/memes/lolcat.rb").and_return(true)
308
+ allow_any_instance_of(Chef::Role).to receive(:from_file).with("#{Chef::Config[:role_path]}/memes/lolcat.rb")
309
+ expect{ @role.class.from_disk("lolcat") }.not_to raise_error
310
+ end
310
311
  end
311
312
 
312
313
  describe "when loading from disk and role_path is an array" do
@@ -316,45 +317,45 @@ EOR
316
317
  end
317
318
 
318
319
  it "should return a Chef::Role object from JSON" do
319
- Dir.should_receive(:glob).with(File.join('/path1', '**', '**')).exactly(1).times.and_return(['/path1/lolcat.json'])
320
- File.should_receive(:exists?).with('/path1/lolcat.json').exactly(1).times.and_return(true)
321
- IO.should_receive(:read).with('/path1/lolcat.json').and_return('{"name": "ceiling_cat", "json_class": "Chef::Role" }')
322
- @role.should be_a_kind_of(Chef::Role)
320
+ expect(Dir).to receive(:glob).with(File.join('/path1', '**', '**')).exactly(1).times.and_return(['/path1/lolcat.json'])
321
+ expect(File).to receive(:exists?).with('/path1/lolcat.json').exactly(1).times.and_return(true)
322
+ expect(IO).to receive(:read).with('/path1/lolcat.json').and_return('{"name": "ceiling_cat", "json_class": "Chef::Role" }')
323
+ expect(@role).to be_a_kind_of(Chef::Role)
323
324
  @role.class.from_disk("lolcat")
324
325
  end
325
326
 
326
327
  it "should return a Chef::Role object from JSON when role is in the second path" do
327
- Dir.should_receive(:glob).with(File.join('/path1', '**', '**')).exactly(1).times.and_return([])
328
- Dir.should_receive(:glob).with(File.join('/path/path2', '**', '**')).exactly(1).times.and_return(['/path/path2/lolcat.json'])
329
- File.should_receive(:exists?).with('/path/path2/lolcat.json').exactly(1).times.and_return(true)
330
- IO.should_receive(:read).with('/path/path2/lolcat.json').and_return('{"name": "ceiling_cat", "json_class": "Chef::Role" }')
331
- @role.should be_a_kind_of(Chef::Role)
328
+ expect(Dir).to receive(:glob).with(File.join('/path1', '**', '**')).exactly(1).times.and_return([])
329
+ expect(Dir).to receive(:glob).with(File.join('/path/path2', '**', '**')).exactly(1).times.and_return(['/path/path2/lolcat.json'])
330
+ expect(File).to receive(:exists?).with('/path/path2/lolcat.json').exactly(1).times.and_return(true)
331
+ expect(IO).to receive(:read).with('/path/path2/lolcat.json').and_return('{"name": "ceiling_cat", "json_class": "Chef::Role" }')
332
+ expect(@role).to be_a_kind_of(Chef::Role)
332
333
  @role.class.from_disk("lolcat")
333
334
  end
334
335
 
335
336
  it "should return a Chef::Role object from a Ruby DSL" do
336
- Dir.should_receive(:glob).with(File.join('/path1', '**', '**')).exactly(1).times.and_return(['/path1/lolcat.rb'])
337
- File.should_receive(:exists?).with('/path1/lolcat.rb').exactly(2).times.and_return(true)
338
- File.should_receive(:readable?).with('/path1/lolcat.rb').and_return(true)
339
- IO.should_receive(:read).with('/path1/lolcat.rb').exactly(1).times.and_return(ROLE_DSL)
340
- @role.should be_a_kind_of(Chef::Role)
337
+ expect(Dir).to receive(:glob).with(File.join('/path1', '**', '**')).exactly(1).times.and_return(['/path1/lolcat.rb'])
338
+ expect(File).to receive(:exists?).with('/path1/lolcat.rb').exactly(2).times.and_return(true)
339
+ expect(File).to receive(:readable?).with('/path1/lolcat.rb').and_return(true)
340
+ expect(IO).to receive(:read).with('/path1/lolcat.rb').exactly(1).times.and_return(ROLE_DSL)
341
+ expect(@role).to be_a_kind_of(Chef::Role)
341
342
  @role.class.from_disk("lolcat")
342
343
  end
343
344
 
344
345
  it "should return a Chef::Role object from a Ruby DSL when role is in the second path" do
345
- Dir.should_receive(:glob).with(File.join('/path1', '**', '**')).exactly(1).times.and_return([])
346
- Dir.should_receive(:glob).with(File.join('/path/path2', '**', '**')).exactly(1).times.and_return(['/path/path2/lolcat.rb'])
347
- File.should_receive(:exists?).with('/path/path2/lolcat.rb').exactly(2).times.and_return(true)
348
- File.should_receive(:readable?).with('/path/path2/lolcat.rb').and_return(true)
349
- IO.should_receive(:read).with('/path/path2/lolcat.rb').exactly(1).times.and_return(ROLE_DSL)
350
- @role.should be_a_kind_of(Chef::Role)
346
+ expect(Dir).to receive(:glob).with(File.join('/path1', '**', '**')).exactly(1).times.and_return([])
347
+ expect(Dir).to receive(:glob).with(File.join('/path/path2', '**', '**')).exactly(1).times.and_return(['/path/path2/lolcat.rb'])
348
+ expect(File).to receive(:exists?).with('/path/path2/lolcat.rb').exactly(2).times.and_return(true)
349
+ expect(File).to receive(:readable?).with('/path/path2/lolcat.rb').and_return(true)
350
+ expect(IO).to receive(:read).with('/path/path2/lolcat.rb').exactly(1).times.and_return(ROLE_DSL)
351
+ expect(@role).to be_a_kind_of(Chef::Role)
351
352
  @role.class.from_disk("lolcat")
352
353
  end
353
354
 
354
355
  it "should raise an exception if the file does not exist" do
355
- Dir.should_receive(:glob).with(File.join('/path1', '**', '**')).exactly(1).times.and_return([])
356
- Dir.should_receive(:glob).with(File.join('/path/path2', '**', '**')).exactly(1).times.and_return([])
357
- lambda {@role.class.from_disk("lolcat")}.should raise_error(Chef::Exceptions::RoleNotFound)
356
+ expect(Dir).to receive(:glob).with(File.join('/path1', '**', '**')).exactly(1).times.and_return([])
357
+ expect(Dir).to receive(:glob).with(File.join('/path/path2', '**', '**')).exactly(1).times.and_return([])
358
+ expect {@role.class.from_disk("lolcat")}.to raise_error(Chef::Exceptions::RoleNotFound)
358
359
  end
359
360
 
360
361
  end