chef 12.0.0.alpha.2 → 12.0.0.rc.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (626) 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/lib/chef/application.rb +313 -241
  82. data/lib/chef/application/apply.rb +10 -8
  83. data/lib/chef/application/client.rb +58 -33
  84. data/lib/chef/application/solo.rb +33 -12
  85. data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
  86. data/lib/chef/chef_fs/command_line.rb +1 -1
  87. data/lib/chef/chef_fs/file_system/organization_invites_entry.rb +2 -1
  88. data/lib/chef/chef_fs/file_system/organization_members_entry.rb +2 -1
  89. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +2 -1
  90. data/lib/chef/client.rb +18 -48
  91. data/lib/chef/config.rb +43 -11
  92. data/lib/chef/cookbook/cookbook_version_loader.rb +14 -7
  93. data/lib/chef/cookbook/metadata.rb +81 -38
  94. data/lib/chef/cookbook/syntax_check.rb +18 -52
  95. data/lib/chef/cookbook_loader.rb +1 -1
  96. data/lib/chef/cookbook_version.rb +58 -39
  97. data/lib/chef/data_bag.rb +2 -2
  98. data/lib/chef/deprecation/provider/file.rb +2 -1
  99. data/lib/chef/dsl/data_query.rb +2 -29
  100. data/lib/chef/dsl/recipe.rb +8 -22
  101. data/lib/chef/encrypted_data_bag_item/assertions.rb +1 -1
  102. data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -0
  103. data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +1 -1
  104. data/lib/chef/event_loggers/base.rb +62 -0
  105. data/lib/chef/event_loggers/windows_eventlog.rb +104 -0
  106. data/lib/chef/exceptions.rb +18 -1
  107. data/lib/chef/file_cache.rb +3 -2
  108. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +15 -6
  109. data/lib/chef/http.rb +20 -13
  110. data/lib/chef/http/ssl_policies.rb +2 -1
  111. data/lib/chef/json_compat.rb +9 -3
  112. data/lib/chef/knife.rb +2 -1
  113. data/lib/chef/knife/bootstrap.rb +12 -18
  114. data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
  115. data/lib/chef/knife/bootstrap/chef-aix.erb +2 -2
  116. data/lib/chef/knife/bootstrap/chef-full.erb +2 -2
  117. data/lib/chef/knife/cookbook_create.rb +1 -1
  118. data/lib/chef/knife/cookbook_site_share.rb +43 -8
  119. data/lib/chef/knife/core/bootstrap_context.rb +6 -11
  120. data/lib/chef/knife/core/object_loader.rb +5 -5
  121. data/lib/chef/knife/core/status_presenter.rb +156 -0
  122. data/lib/chef/knife/core/subcommand_loader.rb +6 -5
  123. data/lib/chef/knife/core/ui.rb +4 -4
  124. data/lib/chef/knife/data_bag_create.rb +7 -32
  125. data/lib/chef/knife/data_bag_edit.rb +24 -43
  126. data/lib/chef/knife/data_bag_from_file.rb +6 -31
  127. data/lib/chef/knife/data_bag_secret_options.rb +142 -0
  128. data/lib/chef/knife/data_bag_show.rb +19 -33
  129. data/lib/chef/knife/node_from_file.rb +9 -8
  130. data/lib/chef/knife/ssh.rb +0 -7
  131. data/lib/chef/knife/ssl_check.rb +70 -6
  132. data/lib/chef/knife/status.rb +11 -58
  133. data/lib/chef/mixin/command/unix.rb +2 -2
  134. data/lib/chef/mixin/convert_to_class_name.rb +54 -0
  135. data/lib/chef/mixin/descendants_tracker.rb +82 -0
  136. data/lib/chef/mixin/homebrew_user.rb +68 -0
  137. data/lib/chef/mixin/shell_out.rb +0 -4
  138. data/lib/chef/mixin/windows_architecture_helper.rb +16 -0
  139. data/lib/chef/mixin/windows_env_helper.rb +56 -0
  140. data/lib/chef/node.rb +2 -2
  141. data/lib/chef/node_map.rb +146 -0
  142. data/lib/chef/platform/provider_mapping.rb +11 -39
  143. data/lib/chef/platform/provider_priority_map.rb +80 -0
  144. data/lib/chef/platform/query_helpers.rb +5 -1
  145. data/lib/chef/platform/service_helpers.rb +113 -0
  146. data/lib/chef/provider.rb +24 -0
  147. data/lib/chef/provider/breakpoint.rb +2 -0
  148. data/lib/chef/provider/cookbook_file.rb +2 -0
  149. data/lib/chef/provider/cron.rb +1 -1
  150. data/lib/chef/provider/cron/unix.rb +13 -9
  151. data/lib/chef/provider/deploy.rb +3 -2
  152. data/lib/chef/provider/deploy/revision.rb +4 -2
  153. data/lib/chef/provider/deploy/timestamped.rb +2 -0
  154. data/lib/chef/provider/directory.rb +2 -0
  155. data/lib/chef/provider/dsc_script.rb +179 -0
  156. data/lib/chef/provider/env.rb +25 -10
  157. data/lib/chef/provider/env/windows.rb +9 -16
  158. data/lib/chef/provider/erl_call.rb +2 -0
  159. data/lib/chef/provider/execute.rb +5 -2
  160. data/lib/chef/provider/file.rb +2 -0
  161. data/lib/chef/provider/git.rb +51 -23
  162. data/lib/chef/provider/group/dscl.rb +2 -2
  163. data/lib/chef/provider/group/pw.rb +9 -13
  164. data/lib/chef/provider/http_request.rb +2 -0
  165. data/lib/chef/provider/link.rb +3 -0
  166. data/lib/chef/provider/log.rb +2 -0
  167. data/lib/chef/provider/lwrp_base.rb +11 -9
  168. data/lib/chef/provider/mount/mount.rb +1 -1
  169. data/lib/chef/provider/package/aix.rb +2 -0
  170. data/lib/chef/provider/package/apt.rb +2 -0
  171. data/lib/chef/provider/package/dpkg.rb +2 -0
  172. data/lib/chef/provider/package/easy_install.rb +2 -0
  173. data/lib/chef/provider/package/freebsd/pkg.rb +2 -1
  174. data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
  175. data/lib/chef/provider/package/freebsd/port.rb +1 -9
  176. data/lib/chef/provider/package/homebrew.rb +127 -0
  177. data/lib/chef/provider/package/ips.rb +2 -0
  178. data/lib/chef/provider/package/macports.rb +3 -0
  179. data/lib/chef/provider/package/pacman.rb +5 -4
  180. data/lib/chef/provider/package/paludis.rb +4 -2
  181. data/lib/chef/provider/package/portage.rb +4 -1
  182. data/lib/chef/provider/package/rpm.rb +2 -0
  183. data/lib/chef/provider/package/rubygems.rb +4 -0
  184. data/lib/chef/provider/package/smartos.rb +2 -0
  185. data/lib/chef/provider/package/solaris.rb +2 -0
  186. data/lib/chef/provider/package/windows.rb +5 -2
  187. data/lib/chef/provider/package/yum.rb +2 -0
  188. data/lib/chef/provider/powershell_script.rb +3 -1
  189. data/lib/chef/provider/remote_directory.rb +25 -10
  190. data/lib/chef/provider/route.rb +2 -0
  191. data/lib/chef/provider/ruby_block.rb +2 -0
  192. data/lib/chef/provider/script.rb +6 -0
  193. data/lib/chef/provider/service/aix.rb +128 -0
  194. data/lib/chef/provider/service/aixinit.rb +117 -0
  195. data/lib/chef/provider/service/arch.rb +6 -0
  196. data/lib/chef/provider/service/debian.rb +35 -29
  197. data/lib/chef/provider/service/freebsd.rb +7 -1
  198. data/lib/chef/provider/service/gentoo.rb +5 -1
  199. data/lib/chef/provider/service/init.rb +2 -0
  200. data/lib/chef/provider/service/insserv.rb +15 -8
  201. data/lib/chef/provider/service/invokercd.rb +6 -0
  202. data/lib/chef/provider/service/macosx.rb +4 -1
  203. data/lib/chef/provider/service/redhat.rb +9 -3
  204. data/lib/chef/provider/service/simple.rb +2 -0
  205. data/lib/chef/provider/service/solaris.rb +2 -0
  206. data/lib/chef/provider/service/systemd.rb +7 -0
  207. data/lib/chef/provider/service/upstart.rb +7 -0
  208. data/lib/chef/provider/service/windows.rb +5 -0
  209. data/lib/chef/provider/subversion.rb +2 -0
  210. data/lib/chef/provider/template.rb +1 -0
  211. data/lib/chef/provider/user/dscl.rb +3 -2
  212. data/lib/chef/provider/whyrun_safe_ruby_block.rb +2 -0
  213. data/lib/chef/provider_resolver.rb +103 -0
  214. data/lib/chef/providers.rb +6 -2
  215. data/lib/chef/recipe.rb +2 -0
  216. data/lib/chef/resource.rb +69 -78
  217. data/lib/chef/resource/apt_package.rb +3 -1
  218. data/lib/chef/resource/bash.rb +1 -0
  219. data/lib/chef/resource/bff_package.rb +0 -1
  220. data/lib/chef/resource/breakpoint.rb +1 -1
  221. data/lib/chef/resource/chef_gem.rb +1 -2
  222. data/lib/chef/resource/conditional.rb +26 -6
  223. data/lib/chef/resource/cookbook_file.rb +2 -3
  224. data/lib/chef/resource/csh.rb +1 -0
  225. data/lib/chef/resource/deploy.rb +0 -1
  226. data/lib/chef/resource/deploy_revision.rb +6 -1
  227. data/lib/chef/resource/directory.rb +1 -2
  228. data/lib/chef/resource/dpkg_package.rb +2 -1
  229. data/lib/chef/resource/dsc_script.rb +125 -0
  230. data/lib/chef/resource/easy_install_package.rb +2 -1
  231. data/lib/chef/resource/erl_call.rb +1 -0
  232. data/lib/chef/resource/execute.rb +26 -9
  233. data/lib/chef/resource/file.rb +1 -3
  234. data/lib/chef/resource/freebsd_package.rb +10 -23
  235. data/lib/chef/resource/gem_package.rb +2 -1
  236. data/lib/chef/resource/git.rb +2 -1
  237. data/lib/chef/resource/homebrew_package.rb +46 -0
  238. data/lib/chef/resource/http_request.rb +1 -0
  239. data/lib/chef/resource/ips_package.rb +3 -1
  240. data/lib/chef/resource/link.rb +1 -2
  241. data/lib/chef/resource/log.rb +4 -0
  242. data/lib/chef/resource/lwrp_base.rb +24 -15
  243. data/lib/chef/resource/macports_package.rb +3 -1
  244. data/lib/chef/resource/pacman_package.rb +2 -1
  245. data/lib/chef/resource/paludis_package.rb +3 -1
  246. data/lib/chef/resource/perl.rb +1 -0
  247. data/lib/chef/resource/powershell_script.rb +0 -2
  248. data/lib/chef/resource/python.rb +1 -1
  249. data/lib/chef/resource/remote_directory.rb +1 -2
  250. data/lib/chef/resource/remote_file.rb +1 -1
  251. data/lib/chef/resource/rpm_package.rb +2 -1
  252. data/lib/chef/resource/ruby.rb +1 -0
  253. data/lib/chef/resource/ruby_block.rb +3 -0
  254. data/lib/chef/resource/script.rb +2 -25
  255. data/lib/chef/resource/service.rb +0 -4
  256. data/lib/chef/resource/smartos_package.rb +3 -4
  257. data/lib/chef/resource/solaris_package.rb +7 -1
  258. data/lib/chef/resource/subversion.rb +0 -1
  259. data/lib/chef/resource/template.rb +2 -3
  260. data/lib/chef/resource/timestamped_deploy.rb +1 -2
  261. data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -1
  262. data/lib/chef/resource/windows_package.rb +3 -4
  263. data/lib/chef/resource/windows_script.rb +3 -0
  264. data/lib/chef/resource/windows_service.rb +2 -2
  265. data/lib/chef/resource/yum_package.rb +3 -1
  266. data/lib/chef/resource_collection.rb +50 -227
  267. data/lib/chef/resource_collection/resource_collection_serialization.rb +59 -0
  268. data/lib/chef/resource_collection/resource_list.rb +89 -0
  269. data/lib/chef/resource_collection/resource_set.rb +170 -0
  270. data/lib/chef/resources.rb +2 -0
  271. data/lib/chef/role.rb +1 -1
  272. data/lib/chef/run_context.rb +5 -1
  273. data/lib/chef/shell/ext.rb +1 -1
  274. data/lib/chef/util/backup.rb +3 -2
  275. data/lib/chef/util/dsc/configuration_generator.rb +115 -0
  276. data/lib/chef/util/dsc/lcm_output_parser.rb +133 -0
  277. data/lib/chef/util/dsc/local_configuration_manager.rb +141 -0
  278. data/lib/chef/util/dsc/resource_info.rb +26 -0
  279. data/lib/chef/util/path_helper.rb +12 -0
  280. data/lib/chef/util/powershell/cmdlet.rb +136 -0
  281. data/lib/chef/util/powershell/cmdlet_result.rb +46 -0
  282. data/lib/chef/version.rb +1 -1
  283. data/lib/chef/win32/api/system.rb +9 -0
  284. data/lib/chef/win32/version.rb +2 -0
  285. data/spec/.DS_Store +0 -0
  286. data/spec/data/.DS_Store +0 -0
  287. data/spec/data/bootstrap/test-hints.erb +1 -1
  288. data/spec/data/bootstrap/test.erb +1 -1
  289. data/spec/data/cb_version_cookbooks/cookbook2/files/test.txt +0 -0
  290. data/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb +0 -0
  291. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -0
  292. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -0
  293. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -0
  294. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -0
  295. data/spec/data/lwrp/.DS_Store +0 -0
  296. data/spec/data/lwrp/providers/.DS_Store +0 -0
  297. data/spec/data/lwrp/providers/buck_passer.rb +9 -2
  298. data/spec/data/lwrp/resources/.DS_Store +0 -0
  299. data/spec/data/lwrp/resources/foo.rb +3 -2
  300. data/spec/data/lwrp_override/.DS_Store +0 -0
  301. data/spec/data/lwrp_override/providers/.DS_Store +0 -0
  302. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -10
  303. data/spec/data/lwrp_override/resources/.DS_Store +0 -0
  304. data/spec/data/lwrp_override/resources/foo.rb +4 -3
  305. data/spec/functional/assets/chefinittest +34 -0
  306. data/spec/functional/assets/testchefsubsys +11 -0
  307. data/spec/functional/dsl/reboot_pending_spec.rb +19 -16
  308. data/spec/functional/event_loggers/windows_eventlog_spec.rb +82 -0
  309. data/spec/functional/knife/cookbook_delete_spec.rb +3 -3
  310. data/spec/functional/knife/exec_spec.rb +1 -1
  311. data/spec/functional/resource/aix_service_spec.rb +136 -0
  312. data/spec/functional/resource/aixinit_service_spec.rb +211 -0
  313. data/spec/functional/resource/base.rb +1 -0
  314. data/spec/functional/resource/batch_spec.rb +4 -11
  315. data/spec/functional/resource/cron_spec.rb +7 -1
  316. data/spec/functional/resource/dsc_script_spec.rb +382 -0
  317. data/spec/functional/resource/env_spec.rb +54 -0
  318. data/spec/functional/resource/execute_spec.rb +113 -0
  319. data/spec/functional/resource/file_spec.rb +2 -0
  320. data/spec/functional/resource/group_spec.rb +7 -4
  321. data/spec/functional/resource/powershell_spec.rb +198 -185
  322. data/spec/functional/resource/rpm_spec.rb +5 -4
  323. data/spec/functional/resource/user/dscl_spec.rb +2 -1
  324. data/spec/functional/util/path_helper_spec.rb +37 -0
  325. data/spec/functional/util/powershell/cmdlet_spec.rb +114 -0
  326. data/spec/integration/client/client_spec.rb +1 -1
  327. data/spec/integration/client/ipv6_spec.rb +1 -1
  328. data/spec/integration/knife/chef_fs_data_store_spec.rb +1 -1
  329. data/spec/integration/knife/chef_repo_path_spec.rb +1 -1
  330. data/spec/integration/knife/chef_repository_file_system_spec.rb +1 -1
  331. data/spec/integration/knife/chefignore_spec.rb +1 -1
  332. data/spec/integration/knife/common_options_spec.rb +1 -1
  333. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +2 -2
  334. data/spec/integration/knife/delete_spec.rb +1 -1
  335. data/spec/integration/knife/deps_spec.rb +1 -1
  336. data/spec/integration/knife/diff_spec.rb +1 -1
  337. data/spec/integration/knife/download_spec.rb +1 -1
  338. data/spec/integration/knife/list_spec.rb +1 -1
  339. data/spec/integration/knife/raw_spec.rb +1 -1
  340. data/spec/integration/knife/redirection_spec.rb +1 -1
  341. data/spec/integration/knife/serve_spec.rb +1 -1
  342. data/spec/integration/knife/show_spec.rb +1 -1
  343. data/spec/integration/knife/upload_spec.rb +4 -3
  344. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
  345. data/spec/spec_helper.rb +15 -0
  346. data/spec/support/chef_helpers.rb +1 -0
  347. data/spec/support/lib/chef/provider/snakeoil.rb +1 -0
  348. data/spec/support/lib/chef/resource/zen_follower.rb +1 -7
  349. data/spec/support/platform_helpers.rb +28 -0
  350. data/spec/support/shared/functional/file_resource.rb +6 -0
  351. data/spec/support/shared/functional/windows_script.rb +118 -0
  352. data/spec/support/shared/integration/integration_helper.rb +5 -2
  353. data/spec/support/shared/matchers/exit_with_code.rb +28 -0
  354. data/spec/support/shared/matchers/match_environment_variable.rb +17 -0
  355. data/spec/support/shared/shared_examples.rb +14 -0
  356. data/spec/support/shared/unit/execute_resource.rb +0 -7
  357. data/spec/support/shared/unit/resource/static_provider_resolution.rb +71 -0
  358. data/spec/support/shared/unit/script_resource.rb +1 -1
  359. data/spec/support/shared/unit/windows_script_resource.rb +35 -2
  360. data/spec/tiny_server.rb +1 -2
  361. data/spec/unit/api_client_spec.rb +5 -1
  362. data/spec/unit/application/{apply.rb → apply_spec.rb} +13 -5
  363. data/spec/unit/application/client_spec.rb +106 -13
  364. data/spec/unit/application/solo_spec.rb +25 -1
  365. data/spec/unit/client_spec.rb +1 -26
  366. data/spec/unit/config_fetcher_spec.rb +2 -1
  367. data/spec/unit/config_spec.rb +91 -2
  368. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +8 -0
  369. data/spec/unit/cookbook/metadata_spec.rb +43 -6
  370. data/spec/unit/cookbook/syntax_check_spec.rb +8 -2
  371. data/spec/unit/cookbook_loader_spec.rb +4 -2
  372. data/spec/unit/cookbook_version_spec.rb +83 -2
  373. data/spec/unit/data_bag_item_spec.rb +5 -1
  374. data/spec/unit/data_bag_spec.rb +6 -1
  375. data/spec/unit/dsl/data_query_spec.rb +8 -110
  376. data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +95 -0
  377. data/spec/unit/encrypted_data_bag_item_spec.rb +16 -23
  378. data/spec/unit/environment_spec.rb +6 -2
  379. data/spec/unit/exceptions_spec.rb +6 -0
  380. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +16 -15
  381. data/spec/unit/json_compat_spec.rb +12 -2
  382. data/spec/unit/knife/bootstrap_spec.rb +16 -63
  383. data/spec/unit/knife/cookbook_site_share_spec.rb +59 -6
  384. data/spec/unit/knife/core/bootstrap_context_spec.rb +8 -37
  385. data/spec/unit/knife/core/subcommand_loader_spec.rb +1 -1
  386. data/spec/unit/knife/core/ui_spec.rb +28 -0
  387. data/spec/unit/knife/data_bag_create_spec.rb +63 -71
  388. data/spec/unit/knife/data_bag_edit_spec.rb +83 -49
  389. data/spec/unit/knife/data_bag_from_file_spec.rb +104 -126
  390. data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -0
  391. data/spec/unit/knife/data_bag_show_spec.rb +74 -72
  392. data/spec/unit/knife/environment_from_file_spec.rb +3 -2
  393. data/spec/unit/knife/ssl_check_spec.rb +46 -1
  394. data/spec/unit/knife/status_spec.rb +1 -2
  395. data/spec/unit/knife_spec.rb +18 -1
  396. data/spec/unit/lwrp_spec.rb +29 -8
  397. data/spec/unit/mixin/homebrew_user_spec.rb +100 -0
  398. data/spec/unit/node_map_spec.rb +155 -0
  399. data/spec/unit/node_spec.rb +11 -0
  400. data/spec/unit/platform/query_helpers_spec.rb +23 -0
  401. data/spec/unit/platform_spec.rb +23 -0
  402. data/spec/unit/provider/breakpoint_spec.rb +9 -9
  403. data/spec/unit/provider/cookbook_file/content_spec.rb +3 -3
  404. data/spec/unit/provider/cookbook_file_spec.rb +1 -1
  405. data/spec/unit/provider/cron/unix_spec.rb +78 -60
  406. data/spec/unit/provider/cron_spec.rb +175 -175
  407. data/spec/unit/provider/deploy/revision_spec.rb +22 -21
  408. data/spec/unit/provider/deploy/timestamped_spec.rb +3 -3
  409. data/spec/unit/provider/deploy_spec.rb +231 -230
  410. data/spec/unit/provider/directory_spec.rb +55 -55
  411. data/spec/unit/provider/dsc_script_spec.rb +174 -0
  412. data/spec/unit/provider/env/windows_spec.rb +70 -34
  413. data/spec/unit/provider/env_spec.rb +95 -49
  414. data/spec/unit/provider/erl_call_spec.rb +9 -9
  415. data/spec/unit/provider/execute_spec.rb +43 -27
  416. data/spec/unit/provider/file/content_spec.rb +9 -9
  417. data/spec/unit/provider/file_spec.rb +1 -1
  418. data/spec/unit/provider/git_spec.rb +221 -159
  419. data/spec/unit/provider/group/dscl_spec.rb +64 -63
  420. data/spec/unit/provider/group/gpasswd_spec.rb +14 -14
  421. data/spec/unit/provider/group/groupadd_spec.rb +33 -33
  422. data/spec/unit/provider/group/groupmod_spec.rb +23 -23
  423. data/spec/unit/provider/group/pw_spec.rb +21 -21
  424. data/spec/unit/provider/group/usermod_spec.rb +20 -20
  425. data/spec/unit/provider/group/windows_spec.rb +15 -15
  426. data/spec/unit/provider/group_spec.rb +76 -76
  427. data/spec/unit/provider/http_request_spec.rb +30 -30
  428. data/spec/unit/provider/ifconfig/aix_spec.rb +20 -20
  429. data/spec/unit/provider/ifconfig/debian_spec.rb +25 -9
  430. data/spec/unit/provider/ifconfig/redhat_spec.rb +13 -13
  431. data/spec/unit/provider/ifconfig_spec.rb +43 -43
  432. data/spec/unit/provider/link_spec.rb +60 -60
  433. data/spec/unit/provider/log_spec.rb +0 -4
  434. data/spec/unit/provider/mdadm_spec.rb +23 -23
  435. data/spec/unit/provider/mount/aix_spec.rb +17 -17
  436. data/spec/unit/provider/mount/mount_spec.rb +115 -119
  437. data/spec/unit/provider/mount/solaris_spec.rb +72 -72
  438. data/spec/unit/provider/mount/windows_spec.rb +24 -24
  439. data/spec/unit/provider/ohai_spec.rb +11 -11
  440. data/spec/unit/provider/package/aix_spec.rb +34 -34
  441. data/spec/unit/provider/package/apt_spec.rb +36 -36
  442. data/spec/unit/provider/package/dpkg_spec.rb +27 -27
  443. data/spec/unit/provider/package/easy_install_spec.rb +16 -16
  444. data/spec/unit/provider/package/freebsd/pkg_spec.rb +53 -53
  445. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +24 -24
  446. data/spec/unit/provider/package/freebsd/port_spec.rb +45 -35
  447. data/spec/unit/provider/package/homebrew_spec.rb +266 -0
  448. data/spec/unit/provider/package/ips_spec.rb +34 -34
  449. data/spec/unit/provider/package/macports_spec.rb +49 -49
  450. data/spec/unit/provider/package/pacman_spec.rb +35 -39
  451. data/spec/unit/provider/package/paludis_spec.rb +20 -20
  452. data/spec/unit/provider/package/portage_spec.rb +38 -38
  453. data/spec/unit/provider/package/rpm_spec.rb +29 -29
  454. data/spec/unit/provider/package/rubygems_spec.rb +284 -270
  455. data/spec/unit/provider/package/smartos_spec.rb +15 -15
  456. data/spec/unit/provider/package/solaris_spec.rb +35 -35
  457. data/spec/unit/provider/package/windows/msi_spec.rb +3 -3
  458. data/spec/unit/provider/package/windows_spec.rb +6 -6
  459. data/spec/unit/provider/package/yum_spec.rb +416 -416
  460. data/spec/unit/provider/package/zypper_spec.rb +47 -47
  461. data/spec/unit/provider/package_spec.rb +107 -107
  462. data/spec/unit/provider/powershell_spec.rb +1 -1
  463. data/spec/unit/provider/registry_key_spec.rb +61 -61
  464. data/spec/unit/provider/remote_directory_spec.rb +36 -36
  465. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +24 -24
  466. data/spec/unit/provider/remote_file/content_spec.rb +45 -45
  467. data/spec/unit/provider/remote_file/fetcher_spec.rb +9 -9
  468. data/spec/unit/provider/remote_file/ftp_spec.rb +32 -32
  469. data/spec/unit/provider/remote_file/http_spec.rb +44 -44
  470. data/spec/unit/provider/remote_file/local_file_spec.rb +9 -9
  471. data/spec/unit/provider/remote_file_spec.rb +3 -3
  472. data/spec/unit/provider/route_spec.rb +63 -63
  473. data/spec/unit/provider/ruby_block_spec.rb +4 -4
  474. data/spec/unit/provider/script_spec.rb +12 -12
  475. data/spec/unit/provider/service/aix_service_spec.rb +181 -0
  476. data/spec/unit/provider/service/aixinit_service_spec.rb +269 -0
  477. data/spec/unit/provider/service/arch_service_spec.rb +48 -48
  478. data/spec/unit/provider/service/debian_service_spec.rb +40 -40
  479. data/spec/unit/provider/service/gentoo_service_spec.rb +28 -28
  480. data/spec/unit/provider/service/init_service_spec.rb +39 -39
  481. data/spec/unit/provider/service/insserv_service_spec.rb +8 -8
  482. data/spec/unit/provider/service/invokercd_service_spec.rb +35 -35
  483. data/spec/unit/provider/service/macosx_spec.rb +49 -49
  484. data/spec/unit/provider/service/redhat_spec.rb +27 -27
  485. data/spec/unit/provider/service/simple_service_spec.rb +28 -28
  486. data/spec/unit/provider/service/solaris_smf_service_spec.rb +43 -46
  487. data/spec/unit/provider/service/systemd_service_spec.rb +63 -63
  488. data/spec/unit/provider/service/upstart_service_spec.rb +78 -78
  489. data/spec/unit/provider/service/windows_spec.rb +92 -92
  490. data/spec/unit/provider/service_spec.rb +40 -40
  491. data/spec/unit/provider/subversion_spec.rb +80 -80
  492. data/spec/unit/provider/template/content_spec.rb +9 -9
  493. data/spec/unit/provider/template_spec.rb +6 -6
  494. data/spec/unit/provider/user/dscl_spec.rb +170 -167
  495. data/spec/unit/provider/user/pw_spec.rb +48 -48
  496. data/spec/unit/provider/user/solaris_spec.rb +8 -8
  497. data/spec/unit/provider/user/useradd_spec.rb +1 -1
  498. data/spec/unit/provider/user/windows_spec.rb +26 -26
  499. data/spec/unit/provider/user_spec.rb +72 -72
  500. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +4 -4
  501. data/spec/unit/provider_resolver_spec.rb +387 -0
  502. data/spec/unit/recipe_spec.rb +33 -12
  503. data/spec/unit/resource/apt_package_spec.rb +10 -13
  504. data/spec/unit/resource/bash_spec.rb +4 -4
  505. data/spec/unit/resource/batch_spec.rb +1 -1
  506. data/spec/unit/resource/breakpoint_spec.rb +11 -7
  507. data/spec/unit/resource/chef_gem_spec.rb +8 -15
  508. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +2 -2
  509. data/spec/unit/resource/conditional_spec.rb +35 -16
  510. data/spec/unit/resource/cookbook_file_spec.rb +13 -13
  511. data/spec/unit/resource/cron_spec.rb +37 -37
  512. data/spec/unit/resource/csh_spec.rb +4 -4
  513. data/spec/unit/resource/deploy_revision_spec.rb +13 -18
  514. data/spec/unit/resource/deploy_spec.rb +60 -55
  515. data/spec/unit/resource/directory_spec.rb +18 -18
  516. data/spec/unit/resource/dpkg_package_spec.rb +8 -14
  517. data/spec/unit/resource/dsc_script_spec.rb +98 -0
  518. data/spec/unit/resource/easy_install_package_spec.rb +9 -18
  519. data/spec/unit/resource/env_spec.rb +12 -12
  520. data/spec/unit/resource/erl_call_spec.rb +11 -11
  521. data/spec/unit/resource/execute_spec.rb +5 -0
  522. data/spec/unit/resource/file_spec.rb +29 -29
  523. data/spec/unit/resource/freebsd_package_spec.rb +11 -12
  524. data/spec/unit/resource/gem_package_spec.rb +8 -15
  525. data/spec/unit/resource/git_spec.rb +12 -8
  526. data/spec/unit/resource/group_spec.rb +27 -27
  527. data/spec/unit/resource/homebrew_package_spec.rb +50 -0
  528. data/spec/unit/resource/http_request_spec.rb +6 -6
  529. data/spec/unit/resource/ifconfig_spec.rb +8 -8
  530. data/spec/unit/resource/ips_package_spec.rb +10 -13
  531. data/spec/unit/resource/link_spec.rb +25 -25
  532. data/spec/unit/resource/log_spec.rb +9 -9
  533. data/spec/unit/resource/macports_package_spec.rb +8 -13
  534. data/spec/unit/resource/mdadm_spec.rb +18 -18
  535. data/spec/unit/resource/mount_spec.rb +45 -45
  536. data/spec/unit/resource/ohai_spec.rb +7 -7
  537. data/spec/unit/resource/package_spec.rb +12 -12
  538. data/spec/unit/resource/pacman_package_spec.rb +8 -14
  539. data/spec/unit/resource/perl_spec.rb +4 -4
  540. data/spec/unit/resource/portage_package_spec.rb +3 -3
  541. data/spec/unit/resource/powershell_spec.rb +7 -7
  542. data/spec/unit/resource/python_spec.rb +4 -4
  543. data/spec/unit/resource/registry_key_spec.rb +32 -32
  544. data/spec/unit/resource/remote_directory_spec.rb +17 -17
  545. data/spec/unit/resource/remote_file_spec.rb +41 -41
  546. data/spec/unit/resource/route_spec.rb +19 -19
  547. data/spec/unit/resource/rpm_package_spec.rb +9 -13
  548. data/spec/unit/resource/ruby_block_spec.rb +8 -8
  549. data/spec/unit/resource/ruby_spec.rb +4 -4
  550. data/spec/unit/resource/scm_spec.rb +40 -40
  551. data/spec/unit/resource/script_spec.rb +2 -2
  552. data/spec/unit/resource/service_spec.rb +37 -47
  553. data/spec/unit/resource/smartos_package_spec.rb +10 -15
  554. data/spec/unit/resource/solaris_package_spec.rb +13 -28
  555. data/spec/unit/resource/subversion_spec.rb +16 -12
  556. data/spec/unit/resource/template_spec.rb +35 -35
  557. data/spec/unit/resource/timestamped_deploy_spec.rb +30 -4
  558. data/spec/unit/resource/user_spec.rb +23 -23
  559. data/spec/unit/resource/windows_package_spec.rb +17 -10
  560. data/spec/unit/resource/windows_service_spec.rb +9 -6
  561. data/spec/unit/resource/yum_package_spec.rb +16 -21
  562. data/spec/unit/resource_collection/resource_list_spec.rb +137 -0
  563. data/spec/unit/resource_collection/resource_set_spec.rb +199 -0
  564. data/spec/unit/resource_collection_spec.rb +73 -92
  565. data/spec/unit/resource_definition_spec.rb +38 -40
  566. data/spec/unit/resource_reporter_spec.rb +3 -3
  567. data/spec/unit/resource_spec.rb +68 -33
  568. data/spec/unit/rest_spec.rb +83 -76
  569. data/spec/unit/role_spec.rb +5 -0
  570. data/spec/unit/run_list_spec.rb +5 -1
  571. data/spec/unit/runner_spec.rb +245 -238
  572. data/spec/unit/shell/shell_ext_spec.rb +1 -1
  573. data/spec/unit/user_spec.rb +5 -1
  574. data/spec/unit/util/dsc/configuration_generator_spec.rb +171 -0
  575. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +169 -0
  576. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +139 -0
  577. data/spec/unit/util/path_helper_spec.rb +23 -1
  578. data/spec/unit/util/powershell/cmdlet_spec.rb +106 -0
  579. data/spec/unit/workstation_config_loader_spec.rb +1 -1
  580. metadata +257 -191
  581. checksums.yaml +0 -7
  582. data/distro/README +0 -2
  583. data/distro/arch/etc/conf.d/chef-client.conf +0 -5
  584. data/distro/arch/etc/conf.d/chef-expander.conf +0 -8
  585. data/distro/arch/etc/conf.d/chef-server-webui.conf +0 -10
  586. data/distro/arch/etc/conf.d/chef-server.conf +0 -10
  587. data/distro/arch/etc/conf.d/chef-solr.conf +0 -8
  588. data/distro/arch/etc/rc.d/chef-client +0 -90
  589. data/distro/arch/etc/rc.d/chef-expander +0 -78
  590. data/distro/arch/etc/rc.d/chef-server +0 -78
  591. data/distro/arch/etc/rc.d/chef-server-webui +0 -78
  592. data/distro/arch/etc/rc.d/chef-solr +0 -78
  593. data/distro/debian/etc/default/chef-client +0 -4
  594. data/distro/debian/etc/default/chef-expander +0 -8
  595. data/distro/debian/etc/default/chef-server +0 -9
  596. data/distro/debian/etc/default/chef-server-webui +0 -9
  597. data/distro/debian/etc/default/chef-solr +0 -8
  598. data/distro/debian/etc/init.d/chef-client +0 -212
  599. data/distro/debian/etc/init.d/chef-expander +0 -176
  600. data/distro/debian/etc/init.d/chef-server +0 -122
  601. data/distro/debian/etc/init.d/chef-server-webui +0 -123
  602. data/distro/debian/etc/init.d/chef-solr +0 -176
  603. data/distro/debian/etc/init/chef-client.conf +0 -17
  604. data/distro/debian/etc/init/chef-expander.conf +0 -17
  605. data/distro/debian/etc/init/chef-server-webui.conf +0 -17
  606. data/distro/debian/etc/init/chef-server.conf +0 -17
  607. data/distro/debian/etc/init/chef-solr.conf +0 -17
  608. data/distro/redhat/etc/init.d/chef-client +0 -121
  609. data/distro/redhat/etc/init.d/chef-expander +0 -104
  610. data/distro/redhat/etc/init.d/chef-server +0 -112
  611. data/distro/redhat/etc/init.d/chef-server-webui +0 -112
  612. data/distro/redhat/etc/init.d/chef-solr +0 -104
  613. data/distro/redhat/etc/logrotate.d/chef-client +0 -8
  614. data/distro/redhat/etc/logrotate.d/chef-expander +0 -8
  615. data/distro/redhat/etc/logrotate.d/chef-server +0 -8
  616. data/distro/redhat/etc/logrotate.d/chef-server-webui +0 -8
  617. data/distro/redhat/etc/logrotate.d/chef-solr +0 -8
  618. data/distro/redhat/etc/sysconfig/chef-client +0 -15
  619. data/distro/redhat/etc/sysconfig/chef-expander +0 -7
  620. data/distro/redhat/etc/sysconfig/chef-server +0 -14
  621. data/distro/redhat/etc/sysconfig/chef-server-webui +0 -14
  622. data/distro/redhat/etc/sysconfig/chef-solr +0 -8
  623. data/distro/windows/service_manager.rb +0 -20
  624. data/lib/chef/resource_platform_map.rb +0 -151
  625. data/spec/support/shared/matchers.rb +0 -17
  626. data/spec/unit/resource_platform_map_spec.rb +0 -164
@@ -53,27 +53,27 @@ describe Chef::Provider::File::Content do
53
53
  describe "when the resource has a content attribute set" do
54
54
 
55
55
  before do
56
- new_resource.stub(:content).and_return("Do do do do, do do do do, do do do do, do do do do")
56
+ allow(new_resource).to receive(:content).and_return("Do do do do, do do do do, do do do do, do do do do")
57
57
  end
58
58
 
59
59
  it "returns a tempfile" do
60
- content.tempfile.should be_a_kind_of(Tempfile)
60
+ expect(content.tempfile).to be_a_kind_of(Tempfile)
61
61
  end
62
62
 
63
63
  it "the tempfile contents should match the resource contents" do
64
- IO.read(content.tempfile.path).should == new_resource.content
64
+ expect(IO.read(content.tempfile.path)).to eq(new_resource.content)
65
65
  end
66
66
 
67
67
  it "returns a tempfile in the tempdir when :file_staging_uses_destdir is not set" do
68
68
  Chef::Config[:file_staging_uses_destdir] = false
69
- content.tempfile.path.start_with?(Dir::tmpdir).should be_true
70
- canonicalize_path(content.tempfile.path).start_with?(enclosing_directory).should be_false
69
+ expect(content.tempfile.path.start_with?(Dir::tmpdir)).to be_true
70
+ expect(canonicalize_path(content.tempfile.path).start_with?(enclosing_directory)).to be_false
71
71
  end
72
72
 
73
73
  it "returns a tempfile in the destdir when :file_desployment_uses_destdir is not set" do
74
74
  Chef::Config[:file_staging_uses_destdir] = true
75
- content.tempfile.path.start_with?(Dir::tmpdir).should be_false
76
- canonicalize_path(content.tempfile.path).start_with?(enclosing_directory).should be_true
75
+ expect(content.tempfile.path.start_with?(Dir::tmpdir)).to be_false
76
+ expect(canonicalize_path(content.tempfile.path).start_with?(enclosing_directory)).to be_true
77
77
  end
78
78
 
79
79
  end
@@ -81,11 +81,11 @@ describe Chef::Provider::File::Content do
81
81
  describe "when the resource does not have a content attribute set" do
82
82
 
83
83
  before do
84
- new_resource.stub(:content).and_return(nil)
84
+ allow(new_resource).to receive(:content).and_return(nil)
85
85
  end
86
86
 
87
87
  it "should return nil instead of a tempfile" do
88
- content.tempfile.should be_nil
88
+ expect(content.tempfile).to be_nil
89
89
  end
90
90
 
91
91
  end
@@ -46,7 +46,7 @@ describe Chef::Provider::File do
46
46
 
47
47
  let(:provider) do
48
48
  provider = described_class.new(resource, run_context)
49
- provider.stub(:content).and_return(content)
49
+ allow(provider).to receive(:content).and_return(content)
50
50
  provider
51
51
  end
52
52
 
@@ -21,7 +21,7 @@ require 'spec_helper'
21
21
  describe Chef::Provider::Git do
22
22
 
23
23
  before(:each) do
24
- STDOUT.stub(:tty?).and_return(true)
24
+ allow(STDOUT).to receive(:tty?).and_return(true)
25
25
  Chef::Log.level = :info
26
26
 
27
27
  @current_resource = Chef::Resource::Git.new("web2.0 app")
@@ -47,36 +47,36 @@ describe Chef::Provider::Git do
47
47
  end
48
48
 
49
49
  it "sets the current revision to nil if the deploy dir does not exist" do
50
- ::File.should_receive(:exist?).with("/my/deploy/dir/.git").and_return(false)
51
- @provider.find_current_revision.should be_nil
50
+ expect(::File).to receive(:exist?).with("/my/deploy/dir/.git").and_return(false)
51
+ expect(@provider.find_current_revision).to be_nil
52
52
  end
53
53
 
54
54
  it "determines the current revision when there is one" do
55
- ::File.should_receive(:exist?).with("/my/deploy/dir/.git").and_return(true)
55
+ expect(::File).to receive(:exist?).with("/my/deploy/dir/.git").and_return(true)
56
56
  @stdout = "9b4d8dc38dd471246e7cfb1c3c1ad14b0f2bee13\n"
57
- @provider.should_receive(:shell_out!).with('git rev-parse HEAD', {:cwd => '/my/deploy/dir', :returns => [0,128]}).and_return(double("ShellOut result", :stdout => @stdout))
58
- @provider.find_current_revision.should eql("9b4d8dc38dd471246e7cfb1c3c1ad14b0f2bee13")
57
+ expect(@provider).to receive(:shell_out!).with('git rev-parse HEAD', {:cwd => '/my/deploy/dir', :returns => [0,128]}).and_return(double("ShellOut result", :stdout => @stdout))
58
+ expect(@provider.find_current_revision).to eql("9b4d8dc38dd471246e7cfb1c3c1ad14b0f2bee13")
59
59
  end
60
60
 
61
61
  it "gives the current revision as nil when there is no current revision" do
62
- ::File.should_receive(:exist?).with("/my/deploy/dir/.git").and_return(true)
62
+ expect(::File).to receive(:exist?).with("/my/deploy/dir/.git").and_return(true)
63
63
  @stderr = "fatal: Not a git repository (or any of the parent directories): .git"
64
64
  @stdout = ""
65
- @provider.should_receive(:shell_out!).with('git rev-parse HEAD', :cwd => '/my/deploy/dir', :returns => [0,128]).and_return(double("ShellOut result", :stdout => "", :stderr => @stderr))
66
- @provider.find_current_revision.should be_nil
65
+ expect(@provider).to receive(:shell_out!).with('git rev-parse HEAD', :cwd => '/my/deploy/dir', :returns => [0,128]).and_return(double("ShellOut result", :stdout => "", :stderr => @stderr))
66
+ expect(@provider.find_current_revision).to be_nil
67
67
  end
68
68
  end
69
69
 
70
70
  it "creates a current_resource with the currently deployed revision when a clone exists in the destination dir" do
71
- @provider.stub(:find_current_revision).and_return("681c9802d1c62a45b490786c18f0b8216b309440")
71
+ allow(@provider).to receive(:find_current_revision).and_return("681c9802d1c62a45b490786c18f0b8216b309440")
72
72
  @provider.load_current_resource
73
- @provider.current_resource.name.should eql(@resource.name)
74
- @provider.current_resource.revision.should eql("681c9802d1c62a45b490786c18f0b8216b309440")
73
+ expect(@provider.current_resource.name).to eql(@resource.name)
74
+ expect(@provider.current_resource.revision).to eql("681c9802d1c62a45b490786c18f0b8216b309440")
75
75
  end
76
76
 
77
77
  it "keeps the node and resource passed to it on initialize" do
78
- @provider.node.should equal(@node)
79
- @provider.new_resource.should equal(@resource)
78
+ expect(@provider.node).to equal(@node)
79
+ expect(@provider.new_resource).to equal(@resource)
80
80
  end
81
81
 
82
82
  context "resolving revisions to a SHA" do
@@ -86,15 +86,15 @@ describe Chef::Provider::Git do
86
86
  end
87
87
 
88
88
  it "returns resource.revision as is if revision is already a full SHA" do
89
- @provider.target_revision.should eql("d35af14d41ae22b19da05d7d03a0bafc321b244c")
89
+ expect(@provider.target_revision).to eql("d35af14d41ae22b19da05d7d03a0bafc321b244c")
90
90
  end
91
91
 
92
92
  it "converts resource.revision from a tag to a SHA" do
93
93
  @resource.revision "v1.0"
94
94
  @stdout = ("d03c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/0.8-alpha\n" +
95
95
  "503c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/v1.0\n")
96
- @provider.should_receive(:shell_out!).with(@git_ls_remote + "\"v1.0*\"", {:log_tag=>"git[web2.0 app]"}).and_return(double("ShellOut result", :stdout => @stdout))
97
- @provider.target_revision.should eql("503c22a5e41f5ae3193460cca044ed1435029f53")
96
+ expect(@provider).to receive(:shell_out!).with(@git_ls_remote + "\"v1.0*\"", {:log_tag=>"git[web2.0 app]"}).and_return(double("ShellOut result", :stdout => @stdout))
97
+ expect(@provider.target_revision).to eql("503c22a5e41f5ae3193460cca044ed1435029f53")
98
98
  end
99
99
 
100
100
  it "converts resource.revision from an annotated tag to the tagged SHA (not SHA of tag)" do
@@ -102,40 +102,86 @@ describe Chef::Provider::Git do
102
102
  @stdout = ("d03c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/0.8-alpha\n" +
103
103
  "503c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/v1.0\n" +
104
104
  "663c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/v1.0^{}\n")
105
- @provider.should_receive(:shell_out!).with(@git_ls_remote + "\"v1.0*\"", {:log_tag=>"git[web2.0 app]"}).and_return(double("ShellOut result", :stdout => @stdout))
106
- @provider.target_revision.should eql("663c22a5e41f5ae3193460cca044ed1435029f53")
105
+ expect(@provider).to receive(:shell_out!).with(@git_ls_remote + "\"v1.0*\"", {:log_tag=>"git[web2.0 app]"}).and_return(double("ShellOut result", :stdout => @stdout))
106
+ expect(@provider.target_revision).to eql("663c22a5e41f5ae3193460cca044ed1435029f53")
107
+ end
108
+
109
+ it "converts resource.revision from a tag to a SHA using an exact match" do
110
+ @resource.revision "v1.0"
111
+ @stdout = ("d03c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/0.8-alpha\n" +
112
+ "663c22a5e41f5ae3193460cca044ed1435029f53\trefs/tags/releases/v1.0\n" +
113
+ "503c22a5e41f5ae3193460cca044ed1435029f53\trefs/tags/v1.0\n")
114
+ expect(@provider).to receive(:shell_out!).with(@git_ls_remote + "\"v1.0*\"", {:log_tag=>"git[web2.0 app]"}).and_return(double("ShellOut result", :stdout => @stdout))
115
+ expect(@provider.target_revision).to eql("503c22a5e41f5ae3193460cca044ed1435029f53")
116
+ end
117
+
118
+ it "converts resource.revision from a tag to a SHA, matching tags first, then heads" do
119
+ @resource.revision "v1.0"
120
+ @stdout = ("d03c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/0.8-alpha\n" +
121
+ "663c22a5e41f5ae3193460cca044ed1435029f53\trefs/tags/v1.0\n" +
122
+ "503c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/v1.0\n")
123
+ expect(@provider).to receive(:shell_out!).with(@git_ls_remote + "\"v1.0*\"", {:log_tag=>"git[web2.0 app]"}).and_return(double("ShellOut result", :stdout => @stdout))
124
+ expect(@provider.target_revision).to eql("663c22a5e41f5ae3193460cca044ed1435029f53")
125
+ end
126
+
127
+ it "converts resource.revision from a tag to a SHA, matching heads if no tags match" do
128
+ @resource.revision "v1.0"
129
+ @stdout = ("d03c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/0.8-alpha\n" +
130
+ "663c22a5e41f5ae3193460cca044ed1435029f53\trefs/tags/v1.1\n" +
131
+ "503c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/v1.0\n")
132
+ expect(@provider).to receive(:shell_out!).with(@git_ls_remote + "\"v1.0*\"", {:log_tag=>"git[web2.0 app]"}).and_return(double("ShellOut result", :stdout => @stdout))
133
+ expect(@provider.target_revision).to eql("503c22a5e41f5ae3193460cca044ed1435029f53")
134
+ end
135
+
136
+ it "converts resource.revision from a tag to a SHA, matching tags first, then heads, then revision" do
137
+ @resource.revision "refs/pulls/v1.0"
138
+ @stdout = ("d03c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/0.8-alpha\n" +
139
+ "663c22a5e41f5ae3193460cca044ed1435029f53\trefs/tags/v1.0\n" +
140
+ "805c22a5e41f5ae3193460cca044ed1435029f53\trefs/pulls/v1.0\n" +
141
+ "503c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/v1.0\n")
142
+ expect(@provider).to receive(:shell_out!).with(@git_ls_remote + "\"refs/pulls/v1.0*\"", {:log_tag=>"git[web2.0 app]"}).and_return(double("ShellOut result", :stdout => @stdout))
143
+ expect(@provider.target_revision).to eql("805c22a5e41f5ae3193460cca044ed1435029f53")
144
+ end
145
+
146
+ it "converts resource.revision from a tag to a SHA, using full path if provided" do
147
+ @resource.revision "refs/heads/v1.0"
148
+ @stdout = ("d03c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/0.8-alpha\n" +
149
+ "663c22a5e41f5ae3193460cca044ed1435029f53\trefs/tags/v1.0\n" +
150
+ "503c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/v1.0\n")
151
+ expect(@provider).to receive(:shell_out!).with(@git_ls_remote + "\"refs/heads/v1.0*\"", {:log_tag=>"git[web2.0 app]"}).and_return(double("ShellOut result", :stdout => @stdout))
152
+ expect(@provider.target_revision).to eql("503c22a5e41f5ae3193460cca044ed1435029f53")
107
153
  end
108
154
 
109
155
  it "raises an invalid remote reference error if you try to deploy from ``origin'' and assertions are run" do
110
156
  @resource.revision "origin/"
111
157
  @provider.action = :checkout
112
158
  @provider.define_resource_requirements
113
- ::File.stub(:directory?).with("/my/deploy").and_return(true)
114
- lambda {@provider.process_resource_requirements}.should raise_error(Chef::Exceptions::InvalidRemoteGitReference)
159
+ allow(::File).to receive(:directory?).with("/my/deploy").and_return(true)
160
+ expect {@provider.process_resource_requirements}.to raise_error(Chef::Exceptions::InvalidRemoteGitReference)
115
161
  end
116
162
 
117
163
  it "raises an unresolvable git reference error if the revision can't be resolved to any revision and assertions are run" do
118
164
  @resource.revision "FAIL, that's the revision I want"
119
165
  @provider.action = :checkout
120
- @provider.should_receive(:shell_out!).and_return(double("ShellOut result", :stdout => "\n"))
166
+ expect(@provider).to receive(:shell_out!).and_return(double("ShellOut result", :stdout => "\n"))
121
167
  @provider.define_resource_requirements
122
- lambda { @provider.process_resource_requirements }.should raise_error(Chef::Exceptions::UnresolvableGitReference)
168
+ expect { @provider.process_resource_requirements }.to raise_error(Chef::Exceptions::UnresolvableGitReference)
123
169
  end
124
170
 
125
171
  it "does not raise an error if the revision can't be resolved when assertions are not run" do
126
172
  @resource.revision "FAIL, that's the revision I want"
127
- @provider.should_receive(:shell_out!).and_return(double("ShellOut result", :stdout => "\n"))
128
- @provider.target_revision.should == nil
173
+ expect(@provider).to receive(:shell_out!).and_return(double("ShellOut result", :stdout => "\n"))
174
+ expect(@provider.target_revision).to eq(nil)
129
175
  end
130
176
 
131
177
  it "does not raise an error when the revision is valid and assertions are run." do
132
178
  @resource.revision "0.8-alpha"
133
179
  @stdout = "503c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/0.8-alpha\n"
134
- @provider.should_receive(:shell_out!).with(@git_ls_remote + "\"0.8-alpha*\"", {:log_tag=>"git[web2.0 app]"}).and_return(double("ShellOut result", :stdout => @stdout))
180
+ expect(@provider).to receive(:shell_out!).with(@git_ls_remote + "\"0.8-alpha*\"", {:log_tag=>"git[web2.0 app]"}).and_return(double("ShellOut result", :stdout => @stdout))
135
181
  @provider.action = :checkout
136
- ::File.stub(:directory?).with("/my/deploy").and_return(true)
182
+ allow(::File).to receive(:directory?).with("/my/deploy").and_return(true)
137
183
  @provider.define_resource_requirements
138
- lambda { @provider.process_resource_requirements }.should_not raise_error
184
+ expect { @provider.process_resource_requirements }.not_to raise_error
139
185
  end
140
186
 
141
187
  it "gives the latest HEAD revision SHA if nothing is specified" do
@@ -156,13 +202,13 @@ b7d19519a1c15f1c1a324e2683bd728b6198ce5a\trefs/tags/0.7.8^{}
156
202
  ebc1b392fe7e8f0fbabc305c299b4d365d2b4d9b\trefs/tags/chef-server-package
157
203
  SHAS
158
204
  @resource.revision ''
159
- @provider.should_receive(:shell_out!).with(@git_ls_remote + "\"HEAD\"", {:log_tag=>"git[web2.0 app]"}).and_return(double("ShellOut result", :stdout => @stdout))
160
- @provider.target_revision.should eql("28af684d8460ba4793eda3e7ac238c864a5d029a")
205
+ expect(@provider).to receive(:shell_out!).with(@git_ls_remote + "\"HEAD\"", {:log_tag=>"git[web2.0 app]"}).and_return(double("ShellOut result", :stdout => @stdout))
206
+ expect(@provider.target_revision).to eql("28af684d8460ba4793eda3e7ac238c864a5d029a")
161
207
  end
162
208
  end
163
209
 
164
210
  it "responds to :revision_slug as an alias for target_revision" do
165
- @provider.should respond_to(:revision_slug)
211
+ expect(@provider).to respond_to(:revision_slug)
166
212
  end
167
213
 
168
214
  context "with an ssh wrapper" do
@@ -179,11 +225,11 @@ SHAS
179
225
  before do
180
226
  @resource.user deploy_user
181
227
  @resource.ssh_wrapper wrapper
182
- Etc.stub(:getpwnam).and_return(double("Struct::Passwd", :name => @resource.user, :dir => "/home/deployNinja"))
228
+ allow(Etc).to receive(:getpwnam).and_return(double("Struct::Passwd", :name => @resource.user, :dir => "/home/deployNinja"))
183
229
  end
184
230
  context "without a timeout set" do
185
231
  it "clones a repo with default git options" do
186
- @provider.should_receive(:shell_out!).with(expected_cmd, default_options)
232
+ expect(@provider).to receive(:shell_out!).with(expected_cmd, default_options)
187
233
  @provider.clone
188
234
  end
189
235
  end
@@ -191,7 +237,7 @@ SHAS
191
237
  let (:seconds) { 10 }
192
238
  before { @resource.timeout(seconds) }
193
239
  it "clones a repo with amended git options" do
194
- @provider.should_receive(:shell_out!).with(expected_cmd, default_options.merge(:timeout => seconds))
240
+ expect(@provider).to receive(:shell_out!).with(expected_cmd, default_options.merge(:timeout => seconds))
195
241
  @provider.clone
196
242
  end
197
243
  end
@@ -211,7 +257,7 @@ SHAS
211
257
  end
212
258
  before { @resource.environment(override_home) }
213
259
  it "clones a repo with amended git options with specific home" do
214
- @provider.should_receive(:shell_out!).with(expected_cmd, overrided_options)
260
+ expect(@provider).to receive(:shell_out!).with(expected_cmd, overrided_options)
215
261
  @provider.clone
216
262
  end
217
263
  end
@@ -219,11 +265,11 @@ SHAS
219
265
 
220
266
  it "runs a clone command with escaped destination" do
221
267
  @resource.user "deployNinja"
222
- Etc.stub(:getpwnam).and_return(double("Struct::Passwd", :name => @resource.user, :dir => "/home/deployNinja"))
268
+ allow(Etc).to receive(:getpwnam).and_return(double("Struct::Passwd", :name => @resource.user, :dir => "/home/deployNinja"))
223
269
  @resource.destination "/Application Support/with/space"
224
270
  @resource.ssh_wrapper "do_it_this_way.sh"
225
271
  expected_cmd = "git clone \"git://github.com/opscode/chef.git\" \"/Application Support/with/space\""
226
- @provider.should_receive(:shell_out!).with(expected_cmd, :user => "deployNinja",
272
+ expect(@provider).to receive(:shell_out!).with(expected_cmd, :user => "deployNinja",
227
273
  :environment =>{"GIT_SSH"=>"do_it_this_way.sh",
228
274
  "HOME" => "/home/deployNinja"},
229
275
  :log_tag => "git[web2.0 app]")
@@ -233,53 +279,69 @@ SHAS
233
279
  it "compiles a clone command using --depth for shallow cloning" do
234
280
  @resource.depth 5
235
281
  expected_cmd = "git clone --depth 5 \"git://github.com/opscode/chef.git\" \"/my/deploy/dir\""
236
- @provider.should_receive(:shell_out!).with(expected_cmd, :log_tag => "git[web2.0 app]")
282
+ version_response = double('shell_out')
283
+ allow(version_response).to receive(:stdout) { 'git version 1.7.9' }
284
+ expect(@provider).to receive(:shell_out!).with("git --version",
285
+ :log_tag => "git[web2.0 app]").and_return(version_response)
286
+ expect(@provider).to receive(:shell_out!).with(expected_cmd, :log_tag => "git[web2.0 app]")
287
+ @provider.clone
288
+ end
289
+
290
+ it "compiles a clone command using --no-single-branch for shallow cloning when git >= 1.7.10" do
291
+ @resource.depth 5
292
+ expected_cmd = "git clone --depth 5 --no-single-branch \"git://github.com/opscode/chef.git\" \"/my/deploy/dir\""
293
+ version_response = double('shell_out')
294
+ allow(version_response).to receive(:stdout) { 'git version 1.7.10' }
295
+ expect(@provider).to receive(:shell_out!).with("git --version",
296
+ :log_tag => "git[web2.0 app]").and_return(version_response)
297
+ expect(@provider).to receive(:shell_out!).with(expected_cmd, :log_tag => "git[web2.0 app]")
237
298
  @provider.clone
238
299
  end
239
300
 
240
301
  it "compiles a clone command with a remote other than ``origin''" do
241
302
  @resource.remote "opscode"
242
303
  expected_cmd = "git clone -o opscode \"git://github.com/opscode/chef.git\" \"/my/deploy/dir\""
243
- @provider.should_receive(:shell_out!).with(expected_cmd, :log_tag => "git[web2.0 app]")
304
+ expect(@provider).to receive(:shell_out!).with(expected_cmd, :log_tag => "git[web2.0 app]")
244
305
  @provider.clone
245
306
  end
246
307
 
247
- it "runs a checkout command with default options and uses -B to reset branches if necessary" do
248
- expected_cmd = 'git checkout -B deploy d35af14d41ae22b19da05d7d03a0bafc321b244c'
249
- @provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir",
250
- :log_tag => "git[web2.0 app]")
308
+ it "runs a checkout command with default options" do
309
+ expect(@provider).to receive(:shell_out!).with('git branch -f deploy d35af14d41ae22b19da05d7d03a0bafc321b244c', :cwd => "/my/deploy/dir",
310
+ :log_tag => "git[web2.0 app]").ordered
311
+ expect(@provider).to receive(:shell_out!).with('git checkout deploy', :cwd => "/my/deploy/dir",
312
+ :log_tag => "git[web2.0 app]").ordered
251
313
  @provider.checkout
252
314
  end
253
315
 
254
316
  it "runs an enable_submodule command" do
255
317
  @resource.enable_submodules true
256
318
  expected_cmd = "git submodule sync"
257
- @provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir",
319
+ expect(@provider).to receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir",
258
320
  :log_tag => "git[web2.0 app]")
259
321
  expected_cmd = "git submodule update --init --recursive"
260
- @provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir", :log_tag => "git[web2.0 app]")
322
+ expect(@provider).to receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir", :log_tag => "git[web2.0 app]")
261
323
  @provider.enable_submodules
262
324
  end
263
325
 
264
326
  it "does nothing for enable_submodules if resource.enable_submodules #=> false" do
265
- @provider.should_not_receive(:shell_out!)
327
+ expect(@provider).not_to receive(:shell_out!)
266
328
  @provider.enable_submodules
267
329
  end
268
330
 
269
331
  it "runs a sync command with default options" do
270
- @provider.should_receive(:setup_remote_tracking_branches).with(@resource.remote, @resource.repository)
332
+ expect(@provider).to receive(:setup_remote_tracking_branches).with(@resource.remote, @resource.repository)
271
333
  expected_cmd = "git fetch origin && git fetch origin --tags && git reset --hard d35af14d41ae22b19da05d7d03a0bafc321b244c"
272
- @provider.should_receive(:shell_out!).with(expected_cmd, :cwd=> "/my/deploy/dir", :log_tag => "git[web2.0 app]")
334
+ expect(@provider).to receive(:shell_out!).with(expected_cmd, :cwd=> "/my/deploy/dir", :log_tag => "git[web2.0 app]")
273
335
  @provider.fetch_updates
274
336
  end
275
337
 
276
338
  it "runs a sync command with the user and group specified in the resource" do
277
339
  @resource.user("whois")
278
- Etc.stub(:getpwnam).and_return(double("Struct::Passwd", :name => @resource.user, :dir => "/home/whois"))
340
+ allow(Etc).to receive(:getpwnam).and_return(double("Struct::Passwd", :name => @resource.user, :dir => "/home/whois"))
279
341
  @resource.group("thisis")
280
- @provider.should_receive(:setup_remote_tracking_branches).with(@resource.remote, @resource.repository)
342
+ expect(@provider).to receive(:setup_remote_tracking_branches).with(@resource.remote, @resource.repository)
281
343
  expected_cmd = "git fetch origin && git fetch origin --tags && git reset --hard d35af14d41ae22b19da05d7d03a0bafc321b244c"
282
- @provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir",
344
+ expect(@provider).to receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir",
283
345
  :user => "whois", :group => "thisis",
284
346
  :log_tag => "git[web2.0 app]",
285
347
  :environment=>{"HOME"=>"/home/whois"})
@@ -288,17 +350,17 @@ SHAS
288
350
 
289
351
  it "configures remote tracking branches when remote is ``origin''" do
290
352
  @resource.remote "origin"
291
- @provider.should_receive(:setup_remote_tracking_branches).with(@resource.remote, @resource.repository)
353
+ expect(@provider).to receive(:setup_remote_tracking_branches).with(@resource.remote, @resource.repository)
292
354
  fetch_command = "git fetch origin && git fetch origin --tags && git reset --hard d35af14d41ae22b19da05d7d03a0bafc321b244c"
293
- @provider.should_receive(:shell_out!).with(fetch_command, :cwd => "/my/deploy/dir", :log_tag => "git[web2.0 app]")
355
+ expect(@provider).to receive(:shell_out!).with(fetch_command, :cwd => "/my/deploy/dir", :log_tag => "git[web2.0 app]")
294
356
  @provider.fetch_updates
295
357
  end
296
358
 
297
359
  it "configures remote tracking branches when remote is not ``origin''" do
298
360
  @resource.remote "opscode"
299
- @provider.should_receive(:setup_remote_tracking_branches).with(@resource.remote, @resource.repository)
361
+ expect(@provider).to receive(:setup_remote_tracking_branches).with(@resource.remote, @resource.repository)
300
362
  fetch_command = "git fetch opscode && git fetch opscode --tags && git reset --hard d35af14d41ae22b19da05d7d03a0bafc321b244c"
301
- @provider.should_receive(:shell_out!).with(fetch_command, :cwd => "/my/deploy/dir", :log_tag => "git[web2.0 app]")
363
+ expect(@provider).to receive(:shell_out!).with(fetch_command, :cwd => "/my/deploy/dir", :log_tag => "git[web2.0 app]")
302
364
  @provider.fetch_updates
303
365
  end
304
366
 
@@ -306,14 +368,14 @@ SHAS
306
368
 
307
369
  it "checks if a remote with this name already exists" do
308
370
  command_response = double('shell_out')
309
- command_response.stub(:exitstatus) { 1 }
371
+ allow(command_response).to receive(:exitstatus) { 1 }
310
372
  expected_command = "git config --get remote.#{@resource.remote}.url"
311
- @provider.should_receive(:shell_out!).with(expected_command,
373
+ expect(@provider).to receive(:shell_out!).with(expected_command,
312
374
  :cwd => "/my/deploy/dir",
313
375
  :log_tag => "git[web2.0 app]",
314
376
  :returns => [0,1,2]).and_return(command_response)
315
377
  add_remote_command = "git remote add #{@resource.remote} #{@resource.repository}"
316
- @provider.should_receive(:shell_out!).with(add_remote_command,
378
+ expect(@provider).to receive(:shell_out!).with(add_remote_command,
317
379
  :cwd => "/my/deploy/dir",
318
380
  :log_tag => "git[web2.0 app]")
319
381
  @provider.setup_remote_tracking_branches(@resource.remote, @resource.repository)
@@ -322,11 +384,11 @@ SHAS
322
384
  it "runs the config with the user and group specified in the resource" do
323
385
  @resource.user("whois")
324
386
  @resource.group("thisis")
325
- Etc.stub(:getpwnam).and_return(double("Struct::Passwd", :name => @resource.user, :dir => "/home/whois"))
387
+ allow(Etc).to receive(:getpwnam).and_return(double("Struct::Passwd", :name => @resource.user, :dir => "/home/whois"))
326
388
  command_response = double('shell_out')
327
- command_response.stub(:exitstatus) { 1 }
389
+ allow(command_response).to receive(:exitstatus) { 1 }
328
390
  expected_command = "git config --get remote.#{@resource.remote}.url"
329
- @provider.should_receive(:shell_out!).with(expected_command,
391
+ expect(@provider).to receive(:shell_out!).with(expected_command,
330
392
  :cwd => "/my/deploy/dir",
331
393
  :log_tag => "git[web2.0 app]",
332
394
  :user => "whois",
@@ -334,7 +396,7 @@ SHAS
334
396
  :environment=>{"HOME"=>"/home/whois"},
335
397
  :returns => [0,1,2]).and_return(command_response)
336
398
  add_remote_command = "git remote add #{@resource.remote} #{@resource.repository}"
337
- @provider.should_receive(:shell_out!).with(add_remote_command,
399
+ expect(@provider).to receive(:shell_out!).with(add_remote_command,
338
400
  :cwd => "/my/deploy/dir",
339
401
  :log_tag => "git[web2.0 app]",
340
402
  :user => "whois",
@@ -346,14 +408,14 @@ SHAS
346
408
  describe "when a remote with a given name hasn't been configured yet" do
347
409
  it "adds a new remote " do
348
410
  command_response = double('shell_out')
349
- command_response.stub(:exitstatus) { 1 }
411
+ allow(command_response).to receive(:exitstatus) { 1 }
350
412
  check_remote_command = "git config --get remote.#{@resource.remote}.url"
351
- @provider.should_receive(:shell_out!).with(check_remote_command,
413
+ expect(@provider).to receive(:shell_out!).with(check_remote_command,
352
414
  :cwd => "/my/deploy/dir",
353
415
  :log_tag => "git[web2.0 app]",
354
416
  :returns => [0,1,2]).and_return(command_response)
355
417
  expected_command = "git remote add #{@resource.remote} #{@resource.repository}"
356
- @provider.should_receive(:shell_out!).with(expected_command,
418
+ expect(@provider).to receive(:shell_out!).with(expected_command,
357
419
  :cwd => "/my/deploy/dir",
358
420
  :log_tag => "git[web2.0 app]")
359
421
  @provider.setup_remote_tracking_branches(@resource.remote, @resource.repository)
@@ -363,15 +425,15 @@ SHAS
363
425
  describe "when a remote with a given name has already been configured" do
364
426
  it "updates remote url when the url is different" do
365
427
  command_response = double('shell_out')
366
- command_response.stub(:exitstatus) { 0 }
367
- command_response.stub(:stdout) { "some_other_url" }
428
+ allow(command_response).to receive(:exitstatus) { 0 }
429
+ allow(command_response).to receive(:stdout) { "some_other_url" }
368
430
  check_remote_command = "git config --get remote.#{@resource.remote}.url"
369
- @provider.should_receive(:shell_out!).with(check_remote_command,
431
+ expect(@provider).to receive(:shell_out!).with(check_remote_command,
370
432
  :cwd => "/my/deploy/dir",
371
433
  :log_tag => "git[web2.0 app]",
372
434
  :returns => [0,1,2]).and_return(command_response)
373
435
  expected_command = "git config --replace-all remote.#{@resource.remote}.url #{@resource.repository}"
374
- @provider.should_receive(:shell_out!).with(expected_command,
436
+ expect(@provider).to receive(:shell_out!).with(expected_command,
375
437
  :cwd => "/my/deploy/dir",
376
438
  :log_tag => "git[web2.0 app]")
377
439
  @provider.setup_remote_tracking_branches(@resource.remote, @resource.repository)
@@ -379,15 +441,15 @@ SHAS
379
441
 
380
442
  it "doesn't update remote url when the url is the same" do
381
443
  command_response = double('shell_out')
382
- command_response.stub(:exitstatus) { 0 }
383
- command_response.stub(:stdout) { @resource.repository }
444
+ allow(command_response).to receive(:exitstatus) { 0 }
445
+ allow(command_response).to receive(:stdout) { @resource.repository }
384
446
  check_remote_command = "git config --get remote.#{@resource.remote}.url"
385
- @provider.should_receive(:shell_out!).with(check_remote_command,
447
+ expect(@provider).to receive(:shell_out!).with(check_remote_command,
386
448
  :cwd => "/my/deploy/dir",
387
449
  :log_tag => "git[web2.0 app]",
388
450
  :returns => [0,1,2]).and_return(command_response)
389
451
  unexpected_command = "git config --replace-all remote.#{@resource.remote}.url #{@resource.repository}"
390
- @provider.should_not_receive(:shell_out!).with(unexpected_command,
452
+ expect(@provider).not_to receive(:shell_out!).with(unexpected_command,
391
453
  :cwd => "/my/deploy/dir",
392
454
  :log_tag => "git[web2.0 app]")
393
455
  @provider.setup_remote_tracking_branches(@resource.remote, @resource.repository)
@@ -395,14 +457,14 @@ SHAS
395
457
 
396
458
  it "resets remote url when it has multiple values" do
397
459
  command_response = double('shell_out')
398
- command_response.stub(:exitstatus) { 2 }
460
+ allow(command_response).to receive(:exitstatus) { 2 }
399
461
  check_remote_command = "git config --get remote.#{@resource.remote}.url"
400
- @provider.should_receive(:shell_out!).with(check_remote_command,
462
+ expect(@provider).to receive(:shell_out!).with(check_remote_command,
401
463
  :cwd => "/my/deploy/dir",
402
464
  :log_tag => "git[web2.0 app]",
403
465
  :returns => [0,1,2]).and_return(command_response)
404
466
  expected_command = "git config --replace-all remote.#{@resource.remote}.url #{@resource.repository}"
405
- @provider.should_receive(:shell_out!).with(expected_command,
467
+ expect(@provider).to receive(:shell_out!).with(expected_command,
406
468
  :cwd => "/my/deploy/dir",
407
469
  :log_tag => "git[web2.0 app]")
408
470
  @provider.setup_remote_tracking_branches(@resource.remote, @resource.repository)
@@ -411,20 +473,20 @@ SHAS
411
473
  end
412
474
 
413
475
  it "raises an error if the git clone command would fail because the enclosing directory doesn't exist" do
414
- @provider.stub(:shell_out!)
415
- lambda {@provider.run_action(:sync)}.should raise_error(Chef::Exceptions::MissingParentDirectory)
476
+ allow(@provider).to receive(:shell_out!)
477
+ expect {@provider.run_action(:sync)}.to raise_error(Chef::Exceptions::MissingParentDirectory)
416
478
  end
417
479
 
418
480
  it "does a checkout by cloning the repo and then enabling submodules" do
419
481
  # will be invoked in load_current_resource
420
- ::File.stub(:exist?).with("/my/deploy/dir/.git").and_return(false)
421
-
422
- ::File.stub(:exist?).with("/my/deploy/dir").and_return(true)
423
- ::File.stub(:directory?).with("/my/deploy").and_return(true)
424
- ::Dir.stub(:entries).with("/my/deploy/dir").and_return(['.','..'])
425
- @provider.should_receive(:clone)
426
- @provider.should_receive(:checkout)
427
- @provider.should_receive(:enable_submodules)
482
+ allow(::File).to receive(:exist?).with("/my/deploy/dir/.git").and_return(false)
483
+
484
+ allow(::File).to receive(:exist?).with("/my/deploy/dir").and_return(true)
485
+ allow(::File).to receive(:directory?).with("/my/deploy").and_return(true)
486
+ allow(::Dir).to receive(:entries).with("/my/deploy/dir").and_return(['.','..'])
487
+ expect(@provider).to receive(:clone)
488
+ expect(@provider).to receive(:checkout)
489
+ expect(@provider).to receive(:enable_submodules)
428
490
  @provider.run_action(:checkout)
429
491
  # Even though an actual run will cause an update to occur, the fact that we've stubbed out
430
492
  # the actions above will prevent updates from registering
@@ -433,119 +495,119 @@ SHAS
433
495
 
434
496
  it "does not call checkout if enable_checkout is false" do
435
497
  # will be invoked in load_current_resource
436
- ::File.stub(:exist?).with("/my/deploy/dir/.git").and_return(false)
498
+ allow(::File).to receive(:exist?).with("/my/deploy/dir/.git").and_return(false)
437
499
 
438
- ::File.stub(:exist?).with("/my/deploy/dir").and_return(true)
439
- ::File.stub(:directory?).with("/my/deploy").and_return(true)
440
- ::Dir.stub(:entries).with("/my/deploy/dir").and_return(['.','..'])
500
+ allow(::File).to receive(:exist?).with("/my/deploy/dir").and_return(true)
501
+ allow(::File).to receive(:directory?).with("/my/deploy").and_return(true)
502
+ allow(::Dir).to receive(:entries).with("/my/deploy/dir").and_return(['.','..'])
441
503
 
442
504
  @resource.enable_checkout false
443
- @provider.should_receive(:clone)
444
- @provider.should_not_receive(:checkout)
445
- @provider.should_receive(:enable_submodules)
505
+ expect(@provider).to receive(:clone)
506
+ expect(@provider).not_to receive(:checkout)
507
+ expect(@provider).to receive(:enable_submodules)
446
508
  @provider.run_action(:checkout)
447
509
  end
448
510
 
449
511
  # REGRESSION TEST: on some OSes, the entries from an empty directory will be listed as
450
512
  # ['..', '.'] but this shouldn't change the behavior
451
513
  it "does a checkout by cloning the repo and then enabling submodules when the directory entries are listed as %w{.. .}" do
452
- ::File.stub(:exist?).with("/my/deploy/dir/.git").and_return(false)
453
- ::File.stub(:exist?).with("/my/deploy/dir").and_return(false)
454
- ::File.stub(:directory?).with("/my/deploy").and_return(true)
455
- ::Dir.stub(:entries).with("/my/deploy/dir").and_return(['..','.'])
456
- @provider.should_receive(:clone)
457
- @provider.should_receive(:checkout)
458
- @provider.should_receive(:enable_submodules)
459
- @provider.should_receive(:add_remotes)
514
+ allow(::File).to receive(:exist?).with("/my/deploy/dir/.git").and_return(false)
515
+ allow(::File).to receive(:exist?).with("/my/deploy/dir").and_return(false)
516
+ allow(::File).to receive(:directory?).with("/my/deploy").and_return(true)
517
+ allow(::Dir).to receive(:entries).with("/my/deploy/dir").and_return(['..','.'])
518
+ expect(@provider).to receive(:clone)
519
+ expect(@provider).to receive(:checkout)
520
+ expect(@provider).to receive(:enable_submodules)
521
+ expect(@provider).to receive(:add_remotes)
460
522
  @provider.run_action(:checkout)
461
523
  # @resource.should be_updated
462
524
  end
463
525
 
464
526
  it "should not checkout if the destination exists or is a non empty directory" do
465
527
  # will be invoked in load_current_resource
466
- ::File.stub(:exist?).with("/my/deploy/dir/.git").and_return(false)
467
-
468
- ::File.stub(:exist?).with("/my/deploy/dir").and_return(true)
469
- ::File.stub(:directory?).with("/my/deploy").and_return(true)
470
- ::Dir.stub(:entries).with("/my/deploy/dir").and_return(['.','..','foo','bar'])
471
- @provider.should_not_receive(:clone)
472
- @provider.should_not_receive(:checkout)
473
- @provider.should_not_receive(:enable_submodules)
474
- @provider.should_not_receive(:add_remotes)
528
+ allow(::File).to receive(:exist?).with("/my/deploy/dir/.git").and_return(false)
529
+
530
+ allow(::File).to receive(:exist?).with("/my/deploy/dir").and_return(true)
531
+ allow(::File).to receive(:directory?).with("/my/deploy").and_return(true)
532
+ allow(::Dir).to receive(:entries).with("/my/deploy/dir").and_return(['.','..','foo','bar'])
533
+ expect(@provider).not_to receive(:clone)
534
+ expect(@provider).not_to receive(:checkout)
535
+ expect(@provider).not_to receive(:enable_submodules)
536
+ expect(@provider).not_to receive(:add_remotes)
475
537
  @provider.run_action(:checkout)
476
- @resource.should_not be_updated
538
+ expect(@resource).not_to be_updated
477
539
  end
478
540
 
479
541
  it "syncs the code by updating the source when the repo has already been checked out" do
480
- ::File.should_receive(:exist?).with("/my/deploy/dir/.git").and_return(true)
481
- ::File.stub(:directory?).with("/my/deploy").and_return(true)
482
- @provider.should_receive(:find_current_revision).exactly(1).and_return('d35af14d41ae22b19da05d7d03a0bafc321b244c')
483
- @provider.should_not_receive(:fetch_updates)
484
- @provider.should_receive(:add_remotes)
542
+ expect(::File).to receive(:exist?).with("/my/deploy/dir/.git").and_return(true)
543
+ allow(::File).to receive(:directory?).with("/my/deploy").and_return(true)
544
+ expect(@provider).to receive(:find_current_revision).exactly(1).and_return('d35af14d41ae22b19da05d7d03a0bafc321b244c')
545
+ expect(@provider).not_to receive(:fetch_updates)
546
+ expect(@provider).to receive(:add_remotes)
485
547
  @provider.run_action(:sync)
486
- @resource.should_not be_updated
548
+ expect(@resource).not_to be_updated
487
549
  end
488
550
 
489
551
  it "marks the resource as updated when the repo is updated and gets a new version" do
490
- ::File.should_receive(:exist?).with("/my/deploy/dir/.git").and_return(true)
491
- ::File.stub(:directory?).with("/my/deploy").and_return(true)
552
+ expect(::File).to receive(:exist?).with("/my/deploy/dir/.git").and_return(true)
553
+ allow(::File).to receive(:directory?).with("/my/deploy").and_return(true)
492
554
  # invoked twice - first time from load_current_resource
493
- @provider.should_receive(:find_current_revision).exactly(1).and_return('d35af14d41ae22b19da05d7d03a0bafc321b244c')
494
- @provider.stub(:target_revision).and_return('28af684d8460ba4793eda3e7ac238c864a5d029a')
495
- @provider.should_receive(:fetch_updates)
496
- @provider.should_receive(:enable_submodules)
497
- @provider.should_receive(:add_remotes)
555
+ expect(@provider).to receive(:find_current_revision).exactly(1).and_return('d35af14d41ae22b19da05d7d03a0bafc321b244c')
556
+ allow(@provider).to receive(:target_revision).and_return('28af684d8460ba4793eda3e7ac238c864a5d029a')
557
+ expect(@provider).to receive(:fetch_updates)
558
+ expect(@provider).to receive(:enable_submodules)
559
+ expect(@provider).to receive(:add_remotes)
498
560
  @provider.run_action(:sync)
499
561
  # @resource.should be_updated
500
562
  end
501
563
 
502
564
  it "does not fetch any updates if the remote revision matches the current revision" do
503
- ::File.should_receive(:exist?).with("/my/deploy/dir/.git").and_return(true)
504
- ::File.stub(:directory?).with("/my/deploy").and_return(true)
505
- @provider.stub(:find_current_revision).and_return('d35af14d41ae22b19da05d7d03a0bafc321b244c')
506
- @provider.stub(:target_revision).and_return('d35af14d41ae22b19da05d7d03a0bafc321b244c')
507
- @provider.should_not_receive(:fetch_updates)
508
- @provider.should_receive(:add_remotes)
565
+ expect(::File).to receive(:exist?).with("/my/deploy/dir/.git").and_return(true)
566
+ allow(::File).to receive(:directory?).with("/my/deploy").and_return(true)
567
+ allow(@provider).to receive(:find_current_revision).and_return('d35af14d41ae22b19da05d7d03a0bafc321b244c')
568
+ allow(@provider).to receive(:target_revision).and_return('d35af14d41ae22b19da05d7d03a0bafc321b244c')
569
+ expect(@provider).not_to receive(:fetch_updates)
570
+ expect(@provider).to receive(:add_remotes)
509
571
  @provider.run_action(:sync)
510
- @resource.should_not be_updated
572
+ expect(@resource).not_to be_updated
511
573
  end
512
574
 
513
575
  it "clones the repo instead of fetching it if the deploy directory doesn't exist" do
514
- ::File.stub(:directory?).with("/my/deploy").and_return(true)
515
- ::File.should_receive(:exist?).with("/my/deploy/dir/.git").exactly(2).and_return(false)
516
- @provider.should_receive(:action_checkout)
517
- @provider.should_not_receive(:shell_out!)
576
+ allow(::File).to receive(:directory?).with("/my/deploy").and_return(true)
577
+ expect(::File).to receive(:exist?).with("/my/deploy/dir/.git").exactly(2).and_return(false)
578
+ expect(@provider).to receive(:action_checkout)
579
+ expect(@provider).not_to receive(:shell_out!)
518
580
  @provider.run_action(:sync)
519
581
  # @resource.should be_updated
520
582
  end
521
583
 
522
584
  it "clones the repo instead of fetching updates if the deploy directory is empty" do
523
- ::File.should_receive(:exist?).with("/my/deploy/dir/.git").exactly(2).and_return(false)
524
- ::File.stub(:directory?).with("/my/deploy").and_return(true)
525
- ::File.stub(:directory?).with("/my/deploy/dir").and_return(true)
526
- @provider.stub(:sync_command).and_return("huzzah!")
527
- @provider.should_receive(:action_checkout)
528
- @provider.should_not_receive(:shell_out!).with("huzzah!", :cwd => "/my/deploy/dir")
585
+ expect(::File).to receive(:exist?).with("/my/deploy/dir/.git").exactly(2).and_return(false)
586
+ allow(::File).to receive(:directory?).with("/my/deploy").and_return(true)
587
+ allow(::File).to receive(:directory?).with("/my/deploy/dir").and_return(true)
588
+ allow(@provider).to receive(:sync_command).and_return("huzzah!")
589
+ expect(@provider).to receive(:action_checkout)
590
+ expect(@provider).not_to receive(:shell_out!).with("huzzah!", :cwd => "/my/deploy/dir")
529
591
  @provider.run_action(:sync)
530
592
  #@resource.should be_updated
531
593
  end
532
594
 
533
595
  it "does an export by cloning the repo then removing the .git directory" do
534
- @provider.should_receive(:action_checkout)
535
- FileUtils.should_receive(:rm_rf).with(@resource.destination + "/.git")
596
+ expect(@provider).to receive(:action_checkout)
597
+ expect(FileUtils).to receive(:rm_rf).with(@resource.destination + "/.git")
536
598
  @provider.run_action(:export)
537
- @resource.should be_updated
599
+ expect(@resource).to be_updated
538
600
  end
539
601
 
540
602
  describe "calling add_remotes" do
541
603
  it "adds a new remote for each entry in additional remotes hash" do
542
604
  @resource.additional_remotes({:opscode => "opscode_repo_url",
543
605
  :another_repo => "some_other_repo_url"})
544
- STDOUT.stub(:tty?).and_return(false)
606
+ allow(STDOUT).to receive(:tty?).and_return(false)
545
607
  command_response = double('shell_out')
546
- command_response.stub(:exitstatus) { 0 }
608
+ allow(command_response).to receive(:exitstatus) { 0 }
547
609
  @resource.additional_remotes.each_pair do |remote_name, remote_url|
548
- @provider.should_receive(:setup_remote_tracking_branches).with(remote_name, remote_url)
610
+ expect(@provider).to receive(:setup_remote_tracking_branches).with(remote_name, remote_url)
549
611
  end
550
612
  @provider.add_remotes
551
613
  end
@@ -558,22 +620,22 @@ SHAS
558
620
 
559
621
  describe "when check remote command returns with status 2" do
560
622
  it "returns true" do
561
- @command_response.stub(:exitstatus) { 2 }
562
- @provider.multiple_remotes?(@command_response).should be_true
623
+ allow(@command_response).to receive(:exitstatus) { 2 }
624
+ expect(@provider.multiple_remotes?(@command_response)).to be_true
563
625
  end
564
626
  end
565
627
 
566
628
  describe "when check remote command returns with status 0" do
567
629
  it "returns false" do
568
- @command_response.stub(:exitstatus) { 0 }
569
- @provider.multiple_remotes?(@command_response).should be_false
630
+ allow(@command_response).to receive(:exitstatus) { 0 }
631
+ expect(@provider.multiple_remotes?(@command_response)).to be_false
570
632
  end
571
633
  end
572
634
 
573
635
  describe "when check remote command returns with status 0" do
574
636
  it "returns false" do
575
- @command_response.stub(:exitstatus) { 1 }
576
- @provider.multiple_remotes?(@command_response).should be_false
637
+ allow(@command_response).to receive(:exitstatus) { 1 }
638
+ expect(@provider.multiple_remotes?(@command_response)).to be_false
577
639
  end
578
640
  end
579
641
  end
@@ -585,17 +647,17 @@ SHAS
585
647
 
586
648
  describe "when output of the check remote command matches the repository url" do
587
649
  it "returns true" do
588
- @command_response.stub(:exitstatus) { 0 }
589
- @command_response.stub(:stdout) { @resource.repository }
590
- @provider.remote_matches?(@resource.repository, @command_response).should be_true
650
+ allow(@command_response).to receive(:exitstatus) { 0 }
651
+ allow(@command_response).to receive(:stdout) { @resource.repository }
652
+ expect(@provider.remote_matches?(@resource.repository, @command_response)).to be_true
591
653
  end
592
654
  end
593
655
 
594
656
  describe "when output of the check remote command doesn't match the repository url" do
595
657
  it "returns false" do
596
- @command_response.stub(:exitstatus) { 0 }
597
- @command_response.stub(:stdout) { @resource.repository + "test" }
598
- @provider.remote_matches?(@resource.repository, @command_response).should be_false
658
+ allow(@command_response).to receive(:exitstatus) { 0 }
659
+ allow(@command_response).to receive(:stdout) { @resource.repository + "test" }
660
+ expect(@provider.remote_matches?(@resource.repository, @command_response)).to be_false
599
661
  end
600
662
  end
601
663
  end