chef 12.18.31 → 13.0.118

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 (611) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +15 -11
  3. data/README.md +13 -13
  4. data/Rakefile +1 -19
  5. data/VERSION +1 -1
  6. data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +1 -1
  7. data/acceptance/Gemfile +8 -5
  8. data/acceptance/Gemfile.lock +90 -81
  9. data/acceptance/basics/test/integration/chef-current-install/serverspec/chef_client_spec.rb +1 -1
  10. data/acceptance/data-collector/.acceptance/data-collector-test/metadata.rb +1 -1
  11. data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +4 -0
  12. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/top_cookbooks.rb +9 -8
  13. data/chef-universal-mingw32.gemspec +2 -3
  14. data/chef.gemspec +8 -7
  15. data/lib/chef/api_client.rb +8 -15
  16. data/lib/chef/api_client_v1.rb +9 -11
  17. data/lib/chef/application/apply.rb +8 -10
  18. data/lib/chef/application/client.rb +1 -1
  19. data/lib/chef/application/exit_code.rb +11 -82
  20. data/lib/chef/application/knife.rb +2 -2
  21. data/lib/chef/application/solo.rb +0 -1
  22. data/lib/chef/application/windows_service.rb +36 -37
  23. data/lib/chef/application/windows_service_manager.rb +1 -1
  24. data/lib/chef/application.rb +15 -25
  25. data/lib/chef/audit/audit_event_proxy.rb +2 -2
  26. data/lib/chef/audit/control_group_data.rb +1 -1
  27. data/lib/chef/blacklist.rb +81 -0
  28. data/lib/chef/chef_class.rb +1 -0
  29. data/lib/chef/chef_fs/chef_fs_data_store.rb +6 -8
  30. data/lib/chef/chef_fs/command_line.rb +15 -16
  31. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +1 -1
  32. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +1 -1
  33. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
  34. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  35. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +1 -1
  36. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +1 -1
  37. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +1 -1
  38. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -1
  39. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
  40. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -1
  41. data/lib/chef/chef_fs/file_pattern.rb +2 -2
  42. data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +2 -2
  43. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +6 -2
  44. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +18 -32
  45. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +8 -10
  46. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +5 -1
  47. data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +8 -10
  48. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +10 -12
  49. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +28 -30
  50. data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +1 -1
  51. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +27 -29
  52. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +29 -26
  53. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +5 -1
  54. data/lib/chef/chef_fs/file_system/memory/memory_file.rb +1 -1
  55. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +10 -12
  56. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +13 -16
  57. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +9 -13
  58. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +2 -0
  59. data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +1 -1
  60. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +3 -0
  61. data/lib/chef/chef_fs/file_system.rb +1 -1
  62. data/lib/chef/chef_fs/parallelizer.rb +9 -11
  63. data/lib/chef/client.rb +47 -11
  64. data/lib/chef/config_fetcher.rb +4 -4
  65. data/lib/chef/constants.rb +1 -1
  66. data/lib/chef/cookbook/cookbook_version_loader.rb +26 -115
  67. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  68. data/lib/chef/cookbook/gem_installer.rb +10 -6
  69. data/lib/chef/cookbook/manifest_v0.rb +68 -0
  70. data/lib/chef/cookbook/manifest_v2.rb +41 -0
  71. data/lib/chef/cookbook/metadata.rb +25 -134
  72. data/lib/chef/cookbook/remote_file_vendor.rb +3 -3
  73. data/lib/chef/cookbook/synchronizer.rb +24 -21
  74. data/lib/chef/cookbook/syntax_check.rb +1 -1
  75. data/lib/chef/cookbook_manifest.rb +91 -65
  76. data/lib/chef/cookbook_site_streaming_uploader.rb +7 -9
  77. data/lib/chef/cookbook_uploader.rb +1 -1
  78. data/lib/chef/cookbook_version.rb +69 -157
  79. data/lib/chef/data_bag.rb +1 -7
  80. data/lib/chef/data_bag_item.rb +5 -10
  81. data/lib/chef/data_collector/messages.rb +2 -0
  82. data/lib/chef/data_collector/resource_report.rb +32 -4
  83. data/lib/chef/data_collector.rb +3 -4
  84. data/lib/chef/decorator/unchain.rb +0 -16
  85. data/lib/chef/decorator.rb +1 -1
  86. data/lib/chef/deprecated.rb +53 -19
  87. data/lib/chef/dsl/audit.rb +2 -2
  88. data/lib/chef/dsl/declare_resource.rb +11 -17
  89. data/lib/chef/dsl/platform_introspection.rb +29 -31
  90. data/lib/chef/dsl/reboot_pending.rb +1 -1
  91. data/lib/chef/dsl/recipe.rb +1 -4
  92. data/lib/chef/dsl/resources.rb +4 -13
  93. data/lib/chef/encrypted_data_bag_item.rb +2 -2
  94. data/lib/chef/environment.rb +9 -16
  95. data/lib/chef/event_dispatch/base.rb +16 -0
  96. data/lib/chef/event_loggers/windows_eventlog.rb +1 -1
  97. data/lib/chef/exceptions.rb +6 -10
  98. data/lib/chef/file_access_control/unix.rb +14 -14
  99. data/lib/chef/file_access_control/windows.rb +1 -1
  100. data/lib/chef/formatters/error_description.rb +18 -1
  101. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +4 -5
  102. data/lib/chef/formatters/error_mapper.rb +6 -6
  103. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +4 -2
  104. data/lib/chef/http/api_versions.rb +54 -0
  105. data/lib/chef/http/authenticator.rb +15 -6
  106. data/lib/chef/http/json_output.rb +4 -1
  107. data/lib/chef/http/socketless_chef_zero_client.rb +1 -0
  108. data/lib/chef/http/validate_content_length.rb +2 -2
  109. data/lib/chef/http.rb +39 -0
  110. data/lib/chef/json_compat.rb +7 -103
  111. data/lib/chef/key.rb +5 -10
  112. data/lib/chef/knife/bootstrap/templates/chef-full.erb +6 -6
  113. data/lib/chef/knife/bootstrap.rb +6 -0
  114. data/lib/chef/knife/configure.rb +1 -3
  115. data/lib/chef/knife/configure_client.rb +1 -3
  116. data/lib/chef/knife/cookbook_create.rb +1 -434
  117. data/lib/chef/knife/cookbook_download.rb +3 -4
  118. data/lib/chef/knife/cookbook_show.rb +7 -3
  119. data/lib/chef/knife/cookbook_site_install.rb +2 -2
  120. data/lib/chef/knife/core/bootstrap_context.rb +8 -7
  121. data/lib/chef/knife/core/cookbook_scm_repo.rb +2 -2
  122. data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
  123. data/lib/chef/knife/core/status_presenter.rb +1 -1
  124. data/lib/chef/knife/core/subcommand_loader.rb +2 -32
  125. data/lib/chef/knife/core/ui.rb +20 -27
  126. data/lib/chef/knife/data_bag_create.rb +6 -4
  127. data/lib/chef/knife/data_bag_secret_options.rb +1 -1
  128. data/lib/chef/knife/deps.rb +32 -34
  129. data/lib/chef/knife/edit.rb +1 -1
  130. data/lib/chef/knife/help.rb +1 -1
  131. data/lib/chef/knife/list.rb +1 -1
  132. data/lib/chef/knife/search.rb +9 -20
  133. data/lib/chef/knife/ssh.rb +62 -36
  134. data/lib/chef/knife/ssl_check.rb +1 -1
  135. data/lib/chef/knife/user_delete.rb +1 -1
  136. data/lib/chef/knife/xargs.rb +1 -1
  137. data/lib/chef/knife.rb +6 -7
  138. data/lib/chef/mash.rb +1 -1
  139. data/lib/chef/mixin/create_path.rb +3 -5
  140. data/lib/chef/mixin/from_file.rb +2 -2
  141. data/lib/chef/mixin/get_source_from_package.rb +2 -2
  142. data/lib/chef/mixin/notifying_block.rb +7 -9
  143. data/lib/chef/mixin/params_validate.rb +9 -8
  144. data/lib/chef/mixin/path_sanity.rb +17 -19
  145. data/lib/chef/mixin/securable.rb +1 -1
  146. data/lib/chef/mixin/shell_out.rb +33 -29
  147. data/lib/chef/mixin/unformatter.rb +2 -2
  148. data/lib/chef/mixin/uris.rb +4 -6
  149. data/lib/chef/mixin/versioned_api.rb +84 -0
  150. data/lib/chef/mixin/which.rb +25 -8
  151. data/lib/chef/mixin/windows_architecture_helper.rb +2 -2
  152. data/lib/chef/mixin/xml_escape.rb +3 -5
  153. data/lib/chef/mixins.rb +0 -1
  154. data/lib/chef/monkey_patches/webrick-utils.rb +1 -1
  155. data/lib/chef/node/attribute.rb +9 -32
  156. data/lib/chef/node/attribute_collections.rb +1 -19
  157. data/lib/chef/node/common_api.rb +5 -7
  158. data/lib/chef/node/immutable_collections.rb +42 -38
  159. data/lib/chef/node/mixin/immutablize_array.rb +1 -1
  160. data/lib/chef/node/mixin/immutablize_hash.rb +1 -1
  161. data/lib/chef/node.rb +21 -20
  162. data/lib/chef/node_map.rb +2 -5
  163. data/lib/chef/org.rb +10 -17
  164. data/lib/chef/platform/provider_mapping.rb +2 -169
  165. data/lib/chef/platform/query_helpers.rb +1 -1
  166. data/lib/chef/platform/rebooter.rb +1 -2
  167. data/lib/chef/policy_builder/expand_node_object.rb +3 -29
  168. data/lib/chef/policy_builder/policyfile.rb +8 -6
  169. data/lib/chef/property.rb +66 -80
  170. data/lib/chef/provider/apt_repository.rb +6 -10
  171. data/lib/chef/provider/apt_update.rb +1 -7
  172. data/lib/chef/provider/batch.rb +1 -1
  173. data/lib/chef/provider/breakpoint.rb +2 -2
  174. data/lib/chef/provider/cookbook_file.rb +3 -9
  175. data/lib/chef/provider/cron.rb +42 -60
  176. data/lib/chef/provider/deploy/revision.rb +3 -5
  177. data/lib/chef/provider/deploy.rb +82 -88
  178. data/lib/chef/provider/directory.rb +33 -37
  179. data/lib/chef/provider/dsc_resource.rb +23 -11
  180. data/lib/chef/provider/dsc_script.rb +1 -5
  181. data/lib/chef/provider/env/windows.rb +5 -1
  182. data/lib/chef/provider/env.rb +32 -30
  183. data/lib/chef/provider/erl_call.rb +15 -47
  184. data/lib/chef/provider/execute.rb +7 -8
  185. data/lib/chef/provider/file.rb +49 -61
  186. data/lib/chef/provider/git.rb +56 -60
  187. data/lib/chef/provider/group.rb +1 -7
  188. data/lib/chef/provider/http_request.rb +37 -41
  189. data/lib/chef/provider/ifconfig/redhat.rb +1 -1
  190. data/lib/chef/provider/ifconfig.rb +0 -6
  191. data/lib/chef/provider/launchd.rb +6 -2
  192. data/lib/chef/provider/link.rb +51 -55
  193. data/lib/chef/provider/log.rb +3 -7
  194. data/lib/chef/provider/lwrp_base.rb +0 -9
  195. data/lib/chef/provider/mdadm.rb +25 -33
  196. data/lib/chef/provider/mount/aix.rb +2 -2
  197. data/lib/chef/provider/mount/mount.rb +2 -2
  198. data/lib/chef/provider/mount.rb +1 -5
  199. data/lib/chef/provider/noop.rb +1 -1
  200. data/lib/chef/provider/ohai.rb +1 -7
  201. data/lib/chef/provider/osx_profile.rb +24 -29
  202. data/lib/chef/provider/package/aix.rb +55 -53
  203. data/lib/chef/provider/package/apt.rb +15 -13
  204. data/lib/chef/provider/package/cab.rb +48 -20
  205. data/lib/chef/provider/package/chocolatey.rb +9 -10
  206. data/lib/chef/provider/package/dnf/dnf_helper.py +1 -1
  207. data/lib/chef/provider/package/dnf/python_helper.rb +63 -26
  208. data/lib/chef/provider/package/dnf/version.rb +1 -1
  209. data/lib/chef/provider/package/dnf.rb +21 -19
  210. data/lib/chef/provider/package/dpkg.rb +8 -9
  211. data/lib/chef/provider/package/freebsd/base.rb +10 -10
  212. data/lib/chef/provider/package/freebsd/pkg.rb +15 -15
  213. data/lib/chef/provider/package/freebsd/pkgng.rb +13 -15
  214. data/lib/chef/provider/package/freebsd/port.rb +7 -7
  215. data/lib/chef/provider/package/homebrew.rb +11 -10
  216. data/lib/chef/provider/package/ips.rb +18 -24
  217. data/lib/chef/provider/package/macports.rb +23 -23
  218. data/lib/chef/provider/package/msu.rb +11 -12
  219. data/lib/chef/provider/package/openbsd.rb +25 -22
  220. data/lib/chef/provider/package/pacman.rb +16 -17
  221. data/lib/chef/provider/package/paludis.rb +26 -27
  222. data/lib/chef/provider/package/portage.rb +22 -23
  223. data/lib/chef/provider/package/powershell.rb +17 -17
  224. data/lib/chef/provider/package/rpm.rb +25 -26
  225. data/lib/chef/provider/package/rubygems.rb +64 -62
  226. data/lib/chef/provider/package/smartos.rb +16 -16
  227. data/lib/chef/provider/package/solaris.rb +44 -45
  228. data/lib/chef/provider/package/windows/exe.rb +6 -6
  229. data/lib/chef/provider/package/windows/msi.rb +7 -7
  230. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +9 -3
  231. data/lib/chef/provider/package/windows.rb +3 -3
  232. data/lib/chef/provider/package/yum/rpm_utils.rb +34 -34
  233. data/lib/chef/provider/package/yum/yum_cache.rb +12 -12
  234. data/lib/chef/provider/package/yum.rb +319 -269
  235. data/lib/chef/provider/package/zypper.rb +10 -20
  236. data/lib/chef/provider/package.rb +71 -63
  237. data/lib/chef/provider/powershell_script.rb +15 -7
  238. data/lib/chef/provider/reboot.rb +10 -14
  239. data/lib/chef/provider/registry_key.rb +39 -43
  240. data/lib/chef/provider/remote_directory.rb +3 -15
  241. data/lib/chef/provider/remote_file.rb +3 -9
  242. data/lib/chef/provider/route.rb +1 -7
  243. data/lib/chef/provider/ruby_block.rb +4 -8
  244. data/lib/chef/provider/script.rb +42 -6
  245. data/lib/chef/provider/service/aix.rb +1 -5
  246. data/lib/chef/provider/service/debian.rb +15 -21
  247. data/lib/chef/provider/service/freebsd.rb +0 -1
  248. data/lib/chef/provider/service/gentoo.rb +0 -1
  249. data/lib/chef/provider/service/init.rb +0 -1
  250. data/lib/chef/provider/service/insserv.rb +2 -2
  251. data/lib/chef/provider/service/openbsd.rb +0 -1
  252. data/lib/chef/provider/service/redhat.rb +2 -2
  253. data/lib/chef/provider/service/simple.rb +0 -5
  254. data/lib/chef/provider/service/solaris.rb +5 -4
  255. data/lib/chef/provider/service/systemd.rb +1 -1
  256. data/lib/chef/provider/service/upstart.rb +10 -12
  257. data/lib/chef/provider/service/windows.rb +1 -5
  258. data/lib/chef/provider/service.rb +51 -58
  259. data/lib/chef/provider/subversion.rb +40 -46
  260. data/lib/chef/provider/systemd_unit.rb +2 -0
  261. data/lib/chef/provider/template/content.rb +24 -1
  262. data/lib/chef/provider/template.rb +3 -9
  263. data/lib/chef/provider/user/dscl.rb +3 -3
  264. data/lib/chef/provider/user/linux.rb +6 -5
  265. data/lib/chef/provider/user/pw.rb +4 -10
  266. data/lib/chef/provider/user/solaris.rb +2 -2
  267. data/lib/chef/provider/user/useradd.rb +5 -5
  268. data/lib/chef/provider/user.rb +43 -59
  269. data/lib/chef/provider/whyrun_safe_ruby_block.rb +4 -4
  270. data/lib/chef/provider/windows_task.rb +418 -0
  271. data/lib/chef/provider/yum_repository.rb +3 -6
  272. data/lib/chef/provider.rb +63 -115
  273. data/lib/chef/provider_resolver.rb +8 -34
  274. data/lib/chef/providers.rb +1 -1
  275. data/lib/chef/recipe.rb +9 -1
  276. data/lib/chef/resource/action_class.rb +13 -17
  277. data/lib/chef/resource/apt_repository.rb +0 -1
  278. data/lib/chef/resource/apt_update.rb +3 -1
  279. data/lib/chef/resource/chef_gem.rb +4 -11
  280. data/lib/chef/resource/chocolatey_package.rb +4 -1
  281. data/lib/chef/resource/dnf_package.rb +6 -3
  282. data/lib/chef/resource/dsc_resource.rb +9 -1
  283. data/lib/chef/resource/execute.rb +66 -19
  284. data/lib/chef/resource/file/verification/systemd_unit.rb +67 -0
  285. data/lib/chef/resource/file/verification.rb +2 -7
  286. data/lib/chef/resource/freebsd_package.rb +1 -1
  287. data/lib/chef/resource/gem_package.rb +16 -2
  288. data/lib/chef/resource/launchd.rb +3 -3
  289. data/lib/chef/resource/lwrp_base.rb +0 -2
  290. data/lib/chef/resource/mount.rb +5 -12
  291. data/lib/chef/resource/package.rb +2 -2
  292. data/lib/chef/resource/powershell_script.rb +1 -1
  293. data/lib/chef/resource/registry_key.rb +1 -1
  294. data/lib/chef/resource/script.rb +8 -34
  295. data/lib/chef/resource/service.rb +15 -13
  296. data/lib/chef/resource/systemd_unit.rb +5 -0
  297. data/lib/chef/resource/user/aix_user.rb +1 -1
  298. data/lib/chef/resource/user/dscl_user.rb +1 -1
  299. data/lib/chef/resource/user/linux_user.rb +1 -10
  300. data/lib/chef/resource/user/pw_user.rb +1 -1
  301. data/lib/chef/resource/user/solaris_user.rb +1 -1
  302. data/lib/chef/resource/user/windows_user.rb +1 -1
  303. data/lib/chef/resource/user.rb +1 -19
  304. data/lib/chef/resource/windows_package.rb +4 -1
  305. data/lib/chef/resource/windows_task.rb +237 -0
  306. data/lib/chef/resource/yum_package.rb +13 -4
  307. data/lib/chef/resource/yum_repository.rb +0 -1
  308. data/lib/chef/resource/zypper_package.rb +2 -0
  309. data/lib/chef/resource.rb +90 -202
  310. data/lib/chef/resource_builder.rb +1 -65
  311. data/lib/chef/resource_collection/resource_collection_serialization.rb +11 -4
  312. data/lib/chef/resource_collection/resource_list.rb +6 -0
  313. data/lib/chef/resource_collection/resource_set.rb +44 -17
  314. data/lib/chef/resource_collection.rb +10 -0
  315. data/lib/chef/resource_reporter.rb +1 -1
  316. data/lib/chef/resource_resolver.rb +1 -25
  317. data/lib/chef/resources.rb +1 -1
  318. data/lib/chef/role.rb +0 -6
  319. data/lib/chef/run_context/cookbook_compiler.rb +49 -5
  320. data/lib/chef/run_context.rb +4 -25
  321. data/lib/chef/run_list/run_list_item.rb +1 -1
  322. data/lib/chef/run_list/versioned_recipe_list.rb +14 -12
  323. data/lib/chef/search/query.rb +26 -31
  324. data/lib/chef/server_api.rb +2 -0
  325. data/lib/chef/{resource/easy_install_package.rb → server_api_versions.rb} +18 -10
  326. data/lib/chef/shell/ext.rb +3 -3
  327. data/lib/chef/shell/shell_session.rb +14 -4
  328. data/lib/chef/shell.rb +32 -7
  329. data/lib/chef/user.rb +9 -16
  330. data/lib/chef/user_v1.rb +9 -16
  331. data/lib/chef/util/diff.rb +1 -1
  332. data/lib/chef/util/dsc/lcm_output_parser.rb +1 -1
  333. data/lib/chef/util/selinux.rb +1 -1
  334. data/lib/chef/util/windows/net_group.rb +18 -30
  335. data/lib/chef/util/windows/net_use.rb +7 -11
  336. data/lib/chef/util/windows/net_user.rb +12 -18
  337. data/lib/chef/util/windows/volume.rb +9 -15
  338. data/lib/chef/version.rb +1 -1
  339. data/lib/chef/version_class.rb +1 -1
  340. data/lib/chef/win32/api/file.rb +25 -31
  341. data/lib/chef/win32/api/installer.rb +2 -2
  342. data/lib/chef/win32/api.rb +4 -6
  343. data/lib/chef/win32/file.rb +4 -6
  344. data/lib/chef/win32/registry.rb +9 -9
  345. data/lib/chef/win32/security/acl.rb +2 -2
  346. data/lib/chef/win32/security/sid.rb +5 -0
  347. data/lib/chef/win32/security.rb +2 -2
  348. data/lib/chef/win32/unicode.rb +2 -2
  349. data/lib/chef/win32/version.rb +1 -1
  350. data/lib/chef.rb +1 -2
  351. data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +1 -0
  352. data/spec/data/lwrp/providers/buck_passer.rb +1 -1
  353. data/spec/data/lwrp/providers/buck_passer_2.rb +1 -1
  354. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +1 -1
  355. data/spec/data/lwrp/providers/inline_compiler.rb +0 -2
  356. data/spec/data/lwrp/resources/buck_passer.rb +5 -0
  357. data/spec/data/lwrp/resources/buck_passer_2.rb +3 -0
  358. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +3 -0
  359. data/spec/data/lwrp/resources/inline_compiler.rb +3 -0
  360. data/spec/data/lwrp/resources/monkey_name_printer.rb +5 -0
  361. data/spec/data/lwrp/resources/paint_drying_watcher.rb +3 -0
  362. data/spec/data/lwrp/resources/thumb_twiddler.rb +3 -0
  363. data/spec/data/prefer_metadata_json/metadata.json +51 -0
  364. data/spec/data/prefer_metadata_json/metadata.rb +6 -0
  365. data/spec/data/prefer_metadata_json/recipes/default.rb +0 -0
  366. data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +1 -0
  367. data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +1 -0
  368. data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +2 -0
  369. data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +3 -0
  370. data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +1 -0
  371. data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +2 -0
  372. data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +3 -0
  373. data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +3 -0
  374. data/spec/data/root_alias_cookbooks/simple/attributes.rb +1 -0
  375. data/spec/data/root_alias_cookbooks/simple/metadata.rb +2 -0
  376. data/spec/data/root_alias_cookbooks/simple/recipe.rb +3 -0
  377. data/spec/data/shef-config.rb +11 -10
  378. data/spec/functional/knife/ssh_spec.rb +34 -6
  379. data/spec/functional/rebooter_spec.rb +1 -0
  380. data/spec/functional/resource/bash_spec.rb +11 -45
  381. data/spec/functional/resource/batch_spec.rb +5 -1
  382. data/spec/functional/resource/cron_spec.rb +2 -2
  383. data/spec/functional/resource/dsc_script_spec.rb +2 -4
  384. data/spec/functional/resource/execute_spec.rb +17 -0
  385. data/spec/functional/resource/link_spec.rb +3 -3
  386. data/spec/functional/resource/template_spec.rb +33 -0
  387. data/spec/functional/resource/user/dscl_spec.rb +2 -4
  388. data/spec/functional/root_alias_spec.rb +78 -0
  389. data/spec/functional/shell_spec.rb +38 -40
  390. data/spec/integration/client/client_spec.rb +109 -16
  391. data/spec/integration/client/exit_code_spec.rb +1 -105
  392. data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -97
  393. data/spec/integration/knife/cookbook_download_spec.rb +0 -24
  394. data/spec/integration/knife/cookbook_show_spec.rb +12 -23
  395. data/spec/integration/knife/deps_spec.rb +5 -9
  396. data/spec/integration/knife/search_node_spec.rb +39 -0
  397. data/spec/integration/knife/serve_spec.rb +58 -22
  398. data/spec/integration/knife/upload_spec.rb +3 -11
  399. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +7 -11
  400. data/spec/integration/recipes/notifies_spec.rb +60 -0
  401. data/spec/integration/recipes/recipe_dsl_spec.rb +76 -226
  402. data/spec/integration/recipes/resource_action_spec.rb +37 -30
  403. data/spec/spec_helper.rb +7 -0
  404. data/spec/support/chef_helpers.rb +5 -7
  405. data/spec/support/platform_helpers.rb +10 -3
  406. data/spec/support/platforms/prof/gc.rb +4 -6
  407. data/spec/support/shared/context/client.rb +9 -2
  408. data/spec/support/shared/functional/execute_resource.rb +150 -0
  409. data/spec/support/shared/functional/windows_script.rb +74 -4
  410. data/spec/support/shared/integration/knife_support.rb +1 -1
  411. data/spec/support/shared/unit/execute_resource.rb +37 -9
  412. data/spec/support/shared/unit/provider/file.rb +10 -0
  413. data/spec/support/shared/unit/script_resource.rb +1 -9
  414. data/spec/unit/application/exit_code_spec.rb +4 -89
  415. data/spec/unit/application_spec.rb +39 -29
  416. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +1 -1
  417. data/spec/unit/client_spec.rb +72 -31
  418. data/spec/unit/config_fetcher_spec.rb +2 -2
  419. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +31 -19
  420. data/spec/unit/cookbook/file_vendor_spec.rb +20 -9
  421. data/spec/unit/cookbook/gem_installer_spec.rb +85 -0
  422. data/spec/unit/cookbook/manifest_v0_spec.rb +133 -0
  423. data/spec/unit/cookbook/manifest_v2_spec.rb +70 -0
  424. data/spec/unit/cookbook/metadata_spec.rb +29 -108
  425. data/spec/unit/cookbook/synchronizer_spec.rb +5 -6
  426. data/spec/unit/cookbook/syntax_check_spec.rb +9 -2
  427. data/spec/unit/cookbook_loader_spec.rb +17 -19
  428. data/spec/unit/cookbook_manifest_spec.rb +12 -44
  429. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -4
  430. data/spec/unit/cookbook_spec.rb +10 -14
  431. data/spec/unit/cookbook_uploader_spec.rb +1 -1
  432. data/spec/unit/cookbook_version_file_specificity_spec.rb +55 -28
  433. data/spec/unit/cookbook_version_spec.rb +19 -128
  434. data/spec/unit/data_bag_item_spec.rb +4 -0
  435. data/spec/unit/data_collector/messages_spec.rb +137 -0
  436. data/spec/unit/data_collector/resource_report_spec.rb +145 -0
  437. data/spec/unit/deprecation_spec.rb +0 -14
  438. data/spec/unit/encrypted_data_bag_item_spec.rb +6 -6
  439. data/spec/unit/formatters/error_description_spec.rb +52 -7
  440. data/spec/unit/http/api_versions_spec.rb +79 -0
  441. data/spec/unit/http/authenticator_spec.rb +20 -0
  442. data/spec/unit/http/socketless_chef_zero_client_spec.rb +2 -1
  443. data/spec/unit/json_compat_spec.rb +0 -32
  444. data/spec/unit/knife/bootstrap_spec.rb +34 -0
  445. data/spec/unit/knife/configure_client_spec.rb +0 -2
  446. data/spec/unit/knife/cookbook_create_spec.rb +1 -220
  447. data/spec/unit/knife/cookbook_download_spec.rb +46 -28
  448. data/spec/unit/knife/cookbook_show_spec.rb +42 -9
  449. data/spec/unit/knife/core/bootstrap_context_spec.rb +17 -0
  450. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +1 -1
  451. data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -6
  452. data/spec/unit/knife/core/ui_spec.rb +21 -11
  453. data/spec/unit/knife/data_bag_create_spec.rb +65 -45
  454. data/spec/unit/knife/ssh_spec.rb +34 -36
  455. data/spec/unit/knife_spec.rb +2 -2
  456. data/spec/unit/lwrp_spec.rb +38 -127
  457. data/spec/unit/mixin/path_sanity_spec.rb +7 -7
  458. data/spec/unit/mixin/shell_out_spec.rb +18 -84
  459. data/spec/unit/mixin/versioned_api_spec.rb +128 -0
  460. data/spec/unit/mixin/which.rb +160 -0
  461. data/spec/unit/node/attribute_spec.rb +65 -33
  462. data/spec/unit/node/immutable_collections_spec.rb +104 -1
  463. data/spec/unit/node_map_spec.rb +1 -23
  464. data/spec/unit/node_spec.rb +81 -98
  465. data/spec/unit/policy_builder/expand_node_object_spec.rb +2 -27
  466. data/spec/unit/policy_builder/policyfile_spec.rb +12 -12
  467. data/spec/unit/property/validation_spec.rb +51 -69
  468. data/spec/unit/property_spec.rb +105 -125
  469. data/spec/unit/provider/apt_repository_spec.rb +33 -27
  470. data/spec/unit/provider/cron_spec.rb +15 -39
  471. data/spec/unit/provider/deploy_spec.rb +1 -1
  472. data/spec/unit/provider/directory_spec.rb +10 -0
  473. data/spec/unit/provider/dsc_resource_spec.rb +175 -0
  474. data/spec/unit/provider/erl_call_spec.rb +5 -13
  475. data/spec/unit/provider/execute_spec.rb +3 -14
  476. data/spec/unit/provider/launchd_spec.rb +2 -2
  477. data/spec/unit/provider/package/aix_spec.rb +22 -22
  478. data/spec/unit/provider/package/apt_spec.rb +37 -27
  479. data/spec/unit/provider/package/cab_spec.rb +59 -5
  480. data/{lib-backcompat/chef/chef_fs/file_system/repository/file_system_root_dir.rb → spec/unit/provider/package/dnf/python_helper_spec.rb} +10 -15
  481. data/spec/unit/provider/package/dpkg_spec.rb +16 -16
  482. data/spec/unit/provider/package/freebsd/pkg_spec.rb +15 -15
  483. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
  484. data/spec/unit/provider/package/freebsd/port_spec.rb +9 -9
  485. data/spec/unit/provider/package/homebrew_spec.rb +9 -9
  486. data/spec/unit/provider/package/ips_spec.rb +37 -31
  487. data/spec/unit/provider/package/macports_spec.rb +10 -10
  488. data/spec/unit/provider/package/openbsd_spec.rb +10 -10
  489. data/spec/unit/provider/package/pacman_spec.rb +6 -6
  490. data/spec/unit/provider/package/paludis_spec.rb +7 -7
  491. data/spec/unit/provider/package/portage_spec.rb +6 -7
  492. data/spec/unit/provider/package/rpm_spec.rb +23 -23
  493. data/spec/unit/provider/package/rubygems_spec.rb +135 -46
  494. data/spec/unit/provider/package/solaris_spec.rb +15 -15
  495. data/spec/unit/provider/package/windows/msi_spec.rb +1 -1
  496. data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +25 -0
  497. data/spec/unit/provider/package/windows_spec.rb +2 -1
  498. data/spec/unit/provider/package/yum_spec.rb +58 -50
  499. data/spec/unit/provider/package/zypper_spec.rb +54 -97
  500. data/spec/unit/provider/package_spec.rb +8 -0
  501. data/spec/unit/provider/powershell_script_spec.rb +14 -4
  502. data/spec/unit/provider/remote_file/sftp_spec.rb +3 -3
  503. data/spec/unit/provider/route_spec.rb +7 -1
  504. data/spec/unit/provider/script_spec.rb +49 -6
  505. data/spec/unit/provider/service/debian_service_spec.rb +14 -20
  506. data/spec/unit/provider/service/solaris_smf_service_spec.rb +37 -1
  507. data/spec/unit/provider/service/upstart_service_spec.rb +12 -25
  508. data/spec/unit/provider/subversion_spec.rb +2 -2
  509. data/spec/unit/provider/user/linux_spec.rb +5 -43
  510. data/spec/unit/provider/user/pw_spec.rb +7 -27
  511. data/spec/unit/provider/windows_task_spec.rb +392 -0
  512. data/spec/unit/provider_resolver_spec.rb +0 -1
  513. data/spec/unit/provider_spec.rb +10 -3
  514. data/spec/unit/recipe_spec.rb +3 -172
  515. data/spec/unit/resource/chef_gem_spec.rb +16 -62
  516. data/spec/unit/resource/conditional_spec.rb +4 -4
  517. data/spec/unit/resource/cookbook_file_spec.rb +2 -2
  518. data/spec/unit/resource/cron_spec.rb +1 -1
  519. data/spec/unit/resource/deploy_spec.rb +4 -4
  520. data/spec/unit/resource/directory_spec.rb +2 -2
  521. data/spec/unit/resource/dsc_resource_spec.rb +6 -0
  522. data/spec/unit/resource/env_spec.rb +1 -1
  523. data/spec/unit/resource/execute_spec.rb +215 -1
  524. data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -0
  525. data/spec/unit/resource/file/verification_spec.rb +8 -14
  526. data/spec/unit/resource/file_spec.rb +3 -3
  527. data/spec/unit/resource/freebsd_package_spec.rb +2 -2
  528. data/spec/unit/resource/group_spec.rb +2 -2
  529. data/spec/unit/resource/ifconfig_spec.rb +1 -1
  530. data/spec/unit/resource/link_spec.rb +2 -2
  531. data/spec/unit/resource/mdadm_spec.rb +1 -1
  532. data/spec/unit/resource/mount_spec.rb +3 -3
  533. data/spec/unit/resource/ohai_spec.rb +1 -1
  534. data/spec/unit/resource/package_spec.rb +14 -4
  535. data/spec/unit/resource/registry_key_spec.rb +2 -2
  536. data/spec/unit/resource/remote_directory_spec.rb +2 -2
  537. data/spec/unit/resource/remote_file_spec.rb +2 -2
  538. data/spec/unit/resource/route_spec.rb +1 -1
  539. data/spec/unit/resource/scm_spec.rb +2 -2
  540. data/spec/unit/resource/script_spec.rb +1 -1
  541. data/spec/unit/resource/service_spec.rb +25 -5
  542. data/spec/unit/resource/systemd_unit_spec.rb +1 -1
  543. data/spec/unit/resource/template_spec.rb +2 -2
  544. data/spec/unit/resource/user_spec.rb +6 -6
  545. data/spec/unit/resource/windows_task_spec.rb +213 -0
  546. data/spec/unit/resource/yum_package_spec.rb +42 -1
  547. data/spec/unit/resource_collection/resource_set_spec.rb +46 -1
  548. data/spec/unit/resource_collection_spec.rb +4 -3
  549. data/spec/unit/resource_reporter_spec.rb +6 -6
  550. data/spec/unit/resource_spec.rb +55 -71
  551. data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -3
  552. data/spec/unit/run_list/versioned_recipe_list_spec.rb +7 -4
  553. data/spec/unit/runner_spec.rb +10 -28
  554. data/spec/unit/search/query_spec.rb +32 -34
  555. data/spec/unit/server_api_versions_spec.rb +44 -0
  556. data/spec/unit/shell/shell_session_spec.rb +33 -2
  557. data/spec/unit/util/selinux_spec.rb +3 -14
  558. data/spec/unit/win32/error_spec.rb +67 -0
  559. data/spec/unit/win32/security_spec.rb +66 -0
  560. data/tasks/bundle.rb +36 -52
  561. data/tasks/changelog.rb +1 -1
  562. data/tasks/dependencies.rb +54 -52
  563. data/tasks/version.rb +41 -0
  564. metadata +91 -76
  565. data/lib/chef/deprecation/mixin/template.rb +0 -48
  566. data/lib/chef/deprecation/provider/cookbook_file.rb +0 -54
  567. data/lib/chef/deprecation/provider/file.rb +0 -198
  568. data/lib/chef/deprecation/provider/remote_directory.rb +0 -52
  569. data/lib/chef/deprecation/provider/remote_file.rb +0 -85
  570. data/lib/chef/deprecation/provider/template.rb +0 -63
  571. data/lib/chef/dsl/method_missing.rb +0 -75
  572. data/lib/chef/knife/cookbook_site_vendor.rb +0 -46
  573. data/lib/chef/knife/core/custom_manifest_loader.rb +0 -69
  574. data/lib/chef/mixin/command/unix.rb +0 -220
  575. data/lib/chef/mixin/command/windows.rb +0 -71
  576. data/lib/chef/mixin/command.rb +0 -194
  577. data/lib/chef/monkey_patches/net-ssh-multi.rb +0 -141
  578. data/lib/chef/provider/package/easy_install.rb +0 -135
  579. data/lib/chef/rest.rb +0 -210
  580. data/lib/chef/shell_out.rb +0 -13
  581. data/lib/chef/tasks/chef_repo.rake +0 -200
  582. data/lib-backcompat/chef/chef_fs/file_system/acl_entry.rb +0 -5
  583. data/lib-backcompat/chef/chef_fs/file_system/already_exists_error.rb +0 -20
  584. data/lib-backcompat/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +0 -5
  585. data/lib-backcompat/chef/chef_fs/file_system/chef_server_root_dir.rb +0 -5
  586. data/lib-backcompat/chef/chef_fs/file_system/cookbook_frozen_error.rb +0 -20
  587. data/lib-backcompat/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +0 -20
  588. data/lib-backcompat/chef/chef_fs/file_system/file_system_error.rb +0 -20
  589. data/lib-backcompat/chef/chef_fs/file_system/must_delete_recursively_error.rb +0 -20
  590. data/lib-backcompat/chef/chef_fs/file_system/not_found_error.rb +0 -20
  591. data/lib-backcompat/chef/chef_fs/file_system/operation_failed_error.rb +0 -20
  592. data/lib-backcompat/chef/chef_fs/file_system/operation_not_allowed_error.rb +0 -20
  593. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_acls_dir.rb +0 -5
  594. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_client_keys_dir.rb +0 -5
  595. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_entry.rb +0 -6
  596. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_policies_dir.rb +0 -5
  597. data/spec/functional/rest_spec.rb +0 -95
  598. data/spec/unit/knife/core/custom_manifest_loader_spec.rb +0 -41
  599. data/spec/unit/lib_backcompat_spec.rb +0 -34
  600. data/spec/unit/mixin/command_spec.rb +0 -107
  601. data/spec/unit/platform_spec.rb +0 -242
  602. data/spec/unit/provider/package/easy_install_spec.rb +0 -114
  603. data/spec/unit/resource/easy_install_package_spec.rb +0 -39
  604. data/spec/unit/rest/auth_credentials_spec.rb +0 -292
  605. data/spec/unit/rest_spec.rb +0 -753
  606. data/spec/unit/shell_out_spec.rb +0 -18
  607. data/tasks/bin/bundle-platform +0 -20
  608. data/tasks/bin/bundle-platform.bat +0 -2
  609. data/tasks/bin/bundler_patch.rb +0 -27
  610. data/tasks/bin/gem-version-diff +0 -37
  611. data/tasks/bundle_util.rb +0 -110
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # Author:: Adam Jacob (<adam@chef.io>)
3
3
  # Author:: AJ Christensen (<aj@chef.io>)
4
- # Copyright:: Copyright 2008-2016, Chef Software Inc.
4
+ # Copyright:: Copyright 2008-2017, Chef Software Inc.
5
5
  # License:: Apache License, Version 2.0
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -208,7 +208,7 @@ describe Chef::Node::Attribute do
208
208
  end
209
209
 
210
210
  describe "when debugging attributes" do
211
- before do
211
+ it "gives the value at each level of precedence for a path spec" do
212
212
  @attributes.default[:foo][:bar] = "default"
213
213
  @attributes.env_default[:foo][:bar] = "env_default"
214
214
  @attributes.role_default[:foo][:bar] = "role_default"
@@ -219,9 +219,7 @@ describe Chef::Node::Attribute do
219
219
  @attributes.env_override[:foo][:bar] = "env_override"
220
220
  @attributes.force_override[:foo][:bar] = "force_override"
221
221
  @attributes.automatic[:foo][:bar] = "automatic"
222
- end
223
222
 
224
- it "gives the value at each level of precedence for a path spec" do
225
223
  expected = [
226
224
  %w{default default},
227
225
  %w{env_default env_default},
@@ -236,6 +234,25 @@ describe Chef::Node::Attribute do
236
234
  ]
237
235
  expect(@attributes.debug_value(:foo, :bar)).to eq(expected)
238
236
  end
237
+
238
+ it "works through arrays" do
239
+ @attributes.default["foo"] = [ { "bar" => "baz" } ]
240
+
241
+ expect(@attributes.debug_value(:foo, 0)).to eq(
242
+ [
243
+ ["default", { "bar" => "baz" }],
244
+ ["env_default", :not_present],
245
+ ["role_default", :not_present],
246
+ ["force_default", :not_present],
247
+ ["normal", :not_present],
248
+ ["override", :not_present],
249
+ ["role_override", :not_present],
250
+ ["env_override", :not_present],
251
+ ["force_override", :not_present],
252
+ ["automatic", :not_present],
253
+ ]
254
+ )
255
+ end
239
256
  end
240
257
 
241
258
  describe "when fetching values based on precedence" do
@@ -459,8 +476,7 @@ describe Chef::Node::Attribute do
459
476
  expect(@attributes.default["foo"]).to eql({ "bar" => [ "fizz" ] })
460
477
  end
461
478
 
462
- it "mutating strings should not mutate the attributes" do
463
- pending "this is a bug that should be fixed"
479
+ it "mutating strings should not mutate the attributes in a hash" do
464
480
  @attributes.default["foo"]["bar"]["baz"] = "fizz"
465
481
  hash = @attributes["foo"].to_hash
466
482
  expect(hash).to eql({ "bar" => { "baz" => "fizz" } })
@@ -468,6 +484,15 @@ describe Chef::Node::Attribute do
468
484
  expect(hash).to eql({ "bar" => { "baz" => "fizzbuzz" } })
469
485
  expect(@attributes.default["foo"]).to eql({ "bar" => { "baz" => "fizz" } })
470
486
  end
487
+
488
+ it "mutating array elements should not mutate the attributes" do
489
+ @attributes.default["foo"]["bar"] = [ "fizz" ]
490
+ hash = @attributes["foo"].to_hash
491
+ expect(hash).to eql({ "bar" => [ "fizz" ] })
492
+ hash["bar"][0] << "buzz"
493
+ expect(hash).to eql({ "bar" => [ "fizzbuzz" ] })
494
+ expect(@attributes.default["foo"]).to eql({ "bar" => [ "fizz" ] })
495
+ end
471
496
  end
472
497
 
473
498
  describe "dup" do
@@ -475,6 +500,24 @@ describe Chef::Node::Attribute do
475
500
  @attributes.default[:foo] = %w{foo bar baz} + Array(1..3) + [nil, true, false, [ "el", 0, nil ] ]
476
501
  @attributes.default[:foo].dup
477
502
  end
503
+
504
+ it "mutating strings should not mutate the attributes in a hash" do
505
+ @attributes.default["foo"]["bar"]["baz"] = "fizz"
506
+ hash = @attributes["foo"].dup
507
+ expect(hash).to eql({ "bar" => { "baz" => "fizz" } })
508
+ hash["bar"]["baz"] << "buzz"
509
+ expect(hash).to eql({ "bar" => { "baz" => "fizzbuzz" } })
510
+ expect(@attributes.default["foo"]).to eql({ "bar" => { "baz" => "fizz" } })
511
+ end
512
+
513
+ it "mutating array elements should not mutate the attributes" do
514
+ @attributes.default["foo"]["bar"] = [ "fizz" ]
515
+ hash = @attributes["foo"].dup
516
+ expect(hash).to eql({ "bar" => [ "fizz" ] })
517
+ hash["bar"][0] << "buzz"
518
+ expect(hash).to eql({ "bar" => [ "fizzbuzz" ] })
519
+ expect(@attributes.default["foo"]).to eql({ "bar" => [ "fizz" ] })
520
+ end
478
521
  end
479
522
 
480
523
  describe "has_key?" do
@@ -490,11 +533,6 @@ describe Chef::Node::Attribute do
490
533
  expect(@attributes.has_key?("does_not_exist_at_all")).to eq(false)
491
534
  end
492
535
 
493
- it "should return true if an attribute exists but is set to nil using dot notation" do
494
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
495
- expect(@attributes.music.deeper.has_key?("gates_of_ishtar")).to eq(true)
496
- end
497
-
498
536
  it "should return true if an attribute exists but is set to false" do
499
537
  @attributes.has_key?("music")
500
538
  expect(@attributes["music"].has_key?("apophis")).to eq(true)
@@ -530,19 +568,6 @@ describe Chef::Node::Attribute do
530
568
 
531
569
  end
532
570
 
533
- describe "method_missing" do
534
- it "should behave like a [] lookup" do
535
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
536
- expect(@attributes.music.mastodon).to eq("rocks")
537
- end
538
-
539
- it "should allow the last method to set a value if it has an = sign on the end" do
540
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
541
- @attributes.normal.music.mastodon = %w{dream still shining}
542
- expect(@attributes.normal.music.mastodon).to eq(%w{dream still shining})
543
- end
544
- end
545
-
546
571
  describe "keys" do
547
572
  before(:each) do
548
573
  @attributes = Chef::Node::Attribute.new(
@@ -1109,25 +1134,25 @@ describe Chef::Node::Attribute do
1109
1134
  describe "when setting a component attribute to a new value" do
1110
1135
  it "converts the input in to a VividMash tree (default)" do
1111
1136
  @attributes.default = {}
1112
- @attributes.default.foo = "bar"
1137
+ @attributes.default["foo"] = "bar"
1113
1138
  expect(@attributes.merged_attributes[:foo]).to eq("bar")
1114
1139
  end
1115
1140
 
1116
1141
  it "converts the input in to a VividMash tree (normal)" do
1117
1142
  @attributes.normal = {}
1118
- @attributes.normal.foo = "bar"
1143
+ @attributes.normal["foo"] = "bar"
1119
1144
  expect(@attributes.merged_attributes[:foo]).to eq("bar")
1120
1145
  end
1121
1146
 
1122
1147
  it "converts the input in to a VividMash tree (override)" do
1123
1148
  @attributes.override = {}
1124
- @attributes.override.foo = "bar"
1149
+ @attributes.override["foo"] = "bar"
1125
1150
  expect(@attributes.merged_attributes[:foo]).to eq("bar")
1126
1151
  end
1127
1152
 
1128
1153
  it "converts the input in to a VividMash tree (automatic)" do
1129
1154
  @attributes.automatic = {}
1130
- @attributes.automatic.foo = "bar"
1155
+ @attributes.automatic["foo"] = "bar"
1131
1156
  expect(@attributes.merged_attributes[:foo]).to eq("bar")
1132
1157
  end
1133
1158
  end
@@ -1170,11 +1195,6 @@ describe Chef::Node::Attribute do
1170
1195
  it "raises an error when using []=" do
1171
1196
  expect { @attributes[:new_key] = "new value" }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
1172
1197
  end
1173
-
1174
- it "raises an error when using `attr=value`" do
1175
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
1176
- expect { @attributes.new_key = "new value" }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
1177
- end
1178
1198
  end
1179
1199
 
1180
1200
  describe "deeply converting values" do
@@ -1241,4 +1261,16 @@ describe Chef::Node::Attribute do
1241
1261
  @attributes.default["foo"]["bar"]["baz"] = "quux"
1242
1262
  end
1243
1263
  end
1264
+
1265
+ describe "frozen immutable strings" do
1266
+ it "strings in hashes should be frozen" do
1267
+ @attributes.default["foo"]["bar"]["baz"] = "fizz"
1268
+ expect { @attributes["foo"]["bar"]["baz"] << "buzz" }.to raise_error(RuntimeError, "can't modify frozen String")
1269
+ end
1270
+
1271
+ it "strings in arrays should be frozen" do
1272
+ @attributes.default["foo"]["bar"] = [ "fizz" ]
1273
+ expect { @attributes["foo"]["bar"][0] << "buzz" }.to raise_error(RuntimeError, "can't modify frozen String")
1274
+ end
1275
+ end
1244
1276
  end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Daniel DeLeo (<dan@chef.io>)
3
- # Copyright:: Copyright 2012-2016, Chef Software Inc.
3
+ # Copyright:: Copyright 2012-2017, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -78,7 +78,58 @@ describe Chef::Node::ImmutableMash do
78
78
  it "should allow mutation" do
79
79
  expect { @copy["m"] = "m" }.not_to raise_error
80
80
  end
81
+ end
82
+
83
+ describe "dup" do
84
+ before do
85
+ @copy = @immutable_mash.dup
86
+ end
87
+
88
+ it "converts an immutable mash to a new mutable hash" do
89
+ expect(@copy).to be_instance_of(Mash)
90
+ end
91
+
92
+ it "converts an immutable nested mash to a new mutable hash" do
93
+ expect(@copy["top_level_4"]["level2"]).to be_instance_of(Mash)
94
+ end
95
+
96
+ it "converts an immutable nested array to a new mutable array" do
97
+ expect(@copy["top_level_2"]).to be_instance_of(Array)
98
+ end
99
+
100
+ it "should create a mash with the same content" do
101
+ expect(@copy).to eq(@immutable_mash)
102
+ end
103
+
104
+ it "should allow mutation" do
105
+ expect { @copy["m"] = "m" }.not_to raise_error
106
+ end
107
+ end
81
108
 
109
+ describe "to_h" do
110
+ before do
111
+ @copy = @immutable_mash.to_h
112
+ end
113
+
114
+ it "converts an immutable mash to a new mutable hash" do
115
+ expect(@copy).to be_instance_of(Hash)
116
+ end
117
+
118
+ it "converts an immutable nested mash to a new mutable hash" do
119
+ expect(@copy["top_level_4"]["level2"]).to be_instance_of(Hash)
120
+ end
121
+
122
+ it "converts an immutable nested array to a new mutable array" do
123
+ expect(@copy["top_level_2"]).to be_instance_of(Array)
124
+ end
125
+
126
+ it "should create a mash with the same content" do
127
+ expect(@copy).to eq(@immutable_mash)
128
+ end
129
+
130
+ it "should allow mutation" do
131
+ expect { @copy["m"] = "m" }.not_to raise_error
132
+ end
82
133
  end
83
134
 
84
135
  [
@@ -198,6 +249,58 @@ describe Chef::Node::ImmutableArray do
198
249
  end
199
250
  end
200
251
 
252
+ describe "dup" do
253
+ before do
254
+ @copy = @immutable_nested_array.dup
255
+ end
256
+
257
+ it "converts an immutable array to a new mutable array" do
258
+ expect(@copy).to be_instance_of(Array)
259
+ end
260
+
261
+ it "converts an immutable nested array to a new mutable array" do
262
+ expect(@copy[1]).to be_instance_of(Array)
263
+ end
264
+
265
+ it "converts an immutable nested mash to a new mutable hash" do
266
+ expect(@copy[2]).to be_instance_of(Mash)
267
+ end
268
+
269
+ it "should create an array with the same content" do
270
+ expect(@copy).to eq(@immutable_nested_array)
271
+ end
272
+
273
+ it "should allow mutation" do
274
+ expect { @copy << "m" }.not_to raise_error
275
+ end
276
+ end
277
+
278
+ describe "to_array" do
279
+ before do
280
+ @copy = @immutable_nested_array.to_array
281
+ end
282
+
283
+ it "converts an immutable array to a new mutable array" do
284
+ expect(@copy).to be_instance_of(Array)
285
+ end
286
+
287
+ it "converts an immutable nested array to a new mutable array" do
288
+ expect(@copy[1]).to be_instance_of(Array)
289
+ end
290
+
291
+ it "converts an immutable nested mash to a new mutable hash" do
292
+ expect(@copy[2]).to be_instance_of(Hash)
293
+ end
294
+
295
+ it "should create an array with the same content" do
296
+ expect(@copy).to eq(@immutable_nested_array)
297
+ end
298
+
299
+ it "should allow mutation" do
300
+ expect { @copy << "m" }.not_to raise_error
301
+ end
302
+ end
303
+
201
304
  describe "#[]" do
202
305
  it "works with array slices" do
203
306
  expect(@immutable_array[1, 2]).to eql(%w{bar baz})
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Lamont Granquist (<lamont@chef.io>)
3
- # Copyright:: Copyright 2014-2016, Chef Software, Inc.
3
+ # Copyright:: Copyright 2014-2017, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -145,26 +145,4 @@ describe Chef::NodeMap do
145
145
  end
146
146
  end
147
147
 
148
- describe "resource back-compat testing" do
149
- before :each do
150
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
151
- end
152
-
153
- it "should handle :on_platforms => :all" do
154
- node_map.set(:chef_gem, :foo, :on_platforms => :all)
155
- allow(node).to receive(:[]).with(:platform).and_return("windows")
156
- expect(node_map.get(node, :chef_gem)).to eql(:foo)
157
- end
158
- it "should handle :on_platforms => [ 'windows' ]" do
159
- node_map.set(:dsc_script, :foo, :on_platforms => [ "windows" ])
160
- allow(node).to receive(:[]).with(:platform).and_return("windows")
161
- expect(node_map.get(node, :dsc_script)).to eql(:foo)
162
- end
163
- it "should handle :on_platform => :all" do
164
- node_map.set(:link, :foo, :on_platform => :all)
165
- allow(node).to receive(:[]).with(:platform).and_return("windows")
166
- expect(node_map.get(node, :link)).to eql(:foo)
167
- end
168
- end
169
-
170
148
  end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Adam Jacob (<adam@chef.io>)
3
- # Copyright:: Copyright 2008-2016, Chef Software, Inc.
3
+ # Copyright:: Copyright 2008-2017, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -238,43 +238,25 @@ describe Chef::Node do
238
238
  expect(node["battles"]["people"].attribute?("snozzberry")).to eq(false)
239
239
  end
240
240
 
241
- it "does not allow you to set an attribute via method_missing" do
242
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
243
- expect { node.sunshine = "is bright" }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
244
- end
245
-
246
241
  it "does not allow modification of node attributes via hash methods" do
247
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
248
242
  node.default["h4sh"] = { foo: "bar" }
249
243
  expect { node["h4sh"].delete("foo") }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
250
- expect { node.h4sh.delete("foo") }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
251
244
  end
252
245
 
253
246
  it "does not allow modification of node attributes via array methods" do
254
247
  Chef::Config[:treat_deprecation_warnings_as_errors] = false
255
248
  node.default["array"] = []
256
249
  expect { node["array"] << "boom" }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
257
- expect { node.array << "boom" }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
258
250
  end
259
251
 
260
252
  it "returns merged immutable attributes for arrays" do
261
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
262
253
  node.default["array"] = []
263
254
  expect( node["array"].class ).to eql(Chef::Node::ImmutableArray)
264
- expect( node.array.class ).to eql(Chef::Node::ImmutableArray)
265
255
  end
266
256
 
267
257
  it "returns merged immutable attributes for hashes" do
268
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
269
258
  node.default["h4sh"] = {}
270
259
  expect( node["h4sh"].class ).to eql(Chef::Node::ImmutableMash)
271
- expect( node.h4sh.class ).to eql(Chef::Node::ImmutableMash)
272
- end
273
-
274
- it "should allow you get get an attribute via method_missing" do
275
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
276
- node.default.sunshine = "is bright"
277
- expect(node.sunshine).to eql("is bright")
278
260
  end
279
261
 
280
262
  describe "normal attributes" do
@@ -283,12 +265,6 @@ describe Chef::Node do
283
265
  expect(node[:snoopy][:is_a_puppy]).to eq(true)
284
266
  end
285
267
 
286
- it "should allow you to set an attribute with set_unless with method_missing but emit a deprecation warning" do
287
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
288
- node.normal_unless.snoopy.is_a_puppy = false
289
- expect(node[:snoopy][:is_a_puppy]).to eq(false)
290
- end
291
-
292
268
  it "should allow you to set an attribute with set_unless" do
293
269
  node.normal_unless[:snoopy][:is_a_puppy] = false
294
270
  expect(node[:snoopy][:is_a_puppy]).to eq(false)
@@ -321,12 +297,6 @@ describe Chef::Node do
321
297
  expect(node[:snoopy][:is_a_puppy]).to eq(true)
322
298
  end
323
299
 
324
- it "auto-vivifies attributes created via method syntax" do
325
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
326
- node.normal.fuu.bahrr.baz = "qux"
327
- expect(node.fuu.bahrr.baz).to eq("qux")
328
- end
329
-
330
300
  it "should let you use tag as a convience method for the tags attribute" do
331
301
  node.normal["tags"] = %w{one two}
332
302
  node.tag("three", "four")
@@ -407,12 +377,6 @@ describe Chef::Node do
407
377
  expect(node["a"]["r1"]["g"]["u"]).to eql("u1")
408
378
  end
409
379
 
410
- it "auto-vivifies attributes created via method syntax" do
411
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
412
- node.default.fuu.bahrr.baz = "qux"
413
- expect(node.fuu.bahrr.baz).to eq("qux")
414
- end
415
-
416
380
  it "default_unless correctly resets the deep merge cache" do
417
381
  node.normal["tags"] = [] # this sets our top-level breadcrumb
418
382
  node.default_unless["foo"]["bar"] = "NK-19V"
@@ -469,12 +433,6 @@ describe Chef::Node do
469
433
  node.override[:snoopy][:is_a_puppy] = true
470
434
  expect(node[:snoopy][:is_a_puppy]).to eq(true)
471
435
  end
472
-
473
- it "auto-vivifies attributes created via method syntax" do
474
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
475
- node.override.fuu.bahrr.baz = "qux"
476
- expect(node.fuu.bahrr.baz).to eq("qux")
477
- end
478
436
  end
479
437
 
480
438
  describe "globally deleting attributes" do
@@ -811,10 +769,9 @@ describe Chef::Node do
811
769
  #
812
770
  describe "deep merge attribute cache edge conditions" do
813
771
  it "does not error with complicated attribute substitution" do
814
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
815
772
  node.default["chef_attribute_hell"]["attr1"] = "attribute1"
816
- node.default["chef_attribute_hell"]["attr2"] = "#{node.chef_attribute_hell.attr1}/attr2"
817
- expect { node.default["chef_attribute_hell"]["attr3"] = "#{node.chef_attribute_hell.attr2}/attr3" }.not_to raise_error
773
+ node.default["chef_attribute_hell"]["attr2"] = "#{node[:chef_attribute_hell][:attr1]}/attr2"
774
+ expect { node.default["chef_attribute_hell"]["attr3"] = "#{node[:chef_attribute_hell][:attr2]}/attr3" }.not_to raise_error
818
775
  end
819
776
 
820
777
  it "caches both strings and symbols correctly" do
@@ -829,7 +786,7 @@ describe Chef::Node do
829
786
  Chef::Config[:treat_deprecation_warnings_as_errors] = false
830
787
  node.default["passenger"]["version"] = "4.0.57"
831
788
  node.default["passenger"]["root_path"] = "passenger-#{node['passenger']['version']}"
832
- node.default["passenger"]["root_path_2"] = "passenger-#{node.passenger['version']}"
789
+ node.default["passenger"]["root_path_2"] = "passenger-#{node[:passenger]['version']}"
833
790
  expect(node["passenger"]["root_path_2"]).to eql("passenger-4.0.57")
834
791
  expect(node[:passenger]["root_path_2"]).to eql("passenger-4.0.57")
835
792
  end
@@ -841,8 +798,8 @@ describe Chef::Node do
841
798
  end
842
799
 
843
800
  it "should allow you to iterate over attributes with each_attribute" do
844
- node.default.sunshine = "is bright"
845
- node.default.canada = "is a nice place"
801
+ node.default["sunshine"] = "is bright"
802
+ node.default["canada"] = "is a nice place"
846
803
  seen_attributes = Hash.new
847
804
  node.each_attribute do |a, v|
848
805
  seen_attributes[a] = v
@@ -1609,6 +1566,78 @@ describe Chef::Node do
1609
1566
  end
1610
1567
  end
1611
1568
 
1569
+ context "with blacklisted attributes configured" do
1570
+ it "should only save non-blacklisted attributes (and subattributes)" do
1571
+ Chef::Config[:automatic_attribute_blacklist] = [
1572
+ ["filesystem", "/dev/disk0s2"],
1573
+ "network/interfaces/eth0",
1574
+ ]
1575
+
1576
+ data = {
1577
+ "automatic" => {
1578
+ "filesystem" => {
1579
+ "/dev/disk0s2" => { "size" => "10mb" },
1580
+ "map - autohome" => { "size" => "10mb" },
1581
+ },
1582
+ "network" => {
1583
+ "interfaces" => {
1584
+ "eth0" => {},
1585
+ "eth1" => {},
1586
+ },
1587
+ },
1588
+ },
1589
+ "default" => {}, "normal" => {}, "override" => {}
1590
+ }
1591
+
1592
+ selected_data = {
1593
+ "automatic" => {
1594
+ "filesystem" => {
1595
+ "map - autohome" => { "size" => "10mb" },
1596
+ },
1597
+ "network" => {
1598
+ "interfaces" => {
1599
+ "eth1" => {},
1600
+ },
1601
+ },
1602
+ },
1603
+ "default" => {}, "normal" => {}, "override" => {}
1604
+ }
1605
+ node.name("picky-monkey")
1606
+ allow(node).to receive(:for_json).and_return(data)
1607
+ expect(@rest).to receive(:put).with("nodes/picky-monkey", selected_data).and_return("foo")
1608
+ node.save
1609
+ end
1610
+
1611
+ it "should save all attributes if the blacklist is empty" do
1612
+ Chef::Config[:automatic_attribute_blacklist] = []
1613
+
1614
+ data = {
1615
+ "automatic" => {
1616
+ "filesystem" => {
1617
+ "/dev/disk0s2" => { "size" => "10mb" },
1618
+ "map - autohome" => { "size" => "10mb" },
1619
+ },
1620
+ },
1621
+ "default" => {}, "normal" => {}, "override" => {}
1622
+ }
1623
+
1624
+ selected_data = {
1625
+ "automatic" => {
1626
+ "filesystem" => {
1627
+ "/dev/disk0s2" => { "size" => "10mb" },
1628
+ "map - autohome" => { "size" => "10mb" },
1629
+ },
1630
+ },
1631
+ "default" => {}, "normal" => {}, "override" => {}
1632
+ }
1633
+
1634
+ node.name("picky-monkey")
1635
+ allow(node).to receive(:for_json).and_return(data)
1636
+ expect(@rest).to receive(:put).with("nodes/picky-monkey", selected_data).and_return("foo")
1637
+ node.save
1638
+ end
1639
+ end
1640
+
1612
1641
  context "when policyfile attributes are present" do
1613
1642
 
1614
1643
  before do
@@ -1657,55 +1686,9 @@ describe Chef::Node do
1657
1686
 
1658
1687
  end
1659
1688
 
1660
- context "on Chef Client 13 and later" do
1661
-
1662
- # Though we normally attempt to provide compatibility with chef
1663
- # server one major version back, policyfiles were beta when we
1664
- # added the policyfile attributes to the node JSON, therefore
1665
- # policyfile users need to be on 12.3 minimum when upgrading Chef
1666
- # Client to 13+
1667
- it "lets the 400 pass through", chef: ">= 13" do
1668
- expect { node.save }.to raise_error(http_exception)
1669
- end
1670
-
1671
- end
1672
-
1673
- context "when the node exists" do
1674
-
1675
- it "falls back to saving without policyfile attributes" do
1676
- expect(@rest).to receive(:put).with("nodes/example-node", node.for_json).and_raise(http_exception)
1677
- expect(@rest).to receive(:put).with("nodes/example-node", trimmed_node).and_return(@node)
1678
- expect { node.save }.to_not raise_error
1679
- end
1680
-
1681
- end
1682
-
1683
- context "when the node doesn't exist" do
1684
-
1685
- let(:response_404) do
1686
- Net::HTTPResponse.send(:response_class, "404").new("1.0", "404", "Not Found")
1687
- end
1688
-
1689
- let(:http_exception_404) do
1690
- begin
1691
- response_404.error!
1692
- rescue => e
1693
- e
1694
- end
1695
- end
1696
-
1697
- it "falls back to saving without policyfile attributes" do
1698
- expect(@rest).to receive(:put).with("nodes/example-node", node.for_json).and_raise(http_exception)
1699
- expect(@rest).to receive(:put).with("nodes/example-node", trimmed_node).and_raise(http_exception_404)
1700
- expect(@rest).to receive(:post).with("nodes", trimmed_node).and_return(@node)
1701
- node.save
1702
- end
1703
-
1704
- it "creates the node without policyfile attributes" do
1705
- expect(@rest).to receive(:post).with("nodes", node.for_json).and_raise(http_exception)
1706
- expect(@rest).to receive(:post).with("nodes", trimmed_node).and_return(@node)
1707
- node.create
1708
- end
1689
+ it "lets the 400 pass through" do
1690
+ expect(@rest).to receive(:put).and_raise(http_exception)
1691
+ expect { node.save }.to raise_error(http_exception)
1709
1692
  end
1710
1693
 
1711
1694
  end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Daniel DeLeo (<dan@chef.io>)
3
- # Copyright:: Copyright 2014-2016, Chef Software, Inc.
3
+ # Copyright:: Copyright 2014-2017, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -34,11 +34,7 @@ describe Chef::PolicyBuilder::ExpandNodeObject do
34
34
  expect(policy_builder).to respond_to(:node)
35
35
  end
36
36
 
37
- it "implements a load_node method for backwards compatibility until Chef 13" do
38
- expect(policy_builder).to respond_to(:load_node)
39
- end
40
-
41
- it "has removed the deprecated #load_node method", chef: ">= 13" do
37
+ it "has removed the deprecated #load_node method" do
42
38
  expect(policy_builder).to_not respond_to(:load_node)
43
39
  end
44
40
 
@@ -106,27 +102,6 @@ describe Chef::PolicyBuilder::ExpandNodeObject do
106
102
 
107
103
  end
108
104
 
109
- context "deprecated #load_node method" do
110
-
111
- let(:node) do
112
- node = Chef::Node.new
113
- node.name(node_name)
114
- node.run_list(["recipe[a::default]", "recipe[b::server]"])
115
- node
116
- end
117
-
118
- before do
119
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
120
- expect(Chef::Node).to receive(:find_or_create).with(node_name).and_return(node)
121
- policy_builder.load_node
122
- end
123
-
124
- it "loads the node" do
125
- expect(policy_builder.node).to eq(node)
126
- end
127
-
128
- end
129
-
130
105
  context "once the node has been loaded" do
131
106
  let(:node) do
132
107
  node = Chef::Node.new