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
@@ -26,7 +26,7 @@ describe URI do
26
26
  end
27
27
 
28
28
  it "returns the hostname without brackets" do
29
- ipv6_uri.hostname.should == "2a00:1450:4009:809::1008"
29
+ expect(ipv6_uri.hostname).to eq("2a00:1450:4009:809::1008")
30
30
  end
31
31
 
32
32
  end
@@ -23,14 +23,14 @@ describe MonoLogger do
23
23
  it "should disable buffering when passed an IO stream" do
24
24
  STDOUT.sync = false
25
25
  MonoLogger.new(STDOUT)
26
- STDOUT.sync.should == true
26
+ expect(STDOUT.sync).to eq(true)
27
27
  end
28
28
 
29
29
  describe "when given an object that responds to write and close e.g. IO" do
30
30
  it "should use the object directly" do
31
31
  stream = StringIO.new
32
32
  MonoLogger.new(stream).fatal("Houston, we've had a problem.")
33
- stream.string.should =~ /Houston, we've had a problem./
33
+ expect(stream.string).to match(/Houston, we've had a problem./)
34
34
  end
35
35
  end
36
36
 
@@ -39,7 +39,7 @@ describe MonoLogger do
39
39
  temp_file = Tempfile.new("rspec-monologger-log")
40
40
  temp_file.close
41
41
  MonoLogger.new(temp_file.path).fatal("Do, or do not. There is no try.")
42
- File.read(temp_file.path).should =~ /Do, or do not. There is no try./
42
+ expect(File.read(temp_file.path)).to match(/Do, or do not. There is no try./)
43
43
  end
44
44
  end
45
45
  end
@@ -215,22 +215,22 @@ describe Chef::Node::Attribute do
215
215
 
216
216
  describe "initialize" do
217
217
  it "should return a Chef::Node::Attribute" do
218
- @attributes.should be_a_kind_of(Chef::Node::Attribute)
218
+ expect(@attributes).to be_a_kind_of(Chef::Node::Attribute)
219
219
  end
220
220
 
221
221
  it "should take an Automatioc, Normal, Default and Override hash" do
222
- lambda { Chef::Node::Attribute.new({}, {}, {}, {}) }.should_not raise_error
222
+ expect { Chef::Node::Attribute.new({}, {}, {}, {}) }.not_to raise_error
223
223
  end
224
224
 
225
225
  [ :normal, :default, :override, :automatic ].each do |accessor|
226
226
  it "should set #{accessor}" do
227
227
  na = Chef::Node::Attribute.new({ :normal => true }, { :default => true }, { :override => true }, { :automatic => true })
228
- na.send(accessor).should == { accessor.to_s => true }
228
+ expect(na.send(accessor)).to eq({ accessor.to_s => true })
229
229
  end
230
230
  end
231
231
 
232
232
  it "should be enumerable" do
233
- @attributes.should be_is_a(Enumerable)
233
+ expect(@attributes).to be_is_a(Enumerable)
234
234
  end
235
235
  end
236
236
 
@@ -242,7 +242,7 @@ describe Chef::Node::Attribute do
242
242
  # the "strict" conversion method that should only be implemented by
243
243
  # things that are truly Array-like, so NoMethodError is the right choice.
244
244
  # (cf. there is no Hash#to_ary).
245
- lambda { @attributes.default.to_ary }.should raise_error(NoMethodError)
245
+ expect { @attributes.default.to_ary }.to raise_error(NoMethodError)
246
246
  end
247
247
 
248
248
  end
@@ -274,7 +274,7 @@ describe Chef::Node::Attribute do
274
274
  ["force_override", "force_override"],
275
275
  ["automatic", "automatic"]
276
276
  ]
277
- @attributes.debug_value(:foo, :bar).should == expected
277
+ expect(@attributes.debug_value(:foo, :bar)).to eq(expected)
278
278
  end
279
279
  end
280
280
 
@@ -288,68 +288,68 @@ describe Chef::Node::Attribute do
288
288
  @attributes.force_default["default"] = "force default"
289
289
  @attributes.role_default["default"] = "role default"
290
290
  @attributes.env_default["default"] = "environment default"
291
- @attributes["default"].should == "force default"
291
+ expect(@attributes["default"]).to eq("force default")
292
292
  end
293
293
 
294
294
  it "prefers role_default over environment or cookbook default" do
295
295
  @attributes.role_default["default"] = "role default"
296
296
  @attributes.env_default["default"] = "environment default"
297
- @attributes["default"].should == "role default"
297
+ expect(@attributes["default"]).to eq("role default")
298
298
  end
299
299
 
300
300
  it "prefers environment default over cookbook default" do
301
301
  @attributes.env_default["default"] = "environment default"
302
- @attributes["default"].should == "environment default"
302
+ expect(@attributes["default"]).to eq("environment default")
303
303
  end
304
304
 
305
305
  it "returns the cookbook default when no other default values are present" do
306
- @attributes["default"].should == "cookbook default"
306
+ expect(@attributes["default"]).to eq("cookbook default")
307
307
  end
308
308
 
309
309
  it "prefers 'forced overrides' over role or cookbook overrides" do
310
310
  @attributes.force_override["override"] = "force override"
311
311
  @attributes.env_override["override"] = "environment override"
312
312
  @attributes.role_override["override"] = "role override"
313
- @attributes["override"].should == "force override"
313
+ expect(@attributes["override"]).to eq("force override")
314
314
  end
315
315
 
316
316
  it "prefers environment overrides over role or cookbook overrides" do
317
317
  @attributes.env_override["override"] = "environment override"
318
318
  @attributes.role_override["override"] = "role override"
319
- @attributes["override"].should == "environment override"
319
+ expect(@attributes["override"]).to eq("environment override")
320
320
  end
321
321
 
322
322
  it "prefers role overrides over cookbook overrides" do
323
323
  @attributes.role_override["override"] = "role override"
324
- @attributes["override"].should == "role override"
324
+ expect(@attributes["override"]).to eq("role override")
325
325
  end
326
326
 
327
327
  it "returns cookbook overrides when no other overrides are present" do
328
- @attributes["override"].should == "cookbook override"
328
+ expect(@attributes["override"]).to eq("cookbook override")
329
329
  end
330
330
 
331
331
  it "merges arrays within the default precedence" do
332
332
  @attributes.role_default["array"] = %w{role}
333
333
  @attributes.env_default["array"] = %w{env}
334
- @attributes["array"].should == %w{env role}
334
+ expect(@attributes["array"]).to eq(%w{env role})
335
335
  end
336
336
 
337
337
  it "merges arrays within the override precedence" do
338
338
  @attributes.role_override["array"] = %w{role}
339
339
  @attributes.env_override["array"] = %w{env}
340
- @attributes["array"].should == %w{role env}
340
+ expect(@attributes["array"]).to eq(%w{role env})
341
341
  end
342
342
 
343
343
  it "does not merge arrays between default and normal" do
344
344
  @attributes.role_default["array"] = %w{role}
345
345
  @attributes.normal["array"] = %w{normal}
346
- @attributes["array"].should == %w{normal}
346
+ expect(@attributes["array"]).to eq(%w{normal})
347
347
  end
348
348
 
349
349
  it "does not merge arrays between normal and override" do
350
350
  @attributes.normal["array"] = %w{normal}
351
351
  @attributes.role_override["array"] = %w{role}
352
- @attributes["array"].should == %w{role}
352
+ expect(@attributes["array"]).to eq(%w{role})
353
353
  end
354
354
 
355
355
  it "merges nested hashes between precedence levels" do
@@ -358,9 +358,9 @@ describe Chef::Node::Attribute do
358
358
  @attributes.normal = {"a" => {"b" => {"normal" => "normal"}}}
359
359
  @attributes.override = {"a" => {"override" => "role"}}
360
360
  @attributes.automatic = {"a" => {"automatic" => "auto"}}
361
- @attributes["a"].should == {"b"=>{"default"=>"default", "normal"=>"normal"},
361
+ expect(@attributes["a"]).to eq({"b"=>{"default"=>"default", "normal"=>"normal"},
362
362
  "override"=>"role",
363
- "automatic"=>"auto"}
363
+ "automatic"=>"auto"})
364
364
  end
365
365
  end
366
366
 
@@ -377,94 +377,94 @@ describe Chef::Node::Attribute do
377
377
  end
378
378
 
379
379
  it "merges all types of overrides into a combined override" do
380
- @attributes.combined_override["co"].should == "cookbook override"
381
- @attributes.combined_override["ro"].should == "role override"
382
- @attributes.combined_override["eo"].should == "env override"
383
- @attributes.combined_override["fo"].should == "force override"
380
+ expect(@attributes.combined_override["co"]).to eq("cookbook override")
381
+ expect(@attributes.combined_override["ro"]).to eq("role override")
382
+ expect(@attributes.combined_override["eo"]).to eq("env override")
383
+ expect(@attributes.combined_override["fo"]).to eq("force override")
384
384
  end
385
385
 
386
386
  it "merges all types of defaults into a combined default" do
387
- @attributes.combined_default["cd"].should == "cookbook default"
388
- @attributes.combined_default["rd"].should == "role default"
389
- @attributes.combined_default["ed"].should == "env default"
390
- @attributes.combined_default["fd"].should == "force default"
387
+ expect(@attributes.combined_default["cd"]).to eq("cookbook default")
388
+ expect(@attributes.combined_default["rd"]).to eq("role default")
389
+ expect(@attributes.combined_default["ed"]).to eq("env default")
390
+ expect(@attributes.combined_default["fd"]).to eq("force default")
391
391
  end
392
392
 
393
393
  end
394
394
 
395
395
  describe "[]" do
396
396
  it "should return override data if it exists" do
397
- @attributes["macaddress"].should == "00:00:00:00:00:00"
397
+ expect(@attributes["macaddress"]).to eq("00:00:00:00:00:00")
398
398
  end
399
399
 
400
400
  it "should return attribute data if it is not overridden" do
401
- @attributes["platform"].should == "mac_os_x"
401
+ expect(@attributes["platform"]).to eq("mac_os_x")
402
402
  end
403
403
 
404
404
  it "should return data that doesn't have corresponding keys in every hash" do
405
- @attributes["command"]["ps"].should == "ps -ef"
405
+ expect(@attributes["command"]["ps"]).to eq("ps -ef")
406
406
  end
407
407
 
408
408
  it "should return default data if it is not overriden or in attribute data" do
409
- @attributes["music"]["mastodon"].should == "rocks"
409
+ expect(@attributes["music"]["mastodon"]).to eq("rocks")
410
410
  end
411
411
 
412
412
  it "should prefer the override data over an available default" do
413
- @attributes["music"]["mars_volta"].should == "cicatriz"
413
+ expect(@attributes["music"]["mars_volta"]).to eq("cicatriz")
414
414
  end
415
415
 
416
416
  it "should prefer the attribute data over an available default" do
417
- @attributes["music"]["jimmy_eat_world"].should == "nice"
417
+ expect(@attributes["music"]["jimmy_eat_world"]).to eq("nice")
418
418
  end
419
419
 
420
420
  it "should prefer override data over default data if there is no attribute data" do
421
- @attributes["hot"]["day"].should == "sunday"
421
+ expect(@attributes["hot"]["day"]).to eq("sunday")
422
422
  end
423
423
 
424
424
  it "should return the merged hash if all three have values" do
425
425
  result = @attributes["music"]
426
- result["mars_volta"].should == "cicatriz"
427
- result["jimmy_eat_world"].should == "nice"
428
- result["mastodon"].should == "rocks"
426
+ expect(result["mars_volta"]).to eq("cicatriz")
427
+ expect(result["jimmy_eat_world"]).to eq("nice")
428
+ expect(result["mastodon"]).to eq("rocks")
429
429
  end
430
430
  end
431
431
 
432
432
  describe "[]=" do
433
433
  it "should error out when the type of attribute to set has not been specified" do
434
434
  @attributes.normal["the_ghost"] = { }
435
- lambda { @attributes["the_ghost"]["exterminate"] = false }.should raise_error(Chef::Exceptions::ImmutableAttributeModification)
435
+ expect { @attributes["the_ghost"]["exterminate"] = false }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
436
436
  end
437
437
 
438
438
  it "should let you set an attribute value when another hash has an intermediate value" do
439
439
  @attributes.normal["the_ghost"] = { "exterminate" => "the future" }
440
- lambda { @attributes.normal["the_ghost"]["eviscerate"]["tomorrow"] = false }.should_not raise_error
440
+ expect { @attributes.normal["the_ghost"]["eviscerate"]["tomorrow"] = false }.not_to raise_error
441
441
  end
442
442
 
443
443
  it "should set the attribute value" do
444
444
  @attributes.normal["longboard"] = "surfing"
445
- @attributes.normal["longboard"].should == "surfing"
446
- @attributes.normal["longboard"].should == "surfing"
445
+ expect(@attributes.normal["longboard"]).to eq("surfing")
446
+ expect(@attributes.normal["longboard"]).to eq("surfing")
447
447
  end
448
448
 
449
449
  it "should set deeply nested attribute values when a precedence level is specified" do
450
450
  @attributes.normal["deftones"]["hunters"]["nap"] = "surfing"
451
- @attributes.normal["deftones"]["hunters"]["nap"].should == "surfing"
451
+ expect(@attributes.normal["deftones"]["hunters"]["nap"]).to eq("surfing")
452
452
  end
453
453
 
454
454
  it "should die if you try and do nested attributes that do not exist without read vivification" do
455
- lambda { @attributes["foo"]["bar"] = :baz }.should raise_error
455
+ expect { @attributes["foo"]["bar"] = :baz }.to raise_error
456
456
  end
457
457
 
458
458
  it "should let you set attributes manually without vivification" do
459
459
  @attributes.normal["foo"] = Mash.new
460
460
  @attributes.normal["foo"]["bar"] = :baz
461
- @attributes.normal["foo"]["bar"].should == :baz
461
+ expect(@attributes.normal["foo"]["bar"]).to eq(:baz)
462
462
  end
463
463
 
464
464
  it "should optionally skip setting the value if one already exists" do
465
465
  @attributes.set_unless_value_present = true
466
466
  @attributes.normal["hostname"] = "bar"
467
- @attributes["hostname"].should == "latte"
467
+ expect(@attributes["hostname"]).to eq("latte")
468
468
  end
469
469
 
470
470
  it "does not support ||= when setting" do
@@ -472,19 +472,47 @@ describe Chef::Node::Attribute do
472
472
  # Users who need this behavior can use set_unless and friends
473
473
  @attributes.normal["foo"] = Mash.new
474
474
  @attributes.normal["foo"]["bar"] ||= "stop the world"
475
- @attributes.normal["foo"]["bar"].should == {}
475
+ expect(@attributes.normal["foo"]["bar"]).to eq({})
476
476
  end
477
477
  end
478
478
 
479
479
  describe "to_hash" do
480
480
  it "should convert to a hash" do
481
- @attributes.to_hash.class.should == Hash
481
+ expect(@attributes.to_hash.class).to eq(Hash)
482
482
  end
483
483
 
484
484
  it "should convert to a hash based on current state" do
485
485
  hash = @attributes["hot"].to_hash
486
- hash.class.should == Hash
487
- hash["day"].should == "sunday"
486
+ expect(hash.class).to eq(Hash)
487
+ expect(hash["day"]).to eq("sunday")
488
+ end
489
+
490
+ it "should create a deep copy of the node attribute" do
491
+ @attributes.default['foo']['bar']['baz'] = 'fizz'
492
+ hash = @attributes['foo'].to_hash
493
+ expect(hash).to eql({"bar"=>{"baz"=>"fizz"}})
494
+ hash['bar']['baz'] = 'buzz'
495
+ expect(hash).to eql({"bar"=>{"baz"=>"buzz"}})
496
+ expect(@attributes.default['foo']).to eql({"bar"=>{"baz"=>"fizz"}})
497
+ end
498
+
499
+ it "should create a deep copy of arrays in the node attribute" do
500
+ @attributes.default['foo']['bar'] = ['fizz']
501
+ hash = @attributes['foo'].to_hash
502
+ expect(hash).to eql({"bar"=>[ 'fizz' ]})
503
+ hash['bar'].push('buzz')
504
+ expect(hash).to eql({"bar"=>[ 'fizz', 'buzz' ]})
505
+ expect(@attributes.default['foo']).to eql({"bar"=>[ 'fizz' ]})
506
+ end
507
+
508
+ it "mutating strings should not mutate the attributes" do
509
+ pending "this is a bug that should be fixed"
510
+ @attributes.default['foo']['bar']['baz'] = 'fizz'
511
+ hash = @attributes['foo'].to_hash
512
+ expect(hash).to eql({"bar"=>{"baz"=>"fizz"}})
513
+ hash['bar']['baz'] << 'buzz'
514
+ expect(hash).to eql({"bar"=>{"baz"=>"fizzbuzz"}})
515
+ expect(@attributes.default['foo']).to eql({"bar"=>{"baz"=>"fizz"}})
488
516
  end
489
517
  end
490
518
 
@@ -497,59 +525,59 @@ describe Chef::Node::Attribute do
497
525
 
498
526
  describe "has_key?" do
499
527
  it "should return true if an attribute exists" do
500
- @attributes.has_key?("music").should == true
528
+ expect(@attributes.has_key?("music")).to eq(true)
501
529
  end
502
530
 
503
531
  it "should return false if an attribute does not exist" do
504
- @attributes.has_key?("ninja").should == false
532
+ expect(@attributes.has_key?("ninja")).to eq(false)
505
533
  end
506
534
 
507
535
  it "should return false if an attribute does not exist using dot notation" do
508
- @attributes.has_key?("does_not_exist_at_all").should == false
536
+ expect(@attributes.has_key?("does_not_exist_at_all")).to eq(false)
509
537
  end
510
538
 
511
539
  it "should return true if an attribute exists but is set to nil using dot notation" do
512
- @attributes.music.deeper.has_key?("gates_of_ishtar").should == true
540
+ expect(@attributes.music.deeper.has_key?("gates_of_ishtar")).to eq(true)
513
541
  end
514
542
 
515
543
  it "should return true if an attribute exists but is set to false" do
516
544
  @attributes.has_key?("music")
517
- @attributes["music"].has_key?("apophis").should == true
545
+ expect(@attributes["music"].has_key?("apophis")).to eq(true)
518
546
  end
519
547
 
520
548
  it "does not find keys above the current nesting level" do
521
- @attributes["music"]["this"]["apparatus"].should_not have_key("this")
549
+ expect(@attributes["music"]["this"]["apparatus"]).not_to have_key("this")
522
550
  end
523
551
 
524
552
  it "does not find keys below the current nesting level" do
525
- @attributes["music"]["this"].should_not have_key("must")
553
+ expect(@attributes["music"]["this"]).not_to have_key("must")
526
554
  end
527
555
 
528
556
  [:include?, :key?, :member?].each do |method|
529
557
  it "should alias the method #{method} to itself" do
530
- @attributes.should respond_to(method)
558
+ expect(@attributes).to respond_to(method)
531
559
  end
532
560
 
533
561
  it "#{method} should behave like has_key?" do
534
- @attributes.send(method, "music").should == true
562
+ expect(@attributes.send(method, "music")).to eq(true)
535
563
  end
536
564
  end
537
565
  end
538
566
 
539
567
  describe "attribute?" do
540
568
  it "should return true if an attribute exists" do
541
- @attributes.attribute?("music").should == true
569
+ expect(@attributes.attribute?("music")).to eq(true)
542
570
  end
543
571
 
544
572
  it "should return false if an attribute does not exist" do
545
- @attributes.attribute?("ninja").should == false
573
+ expect(@attributes.attribute?("ninja")).to eq(false)
546
574
  end
547
575
 
548
576
  end
549
577
 
550
578
  describe "method_missing" do
551
579
  it "should behave like a [] lookup" do
552
- @attributes.music.mastodon.should == "rocks"
580
+ expect(@attributes.music.mastodon).to eq("rocks")
553
581
  end
554
582
 
555
583
  it "should allow the last method to set a value if it has an = sign on the end" do
@@ -583,12 +611,12 @@ describe Chef::Node::Attribute do
583
611
  @attributes.keys.each do |k|
584
612
  collect << k
585
613
  end
586
- collect.include?("one").should == true
587
- collect.include?("hut").should == true
588
- collect.include?("snakes").should == true
589
- collect.include?("snack").should == true
590
- collect.include?("place").should == true
591
- collect.length.should == 5
614
+ expect(collect.include?("one")).to eq(true)
615
+ expect(collect.include?("hut")).to eq(true)
616
+ expect(collect.include?("snakes")).to eq(true)
617
+ expect(collect.include?("snack")).to eq(true)
618
+ expect(collect.include?("place")).to eq(true)
619
+ expect(collect.length).to eq(5)
592
620
  end
593
621
 
594
622
  it "should yield lower if we go deeper" do
@@ -596,14 +624,14 @@ describe Chef::Node::Attribute do
596
624
  @attributes.one.keys.each do |k|
597
625
  collect << k
598
626
  end
599
- collect.include?("two").should == true
600
- collect.include?("four").should == true
601
- collect.include?("six").should == true
602
- collect.length.should == 3
627
+ expect(collect.include?("two")).to eq(true)
628
+ expect(collect.include?("four")).to eq(true)
629
+ expect(collect.include?("six")).to eq(true)
630
+ expect(collect.length).to eq(3)
603
631
  end
604
632
 
605
633
  it "should not raise an exception if one of the hashes has a nil value on a deep lookup" do
606
- lambda { @attributes.place.keys { |k| } }.should_not raise_error
634
+ expect { @attributes.place.keys { |k| } }.not_to raise_error
607
635
  end
608
636
  end
609
637
 
@@ -632,15 +660,15 @@ describe Chef::Node::Attribute do
632
660
  collect[k] = v
633
661
  end
634
662
 
635
- collect["one"].should == "six"
636
- collect["hut"].should == "three"
637
- collect["snakes"].should == "on a plane"
638
- collect["snack"].should == "cookies"
663
+ expect(collect["one"]).to eq("six")
664
+ expect(collect["hut"]).to eq("three")
665
+ expect(collect["snakes"]).to eq("on a plane")
666
+ expect(collect["snack"]).to eq("cookies")
639
667
  end
640
668
 
641
669
  it "should yield as a two-element array" do
642
670
  @attributes.each do |a|
643
- a.should be_an_instance_of(Array)
671
+ expect(a).to be_an_instance_of(Array)
644
672
  end
645
673
  end
646
674
  end
@@ -665,7 +693,7 @@ describe Chef::Node::Attribute do
665
693
  end
666
694
 
667
695
  it "should respond to each_key" do
668
- @attributes.should respond_to(:each_key)
696
+ expect(@attributes).to respond_to(:each_key)
669
697
  end
670
698
 
671
699
  it "should yield each top level key, post merge rules" do
@@ -674,10 +702,10 @@ describe Chef::Node::Attribute do
674
702
  collect << k
675
703
  end
676
704
 
677
- collect.should include("one")
678
- collect.should include("snack")
679
- collect.should include("hut")
680
- collect.should include("snakes")
705
+ expect(collect).to include("one")
706
+ expect(collect).to include("snack")
707
+ expect(collect).to include("hut")
708
+ expect(collect).to include("snakes")
681
709
  end
682
710
  end
683
711
 
@@ -701,7 +729,7 @@ describe Chef::Node::Attribute do
701
729
  end
702
730
 
703
731
  it "should respond to each_pair" do
704
- @attributes.should respond_to(:each_pair)
732
+ expect(@attributes).to respond_to(:each_pair)
705
733
  end
706
734
 
707
735
  it "should yield each top level key and value pair, post merge rules" do
@@ -710,10 +738,10 @@ describe Chef::Node::Attribute do
710
738
  collect[k] = v
711
739
  end
712
740
 
713
- collect["one"].should == "six"
714
- collect["hut"].should == "three"
715
- collect["snakes"].should == "on a plane"
716
- collect["snack"].should == "cookies"
741
+ expect(collect["one"]).to eq("six")
742
+ expect(collect["hut"]).to eq("three")
743
+ expect(collect["snakes"]).to eq("on a plane")
744
+ expect(collect["snack"]).to eq("cookies")
717
745
  end
718
746
  end
719
747
 
@@ -737,7 +765,7 @@ describe Chef::Node::Attribute do
737
765
  end
738
766
 
739
767
  it "should respond to each_value" do
740
- @attributes.should respond_to(:each_value)
768
+ expect(@attributes).to respond_to(:each_value)
741
769
  end
742
770
 
743
771
  it "should yield each value, post merge rules" do
@@ -746,9 +774,9 @@ describe Chef::Node::Attribute do
746
774
  collect << v
747
775
  end
748
776
 
749
- collect.should include("cookies")
750
- collect.should include("three")
751
- collect.should include("on a plane")
777
+ expect(collect).to include("cookies")
778
+ expect(collect).to include("three")
779
+ expect(collect).to include("on a plane")
752
780
  end
753
781
 
754
782
  it "should yield four elements" do
@@ -757,7 +785,7 @@ describe Chef::Node::Attribute do
757
785
  collect << v
758
786
  end
759
787
 
760
- collect.length.should == 4
788
+ expect(collect.length).to eq(4)
761
789
  end
762
790
  end
763
791
 
@@ -782,15 +810,15 @@ describe Chef::Node::Attribute do
782
810
  end
783
811
 
784
812
  it "should respond to empty?" do
785
- @attributes.should respond_to(:empty?)
813
+ expect(@attributes).to respond_to(:empty?)
786
814
  end
787
815
 
788
816
  it "should return true when there are no keys" do
789
- @empty.empty?.should == true
817
+ expect(@empty.empty?).to eq(true)
790
818
  end
791
819
 
792
820
  it "should return false when there are keys" do
793
- @attributes.empty?.should == false
821
+ expect(@attributes.empty?).to eq(false)
794
822
  end
795
823
 
796
824
  end
@@ -815,7 +843,7 @@ describe Chef::Node::Attribute do
815
843
  end
816
844
 
817
845
  it "should respond to fetch" do
818
- @attributes.should respond_to(:fetch)
846
+ expect(@attributes).to respond_to(:fetch)
819
847
  end
820
848
 
821
849
  describe "when the key exists" do
@@ -826,7 +854,7 @@ describe Chef::Node::Attribute do
826
854
  "snakes" => "on a plane",
827
855
  "snack" => "cookies"
828
856
  }.each do |k,v|
829
- @attributes.fetch(k).should == v
857
+ expect(@attributes.fetch(k)).to eq(v)
830
858
  end
831
859
  end
832
860
  end
@@ -834,19 +862,19 @@ describe Chef::Node::Attribute do
834
862
  describe "when the key does not exist" do
835
863
  describe "and no args are passed" do
836
864
  it "should raise an indexerror" do
837
- lambda { @attributes.fetch("lololol") }.should raise_error(IndexError)
865
+ expect { @attributes.fetch("lololol") }.to raise_error(IndexError)
838
866
  end
839
867
  end
840
868
 
841
869
  describe "and a default arg is passed" do
842
870
  it "should return the value of the default arg" do
843
- @attributes.fetch("lol", "blah").should == "blah"
871
+ expect(@attributes.fetch("lol", "blah")).to eq("blah")
844
872
  end
845
873
  end
846
874
 
847
875
  describe "and a block is passed" do
848
876
  it "should run the block and return its value" do
849
- @attributes.fetch("lol") { |x| "#{x}, blah" }.should == "lol, blah"
877
+ expect(@attributes.fetch("lol") { |x| "#{x}, blah" }).to eq("lol, blah")
850
878
  end
851
879
  end
852
880
  end
@@ -872,19 +900,19 @@ describe Chef::Node::Attribute do
872
900
  end
873
901
 
874
902
  it "should respond to has_value?" do
875
- @attributes.should respond_to(:has_value?)
903
+ expect(@attributes).to respond_to(:has_value?)
876
904
  end
877
905
 
878
906
  it "should return true if any key has the value supplied" do
879
- @attributes.has_value?("cookies").should == true
907
+ expect(@attributes.has_value?("cookies")).to eq(true)
880
908
  end
881
909
 
882
910
  it "should return false no key has the value supplied" do
883
- @attributes.has_value?("lololol").should == false
911
+ expect(@attributes.has_value?("lololol")).to eq(false)
884
912
  end
885
913
 
886
914
  it "should alias value?" do
887
- @attributes.should respond_to(:value?)
915
+ expect(@attributes).to respond_to(:value?)
888
916
  end
889
917
  end
890
918
 
@@ -917,13 +945,13 @@ describe Chef::Node::Attribute do
917
945
  end
918
946
 
919
947
  it "should respond to index" do
920
- @attributes.should respond_to(:index)
948
+ expect(@attributes).to respond_to(:index)
921
949
  end
922
950
 
923
951
  describe "when the value is indexed" do
924
952
  it "should return the index" do
925
953
  silence do
926
- @attributes.index("six").should == "one"
954
+ expect(@attributes.index("six")).to eq("one")
927
955
  end
928
956
  end
929
957
  end
@@ -931,7 +959,7 @@ describe Chef::Node::Attribute do
931
959
  describe "when the value is not indexed" do
932
960
  it "should return nil" do
933
961
  silence do
934
- @attributes.index("lolol").should == nil
962
+ expect(@attributes.index("lolol")).to eq(nil)
935
963
  end
936
964
  end
937
965
  end
@@ -958,18 +986,18 @@ describe Chef::Node::Attribute do
958
986
  end
959
987
 
960
988
  it "should respond to values" do
961
- @attributes.should respond_to(:values)
989
+ expect(@attributes).to respond_to(:values)
962
990
  end
963
991
 
964
992
  it "should return an array of values" do
965
- @attributes.values.length.should == 4
993
+ expect(@attributes.values.length).to eq(4)
966
994
  end
967
995
 
968
996
  it "should match the values output from each" do
969
- @attributes.values.should include("six")
970
- @attributes.values.should include("cookies")
971
- @attributes.values.should include("three")
972
- @attributes.values.should include("on a plane")
997
+ expect(@attributes.values).to include("six")
998
+ expect(@attributes.values).to include("cookies")
999
+ expect(@attributes.values).to include("three")
1000
+ expect(@attributes.values).to include("on a plane")
973
1001
  end
974
1002
 
975
1003
  end
@@ -994,26 +1022,26 @@ describe Chef::Node::Attribute do
994
1022
  end
995
1023
 
996
1024
  it "should respond to select" do
997
- @attributes.should respond_to(:select)
1025
+ expect(@attributes).to respond_to(:select)
998
1026
  end
999
1027
 
1000
1028
  if RUBY_VERSION >= "1.8.7"
1001
1029
  it "should not raise a LocalJumpError if no block is given" do
1002
- lambda { @attributes.select }.should_not raise_error
1030
+ expect { @attributes.select }.not_to raise_error
1003
1031
  end
1004
1032
  else
1005
1033
  it "should raise a LocalJumpError if no block is given" do
1006
- lambda{ @attributes.select }.should raise_error(LocalJumpError)
1034
+ expect{ @attributes.select }.to raise_error(LocalJumpError)
1007
1035
  end
1008
1036
  end
1009
1037
 
1010
1038
  it "should return an empty hash/array (ruby-version-dependent) for a block containing nil" do
1011
- @attributes.select { nil }.should == {}.select { nil }
1039
+ expect(@attributes.select { nil }).to eq({}.select { nil })
1012
1040
  end
1013
1041
 
1014
1042
  # sorted for spec clarity
1015
1043
  it "should return a new array of k,v pairs for which the block returns true" do
1016
- @attributes.select { true }.sort.should == (
1044
+ expect(@attributes.select { true }.sort).to eq(
1017
1045
  [
1018
1046
  ["hut", "three"],
1019
1047
  ["one", "six"],
@@ -1046,37 +1074,57 @@ describe Chef::Node::Attribute do
1046
1074
  end
1047
1075
 
1048
1076
  it "should respond to size" do
1049
- @attributes.should respond_to(:size)
1077
+ expect(@attributes).to respond_to(:size)
1050
1078
  end
1051
1079
 
1052
1080
  it "should alias length to size" do
1053
- @attributes.should respond_to(:length)
1081
+ expect(@attributes).to respond_to(:length)
1054
1082
  end
1055
1083
 
1056
1084
  it "should return 0 for an empty attribute" do
1057
- @empty.size.should == 0
1085
+ expect(@empty.size).to eq(0)
1058
1086
  end
1059
1087
 
1060
1088
  it "should return the number of pairs" do
1061
- @attributes.size.should == 4
1089
+ expect(@attributes.size).to eq(4)
1062
1090
  end
1063
1091
  end
1064
1092
 
1065
1093
  describe "kind_of?" do
1066
1094
  it "should falsely inform you that it is a Hash" do
1067
- @attributes.should be_a_kind_of(Hash)
1095
+ expect(@attributes).to be_a_kind_of(Hash)
1068
1096
  end
1069
1097
 
1070
1098
  it "should falsely inform you that it is a Mash" do
1071
- @attributes.should be_a_kind_of(Mash)
1099
+ expect(@attributes).to be_a_kind_of(Mash)
1072
1100
  end
1073
1101
 
1074
1102
  it "should inform you that it is a Chef::Node::Attribute" do
1075
- @attributes.should be_a_kind_of(Chef::Node::Attribute)
1103
+ expect(@attributes).to be_a_kind_of(Chef::Node::Attribute)
1076
1104
  end
1077
1105
 
1078
1106
  it "should inform you that it is anything else" do
1079
- @attributes.should_not be_a_kind_of(Chef::Node)
1107
+ expect(@attributes).not_to be_a_kind_of(Chef::Node)
1108
+ end
1109
+ end
1110
+
1111
+ describe "to_s" do
1112
+ it "should output simple attributes" do
1113
+ attributes = Chef::Node::Attribute.new(nil, nil, nil, nil)
1114
+ expect(attributes.to_s).to eq("{}")
1115
+ end
1116
+
1117
+ it "should output merged attributes" do
1118
+ default_hash = {
1119
+ "a" => 1,
1120
+ "b" => 2
1121
+ }
1122
+ override_hash = {
1123
+ "b" => 3,
1124
+ "c" => 4
1125
+ }
1126
+ attributes = Chef::Node::Attribute.new(nil, default_hash, override_hash, nil)
1127
+ expect(attributes.to_s).to eq('{"a"=>1, "b"=>3, "c"=>4}')
1080
1128
  end
1081
1129
  end
1082
1130
 
@@ -1085,18 +1133,19 @@ describe Chef::Node::Attribute do
1085
1133
  # NOTE: previous implementation hid the values, showing @automatic={...}
1086
1134
  # That is nice and compact, but hides a lot of info, which seems counter
1087
1135
  # to the point of calling #inspect...
1088
- @attributes.inspect.should =~ /@automatic=\{.*\}/
1089
- @attributes.inspect.should =~ /@normal=\{.*\}/
1136
+ expect(@attributes.inspect).to match(/@automatic=\{.*\}/)
1137
+ expect(@attributes.inspect).to match(/@normal=\{.*\}/)
1090
1138
  end
1091
1139
  end
1092
1140
 
1141
+
1093
1142
  describe "when not mutated" do
1094
1143
 
1095
1144
  it "does not reset the cache when dup'd [CHEF-3680]" do
1096
1145
  @attributes.default[:foo][:bar] = "set on original"
1097
1146
  subtree = @attributes[:foo]
1098
1147
  @attributes.default[:foo].dup[:bar] = "set on dup"
1099
- subtree[:bar].should == "set on original"
1148
+ expect(subtree[:bar]).to eq("set on original")
1100
1149
  end
1101
1150
 
1102
1151
  end
@@ -1105,25 +1154,25 @@ describe Chef::Node::Attribute do
1105
1154
  it "converts the input in to a VividMash tree (default)" do
1106
1155
  @attributes.default = {}
1107
1156
  @attributes.default.foo = "bar"
1108
- @attributes.merged_attributes[:foo].should == "bar"
1157
+ expect(@attributes.merged_attributes[:foo]).to eq("bar")
1109
1158
  end
1110
1159
 
1111
1160
  it "converts the input in to a VividMash tree (normal)" do
1112
1161
  @attributes.normal = {}
1113
1162
  @attributes.normal.foo = "bar"
1114
- @attributes.merged_attributes[:foo].should == "bar"
1163
+ expect(@attributes.merged_attributes[:foo]).to eq("bar")
1115
1164
  end
1116
1165
 
1117
1166
  it "converts the input in to a VividMash tree (override)" do
1118
1167
  @attributes.override = {}
1119
1168
  @attributes.override.foo = "bar"
1120
- @attributes.merged_attributes[:foo].should == "bar"
1169
+ expect(@attributes.merged_attributes[:foo]).to eq("bar")
1121
1170
  end
1122
1171
 
1123
1172
  it "converts the input in to a VividMash tree (automatic)" do
1124
1173
  @attributes.automatic = {}
1125
1174
  @attributes.automatic.foo = "bar"
1126
- @attributes.merged_attributes[:foo].should == "bar"
1175
+ expect(@attributes.merged_attributes[:foo]).to eq("bar")
1127
1176
  end
1128
1177
  end
1129
1178
 
@@ -1163,11 +1212,11 @@ describe Chef::Node::Attribute do
1163
1212
 
1164
1213
  describe "when attemping to write without specifying precedence" do
1165
1214
  it "raises an error when using []=" do
1166
- lambda { @attributes[:new_key] = "new value" }.should raise_error(Chef::Exceptions::ImmutableAttributeModification)
1215
+ expect { @attributes[:new_key] = "new value" }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
1167
1216
  end
1168
1217
 
1169
1218
  it "raises an error when using `attr=value`" do
1170
- lambda { @attributes.new_key = "new value" }.should raise_error(Chef::Exceptions::ImmutableAttributeModification)
1219
+ expect { @attributes.new_key = "new value" }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
1171
1220
  end
1172
1221
 
1173
1222
  end