chef 12.0.3 → 12.1.0.rc.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (655) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +4 -1
  3. data/README.md +42 -18
  4. data/distro/common/html/_sources/ctl_chef_client.txt +1 -1
  5. data/distro/common/html/_sources/ctl_chef_server.txt +53 -35
  6. data/distro/common/html/_sources/ctl_chef_solo.txt +1 -1
  7. data/distro/common/html/_sources/knife_bootstrap.txt +1 -1
  8. data/distro/common/html/_sources/knife_cookbook_site.txt +1 -1
  9. data/distro/common/html/_sources/knife_data_bag.txt +4 -4
  10. data/distro/common/html/_sources/knife_status.txt +1 -1
  11. data/distro/common/html/_static/searchtools.js +1 -1
  12. data/distro/common/html/ctl_chef_client.html +55 -7
  13. data/distro/common/html/ctl_chef_server.html +84 -41
  14. data/distro/common/html/ctl_chef_shell.html +45 -1
  15. data/distro/common/html/ctl_chef_solo.html +51 -5
  16. data/distro/common/html/index.html +2 -2
  17. data/distro/common/html/knife.html +1 -1
  18. data/distro/common/html/knife_bootstrap.html +30 -10
  19. data/distro/common/html/knife_cookbook_site.html +2 -0
  20. data/distro/common/html/knife_data_bag.html +4 -4
  21. data/distro/common/html/knife_node.html +2 -2
  22. data/distro/common/html/knife_raw.html +1 -1
  23. data/distro/common/html/knife_role.html +1 -1
  24. data/distro/common/html/knife_search.html +3 -3
  25. data/distro/common/html/knife_status.html +4 -0
  26. data/distro/common/html/searchindex.js +1 -1
  27. data/distro/common/man/man1/chef-shell.1 +72 -1
  28. data/distro/common/man/man1/knife-bootstrap.1 +71 -63
  29. data/distro/common/man/man1/knife-client.1 +1 -1
  30. data/distro/common/man/man1/knife-configure.1 +1 -1
  31. data/distro/common/man/man1/knife-cookbook-site.1 +4 -1
  32. data/distro/common/man/man1/knife-cookbook.1 +1 -1
  33. data/distro/common/man/man1/knife-data-bag.1 +5 -5
  34. data/distro/common/man/man1/knife-delete.1 +1 -1
  35. data/distro/common/man/man1/knife-deps.1 +1 -1
  36. data/distro/common/man/man1/knife-diff.1 +1 -1
  37. data/distro/common/man/man1/knife-download.1 +1 -1
  38. data/distro/common/man/man1/knife-edit.1 +1 -1
  39. data/distro/common/man/man1/knife-environment.1 +1 -1
  40. data/distro/common/man/man1/knife-exec.1 +1 -1
  41. data/distro/common/man/man1/knife-index-rebuild.1 +1 -1
  42. data/distro/common/man/man1/knife-list.1 +1 -1
  43. data/distro/common/man/man1/knife-node.1 +3 -3
  44. data/distro/common/man/man1/knife-raw.1 +2 -2
  45. data/distro/common/man/man1/knife-recipe-list.1 +1 -1
  46. data/distro/common/man/man1/knife-role.1 +2 -2
  47. data/distro/common/man/man1/knife-search.1 +4 -4
  48. data/distro/common/man/man1/knife-serve.1 +1 -1
  49. data/distro/common/man/man1/knife-show.1 +1 -1
  50. data/distro/common/man/man1/knife-ssh.1 +1 -1
  51. data/distro/common/man/man1/knife-ssl-check.1 +1 -1
  52. data/distro/common/man/man1/knife-ssl-fetch.1 +1 -1
  53. data/distro/common/man/man1/knife-status.1 +1 -1
  54. data/distro/common/man/man1/knife-tag.1 +1 -1
  55. data/distro/common/man/man1/knife-upload.1 +1 -1
  56. data/distro/common/man/man1/knife-user.1 +1 -1
  57. data/distro/common/man/man1/knife-xargs.1 +1 -1
  58. data/distro/common/man/man1/knife.1 +1 -1
  59. data/distro/common/man/man8/chef-apply.8 +86 -0
  60. data/distro/common/man/man8/chef-client.8 +76 -5
  61. data/distro/common/man/man8/chef-solo.8 +79 -6
  62. data/distro/common/markdown/man1/knife-bootstrap.mkd +1 -1
  63. data/distro/common/markdown/man1/knife-cookbook-site.mkd +1 -1
  64. data/distro/common/markdown/man1/knife-data-bag.mkd +1 -1
  65. data/distro/common/markdown/man1/knife-environment.mkd +1 -1
  66. data/distro/common/markdown/man1/knife.mkd +1 -1
  67. data/lib/chef.rb +0 -7
  68. data/lib/chef/api_client.rb +10 -2
  69. data/lib/chef/api_client/registration.rb +7 -9
  70. data/lib/chef/application.rb +28 -12
  71. data/lib/chef/application/apply.rb +17 -1
  72. data/lib/chef/application/client.rb +74 -6
  73. data/lib/chef/application/knife.rb +1 -2
  74. data/lib/chef/application/solo.rb +30 -0
  75. data/lib/chef/application/windows_service.rb +1 -0
  76. data/lib/chef/application/windows_service_manager.rb +8 -2
  77. data/lib/chef/applications.rb +0 -1
  78. data/lib/chef/audit/audit_event_proxy.rb +93 -0
  79. data/lib/chef/audit/audit_reporter.rb +169 -0
  80. data/lib/chef/audit/control_group_data.rb +140 -0
  81. data/lib/chef/audit/rspec_formatter.rb +37 -0
  82. data/lib/chef/audit/runner.rb +178 -0
  83. data/lib/chef/chef_fs/chef_fs_data_store.rb +11 -2
  84. data/lib/chef/chef_fs/config.rb +25 -4
  85. data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +15 -0
  86. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -0
  87. data/lib/chef/chef_fs/file_system.rb +1 -1
  88. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +5 -0
  89. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +3 -2
  90. data/lib/chef/{shef/ext.rb → chef_fs/file_system/chef_repository_file_system_policies_dir.rb} +22 -3
  91. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +4 -0
  92. data/lib/chef/client.rb +81 -52
  93. data/lib/chef/config.rb +35 -3
  94. data/lib/chef/cookbook/metadata.rb +3 -3
  95. data/lib/chef/cookbook_manifest.rb +275 -0
  96. data/lib/chef/cookbook_site_streaming_uploader.rb +24 -23
  97. data/lib/chef/cookbook_uploader.rb +11 -2
  98. data/lib/chef/cookbook_version.rb +71 -194
  99. data/lib/chef/data_bag.rb +5 -2
  100. data/lib/chef/data_bag_item.rb +6 -3
  101. data/lib/chef/deprecation/warnings.rb +5 -4
  102. data/lib/chef/dsl/audit.rb +51 -0
  103. data/lib/chef/dsl/include_recipe.rb +2 -3
  104. data/lib/chef/dsl/reboot_pending.rb +1 -1
  105. data/lib/chef/dsl/recipe.rb +49 -31
  106. data/lib/chef/encrypted_data_bag_item/assertions.rb +0 -3
  107. data/lib/chef/environment.rb +5 -2
  108. data/lib/chef/event_dispatch/base.rb +36 -1
  109. data/lib/chef/event_dispatch/dispatcher.rb +3 -5
  110. data/lib/chef/exceptions.rb +61 -2
  111. data/lib/chef/file_access_control/unix.rb +12 -0
  112. data/lib/chef/file_access_control/windows.rb +14 -0
  113. data/lib/chef/formatters/doc.rb +47 -1
  114. data/{spec/unit/monkey_patches/string_spec.rb → lib/chef/guard_interpreter.rb} +11 -16
  115. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +3 -2
  116. data/lib/chef/http.rb +1 -2
  117. data/lib/chef/knife.rb +5 -3
  118. data/lib/chef/knife/bootstrap.rb +84 -15
  119. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +165 -0
  120. data/lib/chef/knife/bootstrap/client_builder.rb +190 -0
  121. data/lib/chef/knife/bootstrap/{README.md → templates/README.md} +0 -0
  122. data/lib/chef/knife/bootstrap/{archlinux-gems.erb → templates/archlinux-gems.erb} +9 -0
  123. data/lib/chef/knife/bootstrap/{chef-aix.erb → templates/chef-aix.erb} +9 -0
  124. data/lib/chef/knife/bootstrap/{chef-full.erb → templates/chef-full.erb} +10 -1
  125. data/lib/chef/knife/client_create.rb +8 -7
  126. data/lib/chef/knife/cookbook_site_download.rb +1 -1
  127. data/lib/chef/knife/cookbook_site_install.rb +1 -1
  128. data/lib/chef/knife/cookbook_site_list.rb +1 -1
  129. data/lib/chef/knife/cookbook_site_search.rb +1 -1
  130. data/lib/chef/knife/cookbook_site_share.rb +39 -28
  131. data/lib/chef/knife/cookbook_site_show.rb +3 -3
  132. data/lib/chef/knife/cookbook_site_unshare.rb +1 -1
  133. data/lib/chef/knife/cookbook_test.rb +1 -0
  134. data/lib/chef/knife/cookbook_upload.rb +13 -8
  135. data/lib/chef/knife/core/bootstrap_context.rb +14 -3
  136. data/lib/chef/knife/core/generic_presenter.rb +5 -2
  137. data/lib/chef/knife/core/object_loader.rb +1 -1
  138. data/lib/chef/knife/core/subcommand_loader.rb +24 -0
  139. data/lib/chef/knife/core/ui.rb +9 -1
  140. data/lib/chef/knife/node_run_list_remove.rb +11 -3
  141. data/lib/chef/knife/raw.rb +14 -3
  142. data/lib/chef/knife/role_env_run_list_add.rb +86 -0
  143. data/lib/chef/knife/role_env_run_list_clear.rb +55 -0
  144. data/lib/chef/knife/role_env_run_list_remove.rb +57 -0
  145. data/lib/chef/knife/role_env_run_list_replace.rb +59 -0
  146. data/lib/chef/knife/role_env_run_list_set.rb +70 -0
  147. data/lib/chef/knife/role_run_list_add.rb +86 -0
  148. data/lib/chef/knife/role_run_list_clear.rb +55 -0
  149. data/lib/chef/knife/role_run_list_remove.rb +57 -0
  150. data/lib/chef/knife/role_run_list_replace.rb +59 -0
  151. data/lib/chef/knife/role_run_list_set.rb +70 -0
  152. data/lib/chef/knife/search.rb +4 -4
  153. data/lib/chef/knife/serve.rb +3 -0
  154. data/lib/chef/knife/ssh.rb +1 -1
  155. data/lib/chef/knife/ssl_check.rb +2 -2
  156. data/lib/chef/knife/ssl_fetch.rb +14 -1
  157. data/lib/chef/log.rb +10 -1
  158. data/lib/chef/mixin/command.rb +1 -1
  159. data/lib/chef/mixin/command/windows.rb +1 -5
  160. data/lib/chef/mixin/get_source_from_package.rb +1 -0
  161. data/lib/chef/mixin/params_validate.rb +2 -2
  162. data/lib/chef/mixin/securable.rb +1 -7
  163. data/lib/chef/mixin/shell_out.rb +7 -1
  164. data/lib/chef/mixin/template.rb +2 -14
  165. data/lib/chef/mixin/why_run.rb +1 -1
  166. data/lib/chef/monkey_patches/net_http.rb +4 -0
  167. data/lib/chef/monologger.rb +0 -2
  168. data/lib/chef/node.rb +5 -2
  169. data/lib/chef/node/attribute.rb +11 -9
  170. data/lib/chef/node/attribute_collections.rb +8 -12
  171. data/lib/chef/node/immutable_collections.rb +4 -10
  172. data/lib/chef/org.rb +148 -0
  173. data/lib/chef/platform/provider_mapping.rb +3 -2
  174. data/lib/chef/platform/provider_priority_map.rb +2 -0
  175. data/lib/chef/platform/query_helpers.rb +0 -3
  176. data/lib/chef/policy_builder/policyfile.rb +51 -8
  177. data/lib/chef/provider/deploy.rb +1 -2
  178. data/lib/chef/provider/directory.rb +3 -3
  179. data/lib/chef/provider/dsc_script.rb +13 -7
  180. data/lib/chef/provider/env.rb +8 -8
  181. data/lib/chef/provider/execute.rb +55 -36
  182. data/lib/chef/provider/file.rb +8 -0
  183. data/lib/chef/provider/group.rb +2 -0
  184. data/lib/chef/provider/group/dscl.rb +3 -4
  185. data/lib/chef/provider/ifconfig.rb +25 -25
  186. data/lib/chef/provider/ifconfig/aix.rb +25 -27
  187. data/lib/chef/provider/lwrp_base.rb +1 -1
  188. data/lib/chef/provider/mount.rb +2 -2
  189. data/lib/chef/provider/mount/mount.rb +3 -4
  190. data/lib/chef/provider/mount/solaris.rb +1 -1
  191. data/lib/chef/provider/package.rb +297 -48
  192. data/lib/chef/provider/package/aix.rb +25 -30
  193. data/lib/chef/provider/package/apt.rb +63 -19
  194. data/lib/chef/provider/package/dpkg.rb +15 -16
  195. data/lib/chef/provider/package/macports.rb +7 -7
  196. data/lib/chef/provider/package/openbsd.rb +107 -0
  197. data/lib/chef/provider/package/pacman.rb +13 -15
  198. data/lib/chef/provider/package/portage.rb +3 -4
  199. data/lib/chef/provider/package/rpm.rb +28 -17
  200. data/lib/chef/provider/package/rubygems.rb +9 -9
  201. data/lib/chef/provider/package/solaris.rb +17 -21
  202. data/lib/chef/provider/package/windows/msi.rb +1 -1
  203. data/lib/chef/provider/package/yum-dump.py +2 -2
  204. data/lib/chef/provider/package/yum.rb +117 -51
  205. data/lib/chef/provider/package/zypper.rb +17 -18
  206. data/lib/chef/provider/powershell_script.rb +4 -4
  207. data/lib/chef/provider/registry_key.rb +2 -2
  208. data/lib/chef/provider/remote_directory.rb +1 -1
  209. data/lib/chef/provider/script.rb +25 -16
  210. data/lib/chef/provider/service.rb +1 -1
  211. data/lib/chef/provider/service/freebsd.rb +1 -1
  212. data/lib/chef/provider/service/openbsd.rb +216 -0
  213. data/lib/chef/provider/service/upstart.rb +1 -1
  214. data/lib/chef/provider/service/windows.rb +99 -1
  215. data/lib/chef/provider/user.rb +1 -1
  216. data/lib/chef/provider/user/dscl.rb +19 -4
  217. data/lib/chef/providers.rb +2 -0
  218. data/lib/chef/recipe.rb +11 -5
  219. data/lib/chef/request_id.rb +1 -1
  220. data/lib/chef/resource.rb +839 -444
  221. data/lib/chef/resource/chef_gem.rb +20 -3
  222. data/lib/chef/resource/conditional.rb +3 -14
  223. data/lib/chef/resource/dsc_script.rb +14 -0
  224. data/lib/chef/resource/execute.rb +14 -7
  225. data/lib/chef/resource/file.rb +14 -0
  226. data/lib/chef/resource/file/verification.rb +122 -0
  227. data/lib/chef/resource/ips_package.rb +1 -1
  228. data/lib/chef/resource/lwrp_base.rb +2 -11
  229. data/lib/chef/resource/macports_package.rb +2 -1
  230. data/lib/chef/resource/openbsd_package.rb +51 -0
  231. data/lib/chef/resource/package.rb +2 -2
  232. data/lib/chef/resource/paludis_package.rb +1 -1
  233. data/lib/chef/resource/reboot.rb +1 -1
  234. data/lib/chef/resource/remote_file.rb +1 -0
  235. data/lib/chef/resource/rpm_package.rb +9 -0
  236. data/lib/chef/resource/script.rb +11 -0
  237. data/lib/chef/resource/template.rb +2 -3
  238. data/lib/chef/resource/windows_package.rb +1 -1
  239. data/lib/chef/resource/windows_service.rb +18 -0
  240. data/lib/chef/resource_builder.rb +137 -0
  241. data/lib/chef/resource_definition.rb +1 -1
  242. data/lib/chef/resource_reporter.rb +1 -1
  243. data/lib/chef/resources.rb +1 -0
  244. data/lib/chef/role.rb +17 -4
  245. data/lib/chef/run_context.rb +10 -6
  246. data/lib/chef/search/query.rb +66 -87
  247. data/lib/chef/shell/ext.rb +2 -2
  248. data/lib/chef/util/diff.rb +1 -4
  249. data/lib/chef/util/dsc/configuration_generator.rb +30 -6
  250. data/lib/chef/util/dsc/lcm_output_parser.rb +7 -3
  251. data/lib/chef/util/dsc/local_configuration_manager.rb +8 -8
  252. data/lib/chef/util/file_edit.rb +2 -2
  253. data/lib/chef/util/path_helper.rb +1 -4
  254. data/lib/chef/util/windows/net_use.rb +3 -3
  255. data/lib/chef/version.rb +1 -1
  256. data/lib/chef/win32/api.rb +1 -0
  257. data/lib/chef/win32/api/security.rb +26 -0
  258. data/lib/chef/win32/file.rb +21 -0
  259. data/lib/chef/win32/security.rb +46 -0
  260. data/lib/chef/win32/security/token.rb +8 -0
  261. data/lib/chef/win32/version.rb +0 -4
  262. data/spec/data/recipes.tgz +0 -0
  263. data/spec/functional/application_spec.rb +1 -1
  264. data/spec/functional/audit/rspec_formatter_spec.rb +54 -0
  265. data/spec/functional/audit/runner_spec.rb +137 -0
  266. data/spec/functional/dsl/reboot_pending_spec.rb +10 -10
  267. data/spec/functional/dsl/registry_helper_spec.rb +6 -6
  268. data/spec/functional/event_loggers/windows_eventlog_spec.rb +5 -5
  269. data/spec/functional/file_content_management/deploy_strategies_spec.rb +12 -21
  270. data/spec/functional/http/simple_spec.rb +1 -1
  271. data/spec/functional/knife/cookbook_delete_spec.rb +24 -24
  272. data/spec/functional/knife/exec_spec.rb +2 -4
  273. data/spec/functional/knife/smoke_test.rb +1 -1
  274. data/spec/functional/knife/ssh_spec.rb +23 -23
  275. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +8 -8
  276. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +2 -2
  277. data/spec/functional/rebooter_spec.rb +1 -1
  278. data/spec/functional/resource/aix_service_spec.rb +3 -0
  279. data/spec/functional/resource/aixinit_service_spec.rb +3 -3
  280. data/spec/functional/resource/bash_spec.rb +88 -0
  281. data/spec/functional/resource/deploy_revision_spec.rb +99 -100
  282. data/spec/functional/resource/env_spec.rb +3 -3
  283. data/spec/functional/resource/execute_spec.rb +97 -63
  284. data/spec/functional/resource/file_spec.rb +7 -7
  285. data/spec/functional/resource/git_spec.rb +13 -13
  286. data/spec/functional/resource/group_spec.rb +28 -25
  287. data/spec/functional/resource/ifconfig_spec.rb +2 -2
  288. data/spec/functional/resource/link_spec.rb +77 -78
  289. data/spec/functional/resource/mount_spec.rb +5 -5
  290. data/spec/functional/resource/ohai_spec.rb +1 -1
  291. data/spec/functional/resource/package_spec.rb +22 -22
  292. data/spec/functional/resource/powershell_spec.rb +57 -42
  293. data/spec/functional/resource/reboot_spec.rb +2 -2
  294. data/spec/functional/resource/registry_spec.rb +91 -91
  295. data/spec/functional/resource/remote_directory_spec.rb +19 -19
  296. data/spec/functional/resource/remote_file_spec.rb +18 -18
  297. data/spec/functional/resource/template_spec.rb +4 -4
  298. data/spec/functional/resource/user/dscl_spec.rb +4 -4
  299. data/spec/functional/resource/user/useradd_spec.rb +64 -51
  300. data/spec/functional/resource/windows_service_spec.rb +98 -0
  301. data/spec/functional/run_lock_spec.rb +9 -9
  302. data/spec/functional/shell_spec.rb +3 -3
  303. data/spec/functional/tiny_server_spec.rb +12 -12
  304. data/spec/functional/util/path_helper_spec.rb +1 -1
  305. data/spec/functional/version_spec.rb +1 -1
  306. data/spec/functional/win32/registry_helper_spec.rb +125 -125
  307. data/spec/functional/win32/security_spec.rb +65 -2
  308. data/spec/functional/win32/service_manager_spec.rb +30 -84
  309. data/spec/functional/win32/versions_spec.rb +6 -6
  310. data/spec/integration/client/client_spec.rb +102 -9
  311. data/spec/integration/knife/chef_fs_data_store_spec.rb +12 -8
  312. data/spec/integration/knife/common_options_spec.rb +3 -3
  313. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +2 -2
  314. data/spec/integration/knife/deps_spec.rb +4 -4
  315. data/spec/integration/knife/diff_spec.rb +6 -6
  316. data/spec/integration/knife/download_spec.rb +6 -6
  317. data/spec/integration/knife/list_spec.rb +2 -2
  318. data/spec/integration/knife/raw_spec.rb +5 -5
  319. data/spec/integration/knife/serve_spec.rb +3 -3
  320. data/spec/integration/knife/show_spec.rb +3 -3
  321. data/spec/integration/knife/upload_spec.rb +18 -18
  322. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
  323. data/spec/integration/solo/solo_spec.rb +11 -12
  324. data/spec/spec_helper.rb +27 -15
  325. data/spec/stress/win32/file_spec.rb +4 -4
  326. data/spec/stress/win32/security_spec.rb +4 -4
  327. data/spec/support/chef_helpers.rb +3 -3
  328. data/spec/support/matchers/leak.rb +2 -2
  329. data/spec/support/mock/platform.rb +1 -1
  330. data/spec/support/pedant/Gemfile +3 -0
  331. data/spec/support/pedant/pedant_config.rb +9 -2
  332. data/spec/support/pedant/run_pedant.rb +15 -16
  333. data/spec/support/platform_helpers.rb +8 -12
  334. data/spec/support/shared/functional/directory_resource.rb +13 -13
  335. data/spec/support/shared/functional/file_resource.rb +83 -83
  336. data/spec/support/shared/functional/http.rb +1 -1
  337. data/spec/support/shared/functional/securable_resource.rb +64 -64
  338. data/spec/support/shared/functional/securable_resource_with_reporting.rb +43 -41
  339. data/spec/support/shared/functional/win32_service.rb +60 -0
  340. data/spec/support/shared/functional/windows_script.rb +8 -8
  341. data/spec/support/shared/integration/knife_support.rb +8 -5
  342. data/spec/support/shared/matchers/exit_with_code.rb +6 -2
  343. data/spec/support/shared/unit/api_error_inspector.rb +8 -8
  344. data/spec/support/shared/unit/execute_resource.rb +24 -20
  345. data/spec/support/shared/unit/file_system_support.rb +2 -2
  346. data/spec/support/shared/unit/platform_introspector.rb +21 -21
  347. data/spec/support/shared/unit/provider/file.rb +239 -210
  348. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +69 -69
  349. data/spec/support/shared/unit/script_resource.rb +40 -32
  350. data/spec/support/shared/unit/windows_script_resource.rb +8 -8
  351. data/spec/unit/api_client/registration_spec.rb +47 -47
  352. data/spec/unit/api_client_spec.rb +107 -69
  353. data/spec/unit/application/apply_spec.rb +31 -15
  354. data/spec/unit/application/client_spec.rb +146 -45
  355. data/spec/unit/application/knife_spec.rb +31 -31
  356. data/spec/unit/application/solo_spec.rb +59 -43
  357. data/spec/unit/application_spec.rb +109 -74
  358. data/spec/unit/audit/audit_event_proxy_spec.rb +311 -0
  359. data/spec/unit/audit/audit_reporter_spec.rb +393 -0
  360. data/spec/unit/audit/control_group_data_spec.rb +478 -0
  361. data/{lib/chef/monkey_patches/file.rb → spec/unit/audit/rspec_formatter_spec.rb} +11 -8
  362. data/spec/unit/audit/runner_spec.rb +135 -0
  363. data/spec/unit/chef_fs/config_spec.rb +52 -0
  364. data/spec/unit/chef_fs/diff_spec.rb +12 -12
  365. data/spec/unit/chef_fs/file_pattern_spec.rb +276 -277
  366. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +6 -6
  367. data/spec/unit/chef_fs/file_system_spec.rb +26 -13
  368. data/spec/unit/chef_fs/parallelizer.rb +87 -87
  369. data/spec/unit/chef_spec.rb +1 -1
  370. data/spec/unit/client_spec.rb +263 -97
  371. data/spec/unit/config_fetcher_spec.rb +13 -13
  372. data/spec/unit/config_spec.rb +105 -66
  373. data/spec/unit/cookbook/chefignore_spec.rb +6 -6
  374. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +3 -3
  375. data/spec/unit/cookbook/metadata_spec.rb +149 -149
  376. data/spec/unit/cookbook/syntax_check_spec.rb +36 -31
  377. data/spec/unit/cookbook_loader_spec.rb +62 -58
  378. data/spec/unit/cookbook_manifest_spec.rb +141 -468
  379. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +27 -27
  380. data/spec/unit/cookbook_spec.rb +15 -15
  381. data/spec/unit/cookbook_uploader_spec.rb +37 -3
  382. data/spec/unit/cookbook_version_file_specificity_spec.rb +554 -0
  383. data/spec/unit/cookbook_version_spec.rb +98 -240
  384. data/spec/unit/daemon_spec.rb +31 -31
  385. data/spec/unit/data_bag_item_spec.rb +121 -89
  386. data/spec/unit/data_bag_spec.rb +35 -35
  387. data/spec/unit/deprecation_spec.rb +27 -14
  388. data/spec/unit/digester_spec.rb +3 -3
  389. data/spec/unit/dsl/audit_spec.rb +43 -0
  390. data/spec/unit/dsl/data_query_spec.rb +1 -1
  391. data/spec/unit/dsl/platform_introspection_spec.rb +14 -14
  392. data/spec/unit/dsl/reboot_pending_spec.rb +18 -18
  393. data/spec/unit/dsl/regsitry_helper_spec.rb +6 -6
  394. data/spec/unit/encrypted_data_bag_item_spec.rb +58 -82
  395. data/spec/unit/environment_spec.rb +105 -105
  396. data/spec/unit/exceptions_spec.rb +47 -1
  397. data/spec/unit/file_access_control_spec.rb +62 -56
  398. data/spec/unit/file_cache_spec.rb +11 -11
  399. data/spec/unit/file_content_management/deploy/cp_spec.rb +2 -2
  400. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +10 -10
  401. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +23 -23
  402. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +14 -14
  403. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +12 -12
  404. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +1 -1
  405. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +16 -16
  406. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +4 -4
  407. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +103 -13
  408. data/spec/unit/guard_interpreter_spec.rb +41 -0
  409. data/spec/unit/handler/json_file_spec.rb +10 -10
  410. data/spec/unit/handler_spec.rb +39 -39
  411. data/spec/unit/http/basic_client_spec.rb +3 -3
  412. data/spec/unit/http/http_request_spec.rb +10 -10
  413. data/spec/unit/http/simple_spec.rb +3 -3
  414. data/spec/unit/http/ssl_policies_spec.rb +15 -15
  415. data/spec/unit/http/validate_content_length_spec.rb +18 -13
  416. data/spec/unit/http_spec.rb +16 -9
  417. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +153 -0
  418. data/spec/unit/knife/bootstrap/client_builder_spec.rb +178 -0
  419. data/spec/unit/knife/bootstrap_spec.rb +144 -91
  420. data/spec/unit/knife/client_bulk_delete_spec.rb +24 -24
  421. data/spec/unit/knife/client_create_spec.rb +57 -43
  422. data/spec/unit/knife/client_delete_spec.rb +15 -15
  423. data/spec/unit/knife/client_edit_spec.rb +4 -4
  424. data/spec/unit/knife/client_list_spec.rb +2 -2
  425. data/spec/unit/knife/client_reregister_spec.rb +9 -9
  426. data/spec/unit/knife/configure_client_spec.rb +20 -20
  427. data/spec/unit/knife/configure_spec.rb +85 -85
  428. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +15 -15
  429. data/spec/unit/knife/cookbook_create_spec.rb +59 -59
  430. data/spec/unit/knife/cookbook_delete_spec.rb +49 -49
  431. data/spec/unit/knife/cookbook_download_spec.rb +56 -56
  432. data/spec/unit/knife/cookbook_list_spec.rb +9 -9
  433. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +8 -8
  434. data/spec/unit/knife/cookbook_metadata_spec.rb +44 -44
  435. data/spec/unit/knife/cookbook_show_spec.rb +29 -29
  436. data/spec/unit/knife/cookbook_site_download_spec.rb +26 -26
  437. data/spec/unit/knife/cookbook_site_install_spec.rb +5 -1
  438. data/spec/unit/knife/cookbook_site_share_spec.rb +68 -59
  439. data/spec/unit/knife/cookbook_site_unshare_spec.rb +15 -15
  440. data/spec/unit/knife/cookbook_test_spec.rb +16 -16
  441. data/spec/unit/knife/cookbook_upload_spec.rb +105 -71
  442. data/spec/unit/knife/core/bootstrap_context_spec.rb +37 -22
  443. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +36 -36
  444. data/spec/unit/knife/core/object_loader_spec.rb +3 -3
  445. data/spec/unit/knife/core/subcommand_loader_spec.rb +107 -33
  446. data/spec/unit/knife/core/ui_spec.rb +84 -72
  447. data/spec/unit/knife/data_bag_from_file_spec.rb +1 -1
  448. data/spec/unit/knife/environment_compare_spec.rb +12 -12
  449. data/spec/unit/knife/environment_create_spec.rb +16 -16
  450. data/spec/unit/knife/environment_delete_spec.rb +14 -14
  451. data/spec/unit/knife/environment_edit_spec.rb +15 -15
  452. data/spec/unit/knife/environment_from_file_spec.rb +17 -17
  453. data/spec/unit/knife/environment_list_spec.rb +7 -7
  454. data/spec/unit/knife/environment_show_spec.rb +10 -10
  455. data/spec/unit/knife/index_rebuild_spec.rb +17 -17
  456. data/spec/unit/knife/knife_help.rb +24 -24
  457. data/spec/unit/knife/node_bulk_delete_spec.rb +14 -14
  458. data/spec/unit/knife/node_delete_spec.rb +11 -11
  459. data/spec/unit/knife/node_edit_spec.rb +17 -17
  460. data/spec/unit/knife/node_environment_set_spec.rb +12 -12
  461. data/spec/unit/knife/node_from_file_spec.rb +8 -8
  462. data/spec/unit/knife/node_list_spec.rb +9 -9
  463. data/spec/unit/knife/node_run_list_add_spec.rb +29 -29
  464. data/spec/unit/knife/node_run_list_remove_spec.rb +28 -13
  465. data/spec/unit/knife/node_run_list_set_spec.rb +27 -27
  466. data/spec/unit/knife/raw_spec.rb +43 -0
  467. data/spec/unit/knife/role_bulk_delete_spec.rb +12 -12
  468. data/spec/unit/knife/role_create_spec.rb +12 -12
  469. data/spec/unit/knife/role_delete_spec.rb +10 -10
  470. data/spec/unit/knife/role_edit_spec.rb +13 -13
  471. data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -0
  472. data/spec/unit/knife/role_env_run_list_clear_spec.rb +100 -0
  473. data/spec/unit/knife/role_env_run_list_remove_spec.rb +108 -0
  474. data/spec/unit/knife/role_env_run_list_replace_spec.rb +108 -0
  475. data/spec/unit/knife/role_env_run_list_set_spec.rb +102 -0
  476. data/spec/unit/knife/role_from_file_spec.rb +10 -10
  477. data/spec/unit/knife/role_list_spec.rb +7 -7
  478. data/spec/unit/knife/role_run_list_add_spec.rb +179 -0
  479. data/spec/unit/knife/role_run_list_clear_spec.rb +90 -0
  480. data/spec/unit/knife/role_run_list_remove_spec.rb +98 -0
  481. data/spec/unit/knife/role_run_list_replace_spec.rb +101 -0
  482. data/spec/unit/knife/role_run_list_set_spec.rb +92 -0
  483. data/spec/unit/knife/ssh_spec.rb +66 -66
  484. data/spec/unit/knife/ssl_check_spec.rb +27 -27
  485. data/spec/unit/knife/ssl_fetch_spec.rb +45 -12
  486. data/spec/unit/knife/status_spec.rb +5 -5
  487. data/spec/unit/knife/tag_create_spec.rb +5 -5
  488. data/spec/unit/knife/tag_delete_spec.rb +6 -6
  489. data/spec/unit/knife/tag_list_spec.rb +4 -4
  490. data/spec/unit/knife/user_create_spec.rb +18 -18
  491. data/spec/unit/knife/user_delete_spec.rb +4 -4
  492. data/spec/unit/knife/user_edit_spec.rb +7 -7
  493. data/spec/unit/knife/user_list_spec.rb +2 -2
  494. data/spec/unit/knife/user_reregister_spec.rb +10 -10
  495. data/spec/unit/knife/user_show_spec.rb +5 -5
  496. data/spec/unit/knife_spec.rb +36 -36
  497. data/spec/unit/lwrp_spec.rb +63 -39
  498. data/spec/unit/mash_spec.rb +6 -6
  499. data/spec/unit/mixin/checksum_spec.rb +2 -2
  500. data/spec/unit/mixin/command_spec.rb +13 -13
  501. data/spec/unit/mixin/convert_to_class_name_spec.rb +6 -6
  502. data/spec/unit/mixin/deep_merge_spec.rb +49 -49
  503. data/spec/unit/mixin/deprecation_spec.rb +5 -5
  504. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +14 -14
  505. data/spec/unit/mixin/homebrew_user_spec.rb +3 -3
  506. data/spec/unit/mixin/params_validate_spec.rb +71 -71
  507. data/spec/unit/mixin/path_sanity_spec.rb +14 -14
  508. data/spec/unit/mixin/securable_spec.rb +177 -177
  509. data/spec/unit/mixin/shell_out_spec.rb +56 -27
  510. data/spec/unit/mixin/template_spec.rb +31 -31
  511. data/spec/unit/mixin/windows_architecture_helper_spec.rb +5 -5
  512. data/spec/unit/mixin/xml_escape_spec.rb +7 -7
  513. data/spec/unit/monkey_patches/uri_spec.rb +1 -1
  514. data/spec/unit/monologger_spec.rb +3 -3
  515. data/spec/unit/node/attribute_spec.rb +185 -136
  516. data/spec/unit/node/immutable_collections_spec.rb +22 -22
  517. data/spec/unit/node_spec.rb +210 -179
  518. data/spec/unit/org_spec.rb +196 -0
  519. data/spec/unit/platform/query_helpers_spec.rb +5 -5
  520. data/spec/unit/platform_spec.rb +46 -46
  521. data/spec/unit/policy_builder/expand_node_object_spec.rb +17 -18
  522. data/spec/unit/policy_builder/policyfile_spec.rb +159 -71
  523. data/spec/unit/provider/directory_spec.rb +5 -5
  524. data/spec/unit/provider/dsc_script_spec.rb +6 -6
  525. data/spec/unit/provider/env_spec.rb +27 -14
  526. data/spec/unit/provider/execute_spec.rb +139 -68
  527. data/spec/unit/provider/file/content_spec.rb +8 -8
  528. data/spec/unit/provider/git_spec.rb +10 -5
  529. data/spec/unit/provider/group/dscl_spec.rb +8 -11
  530. data/spec/unit/provider/group_spec.rb +13 -13
  531. data/spec/unit/provider/ifconfig/aix_spec.rb +3 -2
  532. data/spec/unit/provider/ifconfig/debian_spec.rb +19 -19
  533. data/spec/unit/provider/ifconfig_spec.rb +2 -2
  534. data/spec/unit/provider/mdadm_spec.rb +2 -2
  535. data/spec/unit/provider/mount/aix_spec.rb +5 -5
  536. data/spec/unit/provider/mount/mount_spec.rb +22 -22
  537. data/spec/unit/provider/mount/solaris_spec.rb +20 -20
  538. data/spec/unit/provider/package/aix_spec.rb +23 -22
  539. data/spec/unit/provider/package/apt_spec.rb +23 -4
  540. data/spec/unit/provider/package/dpkg_spec.rb +14 -15
  541. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +1 -1
  542. data/spec/unit/provider/package/freebsd/port_spec.rb +1 -1
  543. data/spec/unit/provider/package/ips_spec.rb +1 -2
  544. data/spec/unit/provider/package/macports_spec.rb +14 -14
  545. data/spec/unit/provider/package/openbsd_spec.rb +66 -0
  546. data/spec/unit/provider/package/pacman_spec.rb +15 -14
  547. data/spec/unit/provider/package/portage_spec.rb +11 -11
  548. data/spec/unit/provider/package/rpm_spec.rb +132 -84
  549. data/spec/unit/provider/package/rubygems_spec.rb +54 -25
  550. data/spec/unit/provider/package/solaris_spec.rb +22 -25
  551. data/spec/unit/provider/package/yum_spec.rb +237 -36
  552. data/spec/unit/provider/package/zypper_spec.rb +9 -12
  553. data/spec/unit/provider/package_spec.rb +276 -2
  554. data/spec/unit/provider/package_spec.rbe +0 -0
  555. data/spec/unit/provider/remote_directory_spec.rb +25 -25
  556. data/spec/unit/provider/remote_file/ftp_spec.rb +3 -3
  557. data/spec/unit/provider/route_spec.rb +3 -3
  558. data/spec/unit/provider/script_spec.rb +61 -43
  559. data/spec/unit/provider/service/aix_service_spec.rb +5 -5
  560. data/spec/unit/provider/service/arch_service_spec.rb +5 -5
  561. data/spec/unit/provider/service/debian_service_spec.rb +8 -8
  562. data/spec/unit/provider/service/freebsd_service_spec.rb +16 -2
  563. data/spec/unit/provider/service/gentoo_service_spec.rb +8 -8
  564. data/spec/unit/provider/service/init_service_spec.rb +5 -5
  565. data/spec/unit/provider/service/insserv_service_spec.rb +2 -2
  566. data/spec/unit/provider/service/invokercd_service_spec.rb +5 -5
  567. data/spec/unit/provider/service/macosx_spec.rb +7 -7
  568. data/spec/unit/provider/service/openbsd_service_spec.rb +543 -0
  569. data/spec/unit/provider/service/redhat_spec.rb +4 -4
  570. data/spec/unit/provider/service/simple_service_spec.rb +2 -2
  571. data/spec/unit/provider/service/solaris_smf_service_spec.rb +14 -14
  572. data/spec/unit/provider/service/systemd_service_spec.rb +15 -7
  573. data/spec/unit/provider/service/upstart_service_spec.rb +4 -4
  574. data/spec/unit/provider/service/windows_spec.rb +119 -25
  575. data/spec/unit/provider/service_spec.rb +1 -1
  576. data/spec/unit/provider/user/dscl_spec.rb +38 -30
  577. data/spec/unit/provider/user_spec.rb +1 -1
  578. data/spec/unit/provider_resolver_spec.rb +7 -7
  579. data/spec/unit/provider_spec.rb +23 -23
  580. data/spec/unit/recipe_spec.rb +194 -83
  581. data/spec/unit/registry_helper_spec.rb +143 -143
  582. data/spec/unit/resource/chef_gem_spec.rb +117 -3
  583. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +2 -2
  584. data/spec/unit/resource/conditional_spec.rb +56 -15
  585. data/spec/unit/resource/deploy_spec.rb +2 -2
  586. data/spec/unit/resource/dsc_script_spec.rb +32 -0
  587. data/spec/unit/resource/execute_spec.rb +4 -0
  588. data/spec/unit/resource/file/verification_spec.rb +111 -0
  589. data/spec/unit/resource/file_spec.rb +14 -0
  590. data/spec/unit/resource/openbsd_package_spec.rb +49 -0
  591. data/spec/unit/resource/remote_file_spec.rb +12 -12
  592. data/spec/unit/resource/resource_notification_spec.rb +18 -18
  593. data/spec/unit/resource/rpm_package_spec.rb +12 -0
  594. data/spec/unit/resource/scm_spec.rb +4 -4
  595. data/spec/unit/resource/script_spec.rb +3 -5
  596. data/spec/unit/resource/subversion_spec.rb +1 -1
  597. data/spec/unit/resource_builder_spec.rb +1 -0
  598. data/spec/unit/resource_collection/resource_list_spec.rb +2 -2
  599. data/spec/unit/resource_collection/resource_set_spec.rb +3 -3
  600. data/spec/unit/resource_collection/stepable_iterator_spec.rb +24 -24
  601. data/spec/unit/resource_collection_spec.rb +52 -52
  602. data/spec/unit/resource_definition_spec.rb +1 -1
  603. data/spec/unit/resource_reporter_spec.rb +118 -118
  604. data/spec/unit/resource_spec.rb +131 -125
  605. data/spec/unit/rest/auth_credentials_spec.rb +73 -73
  606. data/spec/unit/rest_spec.rb +12 -12
  607. data/spec/unit/role_spec.rb +85 -84
  608. data/spec/unit/run_context/cookbook_compiler_spec.rb +18 -18
  609. data/spec/unit/run_context_spec.rb +39 -68
  610. data/spec/unit/run_list/run_list_expansion_spec.rb +21 -21
  611. data/spec/unit/run_list/run_list_item_spec.rb +28 -28
  612. data/spec/unit/run_list/versioned_recipe_list_spec.rb +14 -14
  613. data/spec/unit/run_list_spec.rb +55 -55
  614. data/spec/unit/run_lock_spec.rb +14 -14
  615. data/spec/unit/run_status_spec.rb +24 -24
  616. data/spec/unit/scan_access_control_spec.rb +23 -23
  617. data/spec/unit/search/query_spec.rb +54 -66
  618. data/spec/unit/shell/model_wrapper_spec.rb +13 -13
  619. data/spec/unit/shell/shell_ext_spec.rb +32 -32
  620. data/spec/unit/shell/shell_session_spec.rb +24 -24
  621. data/spec/unit/shell_out_spec.rb +4 -4
  622. data/spec/unit/shell_spec.rb +27 -27
  623. data/spec/unit/user_spec.rb +50 -50
  624. data/spec/unit/util/backup_spec.rb +32 -32
  625. data/spec/unit/util/diff_spec.rb +31 -31
  626. data/spec/unit/util/dsc/configuration_generator_spec.rb +38 -16
  627. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +21 -26
  628. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +10 -10
  629. data/spec/unit/util/editor_spec.rb +10 -10
  630. data/spec/unit/util/file_edit_spec.rb +10 -10
  631. data/spec/unit/util/path_helper_spec.rb +38 -46
  632. data/spec/unit/util/powershell/cmdlet_spec.rb +9 -9
  633. data/spec/unit/util/selinux_spec.rb +30 -30
  634. data/spec/unit/util/threaded_job_queue_spec.rb +6 -6
  635. data/spec/unit/version/platform_spec.rb +5 -5
  636. data/spec/unit/version_class_spec.rb +15 -15
  637. data/spec/unit/version_constraint/platform_spec.rb +7 -7
  638. data/spec/unit/version_constraint_spec.rb +43 -43
  639. data/spec/unit/windows_service_spec.rb +15 -15
  640. data/spec/unit/workstation_config_loader_spec.rb +2 -2
  641. data/tasks/rspec.rb +16 -18
  642. metadata +126 -53
  643. data/bin/chef-service-manager +0 -37
  644. data/bin/chef-windows-service +0 -35
  645. data/bin/shef +0 -35
  646. data/lib/chef/application/agent.rb +0 -18
  647. data/lib/chef/monkey_patches/fileutils.rb +0 -65
  648. data/lib/chef/monkey_patches/numeric.rb +0 -15
  649. data/lib/chef/monkey_patches/object.rb +0 -9
  650. data/lib/chef/monkey_patches/pathname.rb +0 -32
  651. data/lib/chef/monkey_patches/regexp.rb +0 -34
  652. data/lib/chef/monkey_patches/securerandom.rb +0 -44
  653. data/lib/chef/monkey_patches/string.rb +0 -49
  654. data/lib/chef/monkey_patches/tempfile.rb +0 -64
  655. data/lib/chef/monkey_patches/uri.rb +0 -70
@@ -40,66 +40,66 @@ describe Chef::Application::Knife do
40
40
 
41
41
  before(:each) do
42
42
  # Prevent code from getting loaded on every test invocation.
43
- Chef::Knife.stub(:load_commands)
43
+ allow(Chef::Knife).to receive(:load_commands)
44
44
 
45
45
  @knife = Chef::Application::Knife.new
46
- @knife.stub(:puts)
47
- @knife.stub(:trap)
48
- Chef::Knife.stub(:list_commands)
46
+ allow(@knife).to receive(:puts)
47
+ allow(@knife).to receive(:trap)
48
+ allow(Chef::Knife).to receive(:list_commands)
49
49
  end
50
50
 
51
51
  it "should exit 1 and print the options if no arguments are given at all" do
52
52
  with_argv([]) do
53
- lambda { @knife.run }.should raise_error(SystemExit) { |e| e.status.should == 1 }
53
+ expect { @knife.run }.to raise_error(SystemExit) { |e| expect(e.status).to eq(1) }
54
54
  end
55
55
  end
56
56
 
57
57
  it "should exit 2 if run without a sub command" do
58
58
  with_argv("--user", "adam") do
59
- Chef::Log.should_receive(:error).with(/you need to pass a sub\-command/i)
60
- lambda { @knife.run }.should raise_error(SystemExit) { |e| e.status.should == 2 }
59
+ expect(Chef::Log).to receive(:error).with(/you need to pass a sub\-command/i)
60
+ expect { @knife.run }.to raise_error(SystemExit) { |e| expect(e.status).to eq(2) }
61
61
  end
62
62
  end
63
63
 
64
64
  it "should run a sub command with the applications command line option prototype" do
65
65
  with_argv(*%w{noop knife command with some args}) do
66
66
  knife = double(Chef::Knife)
67
- Chef::Knife.should_receive(:run).with(ARGV, @knife.options).and_return(knife)
68
- @knife.should_receive(:exit).with(0)
67
+ expect(Chef::Knife).to receive(:run).with(ARGV, @knife.options).and_return(knife)
68
+ expect(@knife).to receive(:exit).with(0)
69
69
  @knife.run
70
70
  end
71
71
  end
72
72
 
73
73
  it "should set the colored output to false by default on windows and true otherwise" do
74
74
  with_argv(*%w{noop knife command}) do
75
- @knife.should_receive(:exit).with(0)
75
+ expect(@knife).to receive(:exit).with(0)
76
76
  @knife.run
77
77
  end
78
78
  if windows?
79
- Chef::Config[:color].should be_false
79
+ expect(Chef::Config[:color]).to be_falsey
80
80
  else
81
- Chef::Config[:color].should be_true
81
+ expect(Chef::Config[:color]).to be_truthy
82
82
  end
83
83
  end
84
84
 
85
85
  describe "when given a path to the client key" do
86
86
  it "expands a relative path relative to the CWD" do
87
87
  relative_path = '.chef/client.pem'
88
- Dir.stub(:pwd).and_return(CHEF_SPEC_DATA)
88
+ allow(Dir).to receive(:pwd).and_return(CHEF_SPEC_DATA)
89
89
  with_argv(*%W{noop knife command -k #{relative_path}}) do
90
- @knife.should_receive(:exit).with(0)
90
+ expect(@knife).to receive(:exit).with(0)
91
91
  @knife.run
92
92
  end
93
- Chef::Config[:client_key].should == File.join(CHEF_SPEC_DATA, relative_path)
93
+ expect(Chef::Config[:client_key]).to eq(File.join(CHEF_SPEC_DATA, relative_path))
94
94
  end
95
95
 
96
96
  it "expands a ~/home/path to the correct full path" do
97
97
  home_path = '~/.chef/client.pem'
98
98
  with_argv(*%W{noop knife command -k #{home_path}}) do
99
- @knife.should_receive(:exit).with(0)
99
+ expect(@knife).to receive(:exit).with(0)
100
100
  @knife.run
101
101
  end
102
- Chef::Config[:client_key].should == File.join(ENV['HOME'], '.chef/client.pem').gsub((File::ALT_SEPARATOR || '\\'), File::SEPARATOR)
102
+ expect(Chef::Config[:client_key]).to eq(File.join(ENV['HOME'], '.chef/client.pem').gsub((File::ALT_SEPARATOR || '\\'), File::SEPARATOR))
103
103
  end
104
104
 
105
105
  it "does not expand a full path" do
@@ -109,10 +109,10 @@ describe Chef::Application::Knife do
109
109
  '/etc/chef/client.pem'
110
110
  end
111
111
  with_argv(*%W{noop knife command -k #{full_path}}) do
112
- @knife.should_receive(:exit).with(0)
112
+ expect(@knife).to receive(:exit).with(0)
113
113
  @knife.run
114
114
  end
115
- Chef::Config[:client_key].should == full_path
115
+ expect(Chef::Config[:client_key]).to eq(full_path)
116
116
  end
117
117
  end
118
118
 
@@ -123,52 +123,52 @@ describe Chef::Application::Knife do
123
123
 
124
124
  it "should default to no environment" do
125
125
  with_argv(*%w{noop knife command}) do
126
- @knife.should_receive(:exit).with(0)
126
+ expect(@knife).to receive(:exit).with(0)
127
127
  @knife.run
128
128
  end
129
- Chef::Config[:environment].should == nil
129
+ expect(Chef::Config[:environment]).to eq(nil)
130
130
  end
131
131
 
132
132
  it "should load the environment from the config file" do
133
133
  config_file = File.join(CHEF_SPEC_DATA,"environment-config.rb")
134
134
  with_argv(*%W{noop knife command -c #{config_file}}) do
135
- @knife.should_receive(:exit).with(0)
135
+ expect(@knife).to receive(:exit).with(0)
136
136
  @knife.run
137
137
  end
138
- Chef::Config[:environment].should == 'production'
138
+ expect(Chef::Config[:environment]).to eq('production')
139
139
  end
140
140
 
141
141
  it "should load the environment from the CLI options" do
142
142
  with_argv(*%W{noop knife command -E development}) do
143
- @knife.should_receive(:exit).with(0)
143
+ expect(@knife).to receive(:exit).with(0)
144
144
  @knife.run
145
145
  end
146
- Chef::Config[:environment].should == 'development'
146
+ expect(Chef::Config[:environment]).to eq('development')
147
147
  end
148
148
 
149
149
  it "should override the config file environment with the CLI environment" do
150
150
  config_file = File.join(CHEF_SPEC_DATA,"environment-config.rb")
151
151
  with_argv(*%W{noop knife command -c #{config_file} -E override}) do
152
- @knife.should_receive(:exit).with(0)
152
+ expect(@knife).to receive(:exit).with(0)
153
153
  @knife.run
154
154
  end
155
- Chef::Config[:environment].should == 'override'
155
+ expect(Chef::Config[:environment]).to eq('override')
156
156
  end
157
157
 
158
158
  it "should override the config file environment with the CLI environment regardless of order" do
159
159
  config_file = File.join(CHEF_SPEC_DATA,"environment-config.rb")
160
160
  with_argv(*%W{noop knife command -E override -c #{config_file}}) do
161
- @knife.should_receive(:exit).with(0)
161
+ expect(@knife).to receive(:exit).with(0)
162
162
  @knife.run
163
163
  end
164
- Chef::Config[:environment].should == 'override'
164
+ expect(Chef::Config[:environment]).to eq('override')
165
165
  end
166
166
 
167
167
  it "should run a sub command with the applications command line option prototype" do
168
168
  with_argv(*%w{noop knife command with some args}) do
169
169
  knife = double(Chef::Knife)
170
- Chef::Knife.should_receive(:run).with(ARGV, @knife.options).and_return(knife)
171
- @knife.should_receive(:exit).with(0)
170
+ expect(Chef::Knife).to receive(:run).with(ARGV, @knife.options).and_return(knife)
171
+ expect(@knife).to receive(:exit).with(0)
172
172
  @knife.run
173
173
  end
174
174
  end
@@ -18,22 +18,35 @@
18
18
  require 'spec_helper'
19
19
 
20
20
  describe Chef::Application::Solo do
21
+
22
+ let(:app) { Chef::Application::Solo.new }
23
+
21
24
  before do
22
- Kernel.stub(:trap).and_return(:ok)
23
- @app = Chef::Application::Solo.new
24
- @app.stub(:configure_opt_parser).and_return(true)
25
- @app.stub(:configure_chef).and_return(true)
26
- @app.stub(:configure_logging).and_return(true)
27
- @app.stub(:trap)
25
+ allow(Kernel).to receive(:trap).and_return(:ok)
26
+ allow(app).to receive(:configure_opt_parser).and_return(true)
27
+ allow(app).to receive(:configure_chef).and_return(true)
28
+ allow(app).to receive(:configure_logging).and_return(true)
29
+ allow(app).to receive(:trap)
30
+
28
31
  Chef::Config[:recipe_url] = false
29
32
  Chef::Config[:json_attribs] = false
30
33
  Chef::Config[:solo] = true
31
34
  end
32
35
 
33
36
  describe "configuring the application" do
37
+ it 'should call set_specific_recipes' do
38
+ expect(app).to receive(:set_specific_recipes)
39
+ app.reconfigure
40
+ end
41
+
34
42
  it "should set solo mode to true" do
35
- @app.reconfigure
36
- Chef::Config[:solo].should be_true
43
+ app.reconfigure
44
+ expect(Chef::Config[:solo]).to be_truthy
45
+ end
46
+
47
+ it "should set audit-mode to :disabled" do
48
+ app.reconfigure
49
+ expect(Chef::Config[:audit_mode]).to be :disabled
37
50
  end
38
51
 
39
52
  describe "when configured to not fork the client process" do
@@ -50,13 +63,13 @@ describe Chef::Application::Solo do
50
63
  end
51
64
 
52
65
  it "should terminate with message" do
53
- Chef::Application.should_receive(:fatal!).with(
66
+ expect(Chef::Application).to receive(:fatal!).with(
54
67
  "Unforked chef-client interval runs are disabled in Chef 12.
55
68
  Configuration settings:
56
69
  interval = 600 seconds
57
70
  Enable chef-client interval runs by setting `:client_fork = true` in your config file or adding `--fork` to your command line options."
58
71
  )
59
- @app.reconfigure
72
+ app.reconfigure
60
73
  end
61
74
  end
62
75
  end
@@ -68,8 +81,8 @@ Enable chef-client interval runs by setting `:client_fork = true` in your config
68
81
 
69
82
  it "should set the interval to 1800" do
70
83
  Chef::Config[:interval] = nil
71
- @app.reconfigure
72
- Chef::Config[:interval].should == 1800
84
+ app.reconfigure
85
+ expect(Chef::Config[:interval]).to eq(1800)
73
86
  end
74
87
  end
75
88
 
@@ -80,48 +93,51 @@ Enable chef-client interval runs by setting `:client_fork = true` in your config
80
93
 
81
94
  before do
82
95
  Chef::Config[:json_attribs] = json_source
83
- Chef::ConfigFetcher.should_receive(:new).with(json_source).
96
+ expect(Chef::ConfigFetcher).to receive(:new).with(json_source).
84
97
  and_return(config_fetcher)
85
98
  end
86
99
 
87
100
  it "reads the JSON attributes from the specified source" do
88
- @app.reconfigure
89
- @app.chef_client_json.should == json_attribs
101
+ app.reconfigure
102
+ expect(app.chef_client_json).to eq(json_attribs)
90
103
  end
91
104
  end
92
105
 
93
106
  describe "when the recipe_url configuration option is specified" do
107
+ let(:tarfile) { StringIO.new("remote_tarball_content") }
108
+ let(:target_file) { StringIO.new }
109
+
94
110
  before do
95
111
  Chef::Config[:cookbook_path] = "#{Dir.tmpdir}/chef-solo/cookbooks"
96
112
  Chef::Config[:recipe_url] = "http://junglist.gen.nz/recipes.tgz"
97
- FileUtils.stub(:mkdir_p).and_return(true)
98
- @tarfile = StringIO.new("remote_tarball_content")
99
- @app.stub(:open).with("http://junglist.gen.nz/recipes.tgz").and_yield(@tarfile)
100
113
 
101
- @target_file = StringIO.new
102
- File.stub(:open).with("#{Dir.tmpdir}/chef-solo/recipes.tgz", "wb").and_yield(@target_file)
114
+ allow(FileUtils).to receive(:rm_rf).and_return(true)
115
+ allow(FileUtils).to receive(:mkdir_p).and_return(true)
116
+
117
+ allow(app).to receive(:open).with("http://junglist.gen.nz/recipes.tgz").and_yield(tarfile)
118
+ allow(File).to receive(:open).with("#{Dir.tmpdir}/chef-solo/recipes.tgz", "wb").and_yield(target_file)
103
119
 
104
- Chef::Mixin::Command.stub(:run_command).and_return(true)
120
+ allow(Chef::Mixin::Command).to receive(:run_command).and_return(true)
105
121
  end
106
122
 
107
123
  it "should create the recipes path based on the parent of the cookbook path" do
108
- FileUtils.should_receive(:mkdir_p).with("#{Dir.tmpdir}/chef-solo").and_return(true)
109
- @app.reconfigure
124
+ expect(FileUtils).to receive(:mkdir_p).with("#{Dir.tmpdir}/chef-solo").and_return(true)
125
+ app.reconfigure
110
126
  end
111
127
 
112
128
  it "should download the recipes" do
113
- @app.should_receive(:open).with("http://junglist.gen.nz/recipes.tgz").and_yield(@tarfile)
114
- @app.reconfigure
129
+ expect(app).to receive(:open).with("http://junglist.gen.nz/recipes.tgz").and_yield(tarfile)
130
+ app.reconfigure
115
131
  end
116
132
 
117
133
  it "should write the recipes to the target path" do
118
- @app.reconfigure
119
- @target_file.string.should == "remote_tarball_content"
134
+ app.reconfigure
135
+ expect(target_file.string).to eq("remote_tarball_content")
120
136
  end
121
137
 
122
138
  it "should untar the target file to the parent of the cookbook path" do
123
- Chef::Mixin::Command.should_receive(:run_command).with({:command => "tar zxvf #{Dir.tmpdir}/chef-solo/recipes.tgz -C #{Dir.tmpdir}/chef-solo"}).and_return(true)
124
- @app.reconfigure
139
+ expect(Chef::Mixin::Command).to receive(:run_command).with({:command => "tar zxvf #{Dir.tmpdir}/chef-solo/recipes.tgz -C #{Dir.tmpdir}/chef-solo"}).and_return(true)
140
+ app.reconfigure
125
141
  end
126
142
  end
127
143
  end
@@ -135,14 +151,15 @@ Enable chef-client interval runs by setting `:client_fork = true` in your config
135
151
  Chef::Config[:json_attribs] = json_source
136
152
  Chef::Config[:recipe_url] = "http://icanhas.cheezburger.com/lolcats"
137
153
  Chef::Config[:cookbook_path] = "#{Dir.tmpdir}/chef-solo/cookbooks"
138
- FileUtils.stub(:mkdir_p).and_return(true)
139
- Chef::Mixin::Command.stub(:run_command).and_return(true)
154
+ allow(FileUtils).to receive(:rm_rf).and_return(true)
155
+ allow(FileUtils).to receive(:mkdir_p).and_return(true)
156
+ allow(Chef::Mixin::Command).to receive(:run_command).and_return(true)
140
157
  end
141
158
 
142
159
  it "should fetch the recipe_url first" do
143
- @app.should_receive(:fetch_recipe_tarball).ordered
144
- Chef::ConfigFetcher.should_receive(:new).ordered.and_return(config_fetcher)
145
- @app.reconfigure
160
+ expect(app).to receive(:fetch_recipe_tarball).ordered
161
+ expect(Chef::ConfigFetcher).to receive(:new).ordered.and_return(config_fetcher)
162
+ app.reconfigure
146
163
  end
147
164
  end
148
165
 
@@ -150,19 +167,18 @@ Enable chef-client interval runs by setting `:client_fork = true` in your config
150
167
  before do
151
168
  Chef::Config[:solo] = true
152
169
 
153
- Chef::Daemon.stub(:change_privilege)
154
- @chef_client = double("Chef::Client")
155
- Chef::Client.stub(:new).and_return(@chef_client)
156
- @app = Chef::Application::Solo.new
170
+ allow(Chef::Daemon).to receive(:change_privilege)
171
+ chef_client = double("Chef::Client")
172
+ allow(Chef::Client).to receive(:new).and_return(chef_client)
157
173
  # this is all stuff the reconfigure method needs
158
- @app.stub(:configure_opt_parser).and_return(true)
159
- @app.stub(:configure_chef).and_return(true)
160
- @app.stub(:configure_logging).and_return(true)
174
+ allow(app).to receive(:configure_opt_parser).and_return(true)
175
+ allow(app).to receive(:configure_chef).and_return(true)
176
+ allow(app).to receive(:configure_logging).and_return(true)
161
177
  end
162
178
 
163
179
  it "should change privileges" do
164
- Chef::Daemon.should_receive(:change_privilege).and_return(true)
165
- @app.setup_application
180
+ expect(Chef::Daemon).to receive(:change_privilege).and_return(true)
181
+ app.setup_application
166
182
  end
167
183
  end
168
184
 
@@ -24,9 +24,9 @@ describe Chef::Application do
24
24
  ARGV.clear
25
25
  Chef::Log.logger = Logger.new(StringIO.new)
26
26
  @app = Chef::Application.new
27
- @app.stub(:trap)
28
- Dir.stub(:chdir).and_return(0)
29
- @app.stub(:reconfigure)
27
+ allow(@app).to receive(:trap)
28
+ allow(Dir).to receive(:chdir).and_return(0)
29
+ allow(@app).to receive(:reconfigure)
30
30
  Chef::Log.init(STDERR)
31
31
  end
32
32
 
@@ -37,23 +37,28 @@ describe Chef::Application do
37
37
  describe "reconfigure" do
38
38
  before do
39
39
  @app = Chef::Application.new
40
- @app.stub(:configure_chef).and_return(true)
41
- @app.stub(:configure_logging).and_return(true)
42
- @app.stub(:configure_proxy_environment_variables).and_return(true)
40
+ allow(@app).to receive(:configure_chef).and_return(true)
41
+ allow(@app).to receive(:configure_logging).and_return(true)
42
+ allow(@app).to receive(:configure_proxy_environment_variables).and_return(true)
43
43
  end
44
44
 
45
45
  it "should configure chef" do
46
- @app.should_receive(:configure_chef).and_return(true)
46
+ expect(@app).to receive(:configure_chef).and_return(true)
47
47
  @app.reconfigure
48
48
  end
49
49
 
50
50
  it "should configure logging" do
51
- @app.should_receive(:configure_logging).and_return(true)
51
+ expect(@app).to receive(:configure_logging).and_return(true)
52
52
  @app.reconfigure
53
53
  end
54
54
 
55
55
  it "should configure environment variables" do
56
- @app.should_receive(:configure_proxy_environment_variables).and_return(true)
56
+ expect(@app).to receive(:configure_proxy_environment_variables).and_return(true)
57
+ @app.reconfigure
58
+ end
59
+
60
+ it 'should not receive set_specific_recipes' do
61
+ expect(@app).to_not receive(:set_specific_recipes)
57
62
  @app.reconfigure
58
63
  end
59
64
  end
@@ -65,24 +70,24 @@ describe Chef::Application do
65
70
 
66
71
  describe "run" do
67
72
  before do
68
- @app.stub(:setup_application).and_return(true)
69
- @app.stub(:run_application).and_return(true)
70
- @app.stub(:configure_chef).and_return(true)
71
- @app.stub(:configure_logging).and_return(true)
73
+ allow(@app).to receive(:setup_application).and_return(true)
74
+ allow(@app).to receive(:run_application).and_return(true)
75
+ allow(@app).to receive(:configure_chef).and_return(true)
76
+ allow(@app).to receive(:configure_logging).and_return(true)
72
77
  end
73
78
 
74
79
  it "should reconfigure the application before running" do
75
- @app.should_receive(:reconfigure).and_return(true)
80
+ expect(@app).to receive(:reconfigure).and_return(true)
76
81
  @app.run
77
82
  end
78
83
 
79
84
  it "should setup the application before running it" do
80
- @app.should_receive(:setup_application).and_return(true)
85
+ expect(@app).to receive(:setup_application).and_return(true)
81
86
  @app.run
82
87
  end
83
88
 
84
89
  it "should run the actual application" do
85
- @app.should_receive(:run_application).and_return(true)
90
+ expect(@app).to receive(:run_application).and_return(true)
86
91
  @app.run
87
92
  end
88
93
  end
@@ -91,15 +96,15 @@ describe Chef::Application do
91
96
  describe "configure_chef" do
92
97
  before do
93
98
  # Silence warnings when no config file exists
94
- Chef::Log.stub(:warn)
99
+ allow(Chef::Log).to receive(:warn)
95
100
 
96
101
  @app = Chef::Application.new
97
102
  #Chef::Config.stub(:merge!).and_return(true)
98
- @app.stub(:parse_options).and_return(true)
103
+ allow(@app).to receive(:parse_options).and_return(true)
99
104
  end
100
105
 
101
106
  it "should parse the commandline options" do
102
- @app.should_receive(:parse_options).and_return(true)
107
+ expect(@app).to receive(:parse_options).and_return(true)
103
108
  @app.config[:config_file] = "/etc/chef/default.rb" #have a config file set, to prevent triggering error block
104
109
  @app.configure_chef
105
110
  end
@@ -110,7 +115,7 @@ describe Chef::Application do
110
115
 
111
116
  let(:config_location_pathname) do
112
117
  p = Pathname.new(config_location)
113
- p.stub(:realpath).and_return(config_location)
118
+ allow(p).to receive(:realpath).and_return(config_location)
114
119
  p
115
120
  end
116
121
 
@@ -119,21 +124,21 @@ describe Chef::Application do
119
124
 
120
125
  # force let binding to get evaluated or else we stub Pathname.new before we try to use it.
121
126
  config_location_pathname
122
- Pathname.stub(:new).with(config_location).and_return(config_location_pathname)
123
- File.should_receive(:read).
127
+ allow(Pathname).to receive(:new).with(config_location).and_return(config_location_pathname)
128
+ expect(File).to receive(:read).
124
129
  with(config_location).
125
130
  and_return(config_content)
126
131
  end
127
132
 
128
133
  it "should configure chef::config from a file" do
129
- Chef::Config.should_receive(:from_string).with(config_content, config_location)
134
+ expect(Chef::Config).to receive(:from_string).with(config_content, config_location)
130
135
  @app.configure_chef
131
136
  end
132
137
 
133
138
  it "should merge the local config hash into chef::config" do
134
139
  #File.should_receive(:open).with("/etc/chef/default.rb").and_yield(@config_file)
135
140
  @app.configure_chef
136
- Chef::Config.rspec_ran.should == "true"
141
+ expect(Chef::Config.rspec_ran).to eq("true")
137
142
  end
138
143
 
139
144
  end
@@ -144,8 +149,8 @@ describe Chef::Application do
144
149
  end
145
150
 
146
151
  it "should emit a warning" do
147
- Chef::Config.should_not_receive(:from_file).with("/etc/chef/default.rb")
148
- Chef::Log.should_receive(:warn).with("No config file found or specified on command line, using command line options.")
152
+ expect(Chef::Config).not_to receive(:from_file).with("/etc/chef/default.rb")
153
+ expect(Chef::Log).to receive(:warn).with("No config file found or specified on command line, using command line options.")
149
154
  @app.configure_chef
150
155
  end
151
156
  end
@@ -155,7 +160,7 @@ describe Chef::Application do
155
160
  @app.config[:config_file] = "/etc/chef/notfound"
156
161
  end
157
162
  it "should use the passed in command line options and defaults" do
158
- Chef::Config.should_receive(:merge!)
163
+ expect(Chef::Config).to receive(:merge!)
159
164
  @app.configure_chef
160
165
  end
161
166
  end
@@ -164,33 +169,33 @@ describe Chef::Application do
164
169
  describe "when configuring the logger" do
165
170
  before do
166
171
  @app = Chef::Application.new
167
- Chef::Log.stub(:init)
172
+ allow(Chef::Log).to receive(:init)
168
173
  end
169
174
 
170
175
  it "should initialise the chef logger" do
171
- Chef::Log.stub(:level=)
176
+ allow(Chef::Log).to receive(:level=)
172
177
  @monologger = double("Monologger")
173
- MonoLogger.should_receive(:new).with(Chef::Config[:log_location]).and_return(@monologger)
174
- Chef::Log.should_receive(:init).with(@monologger)
178
+ expect(MonoLogger).to receive(:new).with(Chef::Config[:log_location]).and_return(@monologger)
179
+ expect(Chef::Log).to receive(:init).with(@monologger)
175
180
  @app.configure_logging
176
181
  end
177
182
 
178
183
  it "should raise fatals if log location is invalid" do
179
184
  Chef::Config[:log_location] = "/tmp/non-existing-dir/logfile"
180
- Chef::Log.should_receive(:fatal).at_least(:once)
181
- Process.should_receive(:exit)
185
+ expect(Chef::Log).to receive(:fatal).at_least(:once)
186
+ expect(Process).to receive(:exit)
182
187
  @app.configure_logging
183
188
  end
184
189
 
185
190
  shared_examples_for "log_level_is_auto" do
186
191
  context "when STDOUT is to a tty" do
187
192
  before do
188
- STDOUT.stub(:tty?).and_return(true)
193
+ allow(STDOUT).to receive(:tty?).and_return(true)
189
194
  end
190
195
 
191
196
  it "configures the log level to :warn" do
192
197
  @app.configure_logging
193
- Chef::Log.level.should == :warn
198
+ expect(Chef::Log.level).to eq(:warn)
194
199
  end
195
200
 
196
201
  context "when force_logger is configured" do
@@ -200,19 +205,19 @@ describe Chef::Application do
200
205
 
201
206
  it "configures the log level to info" do
202
207
  @app.configure_logging
203
- Chef::Log.level.should == :info
208
+ expect(Chef::Log.level).to eq(:info)
204
209
  end
205
210
  end
206
211
  end
207
212
 
208
213
  context "when STDOUT is not to a tty" do
209
214
  before do
210
- STDOUT.stub(:tty?).and_return(false)
215
+ allow(STDOUT).to receive(:tty?).and_return(false)
211
216
  end
212
217
 
213
218
  it "configures the log level to :info" do
214
219
  @app.configure_logging
215
- Chef::Log.level.should == :info
220
+ expect(Chef::Log.level).to eq(:info)
216
221
  end
217
222
 
218
223
  context "when force_formatter is configured" do
@@ -221,7 +226,7 @@ describe Chef::Application do
221
226
  end
222
227
  it "sets the log level to :warn" do
223
228
  @app.configure_logging
224
- Chef::Log.level.should == :warn
229
+ expect(Chef::Log.level).to eq(:warn)
225
230
  end
226
231
  end
227
232
  end
@@ -242,10 +247,10 @@ describe Chef::Application do
242
247
 
243
248
  describe "when configuring environment variables" do
244
249
  def configure_proxy_environment_variables_stubs
245
- @app.stub(:configure_http_proxy).and_return(true)
246
- @app.stub(:configure_https_proxy).and_return(true)
247
- @app.stub(:configure_ftp_proxy).and_return(true)
248
- @app.stub(:configure_no_proxy).and_return(true)
250
+ allow(@app).to receive(:configure_http_proxy).and_return(true)
251
+ allow(@app).to receive(:configure_https_proxy).and_return(true)
252
+ allow(@app).to receive(:configure_ftp_proxy).and_return(true)
253
+ allow(@app).to receive(:configure_no_proxy).and_return(true)
249
254
  end
250
255
 
251
256
  shared_examples_for "setting ENV['http_proxy']" do
@@ -255,12 +260,12 @@ describe Chef::Application do
255
260
 
256
261
  it "should set ENV['http_proxy']" do
257
262
  @app.configure_proxy_environment_variables
258
- @env['http_proxy'].should == "#{scheme}://#{address}:#{port}"
263
+ expect(@env['http_proxy']).to eq("#{scheme}://#{address}:#{port}")
259
264
  end
260
265
 
261
266
  it "should set ENV['HTTP_PROXY']" do
262
267
  @app.configure_proxy_environment_variables
263
- @env['HTTP_PROXY'].should == "#{scheme}://#{address}:#{port}"
268
+ expect(@env['HTTP_PROXY']).to eq("#{scheme}://#{address}:#{port}")
264
269
  end
265
270
 
266
271
  describe "when Chef::Config[:http_proxy_user] is set" do
@@ -270,8 +275,8 @@ describe Chef::Application do
270
275
 
271
276
  it "should set ENV['http_proxy'] with the username" do
272
277
  @app.configure_proxy_environment_variables
273
- @env['http_proxy'].should == "#{scheme}://username@#{address}:#{port}"
274
- @env['HTTP_PROXY'].should == "#{scheme}://username@#{address}:#{port}"
278
+ expect(@env['http_proxy']).to eq("#{scheme}://username@#{address}:#{port}")
279
+ expect(@env['HTTP_PROXY']).to eq("#{scheme}://username@#{address}:#{port}")
275
280
  end
276
281
 
277
282
  context "when :http_proxy_user contains '@' and/or ':'" do
@@ -281,8 +286,8 @@ describe Chef::Application do
281
286
 
282
287
  it "should set ENV['http_proxy'] with the escaped username" do
283
288
  @app.configure_proxy_environment_variables
284
- @env['http_proxy'].should == "#{scheme}://my%3Ausern%40me@#{address}:#{port}"
285
- @env['HTTP_PROXY'].should == "#{scheme}://my%3Ausern%40me@#{address}:#{port}"
289
+ expect(@env['http_proxy']).to eq("#{scheme}://my%3Ausern%40me@#{address}:#{port}")
290
+ expect(@env['HTTP_PROXY']).to eq("#{scheme}://my%3Ausern%40me@#{address}:#{port}")
286
291
  end
287
292
  end
288
293
 
@@ -293,8 +298,8 @@ describe Chef::Application do
293
298
 
294
299
  it "should set ENV['http_proxy'] with the password" do
295
300
  @app.configure_proxy_environment_variables
296
- @env['http_proxy'].should == "#{scheme}://username:password@#{address}:#{port}"
297
- @env['HTTP_PROXY'].should == "#{scheme}://username:password@#{address}:#{port}"
301
+ expect(@env['http_proxy']).to eq("#{scheme}://username:password@#{address}:#{port}")
302
+ expect(@env['HTTP_PROXY']).to eq("#{scheme}://username:password@#{address}:#{port}")
298
303
  end
299
304
 
300
305
  context "when :http_proxy_pass contains '@' and/or ':'" do
@@ -304,8 +309,8 @@ describe Chef::Application do
304
309
 
305
310
  it "should set ENV['http_proxy'] with the escaped password" do
306
311
  @app.configure_proxy_environment_variables
307
- @env['http_proxy'].should == "#{scheme}://username:%3AP%40ssword101@#{address}:#{port}"
308
- @env['HTTP_PROXY'].should == "#{scheme}://username:%3AP%40ssword101@#{address}:#{port}"
312
+ expect(@env['http_proxy']).to eq("#{scheme}://username:%3AP%40ssword101@#{address}:#{port}")
313
+ expect(@env['HTTP_PROXY']).to eq("#{scheme}://username:%3AP%40ssword101@#{address}:#{port}")
309
314
  end
310
315
  end
311
316
  end
@@ -319,8 +324,8 @@ describe Chef::Application do
319
324
 
320
325
  it "should set ENV['http_proxy']" do
321
326
  @app.configure_proxy_environment_variables
322
- @env['http_proxy'].should == "#{scheme}://#{address}:#{port}"
323
- @env['HTTP_PROXY'].should == "#{scheme}://#{address}:#{port}"
327
+ expect(@env['http_proxy']).to eq("#{scheme}://#{address}:#{port}")
328
+ expect(@env['HTTP_PROXY']).to eq("#{scheme}://#{address}:#{port}")
324
329
  end
325
330
  end
326
331
  end
@@ -328,11 +333,11 @@ describe Chef::Application do
328
333
  describe "when configuring ENV['http_proxy']" do
329
334
  before do
330
335
  @env = {}
331
- @app.stub(:env).and_return(@env)
336
+ allow(@app).to receive(:env).and_return(@env)
332
337
 
333
- @app.stub(:configure_https_proxy).and_return(true)
334
- @app.stub(:configure_ftp_proxy).and_return(true)
335
- @app.stub(:configure_no_proxy).and_return(true)
338
+ allow(@app).to receive(:configure_https_proxy).and_return(true)
339
+ allow(@app).to receive(:configure_ftp_proxy).and_return(true)
340
+ allow(@app).to receive(:configure_no_proxy).and_return(true)
336
341
  end
337
342
 
338
343
  describe "when Chef::Config[:http_proxy] is not set" do
@@ -342,7 +347,7 @@ describe Chef::Application do
342
347
 
343
348
  it "should not set ENV['http_proxy']" do
344
349
  @app.configure_proxy_environment_variables
345
- @env.should == {}
350
+ expect(@env).to eq({})
346
351
  end
347
352
  end
348
353
 
@@ -401,7 +406,7 @@ describe Chef::Application do
401
406
 
402
407
  it "should set ENV['http_proxy']" do
403
408
  @app.configure_proxy_environment_variables
404
- @env['http_proxy'].should == Chef::Config[:http_proxy]
409
+ expect(@env['http_proxy']).to eq(Chef::Config[:http_proxy])
405
410
  end
406
411
  end
407
412
 
@@ -417,26 +422,26 @@ describe Chef::Application do
417
422
 
418
423
  describe "class method: fatal!" do
419
424
  before do
420
- STDERR.stub(:puts).with("FATAL: blah").and_return(true)
421
- Chef::Log.stub(:fatal).and_return(true)
422
- Process.stub(:exit).and_return(true)
425
+ allow(STDERR).to receive(:puts).with("FATAL: blah").and_return(true)
426
+ allow(Chef::Log).to receive(:fatal).and_return(true)
427
+ allow(Process).to receive(:exit).and_return(true)
423
428
  end
424
429
 
425
430
  it "should log an error message to the logger" do
426
- Chef::Log.should_receive(:fatal).with("blah").and_return(true)
431
+ expect(Chef::Log).to receive(:fatal).with("blah").and_return(true)
427
432
  Chef::Application.fatal! "blah"
428
433
  end
429
434
 
430
435
  describe "when an exit code is supplied" do
431
436
  it "should exit with the given exit code" do
432
- Process.should_receive(:exit).with(-100).and_return(true)
437
+ expect(Process).to receive(:exit).with(-100).and_return(true)
433
438
  Chef::Application.fatal! "blah", -100
434
439
  end
435
440
  end
436
441
 
437
442
  describe "when an exit code is not supplied" do
438
443
  it "should exit with the default exit code" do
439
- Process.should_receive(:exit).with(-1).and_return(true)
444
+ expect(Process).to receive(:exit).with(-1).and_return(true)
440
445
  Chef::Application.fatal! "blah"
441
446
  end
442
447
  end
@@ -449,7 +454,7 @@ describe Chef::Application do
449
454
  end
450
455
 
451
456
  it "should raise an error" do
452
- lambda { @app.setup_application }.should raise_error(Chef::Exceptions::Application)
457
+ expect { @app.setup_application }.to raise_error(Chef::Exceptions::Application)
453
458
  end
454
459
  end
455
460
 
@@ -459,7 +464,7 @@ describe Chef::Application do
459
464
  end
460
465
 
461
466
  it "should raise an error" do
462
- lambda { @app.run_application }.should raise_error(Chef::Exceptions::Application)
467
+ expect { @app.run_application }.to raise_error(Chef::Exceptions::Application)
463
468
  end
464
469
  end
465
470
 
@@ -467,22 +472,52 @@ describe Chef::Application do
467
472
  it "should warn for bad config file path" do
468
473
  @app.config[:config_file] = "/tmp/non-existing-dir/file"
469
474
  config_file_regexp = Regexp.new @app.config[:config_file]
470
- Chef::Log.should_receive(:warn).at_least(:once).with(config_file_regexp).and_return(true)
471
- Chef::Log.stub(:warn).and_return(true)
475
+ expect(Chef::Log).to receive(:warn).at_least(:once).with(config_file_regexp).and_return(true)
476
+ allow(Chef::Log).to receive(:warn).and_return(true)
472
477
  @app.configure_chef
473
478
  end
474
479
  end
475
480
 
481
+ describe 'run_chef_client' do
482
+ context 'with an application' do
483
+ let(:app) { Chef::Application.new }
484
+
485
+ context 'when called with an invalid argument' do
486
+ before do
487
+ allow(app).to receive(:fork_chef_client).and_return(true)
488
+ allow(app).to receive(:run_with_graceful_exit_option).and_return(true)
489
+ end
490
+
491
+ it 'should raise an argument error detailing the problem' do
492
+ specific_recipes_regexp = Regexp.new 'received non-Array like specific_recipes argument'
493
+ expect { app.run_chef_client(nil) }.to raise_error(ArgumentError, specific_recipes_regexp)
494
+ end
495
+ end
496
+
497
+ context 'when called with an Array-like argument (#size)' do
498
+ before do
499
+ allow(app).to receive(:fork_chef_client).and_return(true)
500
+ allow(app).to receive(:run_with_graceful_exit_option).and_return(true)
501
+ end
502
+
503
+ it 'should be cool' do
504
+ expect { app.run_chef_client([]) }.not_to raise_error
505
+ end
506
+ end
507
+ end
508
+
509
+ end
510
+
476
511
  describe "configuration errors" do
477
512
  before do
478
- Process.should_receive(:exit)
513
+ expect(Process).to receive(:exit)
479
514
  end
480
515
 
481
516
  def raises_informative_fatals_on_configure_chef
482
517
  config_file_regexp = Regexp.new @app.config[:config_file]
483
- Chef::Log.should_receive(:fatal).
518
+ expect(Chef::Log).to receive(:fatal).
484
519
  with(/Configuration error/)
485
- Chef::Log.should_receive(:fatal).
520
+ expect(Chef::Log).to receive(:fatal).
486
521
  with(config_file_regexp).
487
522
  at_least(1).times
488
523
  @app.configure_chef