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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (653) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +4 -1
  3. data/README.md +42 -18
  4. data/distro/common/html/_sources/ctl_chef_client.txt +1 -1
  5. data/distro/common/html/_sources/ctl_chef_server.txt +53 -35
  6. data/distro/common/html/_sources/ctl_chef_solo.txt +1 -1
  7. data/distro/common/html/_sources/knife_bootstrap.txt +1 -1
  8. data/distro/common/html/_sources/knife_cookbook_site.txt +1 -1
  9. data/distro/common/html/_sources/knife_data_bag.txt +4 -4
  10. data/distro/common/html/_sources/knife_status.txt +1 -1
  11. data/distro/common/html/_static/searchtools.js +1 -1
  12. data/distro/common/html/ctl_chef_client.html +55 -7
  13. data/distro/common/html/ctl_chef_server.html +84 -41
  14. data/distro/common/html/ctl_chef_shell.html +45 -1
  15. data/distro/common/html/ctl_chef_solo.html +51 -5
  16. data/distro/common/html/index.html +2 -2
  17. data/distro/common/html/knife.html +1 -1
  18. data/distro/common/html/knife_bootstrap.html +30 -10
  19. data/distro/common/html/knife_cookbook_site.html +2 -0
  20. data/distro/common/html/knife_data_bag.html +4 -4
  21. data/distro/common/html/knife_node.html +2 -2
  22. data/distro/common/html/knife_raw.html +1 -1
  23. data/distro/common/html/knife_role.html +1 -1
  24. data/distro/common/html/knife_search.html +3 -3
  25. data/distro/common/html/knife_status.html +4 -0
  26. data/distro/common/html/searchindex.js +1 -1
  27. data/distro/common/man/man1/chef-shell.1 +72 -1
  28. data/distro/common/man/man1/knife-bootstrap.1 +71 -63
  29. data/distro/common/man/man1/knife-client.1 +1 -1
  30. data/distro/common/man/man1/knife-configure.1 +1 -1
  31. data/distro/common/man/man1/knife-cookbook-site.1 +4 -1
  32. data/distro/common/man/man1/knife-cookbook.1 +1 -1
  33. data/distro/common/man/man1/knife-data-bag.1 +5 -5
  34. data/distro/common/man/man1/knife-delete.1 +1 -1
  35. data/distro/common/man/man1/knife-deps.1 +1 -1
  36. data/distro/common/man/man1/knife-diff.1 +1 -1
  37. data/distro/common/man/man1/knife-download.1 +1 -1
  38. data/distro/common/man/man1/knife-edit.1 +1 -1
  39. data/distro/common/man/man1/knife-environment.1 +1 -1
  40. data/distro/common/man/man1/knife-exec.1 +1 -1
  41. data/distro/common/man/man1/knife-index-rebuild.1 +1 -1
  42. data/distro/common/man/man1/knife-list.1 +1 -1
  43. data/distro/common/man/man1/knife-node.1 +3 -3
  44. data/distro/common/man/man1/knife-raw.1 +2 -2
  45. data/distro/common/man/man1/knife-recipe-list.1 +1 -1
  46. data/distro/common/man/man1/knife-role.1 +2 -2
  47. data/distro/common/man/man1/knife-search.1 +4 -4
  48. data/distro/common/man/man1/knife-serve.1 +1 -1
  49. data/distro/common/man/man1/knife-show.1 +1 -1
  50. data/distro/common/man/man1/knife-ssh.1 +1 -1
  51. data/distro/common/man/man1/knife-ssl-check.1 +1 -1
  52. data/distro/common/man/man1/knife-ssl-fetch.1 +1 -1
  53. data/distro/common/man/man1/knife-status.1 +1 -1
  54. data/distro/common/man/man1/knife-tag.1 +1 -1
  55. data/distro/common/man/man1/knife-upload.1 +1 -1
  56. data/distro/common/man/man1/knife-user.1 +1 -1
  57. data/distro/common/man/man1/knife-xargs.1 +1 -1
  58. data/distro/common/man/man1/knife.1 +1 -1
  59. data/distro/common/man/man8/chef-apply.8 +86 -0
  60. data/distro/common/man/man8/chef-client.8 +76 -5
  61. data/distro/common/man/man8/chef-solo.8 +79 -6
  62. data/distro/common/markdown/man1/knife-bootstrap.mkd +1 -1
  63. data/distro/common/markdown/man1/knife-cookbook-site.mkd +1 -1
  64. data/distro/common/markdown/man1/knife-data-bag.mkd +1 -1
  65. data/distro/common/markdown/man1/knife-environment.mkd +1 -1
  66. data/distro/common/markdown/man1/knife.mkd +1 -1
  67. data/lib/chef.rb +0 -7
  68. data/lib/chef/api_client.rb +10 -2
  69. data/lib/chef/api_client/registration.rb +7 -9
  70. data/lib/chef/application.rb +28 -12
  71. data/lib/chef/application/apply.rb +17 -1
  72. data/lib/chef/application/client.rb +74 -6
  73. data/lib/chef/application/knife.rb +1 -2
  74. data/lib/chef/application/solo.rb +30 -0
  75. data/lib/chef/application/windows_service.rb +1 -0
  76. data/lib/chef/application/windows_service_manager.rb +8 -2
  77. data/lib/chef/applications.rb +0 -1
  78. data/lib/chef/audit/audit_event_proxy.rb +93 -0
  79. data/lib/chef/audit/audit_reporter.rb +169 -0
  80. data/lib/chef/audit/control_group_data.rb +140 -0
  81. data/lib/chef/audit/rspec_formatter.rb +37 -0
  82. data/lib/chef/audit/runner.rb +178 -0
  83. data/lib/chef/chef_fs/chef_fs_data_store.rb +11 -2
  84. data/lib/chef/chef_fs/config.rb +25 -4
  85. data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +15 -0
  86. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -0
  87. data/lib/chef/chef_fs/file_system.rb +1 -1
  88. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +5 -0
  89. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +3 -2
  90. data/lib/chef/{shef/ext.rb → chef_fs/file_system/chef_repository_file_system_policies_dir.rb} +22 -3
  91. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +4 -0
  92. data/lib/chef/client.rb +81 -52
  93. data/lib/chef/config.rb +35 -3
  94. data/lib/chef/cookbook/metadata.rb +3 -3
  95. data/lib/chef/cookbook_manifest.rb +275 -0
  96. data/lib/chef/cookbook_site_streaming_uploader.rb +24 -23
  97. data/lib/chef/cookbook_uploader.rb +11 -2
  98. data/lib/chef/cookbook_version.rb +71 -194
  99. data/lib/chef/data_bag.rb +5 -2
  100. data/lib/chef/data_bag_item.rb +6 -3
  101. data/lib/chef/deprecation/warnings.rb +5 -4
  102. data/lib/chef/dsl/audit.rb +51 -0
  103. data/lib/chef/dsl/include_recipe.rb +2 -3
  104. data/lib/chef/dsl/reboot_pending.rb +1 -1
  105. data/lib/chef/dsl/recipe.rb +49 -31
  106. data/lib/chef/encrypted_data_bag_item/assertions.rb +0 -3
  107. data/lib/chef/environment.rb +5 -2
  108. data/lib/chef/event_dispatch/base.rb +36 -1
  109. data/lib/chef/event_dispatch/dispatcher.rb +3 -5
  110. data/lib/chef/exceptions.rb +61 -2
  111. data/lib/chef/file_access_control/unix.rb +12 -0
  112. data/lib/chef/file_access_control/windows.rb +14 -0
  113. data/lib/chef/formatters/doc.rb +47 -1
  114. data/{spec/unit/monkey_patches/string_spec.rb → lib/chef/guard_interpreter.rb} +11 -16
  115. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +3 -2
  116. data/lib/chef/http.rb +1 -2
  117. data/lib/chef/knife.rb +5 -3
  118. data/lib/chef/knife/bootstrap.rb +84 -15
  119. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +165 -0
  120. data/lib/chef/knife/bootstrap/client_builder.rb +190 -0
  121. data/lib/chef/knife/bootstrap/{README.md → templates/README.md} +0 -0
  122. data/lib/chef/knife/bootstrap/{archlinux-gems.erb → templates/archlinux-gems.erb} +9 -0
  123. data/lib/chef/knife/bootstrap/{chef-aix.erb → templates/chef-aix.erb} +9 -0
  124. data/lib/chef/knife/bootstrap/{chef-full.erb → templates/chef-full.erb} +10 -1
  125. data/lib/chef/knife/client_create.rb +8 -7
  126. data/lib/chef/knife/cookbook_site_download.rb +1 -1
  127. data/lib/chef/knife/cookbook_site_install.rb +1 -1
  128. data/lib/chef/knife/cookbook_site_list.rb +1 -1
  129. data/lib/chef/knife/cookbook_site_search.rb +1 -1
  130. data/lib/chef/knife/cookbook_site_share.rb +39 -28
  131. data/lib/chef/knife/cookbook_site_show.rb +3 -3
  132. data/lib/chef/knife/cookbook_site_unshare.rb +1 -1
  133. data/lib/chef/knife/cookbook_test.rb +1 -0
  134. data/lib/chef/knife/cookbook_upload.rb +13 -8
  135. data/lib/chef/knife/core/bootstrap_context.rb +14 -3
  136. data/lib/chef/knife/core/generic_presenter.rb +5 -2
  137. data/lib/chef/knife/core/object_loader.rb +1 -1
  138. data/lib/chef/knife/core/subcommand_loader.rb +24 -0
  139. data/lib/chef/knife/core/ui.rb +9 -1
  140. data/lib/chef/knife/node_run_list_remove.rb +11 -3
  141. data/lib/chef/knife/raw.rb +14 -3
  142. data/lib/chef/knife/role_env_run_list_add.rb +86 -0
  143. data/lib/chef/knife/role_env_run_list_clear.rb +55 -0
  144. data/lib/chef/knife/role_env_run_list_remove.rb +57 -0
  145. data/lib/chef/knife/role_env_run_list_replace.rb +59 -0
  146. data/lib/chef/knife/role_env_run_list_set.rb +70 -0
  147. data/lib/chef/knife/role_run_list_add.rb +86 -0
  148. data/lib/chef/knife/role_run_list_clear.rb +55 -0
  149. data/lib/chef/knife/role_run_list_remove.rb +57 -0
  150. data/lib/chef/knife/role_run_list_replace.rb +59 -0
  151. data/lib/chef/knife/role_run_list_set.rb +70 -0
  152. data/lib/chef/knife/search.rb +4 -4
  153. data/lib/chef/knife/serve.rb +3 -0
  154. data/lib/chef/knife/ssh.rb +1 -1
  155. data/lib/chef/knife/ssl_check.rb +2 -2
  156. data/lib/chef/knife/ssl_fetch.rb +14 -1
  157. data/lib/chef/log.rb +10 -1
  158. data/lib/chef/mixin/command.rb +1 -1
  159. data/lib/chef/mixin/command/windows.rb +1 -5
  160. data/lib/chef/mixin/get_source_from_package.rb +1 -0
  161. data/lib/chef/mixin/params_validate.rb +2 -2
  162. data/lib/chef/mixin/securable.rb +1 -7
  163. data/lib/chef/mixin/shell_out.rb +7 -1
  164. data/lib/chef/mixin/template.rb +2 -14
  165. data/lib/chef/mixin/why_run.rb +1 -1
  166. data/lib/chef/monkey_patches/net_http.rb +4 -0
  167. data/lib/chef/monologger.rb +0 -2
  168. data/lib/chef/node.rb +5 -2
  169. data/lib/chef/node/attribute.rb +11 -9
  170. data/lib/chef/node/attribute_collections.rb +8 -12
  171. data/lib/chef/node/immutable_collections.rb +4 -10
  172. data/lib/chef/org.rb +148 -0
  173. data/lib/chef/platform/provider_mapping.rb +3 -2
  174. data/lib/chef/platform/provider_priority_map.rb +2 -0
  175. data/lib/chef/platform/query_helpers.rb +0 -3
  176. data/lib/chef/policy_builder/policyfile.rb +51 -8
  177. data/lib/chef/provider/deploy.rb +1 -2
  178. data/lib/chef/provider/directory.rb +3 -3
  179. data/lib/chef/provider/dsc_script.rb +13 -7
  180. data/lib/chef/provider/env.rb +8 -8
  181. data/lib/chef/provider/execute.rb +55 -36
  182. data/lib/chef/provider/file.rb +8 -0
  183. data/lib/chef/provider/group.rb +2 -0
  184. data/lib/chef/provider/group/dscl.rb +3 -4
  185. data/lib/chef/provider/ifconfig.rb +25 -25
  186. data/lib/chef/provider/ifconfig/aix.rb +25 -27
  187. data/lib/chef/provider/lwrp_base.rb +1 -1
  188. data/lib/chef/provider/mount.rb +2 -2
  189. data/lib/chef/provider/mount/mount.rb +3 -4
  190. data/lib/chef/provider/mount/solaris.rb +1 -1
  191. data/lib/chef/provider/package.rb +297 -48
  192. data/lib/chef/provider/package/aix.rb +25 -30
  193. data/lib/chef/provider/package/apt.rb +63 -19
  194. data/lib/chef/provider/package/dpkg.rb +15 -16
  195. data/lib/chef/provider/package/macports.rb +7 -7
  196. data/lib/chef/provider/package/openbsd.rb +107 -0
  197. data/lib/chef/provider/package/pacman.rb +13 -15
  198. data/lib/chef/provider/package/portage.rb +3 -4
  199. data/lib/chef/provider/package/rpm.rb +28 -17
  200. data/lib/chef/provider/package/rubygems.rb +9 -9
  201. data/lib/chef/provider/package/solaris.rb +17 -21
  202. data/lib/chef/provider/package/windows/msi.rb +1 -1
  203. data/lib/chef/provider/package/yum-dump.py +2 -2
  204. data/lib/chef/provider/package/yum.rb +117 -51
  205. data/lib/chef/provider/package/zypper.rb +17 -18
  206. data/lib/chef/provider/powershell_script.rb +4 -4
  207. data/lib/chef/provider/registry_key.rb +2 -2
  208. data/lib/chef/provider/remote_directory.rb +1 -1
  209. data/lib/chef/provider/script.rb +25 -16
  210. data/lib/chef/provider/service.rb +1 -1
  211. data/lib/chef/provider/service/freebsd.rb +1 -1
  212. data/lib/chef/provider/service/openbsd.rb +216 -0
  213. data/lib/chef/provider/service/upstart.rb +1 -1
  214. data/lib/chef/provider/service/windows.rb +99 -1
  215. data/lib/chef/provider/user.rb +1 -1
  216. data/lib/chef/provider/user/dscl.rb +19 -4
  217. data/lib/chef/providers.rb +2 -0
  218. data/lib/chef/recipe.rb +11 -5
  219. data/lib/chef/request_id.rb +1 -1
  220. data/lib/chef/resource.rb +839 -444
  221. data/lib/chef/resource/chef_gem.rb +20 -3
  222. data/lib/chef/resource/conditional.rb +3 -14
  223. data/lib/chef/resource/dsc_script.rb +14 -0
  224. data/lib/chef/resource/execute.rb +14 -7
  225. data/lib/chef/resource/file.rb +14 -0
  226. data/lib/chef/resource/file/verification.rb +122 -0
  227. data/lib/chef/resource/ips_package.rb +1 -1
  228. data/lib/chef/resource/lwrp_base.rb +2 -11
  229. data/lib/chef/resource/macports_package.rb +2 -1
  230. data/lib/chef/resource/openbsd_package.rb +51 -0
  231. data/lib/chef/resource/package.rb +2 -2
  232. data/lib/chef/resource/paludis_package.rb +1 -1
  233. data/lib/chef/resource/reboot.rb +1 -1
  234. data/lib/chef/resource/remote_file.rb +1 -0
  235. data/lib/chef/resource/rpm_package.rb +9 -0
  236. data/lib/chef/resource/script.rb +11 -0
  237. data/lib/chef/resource/template.rb +2 -3
  238. data/lib/chef/resource/windows_package.rb +1 -1
  239. data/lib/chef/resource/windows_service.rb +18 -0
  240. data/lib/chef/resource_builder.rb +137 -0
  241. data/lib/chef/resource_definition.rb +1 -1
  242. data/lib/chef/resource_reporter.rb +1 -1
  243. data/lib/chef/resources.rb +1 -0
  244. data/lib/chef/role.rb +17 -4
  245. data/lib/chef/run_context.rb +10 -6
  246. data/lib/chef/search/query.rb +66 -87
  247. data/lib/chef/shell/ext.rb +2 -2
  248. data/lib/chef/util/diff.rb +1 -4
  249. data/lib/chef/util/dsc/configuration_generator.rb +30 -6
  250. data/lib/chef/util/dsc/lcm_output_parser.rb +7 -3
  251. data/lib/chef/util/dsc/local_configuration_manager.rb +8 -8
  252. data/lib/chef/util/file_edit.rb +2 -2
  253. data/lib/chef/util/path_helper.rb +1 -4
  254. data/lib/chef/util/windows/net_use.rb +3 -3
  255. data/lib/chef/version.rb +1 -1
  256. data/lib/chef/win32/api.rb +1 -0
  257. data/lib/chef/win32/api/security.rb +26 -0
  258. data/lib/chef/win32/file.rb +21 -0
  259. data/lib/chef/win32/security.rb +46 -0
  260. data/lib/chef/win32/security/token.rb +8 -0
  261. data/lib/chef/win32/version.rb +0 -4
  262. data/spec/data/recipes.tgz +0 -0
  263. data/spec/functional/application_spec.rb +1 -1
  264. data/spec/functional/audit/rspec_formatter_spec.rb +54 -0
  265. data/spec/functional/audit/runner_spec.rb +137 -0
  266. data/spec/functional/dsl/reboot_pending_spec.rb +10 -10
  267. data/spec/functional/dsl/registry_helper_spec.rb +6 -6
  268. data/spec/functional/event_loggers/windows_eventlog_spec.rb +5 -5
  269. data/spec/functional/file_content_management/deploy_strategies_spec.rb +12 -21
  270. data/spec/functional/http/simple_spec.rb +1 -1
  271. data/spec/functional/knife/cookbook_delete_spec.rb +24 -24
  272. data/spec/functional/knife/exec_spec.rb +2 -4
  273. data/spec/functional/knife/smoke_test.rb +1 -1
  274. data/spec/functional/knife/ssh_spec.rb +23 -23
  275. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +8 -8
  276. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +2 -2
  277. data/spec/functional/rebooter_spec.rb +1 -1
  278. data/spec/functional/resource/aix_service_spec.rb +3 -0
  279. data/spec/functional/resource/aixinit_service_spec.rb +3 -3
  280. data/spec/functional/resource/bash_spec.rb +88 -0
  281. data/spec/functional/resource/deploy_revision_spec.rb +99 -100
  282. data/spec/functional/resource/env_spec.rb +3 -3
  283. data/spec/functional/resource/execute_spec.rb +97 -63
  284. data/spec/functional/resource/file_spec.rb +7 -7
  285. data/spec/functional/resource/git_spec.rb +13 -13
  286. data/spec/functional/resource/group_spec.rb +28 -25
  287. data/spec/functional/resource/ifconfig_spec.rb +2 -2
  288. data/spec/functional/resource/link_spec.rb +77 -78
  289. data/spec/functional/resource/mount_spec.rb +5 -5
  290. data/spec/functional/resource/ohai_spec.rb +1 -1
  291. data/spec/functional/resource/package_spec.rb +22 -22
  292. data/spec/functional/resource/powershell_spec.rb +57 -42
  293. data/spec/functional/resource/reboot_spec.rb +2 -2
  294. data/spec/functional/resource/registry_spec.rb +91 -91
  295. data/spec/functional/resource/remote_directory_spec.rb +19 -19
  296. data/spec/functional/resource/remote_file_spec.rb +18 -18
  297. data/spec/functional/resource/template_spec.rb +4 -4
  298. data/spec/functional/resource/user/dscl_spec.rb +4 -4
  299. data/spec/functional/resource/user/useradd_spec.rb +64 -51
  300. data/spec/functional/resource/windows_service_spec.rb +98 -0
  301. data/spec/functional/run_lock_spec.rb +9 -9
  302. data/spec/functional/shell_spec.rb +3 -3
  303. data/spec/functional/tiny_server_spec.rb +12 -12
  304. data/spec/functional/util/path_helper_spec.rb +1 -1
  305. data/spec/functional/version_spec.rb +1 -1
  306. data/spec/functional/win32/registry_helper_spec.rb +125 -125
  307. data/spec/functional/win32/security_spec.rb +65 -2
  308. data/spec/functional/win32/service_manager_spec.rb +30 -84
  309. data/spec/functional/win32/versions_spec.rb +6 -6
  310. data/spec/integration/client/client_spec.rb +102 -9
  311. data/spec/integration/knife/chef_fs_data_store_spec.rb +12 -8
  312. data/spec/integration/knife/common_options_spec.rb +3 -3
  313. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +2 -2
  314. data/spec/integration/knife/deps_spec.rb +4 -4
  315. data/spec/integration/knife/diff_spec.rb +6 -6
  316. data/spec/integration/knife/download_spec.rb +6 -6
  317. data/spec/integration/knife/list_spec.rb +2 -2
  318. data/spec/integration/knife/raw_spec.rb +5 -5
  319. data/spec/integration/knife/serve_spec.rb +3 -3
  320. data/spec/integration/knife/show_spec.rb +3 -3
  321. data/spec/integration/knife/upload_spec.rb +18 -18
  322. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
  323. data/spec/integration/solo/solo_spec.rb +11 -12
  324. data/spec/spec_helper.rb +27 -15
  325. data/spec/stress/win32/file_spec.rb +4 -4
  326. data/spec/stress/win32/security_spec.rb +4 -4
  327. data/spec/support/chef_helpers.rb +3 -3
  328. data/spec/support/matchers/leak.rb +2 -2
  329. data/spec/support/mock/platform.rb +1 -1
  330. data/spec/support/pedant/Gemfile +3 -0
  331. data/spec/support/pedant/pedant_config.rb +9 -2
  332. data/spec/support/pedant/run_pedant.rb +15 -16
  333. data/spec/support/platform_helpers.rb +8 -12
  334. data/spec/support/shared/functional/directory_resource.rb +13 -13
  335. data/spec/support/shared/functional/file_resource.rb +83 -83
  336. data/spec/support/shared/functional/http.rb +1 -1
  337. data/spec/support/shared/functional/securable_resource.rb +64 -64
  338. data/spec/support/shared/functional/securable_resource_with_reporting.rb +43 -41
  339. data/spec/support/shared/functional/win32_service.rb +60 -0
  340. data/spec/support/shared/functional/windows_script.rb +8 -8
  341. data/spec/support/shared/integration/knife_support.rb +8 -5
  342. data/spec/support/shared/matchers/exit_with_code.rb +6 -2
  343. data/spec/support/shared/unit/api_error_inspector.rb +8 -8
  344. data/spec/support/shared/unit/execute_resource.rb +24 -20
  345. data/spec/support/shared/unit/file_system_support.rb +2 -2
  346. data/spec/support/shared/unit/platform_introspector.rb +21 -21
  347. data/spec/support/shared/unit/provider/file.rb +239 -210
  348. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +69 -69
  349. data/spec/support/shared/unit/script_resource.rb +40 -32
  350. data/spec/support/shared/unit/windows_script_resource.rb +8 -8
  351. data/spec/unit/api_client/registration_spec.rb +47 -47
  352. data/spec/unit/api_client_spec.rb +107 -69
  353. data/spec/unit/application/apply_spec.rb +31 -15
  354. data/spec/unit/application/client_spec.rb +146 -45
  355. data/spec/unit/application/knife_spec.rb +31 -31
  356. data/spec/unit/application/solo_spec.rb +59 -43
  357. data/spec/unit/application_spec.rb +109 -74
  358. data/spec/unit/audit/audit_event_proxy_spec.rb +311 -0
  359. data/spec/unit/audit/audit_reporter_spec.rb +393 -0
  360. data/spec/unit/audit/control_group_data_spec.rb +478 -0
  361. data/{lib/chef/monkey_patches/file.rb → spec/unit/audit/rspec_formatter_spec.rb} +11 -8
  362. data/spec/unit/audit/runner_spec.rb +135 -0
  363. data/spec/unit/chef_fs/config_spec.rb +52 -0
  364. data/spec/unit/chef_fs/diff_spec.rb +12 -12
  365. data/spec/unit/chef_fs/file_pattern_spec.rb +276 -277
  366. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +6 -6
  367. data/spec/unit/chef_fs/file_system_spec.rb +26 -13
  368. data/spec/unit/chef_fs/parallelizer.rb +87 -87
  369. data/spec/unit/chef_spec.rb +1 -1
  370. data/spec/unit/client_spec.rb +263 -97
  371. data/spec/unit/config_fetcher_spec.rb +13 -13
  372. data/spec/unit/config_spec.rb +105 -66
  373. data/spec/unit/cookbook/chefignore_spec.rb +6 -6
  374. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +3 -3
  375. data/spec/unit/cookbook/metadata_spec.rb +149 -149
  376. data/spec/unit/cookbook/syntax_check_spec.rb +36 -31
  377. data/spec/unit/cookbook_loader_spec.rb +62 -58
  378. data/spec/unit/cookbook_manifest_spec.rb +141 -468
  379. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +27 -27
  380. data/spec/unit/cookbook_spec.rb +15 -15
  381. data/spec/unit/cookbook_uploader_spec.rb +37 -3
  382. data/spec/unit/cookbook_version_file_specificity_spec.rb +554 -0
  383. data/spec/unit/cookbook_version_spec.rb +98 -240
  384. data/spec/unit/daemon_spec.rb +31 -31
  385. data/spec/unit/data_bag_item_spec.rb +121 -89
  386. data/spec/unit/data_bag_spec.rb +35 -35
  387. data/spec/unit/deprecation_spec.rb +27 -14
  388. data/spec/unit/digester_spec.rb +3 -3
  389. data/spec/unit/dsl/audit_spec.rb +43 -0
  390. data/spec/unit/dsl/data_query_spec.rb +1 -1
  391. data/spec/unit/dsl/platform_introspection_spec.rb +14 -14
  392. data/spec/unit/dsl/reboot_pending_spec.rb +18 -18
  393. data/spec/unit/dsl/regsitry_helper_spec.rb +6 -6
  394. data/spec/unit/encrypted_data_bag_item_spec.rb +58 -82
  395. data/spec/unit/environment_spec.rb +105 -105
  396. data/spec/unit/exceptions_spec.rb +47 -1
  397. data/spec/unit/file_access_control_spec.rb +62 -56
  398. data/spec/unit/file_cache_spec.rb +11 -11
  399. data/spec/unit/file_content_management/deploy/cp_spec.rb +2 -2
  400. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +10 -10
  401. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +23 -23
  402. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +14 -14
  403. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +12 -12
  404. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +1 -1
  405. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +16 -16
  406. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +4 -4
  407. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +103 -13
  408. data/spec/unit/guard_interpreter_spec.rb +41 -0
  409. data/spec/unit/handler/json_file_spec.rb +10 -10
  410. data/spec/unit/handler_spec.rb +39 -39
  411. data/spec/unit/http/basic_client_spec.rb +3 -3
  412. data/spec/unit/http/http_request_spec.rb +10 -10
  413. data/spec/unit/http/simple_spec.rb +3 -3
  414. data/spec/unit/http/ssl_policies_spec.rb +15 -15
  415. data/spec/unit/http/validate_content_length_spec.rb +18 -13
  416. data/spec/unit/http_spec.rb +16 -9
  417. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +153 -0
  418. data/spec/unit/knife/bootstrap/client_builder_spec.rb +178 -0
  419. data/spec/unit/knife/bootstrap_spec.rb +144 -91
  420. data/spec/unit/knife/client_bulk_delete_spec.rb +24 -24
  421. data/spec/unit/knife/client_create_spec.rb +57 -43
  422. data/spec/unit/knife/client_delete_spec.rb +15 -15
  423. data/spec/unit/knife/client_edit_spec.rb +4 -4
  424. data/spec/unit/knife/client_list_spec.rb +2 -2
  425. data/spec/unit/knife/client_reregister_spec.rb +9 -9
  426. data/spec/unit/knife/configure_client_spec.rb +20 -20
  427. data/spec/unit/knife/configure_spec.rb +85 -85
  428. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +15 -15
  429. data/spec/unit/knife/cookbook_create_spec.rb +59 -59
  430. data/spec/unit/knife/cookbook_delete_spec.rb +49 -49
  431. data/spec/unit/knife/cookbook_download_spec.rb +56 -56
  432. data/spec/unit/knife/cookbook_list_spec.rb +9 -9
  433. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +8 -8
  434. data/spec/unit/knife/cookbook_metadata_spec.rb +44 -44
  435. data/spec/unit/knife/cookbook_show_spec.rb +29 -29
  436. data/spec/unit/knife/cookbook_site_download_spec.rb +26 -26
  437. data/spec/unit/knife/cookbook_site_install_spec.rb +5 -1
  438. data/spec/unit/knife/cookbook_site_share_spec.rb +68 -59
  439. data/spec/unit/knife/cookbook_site_unshare_spec.rb +15 -15
  440. data/spec/unit/knife/cookbook_test_spec.rb +16 -16
  441. data/spec/unit/knife/cookbook_upload_spec.rb +105 -71
  442. data/spec/unit/knife/core/bootstrap_context_spec.rb +37 -22
  443. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +36 -36
  444. data/spec/unit/knife/core/object_loader_spec.rb +3 -3
  445. data/spec/unit/knife/core/subcommand_loader_spec.rb +107 -33
  446. data/spec/unit/knife/core/ui_spec.rb +84 -72
  447. data/spec/unit/knife/data_bag_from_file_spec.rb +1 -1
  448. data/spec/unit/knife/environment_compare_spec.rb +12 -12
  449. data/spec/unit/knife/environment_create_spec.rb +16 -16
  450. data/spec/unit/knife/environment_delete_spec.rb +14 -14
  451. data/spec/unit/knife/environment_edit_spec.rb +15 -15
  452. data/spec/unit/knife/environment_from_file_spec.rb +17 -17
  453. data/spec/unit/knife/environment_list_spec.rb +7 -7
  454. data/spec/unit/knife/environment_show_spec.rb +10 -10
  455. data/spec/unit/knife/index_rebuild_spec.rb +17 -17
  456. data/spec/unit/knife/knife_help.rb +24 -24
  457. data/spec/unit/knife/node_bulk_delete_spec.rb +14 -14
  458. data/spec/unit/knife/node_delete_spec.rb +11 -11
  459. data/spec/unit/knife/node_edit_spec.rb +17 -17
  460. data/spec/unit/knife/node_environment_set_spec.rb +12 -12
  461. data/spec/unit/knife/node_from_file_spec.rb +8 -8
  462. data/spec/unit/knife/node_list_spec.rb +9 -9
  463. data/spec/unit/knife/node_run_list_add_spec.rb +29 -29
  464. data/spec/unit/knife/node_run_list_remove_spec.rb +28 -13
  465. data/spec/unit/knife/node_run_list_set_spec.rb +27 -27
  466. data/spec/unit/knife/raw_spec.rb +43 -0
  467. data/spec/unit/knife/role_bulk_delete_spec.rb +12 -12
  468. data/spec/unit/knife/role_create_spec.rb +12 -12
  469. data/spec/unit/knife/role_delete_spec.rb +10 -10
  470. data/spec/unit/knife/role_edit_spec.rb +13 -13
  471. data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -0
  472. data/spec/unit/knife/role_env_run_list_clear_spec.rb +100 -0
  473. data/spec/unit/knife/role_env_run_list_remove_spec.rb +108 -0
  474. data/spec/unit/knife/role_env_run_list_replace_spec.rb +108 -0
  475. data/spec/unit/knife/role_env_run_list_set_spec.rb +102 -0
  476. data/spec/unit/knife/role_from_file_spec.rb +10 -10
  477. data/spec/unit/knife/role_list_spec.rb +7 -7
  478. data/spec/unit/knife/role_run_list_add_spec.rb +179 -0
  479. data/spec/unit/knife/role_run_list_clear_spec.rb +90 -0
  480. data/spec/unit/knife/role_run_list_remove_spec.rb +98 -0
  481. data/spec/unit/knife/role_run_list_replace_spec.rb +101 -0
  482. data/spec/unit/knife/role_run_list_set_spec.rb +92 -0
  483. data/spec/unit/knife/ssh_spec.rb +66 -66
  484. data/spec/unit/knife/ssl_check_spec.rb +27 -27
  485. data/spec/unit/knife/ssl_fetch_spec.rb +45 -12
  486. data/spec/unit/knife/status_spec.rb +5 -5
  487. data/spec/unit/knife/tag_create_spec.rb +5 -5
  488. data/spec/unit/knife/tag_delete_spec.rb +6 -6
  489. data/spec/unit/knife/tag_list_spec.rb +4 -4
  490. data/spec/unit/knife/user_create_spec.rb +18 -18
  491. data/spec/unit/knife/user_delete_spec.rb +4 -4
  492. data/spec/unit/knife/user_edit_spec.rb +7 -7
  493. data/spec/unit/knife/user_list_spec.rb +2 -2
  494. data/spec/unit/knife/user_reregister_spec.rb +10 -10
  495. data/spec/unit/knife/user_show_spec.rb +5 -5
  496. data/spec/unit/knife_spec.rb +36 -36
  497. data/spec/unit/lwrp_spec.rb +63 -39
  498. data/spec/unit/mash_spec.rb +6 -6
  499. data/spec/unit/mixin/checksum_spec.rb +2 -2
  500. data/spec/unit/mixin/command_spec.rb +13 -13
  501. data/spec/unit/mixin/convert_to_class_name_spec.rb +6 -6
  502. data/spec/unit/mixin/deep_merge_spec.rb +49 -49
  503. data/spec/unit/mixin/deprecation_spec.rb +5 -5
  504. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +14 -14
  505. data/spec/unit/mixin/homebrew_user_spec.rb +3 -3
  506. data/spec/unit/mixin/params_validate_spec.rb +71 -71
  507. data/spec/unit/mixin/path_sanity_spec.rb +14 -14
  508. data/spec/unit/mixin/securable_spec.rb +177 -177
  509. data/spec/unit/mixin/shell_out_spec.rb +56 -27
  510. data/spec/unit/mixin/template_spec.rb +31 -31
  511. data/spec/unit/mixin/windows_architecture_helper_spec.rb +5 -5
  512. data/spec/unit/mixin/xml_escape_spec.rb +7 -7
  513. data/spec/unit/monkey_patches/uri_spec.rb +1 -1
  514. data/spec/unit/monologger_spec.rb +3 -3
  515. data/spec/unit/node/attribute_spec.rb +185 -136
  516. data/spec/unit/node/immutable_collections_spec.rb +22 -22
  517. data/spec/unit/node_spec.rb +210 -179
  518. data/spec/unit/org_spec.rb +196 -0
  519. data/spec/unit/platform/query_helpers_spec.rb +5 -5
  520. data/spec/unit/platform_spec.rb +46 -46
  521. data/spec/unit/policy_builder/expand_node_object_spec.rb +17 -18
  522. data/spec/unit/policy_builder/policyfile_spec.rb +159 -71
  523. data/spec/unit/provider/directory_spec.rb +5 -5
  524. data/spec/unit/provider/dsc_script_spec.rb +6 -6
  525. data/spec/unit/provider/env_spec.rb +27 -14
  526. data/spec/unit/provider/execute_spec.rb +139 -68
  527. data/spec/unit/provider/file/content_spec.rb +8 -8
  528. data/spec/unit/provider/git_spec.rb +10 -5
  529. data/spec/unit/provider/group/dscl_spec.rb +8 -11
  530. data/spec/unit/provider/group_spec.rb +13 -13
  531. data/spec/unit/provider/ifconfig/aix_spec.rb +3 -2
  532. data/spec/unit/provider/ifconfig/debian_spec.rb +19 -19
  533. data/spec/unit/provider/ifconfig_spec.rb +2 -2
  534. data/spec/unit/provider/mdadm_spec.rb +2 -2
  535. data/spec/unit/provider/mount/aix_spec.rb +5 -5
  536. data/spec/unit/provider/mount/mount_spec.rb +22 -22
  537. data/spec/unit/provider/mount/solaris_spec.rb +20 -20
  538. data/spec/unit/provider/package/aix_spec.rb +23 -22
  539. data/spec/unit/provider/package/apt_spec.rb +23 -4
  540. data/spec/unit/provider/package/dpkg_spec.rb +14 -15
  541. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +1 -1
  542. data/spec/unit/provider/package/freebsd/port_spec.rb +1 -1
  543. data/spec/unit/provider/package/ips_spec.rb +1 -2
  544. data/spec/unit/provider/package/macports_spec.rb +14 -14
  545. data/spec/unit/provider/package/openbsd_spec.rb +66 -0
  546. data/spec/unit/provider/package/pacman_spec.rb +15 -14
  547. data/spec/unit/provider/package/portage_spec.rb +11 -11
  548. data/spec/unit/provider/package/rpm_spec.rb +132 -84
  549. data/spec/unit/provider/package/rubygems_spec.rb +54 -25
  550. data/spec/unit/provider/package/solaris_spec.rb +22 -25
  551. data/spec/unit/provider/package/yum_spec.rb +237 -36
  552. data/spec/unit/provider/package/zypper_spec.rb +9 -12
  553. data/spec/unit/provider/package_spec.rb +276 -2
  554. data/spec/unit/provider/package_spec.rbe +0 -0
  555. data/spec/unit/provider/remote_directory_spec.rb +25 -25
  556. data/spec/unit/provider/remote_file/ftp_spec.rb +3 -3
  557. data/spec/unit/provider/route_spec.rb +3 -3
  558. data/spec/unit/provider/script_spec.rb +61 -43
  559. data/spec/unit/provider/service/aix_service_spec.rb +5 -5
  560. data/spec/unit/provider/service/arch_service_spec.rb +5 -5
  561. data/spec/unit/provider/service/debian_service_spec.rb +8 -8
  562. data/spec/unit/provider/service/freebsd_service_spec.rb +16 -2
  563. data/spec/unit/provider/service/gentoo_service_spec.rb +8 -8
  564. data/spec/unit/provider/service/init_service_spec.rb +5 -5
  565. data/spec/unit/provider/service/insserv_service_spec.rb +2 -2
  566. data/spec/unit/provider/service/invokercd_service_spec.rb +5 -5
  567. data/spec/unit/provider/service/macosx_spec.rb +7 -7
  568. data/spec/unit/provider/service/openbsd_service_spec.rb +543 -0
  569. data/spec/unit/provider/service/redhat_spec.rb +4 -4
  570. data/spec/unit/provider/service/simple_service_spec.rb +2 -2
  571. data/spec/unit/provider/service/solaris_smf_service_spec.rb +14 -14
  572. data/spec/unit/provider/service/systemd_service_spec.rb +15 -7
  573. data/spec/unit/provider/service/upstart_service_spec.rb +4 -4
  574. data/spec/unit/provider/service/windows_spec.rb +119 -25
  575. data/spec/unit/provider/service_spec.rb +1 -1
  576. data/spec/unit/provider/user/dscl_spec.rb +38 -30
  577. data/spec/unit/provider/user_spec.rb +1 -1
  578. data/spec/unit/provider_resolver_spec.rb +7 -7
  579. data/spec/unit/provider_spec.rb +23 -23
  580. data/spec/unit/recipe_spec.rb +194 -83
  581. data/spec/unit/registry_helper_spec.rb +143 -143
  582. data/spec/unit/resource/chef_gem_spec.rb +117 -3
  583. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +2 -2
  584. data/spec/unit/resource/conditional_spec.rb +56 -15
  585. data/spec/unit/resource/deploy_spec.rb +2 -2
  586. data/spec/unit/resource/dsc_script_spec.rb +32 -0
  587. data/spec/unit/resource/execute_spec.rb +4 -0
  588. data/spec/unit/resource/file/verification_spec.rb +111 -0
  589. data/spec/unit/resource/file_spec.rb +14 -0
  590. data/spec/unit/resource/openbsd_package_spec.rb +49 -0
  591. data/spec/unit/resource/remote_file_spec.rb +12 -12
  592. data/spec/unit/resource/resource_notification_spec.rb +18 -18
  593. data/spec/unit/resource/rpm_package_spec.rb +12 -0
  594. data/spec/unit/resource/scm_spec.rb +4 -4
  595. data/spec/unit/resource/script_spec.rb +3 -5
  596. data/spec/unit/resource/subversion_spec.rb +1 -1
  597. data/spec/unit/resource_builder_spec.rb +1 -0
  598. data/spec/unit/resource_collection/resource_list_spec.rb +2 -2
  599. data/spec/unit/resource_collection/resource_set_spec.rb +3 -3
  600. data/spec/unit/resource_collection/stepable_iterator_spec.rb +24 -24
  601. data/spec/unit/resource_collection_spec.rb +52 -52
  602. data/spec/unit/resource_definition_spec.rb +1 -1
  603. data/spec/unit/resource_reporter_spec.rb +118 -118
  604. data/spec/unit/resource_spec.rb +131 -125
  605. data/spec/unit/rest/auth_credentials_spec.rb +73 -73
  606. data/spec/unit/rest_spec.rb +12 -12
  607. data/spec/unit/role_spec.rb +85 -84
  608. data/spec/unit/run_context/cookbook_compiler_spec.rb +18 -18
  609. data/spec/unit/run_context_spec.rb +39 -68
  610. data/spec/unit/run_list/run_list_expansion_spec.rb +21 -21
  611. data/spec/unit/run_list/run_list_item_spec.rb +28 -28
  612. data/spec/unit/run_list/versioned_recipe_list_spec.rb +14 -14
  613. data/spec/unit/run_list_spec.rb +55 -55
  614. data/spec/unit/run_lock_spec.rb +14 -14
  615. data/spec/unit/run_status_spec.rb +24 -24
  616. data/spec/unit/scan_access_control_spec.rb +23 -23
  617. data/spec/unit/search/query_spec.rb +54 -66
  618. data/spec/unit/shell/model_wrapper_spec.rb +13 -13
  619. data/spec/unit/shell/shell_ext_spec.rb +32 -32
  620. data/spec/unit/shell/shell_session_spec.rb +24 -24
  621. data/spec/unit/shell_out_spec.rb +4 -4
  622. data/spec/unit/shell_spec.rb +27 -27
  623. data/spec/unit/user_spec.rb +50 -50
  624. data/spec/unit/util/backup_spec.rb +32 -32
  625. data/spec/unit/util/diff_spec.rb +31 -31
  626. data/spec/unit/util/dsc/configuration_generator_spec.rb +38 -16
  627. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +21 -26
  628. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +10 -10
  629. data/spec/unit/util/editor_spec.rb +10 -10
  630. data/spec/unit/util/file_edit_spec.rb +10 -10
  631. data/spec/unit/util/path_helper_spec.rb +38 -46
  632. data/spec/unit/util/powershell/cmdlet_spec.rb +9 -9
  633. data/spec/unit/util/selinux_spec.rb +30 -30
  634. data/spec/unit/util/threaded_job_queue_spec.rb +6 -6
  635. data/spec/unit/version/platform_spec.rb +5 -5
  636. data/spec/unit/version_class_spec.rb +15 -15
  637. data/spec/unit/version_constraint/platform_spec.rb +7 -7
  638. data/spec/unit/version_constraint_spec.rb +43 -43
  639. data/spec/unit/windows_service_spec.rb +15 -15
  640. data/spec/unit/workstation_config_loader_spec.rb +2 -2
  641. data/tasks/rspec.rb +16 -18
  642. metadata +126 -49
  643. data/bin/shef +0 -35
  644. data/lib/chef/application/agent.rb +0 -18
  645. data/lib/chef/monkey_patches/fileutils.rb +0 -65
  646. data/lib/chef/monkey_patches/numeric.rb +0 -15
  647. data/lib/chef/monkey_patches/object.rb +0 -9
  648. data/lib/chef/monkey_patches/pathname.rb +0 -32
  649. data/lib/chef/monkey_patches/regexp.rb +0 -34
  650. data/lib/chef/monkey_patches/securerandom.rb +0 -44
  651. data/lib/chef/monkey_patches/string.rb +0 -49
  652. data/lib/chef/monkey_patches/tempfile.rb +0 -64
  653. data/lib/chef/monkey_patches/uri.rb +0 -70
@@ -184,7 +184,11 @@ describe Chef::Knife::CookbookSiteInstall do
184
184
  end
185
185
 
186
186
  it "rasies an error if it finds no metadata file" do
187
- expect { knife.preferred_metadata }.to raise_error(Chef::Exceptions::MetadataNotFound)
187
+ expect { knife.preferred_metadata }.to raise_error { |error|
188
+ expect(error).to be_a(Chef::Exceptions::MetadataNotFound)
189
+ expect(error.cookbook_name).to eq("post-punk-kitchen")
190
+ expect(error.install_path).to eq(install_path)
191
+ }
188
192
  end
189
193
 
190
194
  end
@@ -32,27 +32,27 @@ describe Chef::Knife::CookbookSiteShare do
32
32
  @cookbook = Chef::CookbookVersion.new('cookbook_name')
33
33
 
34
34
  @cookbook_loader = double('Chef::CookbookLoader')
35
- @cookbook_loader.stub(:cookbook_exists?).and_return(true)
36
- @cookbook_loader.stub(:[]).and_return(@cookbook)
37
- Chef::CookbookLoader.stub(:new).and_return(@cookbook_loader)
35
+ allow(@cookbook_loader).to receive(:cookbook_exists?).and_return(true)
36
+ allow(@cookbook_loader).to receive(:[]).and_return(@cookbook)
37
+ allow(Chef::CookbookLoader).to receive(:new).and_return(@cookbook_loader)
38
38
 
39
39
  @noauth_rest = double(Chef::REST)
40
- @knife.stub(:noauth_rest).and_return(@noauth_rest)
40
+ allow(@knife).to receive(:noauth_rest).and_return(@noauth_rest)
41
41
 
42
42
  @cookbook_uploader = Chef::CookbookUploader.new('herpderp', :rest => "norest")
43
- Chef::CookbookUploader.stub(:new).and_return(@cookbook_uploader)
44
- @cookbook_uploader.stub(:validate_cookbooks).and_return(true)
45
- Chef::CookbookSiteStreamingUploader.stub(:create_build_dir).and_return(Dir.mktmpdir)
43
+ allow(Chef::CookbookUploader).to receive(:new).and_return(@cookbook_uploader)
44
+ allow(@cookbook_uploader).to receive(:validate_cookbooks).and_return(true)
45
+ allow(Chef::CookbookSiteStreamingUploader).to receive(:create_build_dir).and_return(Dir.mktmpdir)
46
46
 
47
- @knife.stub(:shell_out!).and_return(true)
47
+ allow(@knife).to receive(:shell_out!).and_return(true)
48
48
  @stdout = StringIO.new
49
- @knife.ui.stub(:stdout).and_return(@stdout)
49
+ allow(@knife.ui).to receive(:stdout).and_return(@stdout)
50
50
  end
51
51
 
52
52
  describe 'run' do
53
53
 
54
54
  before(:each) do
55
- @knife.stub(:do_upload).and_return(true)
55
+ allow(@knife).to receive(:do_upload).and_return(true)
56
56
  @category_response = {
57
57
  "name" => "cookbook_name",
58
58
  "category" => "Testing Category"
@@ -66,72 +66,81 @@ describe Chef::Knife::CookbookSiteShare do
66
66
  end
67
67
 
68
68
  it 'should set true to config[:dry_run] as default' do
69
- @knife.config[:dry_run].should be_false
69
+ expect(@knife.config[:dry_run]).to be_falsey
70
70
  end
71
71
 
72
72
  it 'should should print usage and exit when given no arguments' do
73
73
  @knife.name_args = []
74
- @knife.should_receive(:show_usage)
75
- @knife.ui.should_receive(:fatal)
76
- lambda { @knife.run }.should raise_error(SystemExit)
74
+ expect(@knife).to receive(:show_usage)
75
+ expect(@knife.ui).to receive(:fatal)
76
+ expect { @knife.run }.to raise_error(SystemExit)
77
77
  end
78
78
 
79
79
  it 'should not fail when given only 1 argument and can determine category' do
80
80
  @knife.name_args = ['cookbook_name']
81
- @noauth_rest.should_receive(:get_rest).with("http://cookbooks.opscode.com/api/v1/cookbooks/cookbook_name").and_return(@category_response)
82
- @knife.should_receive(:do_upload)
81
+ expect(@noauth_rest).to receive(:get_rest).with("http://cookbooks.opscode.com/api/v1/cookbooks/cookbook_name").and_return(@category_response)
82
+ expect(@knife).to receive(:do_upload)
83
83
  @knife.run
84
84
  end
85
85
 
86
86
  it 'should print error and exit when given only 1 argument and cannot determine category' do
87
87
  @knife.name_args = ['cookbook_name']
88
- @noauth_rest.should_receive(:get_rest).with("http://cookbooks.opscode.com/api/v1/cookbooks/cookbook_name").and_return(@bad_category_response)
89
- @knife.ui.should_receive(:fatal)
90
- lambda { @knife.run }.should raise_error(SystemExit)
88
+ expect(@noauth_rest).to receive(:get_rest).with("http://cookbooks.opscode.com/api/v1/cookbooks/cookbook_name").and_return(@bad_category_response)
89
+ expect(@knife.ui).to receive(:fatal)
90
+ expect { @knife.run }.to raise_error(SystemExit)
91
91
  end
92
92
 
93
93
  it 'should print error and exit when given only 1 argument and Chef::REST throws an exception' do
94
94
  @knife.name_args = ['cookbook_name']
95
- @noauth_rest.should_receive(:get_rest).with("http://cookbooks.opscode.com/api/v1/cookbooks/cookbook_name") { raise Errno::ECONNREFUSED, "Connection refused" }
96
- @knife.ui.should_receive(:fatal)
97
- lambda { @knife.run }.should raise_error(SystemExit)
95
+ expect(@noauth_rest).to receive(:get_rest).with("http://cookbooks.opscode.com/api/v1/cookbooks/cookbook_name") { raise Errno::ECONNREFUSED, "Connection refused" }
96
+ expect(@knife.ui).to receive(:fatal)
97
+ expect { @knife.run }.to raise_error(SystemExit)
98
98
  end
99
99
 
100
100
  it 'should check if the cookbook exists' do
101
- @cookbook_loader.should_receive(:cookbook_exists?)
101
+ expect(@cookbook_loader).to receive(:cookbook_exists?)
102
102
  @knife.run
103
103
  end
104
104
 
105
105
  it "should exit and log to error if the cookbook doesn't exist" do
106
- @cookbook_loader.stub(:cookbook_exists?).and_return(false)
107
- @knife.ui.should_receive(:error)
108
- lambda { @knife.run }.should raise_error(SystemExit)
106
+ allow(@cookbook_loader).to receive(:cookbook_exists?).and_return(false)
107
+ expect(@knife.ui).to receive(:error)
108
+ expect { @knife.run }.to raise_error(SystemExit)
109
109
  end
110
110
 
111
- it 'should make a tarball of the cookbook' do
112
- @knife.should_receive(:shell_out!) do |args|
113
- args.to_s.should match(/tar -czf/)
111
+ if File.exists?('/usr/bin/gnutar') || File.exists?('/bin/gnutar')
112
+ it 'should use gnutar to make a tarball of the cookbook' do
113
+ expect(@knife).to receive(:shell_out!) do |args|
114
+ expect(args.to_s).to match(/gnutar -czf/)
115
+ end
116
+ @knife.run
117
+ end
118
+ else
119
+ it 'should make a tarball of the cookbook' do
120
+ expect(@knife).to receive(:shell_out!) do |args|
121
+ expect(args.to_s).to match(/tar -czf/)
122
+ end
123
+ @knife.run
114
124
  end
115
- @knife.run
116
125
  end
117
126
 
118
127
  it 'should exit and log to error when the tarball creation fails' do
119
- @knife.stub(:shell_out!).and_raise(Chef::Exceptions::Exec)
120
- @knife.ui.should_receive(:error)
121
- lambda { @knife.run }.should raise_error(SystemExit)
128
+ allow(@knife).to receive(:shell_out!).and_raise(Chef::Exceptions::Exec)
129
+ expect(@knife.ui).to receive(:error)
130
+ expect { @knife.run }.to raise_error(SystemExit)
122
131
  end
123
132
 
124
133
  it 'should upload the cookbook and clean up the tarball' do
125
- @knife.should_receive(:do_upload)
126
- FileUtils.should_receive(:rm_rf)
134
+ expect(@knife).to receive(:do_upload)
135
+ expect(FileUtils).to receive(:rm_rf)
127
136
  @knife.run
128
137
  end
129
138
 
130
139
  context "when the --dry-run flag is specified" do
131
140
  before do
132
- Chef::CookbookSiteStreamingUploader.stub(:create_build_dir).and_return("/var/tmp/dummy")
141
+ allow(Chef::CookbookSiteStreamingUploader).to receive(:create_build_dir).and_return("/var/tmp/dummy")
133
142
  @knife.config = { :dry_run => true }
134
- @knife.stub_chain(:shell_out!, :stdout).and_return('file')
143
+ allow(@knife).to receive_message_chain(:shell_out!, :stdout).and_return('file')
135
144
  end
136
145
 
137
146
  it "should list files in the tarball" do
@@ -152,46 +161,46 @@ describe Chef::Knife::CookbookSiteShare do
152
161
 
153
162
  before(:each) do
154
163
  @upload_response = double('Net::HTTPResponse')
155
- Chef::CookbookSiteStreamingUploader.stub(:post).and_return(@upload_response)
164
+ allow(Chef::CookbookSiteStreamingUploader).to receive(:post).and_return(@upload_response)
156
165
 
157
166
  @stdout = StringIO.new
158
167
  @stderr = StringIO.new
159
- @knife.ui.stub(:stdout).and_return(@stdout)
160
- @knife.ui.stub(:stderr).and_return(@stderr)
161
- File.stub(:open).and_return(true)
168
+ allow(@knife.ui).to receive(:stdout).and_return(@stdout)
169
+ allow(@knife.ui).to receive(:stderr).and_return(@stderr)
170
+ allow(File).to receive(:open).and_return(true)
162
171
  end
163
172
 
164
- it 'should post the cookbook to "https://supermarket.getchef.com"' do
165
- response_text = Chef::JSONCompat.to_json({:uri => 'https://supermarket.getchef.com/cookbooks/cookbook_name'})
166
- @upload_response.stub(:body).and_return(response_text)
167
- @upload_response.stub(:code).and_return(201)
168
- Chef::CookbookSiteStreamingUploader.should_receive(:post).with(/supermarket\.getchef\.com/, anything(), anything(), anything())
173
+ it 'should post the cookbook to "https://supermarket.chef.io"' do
174
+ response_text = Chef::JSONCompat.to_json({:uri => 'https://supermarket.chef.io/cookbooks/cookbook_name'})
175
+ allow(@upload_response).to receive(:body).and_return(response_text)
176
+ allow(@upload_response).to receive(:code).and_return(201)
177
+ expect(Chef::CookbookSiteStreamingUploader).to receive(:post).with(/supermarket\.chef\.io/, anything(), anything(), anything())
169
178
  @knife.run
170
179
  end
171
180
 
172
181
  it 'should alert the user when a version already exists' do
173
182
  response_text = Chef::JSONCompat.to_json({:error_messages => ['Version already exists']})
174
- @upload_response.stub(:body).and_return(response_text)
175
- @upload_response.stub(:code).and_return(409)
176
- lambda { @knife.run }.should raise_error(SystemExit)
177
- @stderr.string.should match(/ERROR(.+)cookbook already exists/)
183
+ allow(@upload_response).to receive(:body).and_return(response_text)
184
+ allow(@upload_response).to receive(:code).and_return(409)
185
+ expect { @knife.run }.to raise_error(SystemExit)
186
+ expect(@stderr.string).to match(/ERROR(.+)cookbook already exists/)
178
187
  end
179
188
 
180
189
  it 'should pass any errors on to the user' do
181
190
  response_text = Chef::JSONCompat.to_json({:error_messages => ["You're holding it wrong"]})
182
- @upload_response.stub(:body).and_return(response_text)
183
- @upload_response.stub(:code).and_return(403)
184
- lambda { @knife.run }.should raise_error(SystemExit)
185
- @stderr.string.should match("ERROR(.*)You're holding it wrong")
191
+ allow(@upload_response).to receive(:body).and_return(response_text)
192
+ allow(@upload_response).to receive(:code).and_return(403)
193
+ expect { @knife.run }.to raise_error(SystemExit)
194
+ expect(@stderr.string).to match("ERROR(.*)You're holding it wrong")
186
195
  end
187
196
 
188
197
  it 'should print the body if no errors are exposed on failure' do
189
198
  response_text = Chef::JSONCompat.to_json({:system_error => "Your call was dropped", :reason => "There's a map for that"})
190
- @upload_response.stub(:body).and_return(response_text)
191
- @upload_response.stub(:code).and_return(500)
192
- @knife.ui.should_receive(:error).with(/#{Regexp.escape(response_text)}/)#.ordered
193
- @knife.ui.should_receive(:error).with(/Unknown error/)#.ordered
194
- lambda { @knife.run }.should raise_error(SystemExit)
199
+ allow(@upload_response).to receive(:body).and_return(response_text)
200
+ allow(@upload_response).to receive(:code).and_return(500)
201
+ expect(@knife.ui).to receive(:error).with(/#{Regexp.escape(response_text)}/)#.ordered
202
+ expect(@knife.ui).to receive(:error).with(/Unknown error/)#.ordered
203
+ expect { @knife.run }.to raise_error(SystemExit)
195
204
  end
196
205
 
197
206
  end
@@ -24,13 +24,13 @@ describe Chef::Knife::CookbookSiteUnshare do
24
24
  before(:each) do
25
25
  @knife = Chef::Knife::CookbookSiteUnshare.new
26
26
  @knife.name_args = ['cookbook_name']
27
- @knife.stub(:confirm).and_return(true)
27
+ allow(@knife).to receive(:confirm).and_return(true)
28
28
 
29
29
  @rest = double('Chef::REST')
30
- @rest.stub(:delete_rest).and_return(true)
31
- @knife.stub(:rest).and_return(@rest)
30
+ allow(@rest).to receive(:delete_rest).and_return(true)
31
+ allow(@knife).to receive(:rest).and_return(@rest)
32
32
  @stdout = StringIO.new
33
- @knife.ui.stub(:stdout).and_return(@stdout)
33
+ allow(@knife.ui).to receive(:stdout).and_return(@stdout)
34
34
  end
35
35
 
36
36
  describe 'run' do
@@ -38,37 +38,37 @@ describe Chef::Knife::CookbookSiteUnshare do
38
38
  describe 'with no cookbook argument' do
39
39
  it 'should print the usage and exit' do
40
40
  @knife.name_args = []
41
- @knife.ui.should_receive(:fatal)
42
- @knife.should_receive(:show_usage)
43
- lambda { @knife.run }.should raise_error(SystemExit)
41
+ expect(@knife.ui).to receive(:fatal)
42
+ expect(@knife).to receive(:show_usage)
43
+ expect { @knife.run }.to raise_error(SystemExit)
44
44
  end
45
45
  end
46
46
 
47
47
  it 'should confirm you want to unshare the cookbook' do
48
- @knife.should_receive(:confirm)
48
+ expect(@knife).to receive(:confirm)
49
49
  @knife.run
50
50
  end
51
51
 
52
52
  it 'should send a delete request to the cookbook site' do
53
- @rest.should_receive(:delete_rest)
53
+ expect(@rest).to receive(:delete_rest)
54
54
  @knife.run
55
55
  end
56
56
 
57
57
  it 'should log an error and exit when forbidden' do
58
58
  exception = double('403 "Forbidden"', :code => '403')
59
- @rest.stub(:delete_rest).and_raise(Net::HTTPServerException.new('403 "Forbidden"', exception))
60
- @knife.ui.should_receive(:error)
61
- lambda { @knife.run }.should raise_error(SystemExit)
59
+ allow(@rest).to receive(:delete_rest).and_raise(Net::HTTPServerException.new('403 "Forbidden"', exception))
60
+ expect(@knife.ui).to receive(:error)
61
+ expect { @knife.run }.to raise_error(SystemExit)
62
62
  end
63
63
 
64
64
  it 'should re-raise any non-forbidden errors on delete_rest' do
65
65
  exception = double('500 "Application Error"', :code => '500')
66
- @rest.stub(:delete_rest).and_raise(Net::HTTPServerException.new('500 "Application Error"', exception))
67
- lambda { @knife.run }.should raise_error(Net::HTTPServerException)
66
+ allow(@rest).to receive(:delete_rest).and_raise(Net::HTTPServerException.new('500 "Application Error"', exception))
67
+ expect { @knife.run }.to raise_error(Net::HTTPServerException)
68
68
  end
69
69
 
70
70
  it 'should log a success message' do
71
- @knife.ui.should_receive(:info)
71
+ expect(@knife.ui).to receive(:info)
72
72
  @knife.run
73
73
  end
74
74
 
@@ -26,55 +26,55 @@ describe Chef::Knife::CookbookTest do
26
26
  Chef::Config[:node_name] = "webmonkey.example.com"
27
27
  @knife = Chef::Knife::CookbookTest.new
28
28
  @knife.config[:cookbook_path] = File.join(CHEF_SPEC_DATA,'cookbooks')
29
- @knife.cookbook_loader.stub(:cookbook_exists?).and_return(true)
29
+ allow(@knife.cookbook_loader).to receive(:cookbook_exists?).and_return(true)
30
30
  @cookbooks = []
31
31
  %w{tats central_market jimmy_johns pho}.each do |cookbook_name|
32
32
  @cookbooks << Chef::CookbookVersion.new(cookbook_name)
33
33
  end
34
34
  @stdout = StringIO.new
35
- @knife.ui.stub(:stdout).and_return(@stdout)
35
+ allow(@knife.ui).to receive(:stdout).and_return(@stdout)
36
36
  end
37
37
 
38
38
  describe "run" do
39
39
  it "should test the cookbook" do
40
- @knife.stub(:test_cookbook).and_return(true)
40
+ allow(@knife).to receive(:test_cookbook).and_return(true)
41
41
  @knife.name_args = ["italian"]
42
- @knife.should_receive(:test_cookbook).with("italian")
42
+ expect(@knife).to receive(:test_cookbook).with("italian")
43
43
  @knife.run
44
44
  end
45
45
 
46
46
  it "should test multiple cookbooks when provided" do
47
- @knife.stub(:test_cookbook).and_return(true)
47
+ allow(@knife).to receive(:test_cookbook).and_return(true)
48
48
  @knife.name_args = ["tats", "jimmy_johns"]
49
- @knife.should_receive(:test_cookbook).with("tats")
50
- @knife.should_receive(:test_cookbook).with("jimmy_johns")
51
- @knife.should_not_receive(:test_cookbook).with("central_market")
52
- @knife.should_not_receive(:test_cookbook).with("pho")
49
+ expect(@knife).to receive(:test_cookbook).with("tats")
50
+ expect(@knife).to receive(:test_cookbook).with("jimmy_johns")
51
+ expect(@knife).not_to receive(:test_cookbook).with("central_market")
52
+ expect(@knife).not_to receive(:test_cookbook).with("pho")
53
53
  @knife.run
54
54
  end
55
55
 
56
56
  it "should test both ruby and templates" do
57
57
  @knife.name_args = ["example"]
58
- @knife.config[:cookbook_path].should_not be_empty
58
+ expect(@knife.config[:cookbook_path]).not_to be_empty
59
59
  Array(@knife.config[:cookbook_path]).reverse.each do |path|
60
- @knife.should_receive(:test_ruby).with(an_instance_of(Chef::Cookbook::SyntaxCheck))
61
- @knife.should_receive(:test_templates).with(an_instance_of(Chef::Cookbook::SyntaxCheck))
60
+ expect(@knife).to receive(:test_ruby).with(an_instance_of(Chef::Cookbook::SyntaxCheck))
61
+ expect(@knife).to receive(:test_templates).with(an_instance_of(Chef::Cookbook::SyntaxCheck))
62
62
  end
63
63
  @knife.run
64
64
  end
65
65
 
66
66
  describe "with -a or --all" do
67
67
  it "should test all of the cookbooks" do
68
- @knife.stub(:test_cookbook).and_return(true)
68
+ allow(@knife).to receive(:test_cookbook).and_return(true)
69
69
  @knife.config[:all] = true
70
70
  @loader = {}
71
- @loader.stub(:load_cookbooks).and_return(@loader)
71
+ allow(@loader).to receive(:load_cookbooks).and_return(@loader)
72
72
  @cookbooks.each do |cookbook|
73
73
  @loader[cookbook.name] = cookbook
74
74
  end
75
- @knife.stub(:cookbook_loader).and_return(@loader)
75
+ allow(@knife).to receive(:cookbook_loader).and_return(@loader)
76
76
  @loader.each do |key, cookbook|
77
- @knife.should_receive(:test_cookbook).with(cookbook.name)
77
+ expect(@knife).to receive(:test_cookbook).with(cookbook.name)
78
78
  end
79
79
  @knife.run
80
80
  end
@@ -31,8 +31,8 @@ describe Chef::Knife::CookbookUpload do
31
31
 
32
32
  let(:cookbook_loader) do
33
33
  cookbook_loader = cookbooks_by_name.dup
34
- cookbook_loader.stub(:merged_cookbooks).and_return([])
35
- cookbook_loader.stub(:load_cookbooks).and_return(cookbook_loader)
34
+ allow(cookbook_loader).to receive(:merged_cookbooks).and_return([])
35
+ allow(cookbook_loader).to receive(:load_cookbooks).and_return(cookbook_loader)
36
36
  cookbook_loader
37
37
  end
38
38
 
@@ -45,23 +45,23 @@ describe Chef::Knife::CookbookUpload do
45
45
  let(:knife) do
46
46
  k = Chef::Knife::CookbookUpload.new
47
47
  k.name_args = name_args
48
- k.ui.stub(:stdout).and_return(output)
49
- k.ui.stub(:stderr).and_return(output)
48
+ allow(k.ui).to receive(:stdout).and_return(output)
49
+ allow(k.ui).to receive(:stderr).and_return(output)
50
50
  k
51
51
  end
52
52
 
53
53
  before(:each) do
54
- Chef::CookbookLoader.stub(:new).and_return(cookbook_loader)
54
+ allow(Chef::CookbookLoader).to receive(:new).and_return(cookbook_loader)
55
55
  end
56
56
 
57
57
  describe 'with --concurrency' do
58
58
  it 'should upload cookbooks with predefined concurrency' do
59
- Chef::CookbookVersion.stub(:list_all_versions).and_return({})
59
+ allow(Chef::CookbookVersion).to receive(:list_all_versions).and_return({})
60
60
  knife.config[:concurrency] = 3
61
61
  test_cookbook = Chef::CookbookVersion.new('test_cookbook', '/tmp/blah')
62
- cookbook_loader.stub(:each).and_yield("test_cookbook", test_cookbook)
63
- cookbook_loader.stub(:cookbook_names).and_return(["test_cookbook"])
64
- Chef::CookbookUploader.should_receive(:new).
62
+ allow(cookbook_loader).to receive(:each).and_yield("test_cookbook", test_cookbook)
63
+ allow(cookbook_loader).to receive(:cookbook_names).and_return(["test_cookbook"])
64
+ expect(Chef::CookbookUploader).to receive(:new).
65
65
  with( kind_of(Array), { :force => nil, :concurrency => 3}).
66
66
  and_return(double("Chef::CookbookUploader", :upload_cookbooks=> true))
67
67
  knife.run
@@ -70,26 +70,26 @@ describe Chef::Knife::CookbookUpload do
70
70
 
71
71
  describe 'run' do
72
72
  before(:each) do
73
- Chef::CookbookUploader.stub(:new => cookbook_uploader)
74
- Chef::CookbookVersion.stub(:list_all_versions).and_return({})
73
+ allow(Chef::CookbookUploader).to receive_messages(:new => cookbook_uploader)
74
+ allow(Chef::CookbookVersion).to receive(:list_all_versions).and_return({})
75
75
  end
76
76
 
77
77
  it 'should print usage and exit when a cookbook name is not provided' do
78
78
  knife.name_args = []
79
- knife.should_receive(:show_usage)
80
- knife.ui.should_receive(:fatal)
81
- lambda { knife.run }.should raise_error(SystemExit)
79
+ expect(knife).to receive(:show_usage)
80
+ expect(knife.ui).to receive(:fatal)
81
+ expect { knife.run }.to raise_error(SystemExit)
82
82
  end
83
83
 
84
84
  describe 'when specifying a cookbook name' do
85
85
  it 'should upload the cookbook' do
86
- knife.should_receive(:upload).once
86
+ expect(knife).to receive(:upload).once
87
87
  knife.run
88
88
  end
89
89
 
90
90
  it 'should report on success' do
91
- knife.should_receive(:upload).once
92
- knife.ui.should_receive(:info).with(/Uploaded 1 cookbook/)
91
+ expect(knife).to receive(:upload).once
92
+ expect(knife.ui).to receive(:info).with(/Uploaded 1 cookbook/)
93
93
  knife.run
94
94
  end
95
95
  end
@@ -97,7 +97,7 @@ describe Chef::Knife::CookbookUpload do
97
97
  describe 'when specifying the same cookbook name twice' do
98
98
  it 'should upload the cookbook only once' do
99
99
  knife.name_args = ['test_cookbook', 'test_cookbook']
100
- knife.should_receive(:upload).once
100
+ expect(knife).to receive(:upload).once
101
101
  knife.run
102
102
  end
103
103
  end
@@ -105,8 +105,8 @@ describe Chef::Knife::CookbookUpload do
105
105
  context "when uploading a cookbook that uses deprecated overlays" do
106
106
 
107
107
  before do
108
- cookbook_loader.stub(:merged_cookbooks).and_return(['test_cookbook'])
109
- cookbook_loader.stub(:merged_cookbook_paths).
108
+ allow(cookbook_loader).to receive(:merged_cookbooks).and_return(['test_cookbook'])
109
+ allow(cookbook_loader).to receive(:merged_cookbook_paths).
110
110
  and_return({'test_cookbook' => %w{/path/one/test_cookbook /path/two/test_cookbook}})
111
111
  end
112
112
 
@@ -123,7 +123,7 @@ test_cookbook:
123
123
  /path/one/test_cookbook
124
124
  /path/two/test_cookbook
125
125
  E
126
- output.string.should include(expected_message)
126
+ expect(output.string).to include(expected_message)
127
127
  end
128
128
  end
129
129
 
@@ -139,17 +139,17 @@ E
139
139
  end
140
140
 
141
141
  it "should read only one cookbook" do
142
- cookbook_loader.should_receive(:[]).once.with('test_cookbook1').and_call_original
142
+ expect(cookbook_loader).to receive(:[]).once.with('test_cookbook1').and_call_original
143
143
  knife.run
144
144
  end
145
145
 
146
146
  it "should not read all cookbooks" do
147
- cookbook_loader.should_not_receive(:load_cookbooks)
147
+ expect(cookbook_loader).not_to receive(:load_cookbooks)
148
148
  knife.run
149
149
  end
150
150
 
151
151
  it "should upload only one cookbook" do
152
- knife.should_receive(:upload).exactly(1).times
152
+ expect(knife).to receive(:upload).exactly(1).times
153
153
  knife.run
154
154
  end
155
155
  end
@@ -181,13 +181,13 @@ E
181
181
 
182
182
  it "should upload all dependencies once" do
183
183
  knife.config[:depends] = true
184
- knife.stub(:cookbook_names).and_return(["test_cookbook1", "test_cookbook2", "test_cookbook3"])
185
- knife.should_receive(:upload).exactly(3).times
186
- lambda do
184
+ allow(knife).to receive(:cookbook_names).and_return(["test_cookbook1", "test_cookbook2", "test_cookbook3"])
185
+ expect(knife).to receive(:upload).exactly(3).times
186
+ expect do
187
187
  Timeout::timeout(5) do
188
188
  knife.run
189
189
  end
190
- end.should_not raise_error
190
+ end.not_to raise_error
191
191
  end
192
192
  end
193
193
 
@@ -196,99 +196,133 @@ E
196
196
 
197
197
  before(:each) do
198
198
  cookbook.metadata.depends("dependency")
199
- cookbook_loader.stub(:[]) do |ckbk|
199
+ allow(cookbook_loader).to receive(:[]) do |ckbk|
200
200
  { "test_cookbook" => cookbook,
201
201
  "dependency" => cookbook_dependency}[ckbk]
202
202
  end
203
- knife.stub(:cookbook_names).and_return(["cookbook_dependency", "test_cookbook"])
203
+ allow(knife).to receive(:cookbook_names).and_return(["cookbook_dependency", "test_cookbook"])
204
204
  @stdout, @stderr, @stdin = StringIO.new, StringIO.new, StringIO.new
205
205
  knife.ui = Chef::Knife::UI.new(@stdout, @stderr, @stdin, {})
206
206
  end
207
207
 
208
208
  it 'should exit and not upload the cookbook' do
209
- cookbook_loader.should_receive(:[]).once.with('test_cookbook')
210
- cookbook_loader.should_not_receive(:load_cookbooks)
211
- cookbook_uploader.should_not_receive(:upload_cookbooks)
209
+ expect(cookbook_loader).to receive(:[]).once.with('test_cookbook')
210
+ expect(cookbook_loader).not_to receive(:load_cookbooks)
211
+ expect(cookbook_uploader).not_to receive(:upload_cookbooks)
212
212
  expect {knife.run}.to raise_error(SystemExit)
213
213
  end
214
214
 
215
215
  it 'should output a message for a single missing dependency' do
216
216
  expect {knife.run}.to raise_error(SystemExit)
217
- @stderr.string.should include('Cookbook test_cookbook depends on cookbooks which are not currently')
218
- @stderr.string.should include('being uploaded and cannot be found on the server.')
219
- @stderr.string.should include("The missing cookbook(s) are: 'dependency' version '>= 0.0.0'")
217
+ expect(@stderr.string).to include('Cookbook test_cookbook depends on cookbooks which are not currently')
218
+ expect(@stderr.string).to include('being uploaded and cannot be found on the server.')
219
+ expect(@stderr.string).to include("The missing cookbook(s) are: 'dependency' version '>= 0.0.0'")
220
220
  end
221
221
 
222
222
  it 'should output a message for a multiple missing dependencies which are concatenated' do
223
223
  cookbook_dependency2 = Chef::CookbookVersion.new('dependency2')
224
224
  cookbook.metadata.depends("dependency2")
225
- cookbook_loader.stub(:[]) do |ckbk|
225
+ allow(cookbook_loader).to receive(:[]) do |ckbk|
226
226
  { "test_cookbook" => cookbook,
227
227
  "dependency" => cookbook_dependency,
228
228
  "dependency2" => cookbook_dependency2}[ckbk]
229
229
  end
230
- knife.stub(:cookbook_names).and_return(["dependency", "dependency2", "test_cookbook"])
230
+ allow(knife).to receive(:cookbook_names).and_return(["dependency", "dependency2", "test_cookbook"])
231
231
  expect {knife.run}.to raise_error(SystemExit)
232
- @stderr.string.should include('Cookbook test_cookbook depends on cookbooks which are not currently')
233
- @stderr.string.should include('being uploaded and cannot be found on the server.')
234
- @stderr.string.should include("The missing cookbook(s) are:")
235
- @stderr.string.should include("'dependency' version '>= 0.0.0'")
236
- @stderr.string.should include("'dependency2' version '>= 0.0.0'")
232
+ expect(@stderr.string).to include('Cookbook test_cookbook depends on cookbooks which are not currently')
233
+ expect(@stderr.string).to include('being uploaded and cannot be found on the server.')
234
+ expect(@stderr.string).to include("The missing cookbook(s) are:")
235
+ expect(@stderr.string).to include("'dependency' version '>= 0.0.0'")
236
+ expect(@stderr.string).to include("'dependency2' version '>= 0.0.0'")
237
237
  end
238
238
  end
239
239
 
240
240
  it "should freeze the version of the cookbooks if --freeze is specified" do
241
241
  knife.config[:freeze] = true
242
- cookbook.should_receive(:freeze_version).once
242
+ expect(cookbook).to receive(:freeze_version).once
243
243
  knife.run
244
244
  end
245
245
 
246
246
  describe 'with -a or --all' do
247
247
  before(:each) do
248
248
  knife.config[:all] = true
249
- @test_cookbook1 = Chef::CookbookVersion.new('test_cookbook1', '/tmp/blah')
250
- @test_cookbook2 = Chef::CookbookVersion.new('test_cookbook2', '/tmp/blah')
251
- cookbook_loader.stub(:each).and_yield("test_cookbook1", @test_cookbook1).and_yield("test_cookbook2", @test_cookbook2)
252
- cookbook_loader.stub(:cookbook_names).and_return(["test_cookbook1", "test_cookbook2"])
253
249
  end
254
250
 
255
- it 'should upload all cookbooks' do
256
- knife.should_receive(:upload).once
257
- knife.run
258
- end
251
+ context 'when cookbooks exist in the cookbook path' do
252
+ before(:each) do
253
+ @test_cookbook1 = Chef::CookbookVersion.new('test_cookbook1', '/tmp/blah')
254
+ @test_cookbook2 = Chef::CookbookVersion.new('test_cookbook2', '/tmp/blah')
255
+ allow(cookbook_loader).to receive(:each).and_yield("test_cookbook1", @test_cookbook1).and_yield("test_cookbook2", @test_cookbook2)
256
+ allow(cookbook_loader).to receive(:cookbook_names).and_return(["test_cookbook1", "test_cookbook2"])
257
+ end
259
258
 
260
- it 'should report on success' do
261
- knife.should_receive(:upload).once
262
- knife.ui.should_receive(:info).with(/Uploaded all cookbooks/)
263
- knife.run
259
+ it 'should upload all cookbooks' do
260
+ expect(knife).to receive(:upload).once
261
+ knife.run
262
+ end
263
+
264
+ it 'should report on success' do
265
+ expect(knife).to receive(:upload).once
266
+ expect(knife.ui).to receive(:info).with(/Uploaded all cookbooks/)
267
+ knife.run
268
+ end
269
+
270
+ it 'should update the version constraints for an environment' do
271
+ allow(knife).to receive(:assert_environment_valid!).and_return(true)
272
+ knife.config[:environment] = "production"
273
+ expect(knife).to receive(:update_version_constraints).once
274
+ knife.run
275
+ end
264
276
  end
265
277
 
266
- it 'should update the version constraints for an environment' do
267
- knife.stub(:assert_environment_valid!).and_return(true)
268
- knife.config[:environment] = "production"
269
- knife.should_receive(:update_version_constraints).once
270
- knife.run
278
+ context 'when no cookbooks exist in the cookbook path' do
279
+ before(:each) do
280
+ allow(cookbook_loader).to receive(:each)
281
+ end
282
+
283
+ it 'should not upload any cookbooks' do
284
+ expect(knife).to_not receive(:upload)
285
+ knife.run
286
+ end
287
+
288
+ context 'when cookbook path is an array' do
289
+ it 'should warn users that no cookbooks exist' do
290
+ knife.config[:cookbook_path] = ['/chef-repo/cookbooks', '/home/user/cookbooks']
291
+ expect(knife.ui).to receive(:warn).with(
292
+ /Could not find any cookbooks in your cookbook path: #{knife.config[:cookbook_path].join(', ')}\. Use --cookbook-path to specify the desired path\./)
293
+ knife.run
294
+ end
295
+ end
296
+
297
+ context 'when cookbook path is a string' do
298
+ it 'should warn users that no cookbooks exist' do
299
+ knife.config[:cookbook_path] = '/chef-repo/cookbooks'
300
+ expect(knife.ui).to receive(:warn).with(
301
+ /Could not find any cookbooks in your cookbook path: #{knife.config[:cookbook_path]}\. Use --cookbook-path to specify the desired path\./)
302
+ knife.run
303
+ end
304
+ end
271
305
  end
272
306
  end
273
307
 
274
308
  describe 'when a frozen cookbook exists on the server' do
275
309
  it 'should fail to replace it' do
276
310
  exception = Chef::Exceptions::CookbookFrozen.new
277
- cookbook_uploader.should_receive(:upload_cookbooks).
311
+ expect(cookbook_uploader).to receive(:upload_cookbooks).
278
312
  and_raise(exception)
279
- knife.ui.stub(:error)
280
- knife.ui.should_receive(:error).with(exception)
281
- lambda { knife.run }.should raise_error(SystemExit)
313
+ allow(knife.ui).to receive(:error)
314
+ expect(knife.ui).to receive(:error).with(exception)
315
+ expect { knife.run }.to raise_error(SystemExit)
282
316
  end
283
317
 
284
318
  it 'should not update the version constraints for an environment' do
285
- knife.stub(:assert_environment_valid!).and_return(true)
319
+ allow(knife).to receive(:assert_environment_valid!).and_return(true)
286
320
  knife.config[:environment] = "production"
287
- knife.stub(:upload).and_raise(Chef::Exceptions::CookbookFrozen)
288
- knife.ui.should_receive(:error).with(/Failed to upload 1 cookbook/)
289
- knife.ui.should_receive(:warn).with(/Not updating version constraints/)
290
- knife.should_not_receive(:update_version_constraints)
291
- lambda { knife.run }.should raise_error(SystemExit)
321
+ allow(knife).to receive(:upload).and_raise(Chef::Exceptions::CookbookFrozen)
322
+ expect(knife.ui).to receive(:error).with(/Failed to upload 1 cookbook/)
323
+ expect(knife.ui).to receive(:warn).with(/Not updating version constraints/)
324
+ expect(knife).not_to receive(:update_version_constraints)
325
+ expect { knife.run }.to raise_error(SystemExit)
292
326
  end
293
327
  end
294
328
  end # run