chef 12.0.0.alpha.2-x86-mingw32 → 12.0.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 (628) hide show
  1. data/CONTRIBUTING.md +9 -0
  2. data/README.md +1 -1
  3. data/Rakefile +12 -0
  4. data/bin/chef-service-manager +1 -1
  5. data/bin/chef-windows-service +35 -0
  6. data/distro/common/html/_sources/ctl_chef_server.txt +307 -10
  7. data/distro/common/html/ctl_chef_client.html +3 -7
  8. data/distro/common/html/ctl_chef_server.html +609 -41
  9. data/distro/common/html/ctl_chef_shell.html +2 -2
  10. data/distro/common/html/ctl_chef_solo.html +1 -1
  11. data/distro/common/html/index.html +13 -13
  12. data/distro/common/html/knife.html +10 -10
  13. data/distro/common/html/knife_bootstrap.html +8 -8
  14. data/distro/common/html/knife_client.html +12 -12
  15. data/distro/common/html/knife_common_options.html +7 -7
  16. data/distro/common/html/knife_configure.html +3 -3
  17. data/distro/common/html/knife_cookbook.html +19 -19
  18. data/distro/common/html/knife_cookbook_site.html +28 -28
  19. data/distro/common/html/knife_data_bag.html +28 -13
  20. data/distro/common/html/knife_delete.html +2 -2
  21. data/distro/common/html/knife_deps.html +3 -3
  22. data/distro/common/html/knife_diff.html +4 -4
  23. data/distro/common/html/knife_download.html +3 -3
  24. data/distro/common/html/knife_edit.html +2 -2
  25. data/distro/common/html/knife_environment.html +14 -14
  26. data/distro/common/html/knife_exec.html +11 -11
  27. data/distro/common/html/knife_index_rebuild.html +2 -2
  28. data/distro/common/html/knife_list.html +3 -3
  29. data/distro/common/html/knife_node.html +23 -23
  30. data/distro/common/html/knife_raw.html +4 -4
  31. data/distro/common/html/knife_recipe_list.html +3 -3
  32. data/distro/common/html/knife_role.html +11 -11
  33. data/distro/common/html/knife_search.html +4 -4
  34. data/distro/common/html/knife_serve.html +3 -3
  35. data/distro/common/html/knife_show.html +3 -3
  36. data/distro/common/html/knife_ssh.html +7 -7
  37. data/distro/common/html/knife_ssl_check.html +7 -7
  38. data/distro/common/html/knife_ssl_fetch.html +9 -9
  39. data/distro/common/html/knife_status.html +3 -3
  40. data/distro/common/html/knife_tag.html +9 -9
  41. data/distro/common/html/knife_upload.html +3 -3
  42. data/distro/common/html/knife_user.html +9 -9
  43. data/distro/common/html/knife_using.html +11 -11
  44. data/distro/common/html/knife_xargs.html +14 -5
  45. data/distro/common/html/search.html +2 -2
  46. data/distro/common/html/searchindex.js +1 -1
  47. data/distro/common/man/man1/chef-shell.1 +2 -2
  48. data/distro/common/man/man1/knife-bootstrap.1 +7 -7
  49. data/distro/common/man/man1/knife-client.1 +10 -10
  50. data/distro/common/man/man1/knife-configure.1 +5 -5
  51. data/distro/common/man/man1/knife-cookbook-site.1 +24 -24
  52. data/distro/common/man/man1/knife-cookbook.1 +12 -12
  53. data/distro/common/man/man1/knife-data-bag.1 +34 -10
  54. data/distro/common/man/man1/knife-delete.1 +5 -5
  55. data/distro/common/man/man1/knife-deps.1 +5 -5
  56. data/distro/common/man/man1/knife-diff.1 +7 -7
  57. data/distro/common/man/man1/knife-download.1 +5 -5
  58. data/distro/common/man/man1/knife-edit.1 +5 -5
  59. data/distro/common/man/man1/knife-environment.1 +11 -11
  60. data/distro/common/man/man1/knife-exec.1 +11 -11
  61. data/distro/common/man/man1/knife-index-rebuild.1 +1 -1
  62. data/distro/common/man/man1/knife-list.1 +5 -5
  63. data/distro/common/man/man1/knife-node.1 +16 -16
  64. data/distro/common/man/man1/knife-raw.1 +6 -6
  65. data/distro/common/man/man1/knife-recipe-list.1 +1 -1
  66. data/distro/common/man/man1/knife-role.1 +7 -7
  67. data/distro/common/man/man1/knife-search.1 +6 -6
  68. data/distro/common/man/man1/knife-serve.1 +6 -6
  69. data/distro/common/man/man1/knife-show.1 +5 -5
  70. data/distro/common/man/man1/knife-ssh.1 +9 -9
  71. data/distro/common/man/man1/knife-ssl-check.1 +7 -7
  72. data/distro/common/man/man1/knife-ssl-fetch.1 +9 -9
  73. data/distro/common/man/man1/knife-status.1 +5 -5
  74. data/distro/common/man/man1/knife-tag.1 +8 -8
  75. data/distro/common/man/man1/knife-upload.1 +5 -5
  76. data/distro/common/man/man1/knife-user.1 +8 -8
  77. data/distro/common/man/man1/knife-xargs.1 +36 -10
  78. data/distro/common/man/man1/knife.1 +14 -14
  79. data/distro/common/man/man8/chef-client.8 +3 -10
  80. data/distro/common/man/man8/chef-solo.8 +1 -1
  81. data/ext/win32-eventlog/Rakefile +50 -0
  82. data/ext/win32-eventlog/chef-log.man +26 -0
  83. data/lib/chef/application.rb +313 -241
  84. data/lib/chef/application/apply.rb +10 -8
  85. data/lib/chef/application/client.rb +58 -33
  86. data/lib/chef/application/solo.rb +33 -12
  87. data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
  88. data/lib/chef/chef_fs/command_line.rb +1 -1
  89. data/lib/chef/chef_fs/file_system/organization_invites_entry.rb +2 -1
  90. data/lib/chef/chef_fs/file_system/organization_members_entry.rb +2 -1
  91. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +2 -1
  92. data/lib/chef/client.rb +18 -48
  93. data/lib/chef/config.rb +43 -11
  94. data/lib/chef/cookbook/cookbook_version_loader.rb +14 -7
  95. data/lib/chef/cookbook/metadata.rb +81 -38
  96. data/lib/chef/cookbook/syntax_check.rb +18 -52
  97. data/lib/chef/cookbook_loader.rb +1 -1
  98. data/lib/chef/cookbook_version.rb +58 -39
  99. data/lib/chef/data_bag.rb +2 -2
  100. data/lib/chef/deprecation/provider/file.rb +2 -1
  101. data/lib/chef/dsl/data_query.rb +2 -29
  102. data/lib/chef/dsl/recipe.rb +8 -22
  103. data/lib/chef/encrypted_data_bag_item/assertions.rb +1 -1
  104. data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -0
  105. data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +1 -1
  106. data/lib/chef/event_loggers/base.rb +62 -0
  107. data/lib/chef/event_loggers/windows_eventlog.rb +104 -0
  108. data/lib/chef/exceptions.rb +18 -1
  109. data/lib/chef/file_cache.rb +3 -2
  110. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +15 -6
  111. data/lib/chef/http.rb +20 -13
  112. data/lib/chef/http/ssl_policies.rb +2 -1
  113. data/lib/chef/json_compat.rb +9 -3
  114. data/lib/chef/knife.rb +2 -1
  115. data/lib/chef/knife/bootstrap.rb +12 -18
  116. data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
  117. data/lib/chef/knife/bootstrap/chef-aix.erb +2 -2
  118. data/lib/chef/knife/bootstrap/chef-full.erb +2 -2
  119. data/lib/chef/knife/cookbook_create.rb +1 -1
  120. data/lib/chef/knife/cookbook_site_share.rb +43 -8
  121. data/lib/chef/knife/core/bootstrap_context.rb +6 -11
  122. data/lib/chef/knife/core/object_loader.rb +5 -5
  123. data/lib/chef/knife/core/status_presenter.rb +156 -0
  124. data/lib/chef/knife/core/subcommand_loader.rb +6 -5
  125. data/lib/chef/knife/core/ui.rb +4 -4
  126. data/lib/chef/knife/data_bag_create.rb +7 -32
  127. data/lib/chef/knife/data_bag_edit.rb +24 -43
  128. data/lib/chef/knife/data_bag_from_file.rb +6 -31
  129. data/lib/chef/knife/data_bag_secret_options.rb +142 -0
  130. data/lib/chef/knife/data_bag_show.rb +19 -33
  131. data/lib/chef/knife/node_from_file.rb +9 -8
  132. data/lib/chef/knife/ssh.rb +0 -7
  133. data/lib/chef/knife/ssl_check.rb +70 -6
  134. data/lib/chef/knife/status.rb +11 -58
  135. data/lib/chef/mixin/command/unix.rb +2 -2
  136. data/lib/chef/mixin/convert_to_class_name.rb +54 -0
  137. data/lib/chef/mixin/descendants_tracker.rb +82 -0
  138. data/lib/chef/mixin/homebrew_user.rb +68 -0
  139. data/lib/chef/mixin/shell_out.rb +0 -4
  140. data/lib/chef/mixin/windows_architecture_helper.rb +16 -0
  141. data/lib/chef/mixin/windows_env_helper.rb +56 -0
  142. data/lib/chef/node.rb +2 -2
  143. data/lib/chef/node_map.rb +146 -0
  144. data/lib/chef/platform/provider_mapping.rb +11 -39
  145. data/lib/chef/platform/provider_priority_map.rb +80 -0
  146. data/lib/chef/platform/query_helpers.rb +5 -1
  147. data/lib/chef/platform/service_helpers.rb +113 -0
  148. data/lib/chef/provider.rb +24 -0
  149. data/lib/chef/provider/breakpoint.rb +2 -0
  150. data/lib/chef/provider/cookbook_file.rb +2 -0
  151. data/lib/chef/provider/cron.rb +1 -1
  152. data/lib/chef/provider/cron/unix.rb +13 -9
  153. data/lib/chef/provider/deploy.rb +3 -2
  154. data/lib/chef/provider/deploy/revision.rb +4 -2
  155. data/lib/chef/provider/deploy/timestamped.rb +2 -0
  156. data/lib/chef/provider/directory.rb +2 -0
  157. data/lib/chef/provider/dsc_script.rb +179 -0
  158. data/lib/chef/provider/env.rb +25 -10
  159. data/lib/chef/provider/env/windows.rb +9 -16
  160. data/lib/chef/provider/erl_call.rb +2 -0
  161. data/lib/chef/provider/execute.rb +5 -2
  162. data/lib/chef/provider/file.rb +2 -0
  163. data/lib/chef/provider/git.rb +51 -23
  164. data/lib/chef/provider/group/dscl.rb +2 -2
  165. data/lib/chef/provider/group/pw.rb +9 -13
  166. data/lib/chef/provider/http_request.rb +2 -0
  167. data/lib/chef/provider/link.rb +3 -0
  168. data/lib/chef/provider/log.rb +2 -0
  169. data/lib/chef/provider/lwrp_base.rb +11 -9
  170. data/lib/chef/provider/mount/mount.rb +1 -1
  171. data/lib/chef/provider/package/aix.rb +2 -0
  172. data/lib/chef/provider/package/apt.rb +2 -0
  173. data/lib/chef/provider/package/dpkg.rb +2 -0
  174. data/lib/chef/provider/package/easy_install.rb +2 -0
  175. data/lib/chef/provider/package/freebsd/pkg.rb +2 -1
  176. data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
  177. data/lib/chef/provider/package/freebsd/port.rb +1 -9
  178. data/lib/chef/provider/package/homebrew.rb +127 -0
  179. data/lib/chef/provider/package/ips.rb +2 -0
  180. data/lib/chef/provider/package/macports.rb +3 -0
  181. data/lib/chef/provider/package/pacman.rb +5 -4
  182. data/lib/chef/provider/package/paludis.rb +4 -2
  183. data/lib/chef/provider/package/portage.rb +4 -1
  184. data/lib/chef/provider/package/rpm.rb +2 -0
  185. data/lib/chef/provider/package/rubygems.rb +4 -0
  186. data/lib/chef/provider/package/smartos.rb +2 -0
  187. data/lib/chef/provider/package/solaris.rb +2 -0
  188. data/lib/chef/provider/package/windows.rb +5 -2
  189. data/lib/chef/provider/package/yum.rb +2 -0
  190. data/lib/chef/provider/powershell_script.rb +3 -1
  191. data/lib/chef/provider/remote_directory.rb +25 -10
  192. data/lib/chef/provider/route.rb +2 -0
  193. data/lib/chef/provider/ruby_block.rb +2 -0
  194. data/lib/chef/provider/script.rb +6 -0
  195. data/lib/chef/provider/service/aix.rb +128 -0
  196. data/lib/chef/provider/service/aixinit.rb +117 -0
  197. data/lib/chef/provider/service/arch.rb +6 -0
  198. data/lib/chef/provider/service/debian.rb +35 -29
  199. data/lib/chef/provider/service/freebsd.rb +7 -1
  200. data/lib/chef/provider/service/gentoo.rb +5 -1
  201. data/lib/chef/provider/service/init.rb +2 -0
  202. data/lib/chef/provider/service/insserv.rb +15 -8
  203. data/lib/chef/provider/service/invokercd.rb +6 -0
  204. data/lib/chef/provider/service/macosx.rb +4 -1
  205. data/lib/chef/provider/service/redhat.rb +9 -3
  206. data/lib/chef/provider/service/simple.rb +2 -0
  207. data/lib/chef/provider/service/solaris.rb +2 -0
  208. data/lib/chef/provider/service/systemd.rb +7 -0
  209. data/lib/chef/provider/service/upstart.rb +7 -0
  210. data/lib/chef/provider/service/windows.rb +5 -0
  211. data/lib/chef/provider/subversion.rb +2 -0
  212. data/lib/chef/provider/template.rb +1 -0
  213. data/lib/chef/provider/user/dscl.rb +3 -2
  214. data/lib/chef/provider/whyrun_safe_ruby_block.rb +2 -0
  215. data/lib/chef/provider_resolver.rb +103 -0
  216. data/lib/chef/providers.rb +6 -2
  217. data/lib/chef/recipe.rb +2 -0
  218. data/lib/chef/resource.rb +69 -78
  219. data/lib/chef/resource/apt_package.rb +3 -1
  220. data/lib/chef/resource/bash.rb +1 -0
  221. data/lib/chef/resource/bff_package.rb +0 -1
  222. data/lib/chef/resource/breakpoint.rb +1 -1
  223. data/lib/chef/resource/chef_gem.rb +1 -2
  224. data/lib/chef/resource/conditional.rb +26 -6
  225. data/lib/chef/resource/cookbook_file.rb +2 -3
  226. data/lib/chef/resource/csh.rb +1 -0
  227. data/lib/chef/resource/deploy.rb +0 -1
  228. data/lib/chef/resource/deploy_revision.rb +6 -1
  229. data/lib/chef/resource/directory.rb +1 -2
  230. data/lib/chef/resource/dpkg_package.rb +2 -1
  231. data/lib/chef/resource/dsc_script.rb +125 -0
  232. data/lib/chef/resource/easy_install_package.rb +2 -1
  233. data/lib/chef/resource/erl_call.rb +1 -0
  234. data/lib/chef/resource/execute.rb +26 -9
  235. data/lib/chef/resource/file.rb +1 -3
  236. data/lib/chef/resource/freebsd_package.rb +10 -23
  237. data/lib/chef/resource/gem_package.rb +2 -1
  238. data/lib/chef/resource/git.rb +2 -1
  239. data/lib/chef/resource/homebrew_package.rb +46 -0
  240. data/lib/chef/resource/http_request.rb +1 -0
  241. data/lib/chef/resource/ips_package.rb +3 -1
  242. data/lib/chef/resource/link.rb +1 -2
  243. data/lib/chef/resource/log.rb +4 -0
  244. data/lib/chef/resource/lwrp_base.rb +24 -15
  245. data/lib/chef/resource/macports_package.rb +3 -1
  246. data/lib/chef/resource/pacman_package.rb +2 -1
  247. data/lib/chef/resource/paludis_package.rb +3 -1
  248. data/lib/chef/resource/perl.rb +1 -0
  249. data/lib/chef/resource/powershell_script.rb +0 -2
  250. data/lib/chef/resource/python.rb +1 -1
  251. data/lib/chef/resource/remote_directory.rb +1 -2
  252. data/lib/chef/resource/remote_file.rb +1 -1
  253. data/lib/chef/resource/rpm_package.rb +2 -1
  254. data/lib/chef/resource/ruby.rb +1 -0
  255. data/lib/chef/resource/ruby_block.rb +3 -0
  256. data/lib/chef/resource/script.rb +2 -25
  257. data/lib/chef/resource/service.rb +0 -4
  258. data/lib/chef/resource/smartos_package.rb +3 -4
  259. data/lib/chef/resource/solaris_package.rb +7 -1
  260. data/lib/chef/resource/subversion.rb +0 -1
  261. data/lib/chef/resource/template.rb +2 -3
  262. data/lib/chef/resource/timestamped_deploy.rb +1 -2
  263. data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -1
  264. data/lib/chef/resource/windows_package.rb +3 -4
  265. data/lib/chef/resource/windows_script.rb +3 -0
  266. data/lib/chef/resource/windows_service.rb +2 -2
  267. data/lib/chef/resource/yum_package.rb +3 -1
  268. data/lib/chef/resource_collection.rb +50 -227
  269. data/lib/chef/resource_collection/resource_collection_serialization.rb +59 -0
  270. data/lib/chef/resource_collection/resource_list.rb +89 -0
  271. data/lib/chef/resource_collection/resource_set.rb +170 -0
  272. data/lib/chef/resources.rb +2 -0
  273. data/lib/chef/role.rb +1 -1
  274. data/lib/chef/run_context.rb +5 -1
  275. data/lib/chef/shell/ext.rb +1 -1
  276. data/lib/chef/util/backup.rb +3 -2
  277. data/lib/chef/util/dsc/configuration_generator.rb +115 -0
  278. data/lib/chef/util/dsc/lcm_output_parser.rb +133 -0
  279. data/lib/chef/util/dsc/local_configuration_manager.rb +141 -0
  280. data/lib/chef/util/dsc/resource_info.rb +26 -0
  281. data/lib/chef/util/path_helper.rb +12 -0
  282. data/lib/chef/util/powershell/cmdlet.rb +136 -0
  283. data/lib/chef/util/powershell/cmdlet_result.rb +46 -0
  284. data/lib/chef/version.rb +1 -1
  285. data/lib/chef/win32/api/system.rb +9 -0
  286. data/lib/chef/win32/version.rb +2 -0
  287. data/spec/.DS_Store +0 -0
  288. data/spec/data/.DS_Store +0 -0
  289. data/spec/data/bootstrap/test-hints.erb +1 -1
  290. data/spec/data/bootstrap/test.erb +1 -1
  291. data/spec/data/cb_version_cookbooks/cookbook2/files/test.txt +0 -0
  292. data/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb +0 -0
  293. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -0
  294. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -0
  295. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -0
  296. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -0
  297. data/spec/data/lwrp/.DS_Store +0 -0
  298. data/spec/data/lwrp/providers/.DS_Store +0 -0
  299. data/spec/data/lwrp/providers/buck_passer.rb +9 -2
  300. data/spec/data/lwrp/resources/.DS_Store +0 -0
  301. data/spec/data/lwrp/resources/foo.rb +3 -2
  302. data/spec/data/lwrp_override/.DS_Store +0 -0
  303. data/spec/data/lwrp_override/providers/.DS_Store +0 -0
  304. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -10
  305. data/spec/data/lwrp_override/resources/.DS_Store +0 -0
  306. data/spec/data/lwrp_override/resources/foo.rb +4 -3
  307. data/spec/functional/assets/chefinittest +34 -0
  308. data/spec/functional/assets/testchefsubsys +11 -0
  309. data/spec/functional/dsl/reboot_pending_spec.rb +19 -16
  310. data/spec/functional/event_loggers/windows_eventlog_spec.rb +82 -0
  311. data/spec/functional/knife/cookbook_delete_spec.rb +3 -3
  312. data/spec/functional/knife/exec_spec.rb +1 -1
  313. data/spec/functional/resource/aix_service_spec.rb +136 -0
  314. data/spec/functional/resource/aixinit_service_spec.rb +211 -0
  315. data/spec/functional/resource/base.rb +1 -0
  316. data/spec/functional/resource/batch_spec.rb +4 -11
  317. data/spec/functional/resource/cron_spec.rb +7 -1
  318. data/spec/functional/resource/dsc_script_spec.rb +382 -0
  319. data/spec/functional/resource/env_spec.rb +54 -0
  320. data/spec/functional/resource/execute_spec.rb +113 -0
  321. data/spec/functional/resource/file_spec.rb +2 -0
  322. data/spec/functional/resource/group_spec.rb +7 -4
  323. data/spec/functional/resource/powershell_spec.rb +198 -185
  324. data/spec/functional/resource/rpm_spec.rb +5 -4
  325. data/spec/functional/resource/user/dscl_spec.rb +2 -1
  326. data/spec/functional/util/path_helper_spec.rb +37 -0
  327. data/spec/functional/util/powershell/cmdlet_spec.rb +114 -0
  328. data/spec/integration/client/client_spec.rb +1 -1
  329. data/spec/integration/client/ipv6_spec.rb +1 -1
  330. data/spec/integration/knife/chef_fs_data_store_spec.rb +1 -1
  331. data/spec/integration/knife/chef_repo_path_spec.rb +1 -1
  332. data/spec/integration/knife/chef_repository_file_system_spec.rb +1 -1
  333. data/spec/integration/knife/chefignore_spec.rb +1 -1
  334. data/spec/integration/knife/common_options_spec.rb +1 -1
  335. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +2 -2
  336. data/spec/integration/knife/delete_spec.rb +1 -1
  337. data/spec/integration/knife/deps_spec.rb +1 -1
  338. data/spec/integration/knife/diff_spec.rb +1 -1
  339. data/spec/integration/knife/download_spec.rb +1 -1
  340. data/spec/integration/knife/list_spec.rb +1 -1
  341. data/spec/integration/knife/raw_spec.rb +1 -1
  342. data/spec/integration/knife/redirection_spec.rb +1 -1
  343. data/spec/integration/knife/serve_spec.rb +1 -1
  344. data/spec/integration/knife/show_spec.rb +1 -1
  345. data/spec/integration/knife/upload_spec.rb +4 -3
  346. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
  347. data/spec/spec_helper.rb +15 -0
  348. data/spec/support/chef_helpers.rb +1 -0
  349. data/spec/support/lib/chef/provider/snakeoil.rb +1 -0
  350. data/spec/support/lib/chef/resource/zen_follower.rb +1 -7
  351. data/spec/support/platform_helpers.rb +28 -0
  352. data/spec/support/shared/functional/file_resource.rb +6 -0
  353. data/spec/support/shared/functional/windows_script.rb +118 -0
  354. data/spec/support/shared/integration/integration_helper.rb +5 -2
  355. data/spec/support/shared/matchers/exit_with_code.rb +28 -0
  356. data/spec/support/shared/matchers/match_environment_variable.rb +17 -0
  357. data/spec/support/shared/shared_examples.rb +14 -0
  358. data/spec/support/shared/unit/execute_resource.rb +0 -7
  359. data/spec/support/shared/unit/resource/static_provider_resolution.rb +71 -0
  360. data/spec/support/shared/unit/script_resource.rb +1 -1
  361. data/spec/support/shared/unit/windows_script_resource.rb +35 -2
  362. data/spec/tiny_server.rb +1 -2
  363. data/spec/unit/api_client_spec.rb +5 -1
  364. data/spec/unit/application/{apply.rb → apply_spec.rb} +13 -5
  365. data/spec/unit/application/client_spec.rb +106 -13
  366. data/spec/unit/application/solo_spec.rb +25 -1
  367. data/spec/unit/client_spec.rb +1 -26
  368. data/spec/unit/config_fetcher_spec.rb +2 -1
  369. data/spec/unit/config_spec.rb +91 -2
  370. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +8 -0
  371. data/spec/unit/cookbook/metadata_spec.rb +43 -6
  372. data/spec/unit/cookbook/syntax_check_spec.rb +8 -2
  373. data/spec/unit/cookbook_loader_spec.rb +4 -2
  374. data/spec/unit/cookbook_version_spec.rb +83 -2
  375. data/spec/unit/data_bag_item_spec.rb +5 -1
  376. data/spec/unit/data_bag_spec.rb +6 -1
  377. data/spec/unit/dsl/data_query_spec.rb +8 -110
  378. data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +95 -0
  379. data/spec/unit/encrypted_data_bag_item_spec.rb +16 -23
  380. data/spec/unit/environment_spec.rb +6 -2
  381. data/spec/unit/exceptions_spec.rb +6 -0
  382. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +16 -15
  383. data/spec/unit/json_compat_spec.rb +12 -2
  384. data/spec/unit/knife/bootstrap_spec.rb +16 -63
  385. data/spec/unit/knife/cookbook_site_share_spec.rb +59 -6
  386. data/spec/unit/knife/core/bootstrap_context_spec.rb +8 -37
  387. data/spec/unit/knife/core/subcommand_loader_spec.rb +1 -1
  388. data/spec/unit/knife/core/ui_spec.rb +28 -0
  389. data/spec/unit/knife/data_bag_create_spec.rb +63 -71
  390. data/spec/unit/knife/data_bag_edit_spec.rb +83 -49
  391. data/spec/unit/knife/data_bag_from_file_spec.rb +104 -126
  392. data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -0
  393. data/spec/unit/knife/data_bag_show_spec.rb +74 -72
  394. data/spec/unit/knife/environment_from_file_spec.rb +3 -2
  395. data/spec/unit/knife/ssl_check_spec.rb +46 -1
  396. data/spec/unit/knife/status_spec.rb +1 -2
  397. data/spec/unit/knife_spec.rb +18 -1
  398. data/spec/unit/lwrp_spec.rb +29 -8
  399. data/spec/unit/mixin/homebrew_user_spec.rb +100 -0
  400. data/spec/unit/node_map_spec.rb +155 -0
  401. data/spec/unit/node_spec.rb +11 -0
  402. data/spec/unit/platform/query_helpers_spec.rb +23 -0
  403. data/spec/unit/platform_spec.rb +23 -0
  404. data/spec/unit/provider/breakpoint_spec.rb +9 -9
  405. data/spec/unit/provider/cookbook_file/content_spec.rb +3 -3
  406. data/spec/unit/provider/cookbook_file_spec.rb +1 -1
  407. data/spec/unit/provider/cron/unix_spec.rb +78 -60
  408. data/spec/unit/provider/cron_spec.rb +175 -175
  409. data/spec/unit/provider/deploy/revision_spec.rb +22 -21
  410. data/spec/unit/provider/deploy/timestamped_spec.rb +3 -3
  411. data/spec/unit/provider/deploy_spec.rb +231 -230
  412. data/spec/unit/provider/directory_spec.rb +55 -55
  413. data/spec/unit/provider/dsc_script_spec.rb +174 -0
  414. data/spec/unit/provider/env/windows_spec.rb +70 -34
  415. data/spec/unit/provider/env_spec.rb +95 -49
  416. data/spec/unit/provider/erl_call_spec.rb +9 -9
  417. data/spec/unit/provider/execute_spec.rb +43 -27
  418. data/spec/unit/provider/file/content_spec.rb +9 -9
  419. data/spec/unit/provider/file_spec.rb +1 -1
  420. data/spec/unit/provider/git_spec.rb +221 -159
  421. data/spec/unit/provider/group/dscl_spec.rb +64 -63
  422. data/spec/unit/provider/group/gpasswd_spec.rb +14 -14
  423. data/spec/unit/provider/group/groupadd_spec.rb +33 -33
  424. data/spec/unit/provider/group/groupmod_spec.rb +23 -23
  425. data/spec/unit/provider/group/pw_spec.rb +21 -21
  426. data/spec/unit/provider/group/usermod_spec.rb +20 -20
  427. data/spec/unit/provider/group/windows_spec.rb +15 -15
  428. data/spec/unit/provider/group_spec.rb +76 -76
  429. data/spec/unit/provider/http_request_spec.rb +30 -30
  430. data/spec/unit/provider/ifconfig/aix_spec.rb +20 -20
  431. data/spec/unit/provider/ifconfig/debian_spec.rb +25 -9
  432. data/spec/unit/provider/ifconfig/redhat_spec.rb +13 -13
  433. data/spec/unit/provider/ifconfig_spec.rb +43 -43
  434. data/spec/unit/provider/link_spec.rb +60 -60
  435. data/spec/unit/provider/log_spec.rb +0 -4
  436. data/spec/unit/provider/mdadm_spec.rb +23 -23
  437. data/spec/unit/provider/mount/aix_spec.rb +17 -17
  438. data/spec/unit/provider/mount/mount_spec.rb +115 -119
  439. data/spec/unit/provider/mount/solaris_spec.rb +72 -72
  440. data/spec/unit/provider/mount/windows_spec.rb +24 -24
  441. data/spec/unit/provider/ohai_spec.rb +11 -11
  442. data/spec/unit/provider/package/aix_spec.rb +34 -34
  443. data/spec/unit/provider/package/apt_spec.rb +36 -36
  444. data/spec/unit/provider/package/dpkg_spec.rb +27 -27
  445. data/spec/unit/provider/package/easy_install_spec.rb +16 -16
  446. data/spec/unit/provider/package/freebsd/pkg_spec.rb +53 -53
  447. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +24 -24
  448. data/spec/unit/provider/package/freebsd/port_spec.rb +45 -35
  449. data/spec/unit/provider/package/homebrew_spec.rb +266 -0
  450. data/spec/unit/provider/package/ips_spec.rb +34 -34
  451. data/spec/unit/provider/package/macports_spec.rb +49 -49
  452. data/spec/unit/provider/package/pacman_spec.rb +35 -39
  453. data/spec/unit/provider/package/paludis_spec.rb +20 -20
  454. data/spec/unit/provider/package/portage_spec.rb +38 -38
  455. data/spec/unit/provider/package/rpm_spec.rb +29 -29
  456. data/spec/unit/provider/package/rubygems_spec.rb +284 -270
  457. data/spec/unit/provider/package/smartos_spec.rb +15 -15
  458. data/spec/unit/provider/package/solaris_spec.rb +35 -35
  459. data/spec/unit/provider/package/windows/msi_spec.rb +3 -3
  460. data/spec/unit/provider/package/windows_spec.rb +6 -6
  461. data/spec/unit/provider/package/yum_spec.rb +416 -416
  462. data/spec/unit/provider/package/zypper_spec.rb +47 -47
  463. data/spec/unit/provider/package_spec.rb +107 -107
  464. data/spec/unit/provider/powershell_spec.rb +1 -1
  465. data/spec/unit/provider/registry_key_spec.rb +61 -61
  466. data/spec/unit/provider/remote_directory_spec.rb +36 -36
  467. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +24 -24
  468. data/spec/unit/provider/remote_file/content_spec.rb +45 -45
  469. data/spec/unit/provider/remote_file/fetcher_spec.rb +9 -9
  470. data/spec/unit/provider/remote_file/ftp_spec.rb +32 -32
  471. data/spec/unit/provider/remote_file/http_spec.rb +44 -44
  472. data/spec/unit/provider/remote_file/local_file_spec.rb +9 -9
  473. data/spec/unit/provider/remote_file_spec.rb +3 -3
  474. data/spec/unit/provider/route_spec.rb +63 -63
  475. data/spec/unit/provider/ruby_block_spec.rb +4 -4
  476. data/spec/unit/provider/script_spec.rb +12 -12
  477. data/spec/unit/provider/service/aix_service_spec.rb +181 -0
  478. data/spec/unit/provider/service/aixinit_service_spec.rb +269 -0
  479. data/spec/unit/provider/service/arch_service_spec.rb +48 -48
  480. data/spec/unit/provider/service/debian_service_spec.rb +40 -40
  481. data/spec/unit/provider/service/gentoo_service_spec.rb +28 -28
  482. data/spec/unit/provider/service/init_service_spec.rb +39 -39
  483. data/spec/unit/provider/service/insserv_service_spec.rb +8 -8
  484. data/spec/unit/provider/service/invokercd_service_spec.rb +35 -35
  485. data/spec/unit/provider/service/macosx_spec.rb +49 -49
  486. data/spec/unit/provider/service/redhat_spec.rb +27 -27
  487. data/spec/unit/provider/service/simple_service_spec.rb +28 -28
  488. data/spec/unit/provider/service/solaris_smf_service_spec.rb +43 -46
  489. data/spec/unit/provider/service/systemd_service_spec.rb +63 -63
  490. data/spec/unit/provider/service/upstart_service_spec.rb +78 -78
  491. data/spec/unit/provider/service/windows_spec.rb +92 -92
  492. data/spec/unit/provider/service_spec.rb +40 -40
  493. data/spec/unit/provider/subversion_spec.rb +80 -80
  494. data/spec/unit/provider/template/content_spec.rb +9 -9
  495. data/spec/unit/provider/template_spec.rb +6 -6
  496. data/spec/unit/provider/user/dscl_spec.rb +170 -167
  497. data/spec/unit/provider/user/pw_spec.rb +48 -48
  498. data/spec/unit/provider/user/solaris_spec.rb +8 -8
  499. data/spec/unit/provider/user/useradd_spec.rb +1 -1
  500. data/spec/unit/provider/user/windows_spec.rb +26 -26
  501. data/spec/unit/provider/user_spec.rb +72 -72
  502. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +4 -4
  503. data/spec/unit/provider_resolver_spec.rb +387 -0
  504. data/spec/unit/recipe_spec.rb +33 -12
  505. data/spec/unit/resource/apt_package_spec.rb +10 -13
  506. data/spec/unit/resource/bash_spec.rb +4 -4
  507. data/spec/unit/resource/batch_spec.rb +1 -1
  508. data/spec/unit/resource/breakpoint_spec.rb +11 -7
  509. data/spec/unit/resource/chef_gem_spec.rb +8 -15
  510. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +2 -2
  511. data/spec/unit/resource/conditional_spec.rb +35 -16
  512. data/spec/unit/resource/cookbook_file_spec.rb +13 -13
  513. data/spec/unit/resource/cron_spec.rb +37 -37
  514. data/spec/unit/resource/csh_spec.rb +4 -4
  515. data/spec/unit/resource/deploy_revision_spec.rb +13 -18
  516. data/spec/unit/resource/deploy_spec.rb +60 -55
  517. data/spec/unit/resource/directory_spec.rb +18 -18
  518. data/spec/unit/resource/dpkg_package_spec.rb +8 -14
  519. data/spec/unit/resource/dsc_script_spec.rb +98 -0
  520. data/spec/unit/resource/easy_install_package_spec.rb +9 -18
  521. data/spec/unit/resource/env_spec.rb +12 -12
  522. data/spec/unit/resource/erl_call_spec.rb +11 -11
  523. data/spec/unit/resource/execute_spec.rb +5 -0
  524. data/spec/unit/resource/file_spec.rb +29 -29
  525. data/spec/unit/resource/freebsd_package_spec.rb +11 -12
  526. data/spec/unit/resource/gem_package_spec.rb +8 -15
  527. data/spec/unit/resource/git_spec.rb +12 -8
  528. data/spec/unit/resource/group_spec.rb +27 -27
  529. data/spec/unit/resource/homebrew_package_spec.rb +50 -0
  530. data/spec/unit/resource/http_request_spec.rb +6 -6
  531. data/spec/unit/resource/ifconfig_spec.rb +8 -8
  532. data/spec/unit/resource/ips_package_spec.rb +10 -13
  533. data/spec/unit/resource/link_spec.rb +25 -25
  534. data/spec/unit/resource/log_spec.rb +9 -9
  535. data/spec/unit/resource/macports_package_spec.rb +8 -13
  536. data/spec/unit/resource/mdadm_spec.rb +18 -18
  537. data/spec/unit/resource/mount_spec.rb +45 -45
  538. data/spec/unit/resource/ohai_spec.rb +7 -7
  539. data/spec/unit/resource/package_spec.rb +12 -12
  540. data/spec/unit/resource/pacman_package_spec.rb +8 -14
  541. data/spec/unit/resource/perl_spec.rb +4 -4
  542. data/spec/unit/resource/portage_package_spec.rb +3 -3
  543. data/spec/unit/resource/powershell_spec.rb +7 -7
  544. data/spec/unit/resource/python_spec.rb +4 -4
  545. data/spec/unit/resource/registry_key_spec.rb +32 -32
  546. data/spec/unit/resource/remote_directory_spec.rb +17 -17
  547. data/spec/unit/resource/remote_file_spec.rb +41 -41
  548. data/spec/unit/resource/route_spec.rb +19 -19
  549. data/spec/unit/resource/rpm_package_spec.rb +9 -13
  550. data/spec/unit/resource/ruby_block_spec.rb +8 -8
  551. data/spec/unit/resource/ruby_spec.rb +4 -4
  552. data/spec/unit/resource/scm_spec.rb +40 -40
  553. data/spec/unit/resource/script_spec.rb +2 -2
  554. data/spec/unit/resource/service_spec.rb +37 -47
  555. data/spec/unit/resource/smartos_package_spec.rb +10 -15
  556. data/spec/unit/resource/solaris_package_spec.rb +13 -28
  557. data/spec/unit/resource/subversion_spec.rb +16 -12
  558. data/spec/unit/resource/template_spec.rb +35 -35
  559. data/spec/unit/resource/timestamped_deploy_spec.rb +30 -4
  560. data/spec/unit/resource/user_spec.rb +23 -23
  561. data/spec/unit/resource/windows_package_spec.rb +17 -10
  562. data/spec/unit/resource/windows_service_spec.rb +9 -6
  563. data/spec/unit/resource/yum_package_spec.rb +16 -21
  564. data/spec/unit/resource_collection/resource_list_spec.rb +137 -0
  565. data/spec/unit/resource_collection/resource_set_spec.rb +199 -0
  566. data/spec/unit/resource_collection_spec.rb +73 -92
  567. data/spec/unit/resource_definition_spec.rb +38 -40
  568. data/spec/unit/resource_reporter_spec.rb +3 -3
  569. data/spec/unit/resource_spec.rb +68 -33
  570. data/spec/unit/rest_spec.rb +83 -76
  571. data/spec/unit/role_spec.rb +5 -0
  572. data/spec/unit/run_list_spec.rb +5 -1
  573. data/spec/unit/runner_spec.rb +245 -238
  574. data/spec/unit/shell/shell_ext_spec.rb +1 -1
  575. data/spec/unit/user_spec.rb +5 -1
  576. data/spec/unit/util/dsc/configuration_generator_spec.rb +171 -0
  577. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +169 -0
  578. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +139 -0
  579. data/spec/unit/util/path_helper_spec.rb +23 -1
  580. data/spec/unit/util/powershell/cmdlet_spec.rb +106 -0
  581. data/spec/unit/workstation_config_loader_spec.rb +1 -1
  582. metadata +303 -196
  583. checksums.yaml +0 -7
  584. data/distro/README +0 -2
  585. data/distro/arch/etc/conf.d/chef-client.conf +0 -5
  586. data/distro/arch/etc/conf.d/chef-expander.conf +0 -8
  587. data/distro/arch/etc/conf.d/chef-server-webui.conf +0 -10
  588. data/distro/arch/etc/conf.d/chef-server.conf +0 -10
  589. data/distro/arch/etc/conf.d/chef-solr.conf +0 -8
  590. data/distro/arch/etc/rc.d/chef-client +0 -90
  591. data/distro/arch/etc/rc.d/chef-expander +0 -78
  592. data/distro/arch/etc/rc.d/chef-server +0 -78
  593. data/distro/arch/etc/rc.d/chef-server-webui +0 -78
  594. data/distro/arch/etc/rc.d/chef-solr +0 -78
  595. data/distro/debian/etc/default/chef-client +0 -4
  596. data/distro/debian/etc/default/chef-expander +0 -8
  597. data/distro/debian/etc/default/chef-server +0 -9
  598. data/distro/debian/etc/default/chef-server-webui +0 -9
  599. data/distro/debian/etc/default/chef-solr +0 -8
  600. data/distro/debian/etc/init.d/chef-client +0 -212
  601. data/distro/debian/etc/init.d/chef-expander +0 -176
  602. data/distro/debian/etc/init.d/chef-server +0 -122
  603. data/distro/debian/etc/init.d/chef-server-webui +0 -123
  604. data/distro/debian/etc/init.d/chef-solr +0 -176
  605. data/distro/debian/etc/init/chef-client.conf +0 -17
  606. data/distro/debian/etc/init/chef-expander.conf +0 -17
  607. data/distro/debian/etc/init/chef-server-webui.conf +0 -17
  608. data/distro/debian/etc/init/chef-server.conf +0 -17
  609. data/distro/debian/etc/init/chef-solr.conf +0 -17
  610. data/distro/redhat/etc/init.d/chef-client +0 -121
  611. data/distro/redhat/etc/init.d/chef-expander +0 -104
  612. data/distro/redhat/etc/init.d/chef-server +0 -112
  613. data/distro/redhat/etc/init.d/chef-server-webui +0 -112
  614. data/distro/redhat/etc/init.d/chef-solr +0 -104
  615. data/distro/redhat/etc/logrotate.d/chef-client +0 -8
  616. data/distro/redhat/etc/logrotate.d/chef-expander +0 -8
  617. data/distro/redhat/etc/logrotate.d/chef-server +0 -8
  618. data/distro/redhat/etc/logrotate.d/chef-server-webui +0 -8
  619. data/distro/redhat/etc/logrotate.d/chef-solr +0 -8
  620. data/distro/redhat/etc/sysconfig/chef-client +0 -15
  621. data/distro/redhat/etc/sysconfig/chef-expander +0 -7
  622. data/distro/redhat/etc/sysconfig/chef-server +0 -14
  623. data/distro/redhat/etc/sysconfig/chef-server-webui +0 -14
  624. data/distro/redhat/etc/sysconfig/chef-solr +0 -8
  625. data/distro/windows/service_manager.rb +0 -20
  626. data/lib/chef/resource_platform_map.rb +0 -151
  627. data/spec/support/shared/matchers.rb +0 -17
  628. data/spec/unit/resource_platform_map_spec.rb +0 -164
@@ -421,7 +421,7 @@ describe Chef::ResourceReporter do
421
421
 
422
422
  it "includes the run_list" do
423
423
  @report.should have_key("run_list")
424
- @report["run_list"].should == @run_status.node.run_list.to_json
424
+ @report["run_list"].should == Chef::JSONCompat.to_json(@run_status.node.run_list)
425
425
  end
426
426
 
427
427
  it "includes the end_time" do
@@ -484,7 +484,7 @@ describe Chef::ResourceReporter do
484
484
 
485
485
  it "includes the exception trace in the event data" do
486
486
  @report["data"]["exception"].should have_key("backtrace")
487
- @report["data"]["exception"]["backtrace"].should == @backtrace.to_json
487
+ @report["data"]["exception"]["backtrace"].should == Chef::JSONCompat.to_json(@backtrace)
488
488
  end
489
489
 
490
490
  it "includes the error inspector output in the event data" do
@@ -701,7 +701,7 @@ describe Chef::ResourceReporter do
701
701
  })
702
702
  data_stream = Zlib::GzipReader.new(StringIO.new(data))
703
703
  data = data_stream.read
704
- data.should eq(@expected_data.to_json)
704
+ data.should eq(Chef::JSONCompat.to_json(@expected_data))
705
705
  response
706
706
  end
707
707
 
@@ -174,12 +174,12 @@ describe Chef::Resource do
174
174
  end
175
175
 
176
176
  it "should load the attributes of a prior resource" do
177
- @resource.load_prior_resource
177
+ @resource.load_prior_resource(@resource.resource_name, @resource.name)
178
178
  @resource.supports.should == { :funky => true }
179
179
  end
180
180
 
181
181
  it "should not inherit the action from the prior resource" do
182
- @resource.load_prior_resource
182
+ @resource.load_prior_resource(@resource.resource_name, @resource.name)
183
183
  @resource.action.should_not == @prior_resource.action
184
184
  end
185
185
  end
@@ -336,6 +336,10 @@ describe Chef::Resource do
336
336
  json.should =~ /json_class/
337
337
  json.should =~ /instance_vars/
338
338
  end
339
+
340
+ include_examples "to_json equalivent to Chef::JSONCompat.to_json" do
341
+ let(:jsonable) { @resource }
342
+ end
339
343
  end
340
344
 
341
345
  describe "to_hash" do
@@ -345,7 +349,7 @@ describe Chef::Resource do
345
349
  :updated_by_last_action, :before, :supports,
346
350
  :noop, :ignore_failure, :name, :source_line,
347
351
  :action, :retries, :retry_delay, :elapsed_time,
348
- :guard_interpreter, :sensitive ]
352
+ :default_guard_interpreter, :guard_interpreter, :sensitive ]
349
353
  (hash.keys - expected_keys).should == []
350
354
  (expected_keys - hash.keys).should == []
351
355
  hash[:name].should eql("funk")
@@ -354,7 +358,7 @@ describe Chef::Resource do
354
358
 
355
359
  describe "self.json_create" do
356
360
  it "should deserialize itself from json" do
357
- json = @resource.to_json
361
+ json = Chef::JSONCompat.to_json(@resource)
358
362
  serialized_node = Chef::JSONCompat.from_json(json)
359
363
  serialized_node.should be_a_kind_of(Chef::Resource)
360
364
  serialized_node.name.should eql(@resource.name)
@@ -390,22 +394,44 @@ describe Chef::Resource do
390
394
  end
391
395
 
392
396
  describe "retries" do
397
+ before do
398
+ @retriable_resource = Chef::Resource::Cat.new("precious", @run_context)
399
+ @retriable_resource.provider = Chef::Provider::SnakeOil
400
+ @retriable_resource.action = :purr
401
+
402
+ @node.automatic_attrs[:platform] = "fubuntu"
403
+ @node.automatic_attrs[:platform_version] = '10.04'
404
+ end
405
+
393
406
  it "should default to not retrying if a provider fails for a resource" do
394
- @resource.retries.should == 0
407
+ @retriable_resource.retries.should == 0
395
408
  end
396
409
 
397
410
  it "should allow you to set how many retries a provider should attempt after a failure" do
398
- @resource.retries(2)
399
- @resource.retries.should == 2
411
+ @retriable_resource.retries(2)
412
+ @retriable_resource.retries.should == 2
400
413
  end
401
414
 
402
415
  it "should default to a retry delay of 2 seconds" do
403
- @resource.retry_delay.should == 2
416
+ @retriable_resource.retry_delay.should == 2
404
417
  end
405
418
 
406
419
  it "should allow you to set the retry delay" do
407
- @resource.retry_delay(10)
408
- @resource.retry_delay.should == 10
420
+ @retriable_resource.retry_delay(10)
421
+ @retriable_resource.retry_delay.should == 10
422
+ end
423
+
424
+ it "should keep given value of retries intact after the provider fails for a resource" do
425
+ @retriable_resource.retries(3)
426
+ @retriable_resource.retry_delay(0) # No need to wait.
427
+
428
+ provider = Chef::Provider::SnakeOil.new(@retriable_resource, @run_context)
429
+ Chef::Provider::SnakeOil.stub(:new).and_return(provider)
430
+ provider.stub(:action_purr).and_raise
431
+
432
+ @retriable_resource.should_receive(:sleep).exactly(3).times
433
+ expect { @retriable_resource.run_action(:purr) }.to raise_error
434
+ @retriable_resource.retries.should == 3
409
435
  end
410
436
  end
411
437
 
@@ -464,7 +490,8 @@ describe Chef::Resource do
464
490
  end
465
491
 
466
492
  it "does not run only_if if no only_if command is given" do
467
- @resource.not_if.clear
493
+ expect_any_instance_of(Chef::Resource::Conditional).not_to receive(:evaluate)
494
+ @resource.only_if.clear
468
495
  @resource.run_action(:purr)
469
496
  end
470
497
 
@@ -506,6 +533,8 @@ describe Chef::Resource do
506
533
  end
507
534
 
508
535
  it "does not run not_if if no not_if command is given" do
536
+ expect_any_instance_of(Chef::Resource::Conditional).not_to receive(:evaluate)
537
+ @resource.not_if.clear
509
538
  @resource.run_action(:purr)
510
539
  end
511
540
 
@@ -551,7 +580,6 @@ describe Chef::Resource do
551
580
  expect { resource.guard_interpreter(:command_dot_com) }.not_to raise_error
552
581
  end
553
582
  end
554
-
555
583
  end
556
584
 
557
585
  describe "should_skip?" do
@@ -664,24 +692,33 @@ describe Chef::Resource do
664
692
 
665
693
  describe "building the platform map" do
666
694
 
695
+ let(:klz) { Class.new(Chef::Resource) }
696
+
697
+ before do
698
+ Chef::Resource::Klz = klz
699
+ end
700
+
701
+ after do
702
+ Chef::Resource.send(:remove_const, :Klz)
703
+ end
704
+
667
705
  it 'adds mappings for a single platform' do
668
- klz = Class.new(Chef::Resource)
669
- Chef::Resource.platform_map.should_receive(:set).with(
670
- :platform => :autobots, :short_name => :dinobot, :resource => klz
706
+ expect(Chef::Resource.node_map).to receive(:set).with(
707
+ :dinobot, Chef::Resource::Klz, { platform: ['autobots'] }
671
708
  )
672
- klz.provides :dinobot, :on_platforms => ['autobots']
709
+ klz.provides :dinobot, platform: ['autobots']
673
710
  end
674
711
 
675
712
  it 'adds mappings for multiple platforms' do
676
- klz = Class.new(Chef::Resource)
677
- Chef::Resource.platform_map.should_receive(:set).twice
678
- klz.provides :energy, :on_platforms => ['autobots','decepticons']
713
+ expect(Chef::Resource.node_map).to receive(:set).with(
714
+ :energy, Chef::Resource::Klz, { platform: ['autobots', 'decepticons']}
715
+ )
716
+ klz.provides :energy, platform: ['autobots', 'decepticons']
679
717
  end
680
718
 
681
719
  it 'adds mappings for all platforms' do
682
- klz = Class.new(Chef::Resource)
683
- Chef::Resource.platform_map.should_receive(:set).with(
684
- :short_name => :tape_deck, :resource => klz
720
+ expect(Chef::Resource.node_map).to receive(:set).with(
721
+ :tape_deck, Chef::Resource::Klz, {}
685
722
  )
686
723
  klz.provides :tape_deck
687
724
  end
@@ -689,28 +726,26 @@ describe Chef::Resource do
689
726
  end
690
727
 
691
728
  describe "lookups from the platform map" do
729
+ let(:klz1) { Class.new(Chef::Resource) }
730
+ let(:klz2) { Class.new(Chef::Resource) }
692
731
 
693
732
  before(:each) do
733
+ Chef::Resource::Klz1 = klz1
734
+ Chef::Resource::Klz2 = klz2
694
735
  @node = Chef::Node.new
695
736
  @node.name("bumblebee")
696
737
  @node.automatic[:platform] = "autobots"
697
738
  @node.automatic[:platform_version] = "6.1"
698
- Object.const_set('Soundwave', Class.new(Chef::Resource))
699
- Object.const_set('Grimlock', Class.new(Chef::Resource){ provides :dinobot, :on_platforms => ['autobots'] })
739
+ Object.const_set('Soundwave', klz1)
740
+ klz2.provides :dinobot, :on_platforms => ['autobots']
741
+ Object.const_set('Grimlock', klz2)
700
742
  end
701
743
 
702
744
  after(:each) do
703
745
  Object.send(:remove_const, :Soundwave)
704
746
  Object.send(:remove_const, :Grimlock)
705
- end
706
-
707
- describe "resource_for_platform" do
708
- it 'return a resource by short_name and platform' do
709
- Chef::Resource.resource_for_platform(:dinobot,'autobots','6.1').should eql(Grimlock)
710
- end
711
- it "returns a resource by short_name if nothing else matches" do
712
- Chef::Resource.resource_for_node(:soundwave, @node).should eql(Soundwave)
713
- end
747
+ Chef::Resource.send(:remove_const, :Klz1)
748
+ Chef::Resource.send(:remove_const, :Klz2)
714
749
  end
715
750
 
716
751
  describe "resource_for_node" do
@@ -62,8 +62,8 @@ describe Chef::REST do
62
62
  let(:request_id) {"1234"}
63
63
 
64
64
  let(:rest) do
65
- Chef::REST::CookieJar.stub(:instance).and_return({})
66
- Chef::RequestID.instance.stub(:request_id).and_return(request_id)
65
+ allow(Chef::REST::CookieJar).to receive(:instance).and_return({})
66
+ allow(Chef::RequestID.instance).to receive(:request_id).and_return(request_id)
67
67
  rest = Chef::REST.new(base_url, nil, nil)
68
68
  Chef::REST::CookieJar.instance.clear
69
69
  rest
@@ -81,9 +81,9 @@ describe Chef::REST do
81
81
  content_length = middlewares.find_index { |e| e.is_a? Chef::HTTP::ValidateContentLength }
82
82
  decompressor = middlewares.find_index { |e| e.is_a? Chef::HTTP::Decompressor }
83
83
 
84
- content_length.should_not be_nil
85
- decompressor.should_not be_nil
86
- (decompressor < content_length).should be_true
84
+ expect(content_length).not_to be_nil
85
+ expect(decompressor).not_to be_nil
86
+ expect(decompressor < content_length).to be_true
87
87
  end
88
88
 
89
89
  it "should allow the options hash to be frozen" do
@@ -102,43 +102,43 @@ describe Chef::REST do
102
102
  end
103
103
 
104
104
  it "makes a :GET request with the composed url object" do
105
- rest.should_receive(:send_http_request).
105
+ expect(rest).to receive(:send_http_request).
106
106
  with(:GET, monkey_uri, standard_read_headers, false).
107
107
  and_return([1,2,3])
108
- rest.should_receive(:apply_response_middleware).with(1,2,3).and_return([1,2,3])
109
- rest.should_receive('success_response?'.to_sym).with(1).and_return(true)
108
+ expect(rest).to receive(:apply_response_middleware).with(1,2,3).and_return([1,2,3])
109
+ expect(rest).to receive('success_response?'.to_sym).with(1).and_return(true)
110
110
  rest.get_rest("monkey")
111
111
  end
112
112
 
113
113
  it "makes a :GET reqest for a streaming download with the composed url" do
114
- rest.should_receive(:streaming_request).with('monkey', {})
114
+ expect(rest).to receive(:streaming_request).with('monkey', {})
115
115
  rest.get_rest("monkey", true)
116
116
  end
117
117
 
118
118
  it "makes a :DELETE request with the composed url object" do
119
- rest.should_receive(:send_http_request).
119
+ expect(rest).to receive(:send_http_request).
120
120
  with(:DELETE, monkey_uri, standard_read_headers, false).
121
121
  and_return([1,2,3])
122
- rest.should_receive(:apply_response_middleware).with(1,2,3).and_return([1,2,3])
123
- rest.should_receive('success_response?'.to_sym).with(1).and_return(true)
122
+ expect(rest).to receive(:apply_response_middleware).with(1,2,3).and_return([1,2,3])
123
+ expect(rest).to receive('success_response?'.to_sym).with(1).and_return(true)
124
124
  rest.delete_rest("monkey")
125
125
  end
126
126
 
127
127
  it "makes a :POST request with the composed url object and data" do
128
- rest.should_receive(:send_http_request).
128
+ expect(rest).to receive(:send_http_request).
129
129
  with(:POST, monkey_uri, standard_write_headers, "\"data\"").
130
130
  and_return([1,2,3])
131
- rest.should_receive(:apply_response_middleware).with(1,2,3).and_return([1,2,3])
132
- rest.should_receive('success_response?'.to_sym).with(1).and_return(true)
131
+ expect(rest).to receive(:apply_response_middleware).with(1,2,3).and_return([1,2,3])
132
+ expect(rest).to receive('success_response?'.to_sym).with(1).and_return(true)
133
133
  rest.post_rest("monkey", "data")
134
134
  end
135
135
 
136
136
  it "makes a :PUT request with the composed url object and data" do
137
- rest.should_receive(:send_http_request).
137
+ expect(rest).to receive(:send_http_request).
138
138
  with(:PUT, monkey_uri, standard_write_headers, "\"data\"").
139
139
  and_return([1,2,3])
140
- rest.should_receive(:apply_response_middleware).with(1,2,3).and_return([1,2,3])
141
- rest.should_receive('success_response?'.to_sym).with(1).and_return(true)
140
+ expect(rest).to receive(:apply_response_middleware).with(1,2,3).and_return([1,2,3])
141
+ expect(rest).to receive('success_response?'.to_sym).with(1).and_return(true)
142
142
  rest.put_rest("monkey", "data")
143
143
  end
144
144
  end
@@ -162,13 +162,13 @@ describe Chef::REST do
162
162
 
163
163
  auth_headers = standard_write_headers.merge({"auth_done"=>"yep"})
164
164
 
165
- rest.authenticator.should_receive(:handle_request).
165
+ expect(rest.authenticator).to receive(:handle_request).
166
166
  with(:POST, monkey_uri, standard_write_headers, data).
167
167
  and_return([:POST, monkey_uri, auth_headers, data])
168
- rest.should_receive(:send_http_request).
168
+ expect(rest).to receive(:send_http_request).
169
169
  with(:POST, monkey_uri, auth_headers, data).
170
170
  and_return([1,2,3])
171
- rest.should_receive('success_response?'.to_sym).with(1).and_return(true)
171
+ expect(rest).to receive('success_response?'.to_sym).with(1).and_return(true)
172
172
  rest.raw_http_request(:POST, monkey_uri, standard_write_headers, data)
173
173
  end
174
174
 
@@ -176,10 +176,10 @@ describe Chef::REST do
176
176
  data = "\"secure data\""
177
177
  method, uri, auth_headers, d = rest.authenticator.handle_request(:POST, monkey_uri, standard_write_headers, data)
178
178
 
179
- rest.should_receive(:send_http_request).
179
+ expect(rest).to receive(:send_http_request).
180
180
  with(:POST, monkey_uri, auth_headers, data).
181
181
  and_return([1,2,3])
182
- rest.should_receive('success_response?'.to_sym).with(1).and_return(true)
182
+ expect(rest).to receive('success_response?'.to_sym).with(1).and_return(true)
183
183
  rest.raw_http_request(:POST, monkey_uri, standard_write_headers, data)
184
184
  end
185
185
  end
@@ -241,8 +241,8 @@ describe Chef::REST do
241
241
 
242
242
  let(:http_response) do
243
243
  http_response = Net::HTTPSuccess.new("1.1", "200", "successful rest req")
244
- http_response.stub(:read_body)
245
- http_response.stub(:body).and_return(body)
244
+ allow(http_response).to receive(:read_body)
245
+ allow(http_response).to receive(:body).and_return(body)
246
246
  http_response["Content-Length"] = body.bytesize.to_s
247
247
  http_response
248
248
  end
@@ -255,14 +255,14 @@ describe Chef::REST do
255
255
 
256
256
  let!(:http_client) do
257
257
  http_client = Net::HTTP.new(url.host, url.port)
258
- http_client.stub(:request).and_yield(http_response).and_return(http_response)
258
+ allow(http_client).to receive(:request).and_yield(http_response).and_return(http_response)
259
259
  http_client
260
260
  end
261
261
 
262
262
  let(:rest) do
263
- Net::HTTP.stub(:new).and_return(http_client)
264
- Chef::REST::CookieJar.stub(:instance).and_return({})
265
- Chef::RequestID.instance.stub(:request_id).and_return(request_id)
263
+ allow(Net::HTTP).to receive(:new).and_return(http_client)
264
+ allow(Chef::REST::CookieJar).to receive(:instance).and_return({})
265
+ allow(Chef::RequestID.instance).to receive(:request_id).and_return(request_id)
266
266
  rest = Chef::REST.new(base_url, nil, nil)
267
267
  Chef::REST::CookieJar.instance.clear
268
268
  rest
@@ -300,16 +300,16 @@ describe Chef::REST do
300
300
  end
301
301
 
302
302
  before do
303
- Net::HTTP::Get.stub(:new).and_return(request_mock)
303
+ allow(Net::HTTP::Get).to receive(:new).and_return(request_mock)
304
304
  end
305
305
 
306
306
  it "should always include the X-Chef-Version header" do
307
- Net::HTTP::Get.should_receive(:new).with("/?foo=bar", base_headers).and_return(request_mock)
307
+ expect(Net::HTTP::Get).to receive(:new).with("/?foo=bar", base_headers).and_return(request_mock)
308
308
  rest.request(:GET, url, {})
309
309
  end
310
310
 
311
311
  it "should always include the X-Remote-Request-Id header" do
312
- Net::HTTP::Get.should_receive(:new).with("/?foo=bar", base_headers).and_return(request_mock)
312
+ expect(Net::HTTP::Get).to receive(:new).with("/?foo=bar", base_headers).and_return(request_mock)
313
313
  rest.request(:GET, url, {})
314
314
  end
315
315
 
@@ -323,7 +323,7 @@ describe Chef::REST do
323
323
  # CHEF-3140
324
324
  context "when configured to disable compression" do
325
325
  let(:rest) do
326
- Net::HTTP.stub(:new).and_return(http_client)
326
+ allow(Net::HTTP).to receive(:new).and_return(http_client)
327
327
  Chef::REST.new(base_url, nil, nil, :disable_gzip => true)
328
328
  end
329
329
 
@@ -334,7 +334,7 @@ describe Chef::REST do
334
334
  it "does not decompress a response encoded as gzip" do
335
335
  http_response.add_field("content-encoding", "gzip")
336
336
  request = Net::HTTP::Get.new(url.path)
337
- Net::HTTP::Get.should_receive(:new).and_return(request)
337
+ expect(Net::HTTP::Get).to receive(:new).and_return(request)
338
338
  # will raise a Zlib error if incorrect
339
339
  expect(rest.request(:GET, url, {})).to eq("ninja")
340
340
  end
@@ -359,28 +359,28 @@ describe Chef::REST do
359
359
  it "should set them on the http request" do
360
360
  url_string = an_instance_of(String)
361
361
  header_hash = hash_including(custom_headers)
362
- Net::HTTP::Get.should_receive(:new).with(url_string, header_hash)
362
+ expect(Net::HTTP::Get).to receive(:new).with(url_string, header_hash)
363
363
  rest.request(:GET, url, {})
364
364
  end
365
365
  end
366
366
 
367
367
  context "when setting cookies" do
368
368
  let(:rest) do
369
- Net::HTTP.stub(:new).and_return(http_client)
369
+ allow(Net::HTTP).to receive(:new).and_return(http_client)
370
370
  Chef::REST::CookieJar.instance["#{url.host}:#{url.port}"] = "cookie monster"
371
- Chef::RequestID.instance.stub(:request_id).and_return(request_id)
371
+ allow(Chef::RequestID.instance).to receive(:request_id).and_return(request_id)
372
372
  rest = Chef::REST.new(base_url, nil, nil)
373
373
  rest
374
374
  end
375
375
 
376
376
  it "should set the cookie for this request if one exists for the given host:port" do
377
- Net::HTTP::Get.should_receive(:new).with("/?foo=bar", base_headers.merge('Cookie' => "cookie monster")).and_return(request_mock)
377
+ expect(Net::HTTP::Get).to receive(:new).with("/?foo=bar", base_headers.merge('Cookie' => "cookie monster")).and_return(request_mock)
378
378
  rest.request(:GET, url, {})
379
379
  end
380
380
  end
381
381
 
382
382
  it "should build a new HTTP GET request" do
383
- Net::HTTP::Get.should_receive(:new).with("/?foo=bar", base_headers).and_return(request_mock)
383
+ expect(Net::HTTP::Get).to receive(:new).with("/?foo=bar", base_headers).and_return(request_mock)
384
384
  rest.request(:GET, url, {})
385
385
  end
386
386
 
@@ -388,7 +388,7 @@ describe Chef::REST do
388
388
  request = Net::HTTP::Post.new(url.path)
389
389
  expected_headers = base_headers.merge("Content-Type" => 'application/json', 'Content-Length' => '13')
390
390
 
391
- Net::HTTP::Post.should_receive(:new).with("/?foo=bar", expected_headers).and_return(request)
391
+ expect(Net::HTTP::Post).to receive(:new).with("/?foo=bar", expected_headers).and_return(request)
392
392
  rest.request(:POST, url, {}, {:one=>:two})
393
393
  expect(request.body).to eq('{"one":"two"}')
394
394
  end
@@ -396,13 +396,13 @@ describe Chef::REST do
396
396
  it "should build a new HTTP PUT request" do
397
397
  request = Net::HTTP::Put.new(url.path)
398
398
  expected_headers = base_headers.merge("Content-Type" => 'application/json', 'Content-Length' => '13')
399
- Net::HTTP::Put.should_receive(:new).with("/?foo=bar",expected_headers).and_return(request)
399
+ expect(Net::HTTP::Put).to receive(:new).with("/?foo=bar",expected_headers).and_return(request)
400
400
  rest.request(:PUT, url, {}, {:one=>:two})
401
401
  expect(request.body).to eq('{"one":"two"}')
402
402
  end
403
403
 
404
404
  it "should build a new HTTP DELETE request" do
405
- Net::HTTP::Delete.should_receive(:new).with("/?foo=bar", base_headers).and_return(request_mock)
405
+ expect(Net::HTTP::Delete).to receive(:new).with("/?foo=bar", base_headers).and_return(request_mock)
406
406
  rest.request(:DELETE, url)
407
407
  end
408
408
 
@@ -440,7 +440,7 @@ describe Chef::REST do
440
440
  resp_code = Net::HTTPResponse::CODE_TO_OBJ.keys.detect { |k| Net::HTTPResponse::CODE_TO_OBJ[k] == resp_cls }
441
441
  http_response = Net::HTTPFound.new("1.1", resp_code, "bob is somewhere else again")
442
442
  http_response.add_field("location", url.path)
443
- http_response.stub(:read_body)
443
+ allow(http_response).to receive(:read_body)
444
444
  http_response
445
445
  end
446
446
  it "should call request again" do
@@ -457,7 +457,7 @@ describe Chef::REST do
457
457
  context "when the response is 304 NotModified" do
458
458
  let (:http_response) do
459
459
  http_response = Net::HTTPNotModified.new("1.1", "304", "it's the same as when you asked 5 minutes ago")
460
- http_response.stub(:read_body)
460
+ allow(http_response).to receive(:read_body)
461
461
  http_response
462
462
  end
463
463
 
@@ -480,13 +480,13 @@ describe Chef::REST do
480
480
  let(:http_response) do
481
481
  http_response = Net::HTTPServerError.new("1.1", "500", "drooling from inside of mouth")
482
482
  http_response.add_field("content-type", "application/json")
483
- http_response.stub(:body).and_return('{ "error":[ "Ears get sore!", "Not even four" ] }')
484
- http_response.stub(:read_body)
483
+ allow(http_response).to receive(:body).and_return('{ "error":[ "Ears get sore!", "Not even four" ] }')
484
+ allow(http_response).to receive(:read_body)
485
485
  http_response
486
486
  end
487
487
 
488
488
  it "should show the JSON error message" do
489
- rest.stub(:sleep)
489
+ allow(rest).to receive(:sleep)
490
490
 
491
491
  expect {rest.request(:GET, url)}.to raise_error(Net::HTTPFatalError)
492
492
  expect(log_stringio.string).to match(Regexp.escape('INFO: HTTP Request Returned 500 drooling from inside of mouth: Ears get sore!, Not even four'))
@@ -502,17 +502,21 @@ describe Chef::REST do
502
502
  gzipped_body = Zlib::Deflate.deflate(unzipped_body)
503
503
  gzipped_body.force_encoding(Encoding::BINARY) if "strings".respond_to?(:force_encoding)
504
504
 
505
- http_response.stub(:body).and_return gzipped_body
506
- http_response.stub(:read_body)
505
+ allow(http_response).to receive(:body).and_return gzipped_body
506
+ allow(http_response).to receive(:read_body)
507
507
  http_response
508
508
  end
509
- it "decompresses the JSON error message" do
510
- rest.stub(:sleep)
511
- rest.stub(:http_retry_count).and_return(0)
512
509
 
510
+ before do
511
+ allow(rest).to receive(:sleep)
512
+ allow(rest).to receive(:http_retry_count).and_return(0)
513
+ end
514
+
515
+ it "decompresses the JSON error message" do
513
516
  expect {rest.request(:GET, url)}.to raise_error(Net::HTTPFatalError)
514
517
  expect(log_stringio.string).to match(Regexp.escape('INFO: HTTP Request Returned 500 drooling from inside of mouth: Ears get sore!, Not even four'))
515
518
  end
519
+
516
520
  it "fails when the compressed body is truncated" do
517
521
  http_response["Content-Length"] = (body.bytesize + 99).to_s
518
522
  expect {rest.request(:GET, url)}.to raise_error(Chef::Exceptions::ContentLengthMismatch)
@@ -522,13 +526,16 @@ describe Chef::REST do
522
526
  context "on a generic unsuccessful request" do
523
527
  let(:http_response) do
524
528
  http_response = Net::HTTPServerError.new("1.1", "500", "drooling from inside of mouth")
525
- http_response.stub(:body)
526
- http_response.stub(:read_body)
529
+ allow(http_response).to receive(:body)
530
+ allow(http_response).to receive(:read_body)
527
531
  http_response
528
532
  end
529
- it "throws an exception" do
530
- rest.stub(:sleep)
533
+
534
+ it "retries then throws an exception" do
535
+ allow(rest).to receive(:sleep)
531
536
  expect {rest.request(:GET, url)}.to raise_error(Net::HTTPFatalError)
537
+ count = Chef::Config[:http_retry_count]
538
+ expect(log_stringio.string).to match(Regexp.escape("ERROR: Server returned error 500 for #{url}, retrying #{count}/#{count}"))
532
539
  end
533
540
  end
534
541
  end
@@ -542,8 +549,8 @@ describe Chef::REST do
542
549
  let(:http_response) do
543
550
  http_response = Net::HTTPSuccess.new("1.1",'200', "it-works")
544
551
 
545
- http_response.stub(:read_body)
546
- http_response.should_not_receive(:body)
552
+ allow(http_response).to receive(:read_body)
553
+ expect(http_response).not_to receive(:body)
547
554
  http_response["Content-Length"] = "0" # call set_content_length (in test), if otherwise
548
555
  http_response
549
556
  end
@@ -557,8 +564,8 @@ describe Chef::REST do
557
564
  end
558
565
 
559
566
  before do
560
- Tempfile.stub(:new).with("chef-rest").and_return(tempfile)
561
- Net::HTTP::Get.stub(:new).and_return(request_mock)
567
+ allow(Tempfile).to receive(:new).with("chef-rest").and_return(tempfile)
568
+ allow(Net::HTTP::Get).to receive(:new).and_return(request_mock)
562
569
  end
563
570
 
564
571
  after do
@@ -572,7 +579,7 @@ describe Chef::REST do
572
579
  'Host' => host_header,
573
580
  'X-REMOTE-REQUEST-ID'=> request_id
574
581
  }
575
- Net::HTTP::Get.should_receive(:new).with("/?foo=bar", expected_headers).and_return(request_mock)
582
+ expect(Net::HTTP::Get).to receive(:new).with("/?foo=bar", expected_headers).and_return(request_mock)
576
583
  rest.streaming_request(url, {})
577
584
  end
578
585
 
@@ -583,7 +590,7 @@ describe Chef::REST do
583
590
  'Host' => host_header,
584
591
  'X-REMOTE-REQUEST-ID'=> request_id
585
592
  }
586
- Net::HTTP::Get.should_receive(:new).with("/?foo=bar", expected_headers).and_return(request_mock)
593
+ expect(Net::HTTP::Get).to receive(:new).with("/?foo=bar", expected_headers).and_return(request_mock)
587
594
  rest.streaming_request(url, {})
588
595
  end
589
596
 
@@ -592,7 +599,7 @@ describe Chef::REST do
592
599
  end
593
600
 
594
601
  it "writes the response body to a tempfile" do
595
- http_response.stub(:read_body).and_yield("real").and_yield("ultimate").and_yield("power")
602
+ allow(http_response).to receive(:read_body).and_yield("real").and_yield("ultimate").and_yield("power")
596
603
  set_content_length
597
604
  rest.streaming_request(url, {})
598
605
  expect(IO.read(tempfile.path).chomp).to eq("realultimatepower")
@@ -604,7 +611,7 @@ describe Chef::REST do
604
611
  end
605
612
 
606
613
  it "yields the tempfile containing the streamed response body and then unlinks it when given a block" do
607
- http_response.stub(:read_body).and_yield("real").and_yield("ultimate").and_yield("power")
614
+ allow(http_response).to receive(:read_body).and_yield("real").and_yield("ultimate").and_yield("power")
608
615
  set_content_length
609
616
  tempfile_path = nil
610
617
  rest.streaming_request(url, {}) do |tempfile|
@@ -617,24 +624,24 @@ describe Chef::REST do
617
624
 
618
625
  it "does not raise a divide by zero exception if the content's actual size is 0" do
619
626
  http_response['Content-Length'] = "5"
620
- http_response.stub(:read_body).and_yield('')
627
+ allow(http_response).to receive(:read_body).and_yield('')
621
628
  expect { rest.streaming_request(url, {}) }.to raise_error(Chef::Exceptions::ContentLengthMismatch)
622
629
  end
623
630
 
624
631
  it "does not raise a divide by zero exception when the Content-Length is 0" do
625
632
  http_response['Content-Length'] = "0"
626
- http_response.stub(:read_body).and_yield("ninja")
633
+ allow(http_response).to receive(:read_body).and_yield("ninja")
627
634
  expect { rest.streaming_request(url, {}) }.to raise_error(Chef::Exceptions::ContentLengthMismatch)
628
635
  end
629
636
 
630
637
  it "it raises an exception when the download is truncated" do
631
638
  http_response["Content-Length"] = (body.bytesize + 99).to_s
632
- http_response.stub(:read_body).and_yield("ninja")
639
+ allow(http_response).to receive(:read_body).and_yield("ninja")
633
640
  expect { rest.streaming_request(url, {}) }.to raise_error(Chef::Exceptions::ContentLengthMismatch)
634
641
  end
635
642
 
636
643
  it "fetches a file and yields the tempfile it is streamed to" do
637
- http_response.stub(:read_body).and_yield("real").and_yield("ultimate").and_yield("power")
644
+ allow(http_response).to receive(:read_body).and_yield("real").and_yield("ultimate").and_yield("power")
638
645
  set_content_length
639
646
  tempfile_path = nil
640
647
  rest.fetch("cookbooks/a_cookbook") do |tempfile|
@@ -647,32 +654,32 @@ describe Chef::REST do
647
654
  it "closes and unlinks the tempfile if there is an error while streaming the content to the tempfile" do
648
655
  path = tempfile.path
649
656
  expect(path).not_to be_nil
650
- tempfile.stub(:write).and_raise(IOError)
657
+ allow(tempfile).to receive(:write).and_raise(IOError)
651
658
  rest.fetch("cookbooks/a_cookbook") {|tmpfile| "shouldn't get here"}
652
659
  expect(File.exists?(path)).to be_false
653
660
  end
654
661
 
655
662
  it "closes and unlinks the tempfile when the response is a redirect" do
656
663
  tempfile = double("A tempfile", :path => "/tmp/ragefist", :close => true, :binmode => true)
657
- tempfile.should_receive(:close!).at_least(1).times
658
- Tempfile.stub(:new).with("chef-rest").and_return(tempfile)
664
+ expect(tempfile).to receive(:close!).at_least(1).times
665
+ allow(Tempfile).to receive(:new).with("chef-rest").and_return(tempfile)
659
666
 
660
667
  redirect = Net::HTTPFound.new("1.1", "302", "bob is taking care of that one for me today")
661
668
  redirect.add_field("location", url.path)
662
- redirect.stub(:read_body)
669
+ allow(redirect).to receive(:read_body)
663
670
 
664
- http_client.should_receive(:request).and_yield(redirect).and_return(redirect)
665
- http_client.should_receive(:request).and_yield(http_response).and_return(http_response)
671
+ expect(http_client).to receive(:request).and_yield(redirect).and_return(redirect)
672
+ expect(http_client).to receive(:request).and_yield(http_response).and_return(http_response)
666
673
  rest.fetch("cookbooks/a_cookbook") {|tmpfile| "shouldn't get here"}
667
674
  end
668
675
 
669
676
  it "passes the original block to the redirected request" do
670
677
  http_redirect = Net::HTTPFound.new("1.1", "302", "bob is taking care of that one for me today")
671
678
  http_redirect.add_field("location","/that-thing-is-here-now")
672
- http_redirect.stub(:read_body)
679
+ allow(http_redirect).to receive(:read_body)
673
680
 
674
681
  block_called = false
675
- http_client.stub(:request).and_yield(http_response).and_return(http_redirect, http_response)
682
+ allow(http_client).to receive(:request).and_yield(http_response).and_return(http_redirect, http_response)
676
683
  rest.fetch("cookbooks/a_cookbook") do |tmpfile|
677
684
  block_called = true
678
685
  end