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
@@ -25,8 +25,8 @@ describe Chef::HTTP::Simple do
25
25
  content_length = middlewares.find_index { |e| e.is_a? Chef::HTTP::ValidateContentLength }
26
26
  decompressor = middlewares.find_index { |e| e.is_a? Chef::HTTP::Decompressor }
27
27
 
28
- content_length.should_not be_nil
29
- decompressor.should_not be_nil
30
- (decompressor < content_length).should be_true
28
+ expect(content_length).not_to be_nil
29
+ expect(decompressor).not_to be_nil
30
+ expect(decompressor < content_length).to be_truthy
31
31
  end
32
32
  end
@@ -45,31 +45,31 @@ describe "HTTP SSL Policy" do
45
45
  end
46
46
 
47
47
  it "configures the HTTP client to use SSL when given a URL with the https protocol" do
48
- http_client.use_ssl?.should be_true
48
+ expect(http_client.use_ssl?).to be_truthy
49
49
  end
50
50
 
51
51
  it "sets the OpenSSL verify mode to verify_peer" do
52
- http_client.verify_mode.should == OpenSSL::SSL::VERIFY_PEER
52
+ expect(http_client.verify_mode).to eq(OpenSSL::SSL::VERIFY_PEER)
53
53
  end
54
54
 
55
55
  it "raises a ConfigurationError if :ssl_ca_path is set to a path that doesn't exist" do
56
56
  Chef::Config[:ssl_ca_path] = "/dev/null/nothing_here"
57
- lambda {http_client}.should raise_error(Chef::Exceptions::ConfigurationError)
57
+ expect {http_client}.to raise_error(Chef::Exceptions::ConfigurationError)
58
58
  end
59
59
 
60
60
  it "should set the CA path if that is set in the configuration" do
61
61
  Chef::Config[:ssl_ca_path] = File.join(CHEF_SPEC_DATA, "ssl")
62
- http_client.ca_path.should == File.join(CHEF_SPEC_DATA, "ssl")
62
+ expect(http_client.ca_path).to eq(File.join(CHEF_SPEC_DATA, "ssl"))
63
63
  end
64
64
 
65
65
  it "raises a ConfigurationError if :ssl_ca_file is set to a file that does not exist" do
66
66
  Chef::Config[:ssl_ca_file] = "/dev/null/nothing_here"
67
- lambda {http_client}.should raise_error(Chef::Exceptions::ConfigurationError)
67
+ expect {http_client}.to raise_error(Chef::Exceptions::ConfigurationError)
68
68
  end
69
69
 
70
70
  it "should set the CA file if that is set in the configuration" do
71
71
  Chef::Config[:ssl_ca_file] = CHEF_SPEC_DATA + '/ssl/5e707473.0'
72
- http_client.ca_file.should == CHEF_SPEC_DATA + '/ssl/5e707473.0'
72
+ expect(http_client.ca_file).to eq(CHEF_SPEC_DATA + '/ssl/5e707473.0')
73
73
  end
74
74
  end
75
75
 
@@ -80,7 +80,7 @@ describe "HTTP SSL Policy" do
80
80
  end
81
81
 
82
82
  it "sets the OpenSSL verify mode to :verify_none" do
83
- http_client.verify_mode.should == OpenSSL::SSL::VERIFY_NONE
83
+ expect(http_client.verify_mode).to eq(OpenSSL::SSL::VERIFY_NONE)
84
84
  end
85
85
  end
86
86
 
@@ -90,26 +90,26 @@ describe "HTTP SSL Policy" do
90
90
  it "raises ConfigurationError if the certificate file doesn't exist" do
91
91
  Chef::Config[:ssl_client_cert] = "/dev/null/nothing_here"
92
92
  Chef::Config[:ssl_client_key] = CHEF_SPEC_DATA + '/ssl/chef-rspec.key'
93
- lambda {http_client}.should raise_error(Chef::Exceptions::ConfigurationError)
93
+ expect {http_client}.to raise_error(Chef::Exceptions::ConfigurationError)
94
94
  end
95
95
 
96
96
  it "raises ConfigurationError if the certificate file doesn't exist" do
97
97
  Chef::Config[:ssl_client_cert] = CHEF_SPEC_DATA + '/ssl/chef-rspec.cert'
98
98
  Chef::Config[:ssl_client_key] = "/dev/null/nothing_here"
99
- lambda {http_client}.should raise_error(Chef::Exceptions::ConfigurationError)
99
+ expect {http_client}.to raise_error(Chef::Exceptions::ConfigurationError)
100
100
  end
101
101
 
102
102
  it "raises a ConfigurationError if one of :ssl_client_cert and :ssl_client_key is set but not both" do
103
103
  Chef::Config[:ssl_client_cert] = "/dev/null/nothing_here"
104
104
  Chef::Config[:ssl_client_key] = nil
105
- lambda {http_client}.should raise_error(Chef::Exceptions::ConfigurationError)
105
+ expect {http_client}.to raise_error(Chef::Exceptions::ConfigurationError)
106
106
  end
107
107
 
108
108
  it "configures the HTTP client's cert and private key" do
109
109
  Chef::Config[:ssl_client_cert] = CHEF_SPEC_DATA + '/ssl/chef-rspec.cert'
110
110
  Chef::Config[:ssl_client_key] = CHEF_SPEC_DATA + '/ssl/chef-rspec.key'
111
- http_client.cert.to_s.should == OpenSSL::X509::Certificate.new(IO.read(CHEF_SPEC_DATA + '/ssl/chef-rspec.cert')).to_s
112
- http_client.key.to_s.should == IO.read(CHEF_SPEC_DATA + '/ssl/chef-rspec.key')
111
+ expect(http_client.cert.to_s).to eq(OpenSSL::X509::Certificate.new(IO.read(CHEF_SPEC_DATA + '/ssl/chef-rspec.cert')).to_s)
112
+ expect(http_client.key.to_s).to eq(IO.read(CHEF_SPEC_DATA + '/ssl/chef-rspec.key'))
113
113
  end
114
114
  end
115
115
 
@@ -125,7 +125,7 @@ describe "HTTP SSL Policy" do
125
125
  end
126
126
 
127
127
  it "enables verification of self-signed certificates" do
128
- http_client.cert_store.verify(self_signed_crt).should be_true
128
+ expect(http_client.cert_store.verify(self_signed_crt)).to be_truthy
129
129
  end
130
130
 
131
131
  it "enables verification of cert chains" do
@@ -137,7 +137,7 @@ describe "HTTP SSL Policy" do
137
137
  # If the machine running the test doesn't have ruby SSL configured correctly,
138
138
  # then the root cert also has to be loaded for the test to succeed.
139
139
  # The system under test **SHOULD** do both of these things.
140
- http_client.cert_store.verify(additional_pem).should be_true
140
+ expect(http_client.cert_store.verify(additional_pem)).to be_truthy
141
141
  end
142
142
 
143
143
  context "and some certs are duplicates" do
@@ -161,7 +161,7 @@ describe "HTTP SSL Policy" do
161
161
  end
162
162
 
163
163
  it "sets the OpenSSL verify mode to verify_peer" do
164
- http_client.verify_mode.should == OpenSSL::SSL::VERIFY_PEER
164
+ expect(http_client.verify_mode).to eq(OpenSSL::SSL::VERIFY_PEER)
165
165
  end
166
166
  end
167
167
 
@@ -45,7 +45,7 @@ describe Chef::HTTP::ValidateContentLength do
45
45
 
46
46
  let(:response) {
47
47
  m = double('HttpResponse', :body => response_body)
48
- m.stub(:[]) do |key|
48
+ allow(m).to receive(:[]) do |key|
49
49
  response_headers[key]
50
50
  end
51
51
 
@@ -83,19 +83,24 @@ describe Chef::HTTP::ValidateContentLength do
83
83
  let(:debug_stream) { StringIO.new }
84
84
  let(:debug_output) { debug_stream.string }
85
85
 
86
- before(:each) {
86
+ before(:each) do
87
+ @original_log_level = Chef::Log.level
87
88
  Chef::Log.level = :debug
88
- Chef::Log.stub(:debug) do |message|
89
+ allow(Chef::Log).to receive(:debug) do |message|
89
90
  debug_stream.puts message
90
91
  end
91
- }
92
+ end
93
+
94
+ after(:each) do
95
+ Chef::Log.level = @original_log_level
96
+ end
92
97
 
93
98
  describe "without response body" do
94
99
  let(:request_type) { :direct }
95
100
  let(:response_body) { "Thanks for checking in." }
96
101
 
97
102
  it "shouldn't raise error" do
98
- lambda { run_content_length_validation }.should_not raise_error
103
+ expect { run_content_length_validation }.not_to raise_error
99
104
  end
100
105
  end
101
106
 
@@ -108,7 +113,7 @@ describe Chef::HTTP::ValidateContentLength do
108
113
 
109
114
  it "should skip validation and log for debug" do
110
115
  run_content_length_validation
111
- debug_output.should include("HTTP server did not include a Content-Length header in response")
116
+ expect(debug_output).to include("HTTP server did not include a Content-Length header in response")
112
117
  end
113
118
  end
114
119
  end
@@ -121,7 +126,7 @@ describe Chef::HTTP::ValidateContentLength do
121
126
 
122
127
  it "should validate correctly" do
123
128
  run_content_length_validation
124
- debug_output.should include("Content-Length validated correctly.")
129
+ expect(debug_output).to include("Content-Length validated correctly.")
125
130
  end
126
131
  end
127
132
  end
@@ -134,7 +139,7 @@ describe Chef::HTTP::ValidateContentLength do
134
139
  let(:request_type) { req_type.to_sym }
135
140
 
136
141
  it "should raise ContentLengthMismatch error" do
137
- lambda { run_content_length_validation }.should raise_error(Chef::Exceptions::ContentLengthMismatch)
142
+ expect { run_content_length_validation }.to raise_error(Chef::Exceptions::ContentLengthMismatch)
138
143
  end
139
144
  end
140
145
  end
@@ -144,7 +149,7 @@ describe Chef::HTTP::ValidateContentLength do
144
149
  let(:streaming_length) { 12 }
145
150
 
146
151
  it "should raise ContentLengthMismatch error" do
147
- lambda { run_content_length_validation }.should raise_error(Chef::Exceptions::ContentLengthMismatch)
152
+ expect { run_content_length_validation }.to raise_error(Chef::Exceptions::ContentLengthMismatch)
148
153
  end
149
154
  end
150
155
 
@@ -162,7 +167,7 @@ describe Chef::HTTP::ValidateContentLength do
162
167
 
163
168
  it "should skip validation and log for debug" do
164
169
  run_content_length_validation
165
- debug_output.should include("Transfer-Encoding header is set, skipping Content-Length check.")
170
+ expect(debug_output).to include("Transfer-Encoding header is set, skipping Content-Length check.")
166
171
  end
167
172
  end
168
173
  end
@@ -171,16 +176,16 @@ describe Chef::HTTP::ValidateContentLength do
171
176
  describe "when client is being reused" do
172
177
  before do
173
178
  run_content_length_validation
174
- debug_output.should include("Content-Length validated correctly.")
179
+ expect(debug_output).to include("Content-Length validated correctly.")
175
180
  end
176
181
 
177
182
  it "should reset internal counter" do
178
- middleware.instance_variable_get(:@content_length_counter).should be_nil
183
+ expect(middleware.instance_variable_get(:@content_length_counter)).to be_nil
179
184
  end
180
185
 
181
186
  it "should validate correctly second time" do
182
187
  run_content_length_validation
183
- debug_output.should include("Content-Length validated correctly.")
188
+ expect(debug_output).to include("Content-Length validated correctly.")
184
189
  end
185
190
  end
186
191
 
@@ -31,17 +31,24 @@ describe Chef::HTTP do
31
31
 
32
32
  it 'should return a correctly formatted url 1/3 CHEF-5261' do
33
33
  http = Chef::HTTP.new('http://www.getchef.com')
34
- http.create_url('api/endpoint').should eql(URI.parse('http://www.getchef.com/api/endpoint'))
34
+ expect(http.create_url('api/endpoint')).to eql(URI.parse('http://www.getchef.com/api/endpoint'))
35
35
  end
36
36
 
37
37
  it 'should return a correctly formatted url 2/3 CHEF-5261' do
38
38
  http = Chef::HTTP.new('http://www.getchef.com/')
39
- http.create_url('/organization/org/api/endpoint/').should eql(URI.parse('http://www.getchef.com/organization/org/api/endpoint/'))
39
+ expect(http.create_url('/organization/org/api/endpoint/')).to eql(URI.parse('http://www.getchef.com/organization/org/api/endpoint/'))
40
40
  end
41
41
 
42
42
  it 'should return a correctly formatted url 3/3 CHEF-5261' do
43
43
  http = Chef::HTTP.new('http://www.getchef.com/organization/org///')
44
- http.create_url('///api/endpoint?url=http://foo.bar').should eql(URI.parse('http://www.getchef.com/organization/org/api/endpoint?url=http://foo.bar'))
44
+ expect(http.create_url('///api/endpoint?url=http://foo.bar')).to eql(URI.parse('http://www.getchef.com/organization/org/api/endpoint?url=http://foo.bar'))
45
+ end
46
+
47
+ # As per: https://github.com/opscode/chef/issues/2500
48
+ it 'should treat scheme part of the URI in a case-insensitive manner' do
49
+ http = Chef::HTTP.allocate # Calling Chef::HTTP::new sets @url, don't want that.
50
+ expect { http.create_url('HTTP://www1.chef.io/') }.not_to raise_error
51
+ expect(http.create_url('HTTP://www2.chef.io/')).to eql(URI.parse('http://www2.chef.io/'))
45
52
  end
46
53
 
47
54
  end # create_url
@@ -50,20 +57,20 @@ describe Chef::HTTP do
50
57
 
51
58
  it 'should return nil for a "200 Success" response (CHEF-4762)' do
52
59
  resp = Net::HTTPOK.new("1.1", 200, "OK")
53
- resp.should_receive(:read_body).and_return(nil)
60
+ expect(resp).to receive(:read_body).and_return(nil)
54
61
  http = Chef::HTTP.new("")
55
- Chef::HTTP::BasicClient.any_instance.should_receive(:request).and_return(["request", resp])
62
+ expect_any_instance_of(Chef::HTTP::BasicClient).to receive(:request).and_return(["request", resp])
56
63
 
57
- http.head("http://www.getchef.com/").should eql(nil)
64
+ expect(http.head("http://www.getchef.com/")).to eql(nil)
58
65
  end
59
66
 
60
67
  it 'should return false for a "304 Not Modified" response (CHEF-4762)' do
61
68
  resp = Net::HTTPNotModified.new("1.1", 304, "Not Modified")
62
- resp.should_receive(:read_body).and_return(nil)
69
+ expect(resp).to receive(:read_body).and_return(nil)
63
70
  http = Chef::HTTP.new("")
64
- Chef::HTTP::BasicClient.any_instance.should_receive(:request).and_return(["request", resp])
71
+ expect_any_instance_of(Chef::HTTP::BasicClient).to receive(:request).and_return(["request", resp])
65
72
 
66
- http.head("http://www.getchef.com/").should eql(false)
73
+ expect(http.head("http://www.getchef.com/")).to eql(false)
67
74
  end
68
75
 
69
76
  end # head
@@ -0,0 +1,153 @@
1
+ #
2
+ # Author:: Lamont Granquist <lamont@chef.io>)
3
+ # Copyright:: Copyright (c) 2015 Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'spec_helper'
20
+
21
+ describe Chef::Knife::Bootstrap::ChefVaultHandler do
22
+
23
+ let(:stdout) { StringIO.new }
24
+ let(:stderr) { StringIO.new }
25
+ let(:stdin) { StringIO.new }
26
+ let(:ui) { Chef::Knife::UI.new(stdout, stderr, stdin, {}) }
27
+
28
+ let(:knife_config) { {} }
29
+
30
+ let(:node_name) { "bevell.wat" }
31
+
32
+ let(:chef_vault_handler) {
33
+ chef_vault_handler = Chef::Knife::Bootstrap::ChefVaultHandler.new(knife_config: knife_config, ui: ui)
34
+ chef_vault_handler
35
+ }
36
+
37
+ context "when there's no vault option" do
38
+ it "should report its not doing anything" do
39
+ expect(chef_vault_handler.doing_chef_vault?).to be false
40
+ end
41
+
42
+ it "shouldn't do anything" do
43
+ expect(chef_vault_handler).to_not receive(:sanity_check)
44
+ expect(chef_vault_handler).to_not receive(:update_bootstrap_vault_json!)
45
+ chef_vault_handler
46
+ end
47
+ end
48
+
49
+ context "when setting chef vault items" do
50
+ let(:bootstrap_vault_item) { double("ChefVault::Item") }
51
+
52
+ before do
53
+ expect(chef_vault_handler).to receive(:wait_for_client).and_return(false)
54
+ expect(chef_vault_handler).to receive(:require_chef_vault!).at_least(:once)
55
+ expect(bootstrap_vault_item).to receive(:clients).with("name:#{node_name}").at_least(:once)
56
+ expect(bootstrap_vault_item).to receive(:save).at_least(:once)
57
+ end
58
+
59
+ context "from knife_config[:bootstrap_vault_item]" do
60
+ it "sets a single item as a scalar" do
61
+ knife_config[:bootstrap_vault_item] = { 'vault' => 'item1' }
62
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item1').and_return(bootstrap_vault_item)
63
+ chef_vault_handler.run(node_name: node_name)
64
+ end
65
+
66
+ it "sets a single item as an array" do
67
+ knife_config[:bootstrap_vault_item] = { 'vault' => [ 'item1' ] }
68
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item1').and_return(bootstrap_vault_item)
69
+ chef_vault_handler.run(node_name: node_name)
70
+ end
71
+
72
+ it "sets two items as an array" do
73
+ knife_config[:bootstrap_vault_item] = { 'vault' => [ 'item1', 'item2' ] }
74
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item1').and_return(bootstrap_vault_item)
75
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item2').and_return(bootstrap_vault_item)
76
+ chef_vault_handler.run(node_name: node_name)
77
+ end
78
+
79
+ it "sets two vaults from different hash keys" do
80
+ knife_config[:bootstrap_vault_item] = { 'vault' => [ 'item1', 'item2' ], 'vault2' => [ 'item3' ] }
81
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item1').and_return(bootstrap_vault_item)
82
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item2').and_return(bootstrap_vault_item)
83
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault2', 'item3').and_return(bootstrap_vault_item)
84
+ chef_vault_handler.run(node_name: node_name)
85
+ end
86
+ end
87
+
88
+ context "from knife_config[:bootstrap_vault_json]" do
89
+ it "sets a single item as a scalar" do
90
+ knife_config[:bootstrap_vault_json] = '{ "vault": "item1" }'
91
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item1').and_return(bootstrap_vault_item)
92
+ chef_vault_handler.run(node_name: node_name)
93
+ end
94
+
95
+ it "sets a single item as an array" do
96
+ knife_config[:bootstrap_vault_json] = '{ "vault": [ "item1" ] }'
97
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item1').and_return(bootstrap_vault_item)
98
+ chef_vault_handler.run(node_name: node_name)
99
+ end
100
+
101
+ it "sets two items as an array" do
102
+ knife_config[:bootstrap_vault_json] = '{ "vault": [ "item1", "item2" ] }'
103
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item1').and_return(bootstrap_vault_item)
104
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item2').and_return(bootstrap_vault_item)
105
+ chef_vault_handler.run(node_name: node_name)
106
+ end
107
+
108
+ it "sets two vaults from different hash keys" do
109
+ knife_config[:bootstrap_vault_json] = '{ "vault": [ "item1", "item2" ], "vault2": [ "item3" ] }'
110
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item1').and_return(bootstrap_vault_item)
111
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item2').and_return(bootstrap_vault_item)
112
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault2', 'item3').and_return(bootstrap_vault_item)
113
+ chef_vault_handler.run(node_name: node_name)
114
+ end
115
+ end
116
+
117
+ context "from knife_config[:bootstrap_vault_file]" do
118
+
119
+ def setup_file_contents(json)
120
+ stringio = StringIO.new(json)
121
+ knife_config[:bootstrap_vault_file] = "/foo/bar/baz"
122
+ expect(File).to receive(:read).with(knife_config[:bootstrap_vault_file]).and_return(stringio)
123
+ end
124
+
125
+ it "sets a single item as a scalar" do
126
+ setup_file_contents('{ "vault": "item1" }')
127
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item1').and_return(bootstrap_vault_item)
128
+ chef_vault_handler.run(node_name: node_name)
129
+ end
130
+
131
+ it "sets a single item as an array" do
132
+ setup_file_contents('{ "vault": [ "item1" ] }')
133
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item1').and_return(bootstrap_vault_item)
134
+ chef_vault_handler.run(node_name: node_name)
135
+ end
136
+
137
+ it "sets two items as an array" do
138
+ setup_file_contents('{ "vault": [ "item1", "item2" ] }')
139
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item1').and_return(bootstrap_vault_item)
140
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item2').and_return(bootstrap_vault_item)
141
+ chef_vault_handler.run(node_name: node_name)
142
+ end
143
+
144
+ it "sets two vaults from different hash keys" do
145
+ setup_file_contents('{ "vault": [ "item1", "item2" ], "vault2": [ "item3" ] }')
146
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item1').and_return(bootstrap_vault_item)
147
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault', 'item2').and_return(bootstrap_vault_item)
148
+ expect(chef_vault_handler).to receive(:load_chef_bootstrap_vault_item).with('vault2', 'item3').and_return(bootstrap_vault_item)
149
+ chef_vault_handler.run(node_name: node_name)
150
+ end
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,178 @@
1
+ #
2
+ # Author:: Lamont Granquist <lamont@chef.io>)
3
+ # Copyright:: Copyright (c) 2015 Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'spec_helper'
20
+
21
+
22
+ describe Chef::Knife::Bootstrap::ClientBuilder do
23
+
24
+ let(:stdout) { StringIO.new }
25
+ let(:stderr) { StringIO.new }
26
+ let(:stdin) { StringIO.new }
27
+ let(:ui) { Chef::Knife::UI.new(stdout, stderr, stdin, {}) }
28
+
29
+ let(:knife_config) { {} }
30
+
31
+ let(:chef_config) { {} }
32
+
33
+ let(:node_name) { "bevell.wat" }
34
+
35
+ let(:rest) { double("Chef::REST") }
36
+
37
+ let(:client_builder) {
38
+ client_builder = Chef::Knife::Bootstrap::ClientBuilder.new(knife_config: knife_config, chef_config: chef_config, ui: ui)
39
+ allow(client_builder).to receive(:rest).and_return(rest)
40
+ allow(client_builder).to receive(:node_name).and_return(node_name)
41
+ client_builder
42
+ }
43
+
44
+ context "#sanity_check!" do
45
+ let(:response_404) { OpenStruct.new(:code => '404') }
46
+ let(:exception_404) { Net::HTTPServerException.new("404 not found", response_404) }
47
+
48
+ context "in cases where the prompting fails" do
49
+ before do
50
+ # should fail early in #run
51
+ expect(client_builder).to_not receive(:create_client!)
52
+ expect(client_builder).to_not receive(:create_node!)
53
+ end
54
+
55
+ it "exits when the node exists and the user does not want to delete" do
56
+ expect(rest).to receive(:get_rest).with("nodes/#{node_name}")
57
+ expect(ui.stdin).to receive(:readline).and_return('n')
58
+ expect { client_builder.run }.to raise_error(SystemExit)
59
+ end
60
+
61
+ it "exits when the client exists and the user does not want to delete" do
62
+ expect(rest).to receive(:get_rest).with("nodes/#{node_name}").and_raise(exception_404)
63
+ expect(rest).to receive(:get_rest).with("clients/#{node_name}")
64
+ expect(ui.stdin).to receive(:readline).and_return('n')
65
+ expect { client_builder.run }.to raise_error(SystemExit)
66
+ end
67
+ end
68
+
69
+ context "in cases where the prompting succeeds" do
70
+ before do
71
+ # mock out the rest of #run
72
+ expect(client_builder).to receive(:create_client!)
73
+ expect(client_builder).to receive(:create_node!)
74
+ end
75
+
76
+ it "when both the client and node do not exist it succeeds" do
77
+ expect(rest).to receive(:get_rest).with("nodes/#{node_name}").and_raise(exception_404)
78
+ expect(rest).to receive(:get_rest).with("clients/#{node_name}").and_raise(exception_404)
79
+ expect { client_builder.run }.not_to raise_error
80
+ end
81
+
82
+ it "when we are allowed to delete an old node" do
83
+ expect(rest).to receive(:get_rest).with("nodes/#{node_name}")
84
+ expect(ui.stdin).to receive(:readline).and_return('y')
85
+ expect(rest).to receive(:get_rest).with("clients/#{node_name}").and_raise(exception_404)
86
+ expect(rest).to receive(:delete).with("nodes/#{node_name}")
87
+ expect { client_builder.run }.not_to raise_error
88
+ end
89
+
90
+ it "when we are allowed to delete an old client" do
91
+ expect(rest).to receive(:get_rest).with("nodes/#{node_name}").and_raise(exception_404)
92
+ expect(rest).to receive(:get_rest).with("clients/#{node_name}")
93
+ expect(ui.stdin).to receive(:readline).and_return('y')
94
+ expect(rest).to receive(:delete).with("clients/#{node_name}")
95
+ expect { client_builder.run }.not_to raise_error
96
+ end
97
+
98
+ it "when we are are allowed to delete both an old client and node" do
99
+ expect(rest).to receive(:get_rest).with("nodes/#{node_name}")
100
+ expect(rest).to receive(:get_rest).with("clients/#{node_name}")
101
+ expect(ui.stdin).to receive(:readline).twice.and_return('y')
102
+ expect(rest).to receive(:delete).with("nodes/#{node_name}")
103
+ expect(rest).to receive(:delete).with("clients/#{node_name}")
104
+ expect { client_builder.run }.not_to raise_error
105
+ end
106
+ end
107
+ end
108
+
109
+ context "#create_client!" do
110
+ before do
111
+ # mock out the rest of #run
112
+ expect(client_builder).to receive(:sanity_check)
113
+ expect(client_builder).to receive(:create_node!)
114
+ end
115
+
116
+ it "delegates everything to Chef::ApiClient::Registration" do
117
+ reg_double = double("Chef::ApiClient::Registration")
118
+ expect(Chef::ApiClient::Registration).to receive(:new).with(node_name, client_builder.client_path, http_api: rest).and_return(reg_double)
119
+ expect(reg_double).to receive(:run)
120
+ client_builder.run
121
+ end
122
+
123
+ end
124
+
125
+ context "#client_path" do
126
+ it "has a public API for the temporary client.pem file" do
127
+ expect(client_builder.client_path).to match(/#{node_name}.pem/)
128
+ end
129
+ end
130
+
131
+ context "#create_node!" do
132
+ before do
133
+ # mock out the rest of #run
134
+ expect(client_builder).to receive(:sanity_check)
135
+ expect(client_builder).to receive(:create_client!)
136
+ # mock out default node building steps
137
+ expect(client_builder).to receive(:client_rest).and_return(client_rest)
138
+ expect(Chef::Node).to receive(:new).with(chef_server_rest: client_rest).and_return(node)
139
+ expect(node).to receive(:name).with(node_name)
140
+ expect(node).to receive(:save)
141
+ end
142
+
143
+ let(:client_rest) { double("Chef::REST (client)") }
144
+
145
+ let(:node) { double("Chef::Node") }
146
+
147
+ it "builds a node with a default run_list of []" do
148
+ expect(node).to receive(:run_list).with([])
149
+ client_builder.run
150
+ end
151
+
152
+ it "builds a node when the run_list is a string" do
153
+ knife_config[:run_list] = "role[base],role[app]"
154
+ expect(node).to receive(:run_list).with(["role[base]", "role[app]"])
155
+ client_builder.run
156
+ end
157
+
158
+ it "builds a node when the run_list is an Array" do
159
+ knife_config[:run_list] = ["role[base]", "role[app]"]
160
+ expect(node).to receive(:run_list).with(["role[base]", "role[app]"])
161
+ client_builder.run
162
+ end
163
+
164
+ it "builds a node with first_boot_attributes if they're given" do
165
+ knife_config[:first_boot_attributes] = {:baz => :quux}
166
+ expect(node).to receive(:normal_attrs=).with({:baz=>:quux})
167
+ expect(node).to receive(:run_list).with([])
168
+ client_builder.run
169
+ end
170
+
171
+ it "builds a node with an environment if its given" do
172
+ knife_config[:environment] = "production"
173
+ expect(node).to receive(:environment).with("production")
174
+ expect(node).to receive(:run_list).with([])
175
+ client_builder.run
176
+ end
177
+ end
178
+ end