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
@@ -116,6 +116,141 @@ describe Chef::DataCollector::Messages do
116
116
  deprecations
117
117
  }
118
118
  end
119
+ let(:optional_fields) { %w{error policy_group policy_name} }
120
+
121
+ before do
122
+ allow(run_status).to receive(:exception).and_return(nil)
123
+ end
124
+
125
+ it "is not missing any required fields" do
126
+ missing_fields = required_fields.select do |key|
127
+ !Chef::DataCollector::Messages.run_end_message(reporter_data).key?(key)
128
+ end
129
+ expect(missing_fields).to eq([])
130
+ end
131
+
132
+ it "does not have any extra fields" do
133
+ extra_fields = Chef::DataCollector::Messages.run_end_message(reporter_data).keys.select do |key|
134
+ !required_fields.include?(key) && !optional_fields.include?(key)
135
+ end
136
+ expect(extra_fields).to eq([])
137
+ end
138
+
139
+ it "only includes updated resources in its count" do
140
+ message = Chef::DataCollector::Messages.run_end_message(reporter_data)
141
+ expect(message["total_resource_count"]).to eq(2)
142
+ expect(message["updated_resource_count"]).to eq(1)
143
+ end
144
+ end
145
+
146
+ context "when the run was not successful" do
147
+ let(:required_fields) do
148
+ %w{
149
+ chef_server_fqdn
150
+ entity_uuid
151
+ id
152
+ end_time
153
+ error
154
+ expanded_run_list
155
+ message_type
156
+ message_version
157
+ node
158
+ node_name
159
+ organization_name
160
+ resources
161
+ run_id
162
+ run_list
163
+ source
164
+ start_time
165
+ status
166
+ total_resource_count
167
+ updated_resource_count
168
+ deprecations
169
+ }
170
+ end
171
+ let(:optional_fields) { %w{policy_group policy_name} }
172
+
173
+ before do
174
+ allow(run_status).to receive(:exception).and_return(RuntimeError.new("an error happened"))
175
+ end
176
+
177
+ it "is not missing any required fields" do
178
+ missing_fields = required_fields.select do |key|
179
+ !Chef::DataCollector::Messages.run_end_message(reporter_data).key?(key)
180
+ end
181
+ expect(missing_fields).to eq([])
182
+ end
183
+
184
+ it "does not have any extra fields" do
185
+ extra_fields = Chef::DataCollector::Messages.run_end_message(reporter_data).keys.select do |key|
186
+ !required_fields.include?(key) && !optional_fields.include?(key)
187
+ end
188
+ expect(extra_fields).to eq([])
189
+ end
190
+ end
191
+ end
192
+
193
+ describe "#run_end_message in policy mode" do
194
+ let(:node) { Chef::Node.new }
195
+ let(:run_status) { Chef::RunStatus.new(node, Chef::EventDispatch::Dispatcher.new) }
196
+ let(:report1) { double("report1", report_data: { "status" => "updated" }) }
197
+ let(:report2) { double("report2", report_data: { "status" => "skipped" }) }
198
+ let(:reporter_data) do
199
+ {
200
+ run_status: run_status,
201
+ resources: [report1, report2],
202
+ }
203
+ end
204
+
205
+ before do
206
+ allow(run_status).to receive(:start_time).and_return(Time.now)
207
+ allow(run_status).to receive(:end_time).and_return(Time.now)
208
+ node.policy_group = "test"
209
+ node.policy_name = "policy-test"
210
+ end
211
+
212
+ it "includes a valid node object in the payload" do
213
+ message = Chef::DataCollector::Messages.run_end_message(reporter_data)
214
+ expect(message["node"]).to be_an_instance_of(Chef::Node)
215
+ end
216
+
217
+ it "returns a sane JSON representation of the node object" do
218
+ node.chef_environment = "my_test_environment"
219
+ node.run_list.add("recipe[my_test_cookbook::default]")
220
+ message = FFI_Yajl::Parser.parse(Chef::DataCollector::Messages.run_end_message(reporter_data).to_json)
221
+
222
+ expect(message["node"]["chef_environment"]).to eq("my_test_environment")
223
+ expect(message["node"]["run_list"]).to eq(["recipe[my_test_cookbook::default]"])
224
+ expect(message["node"]["policy_name"]).to eq("policy-test")
225
+ expect(message["node"]["policy_group"]).to eq("test")
226
+ end
227
+
228
+ context "when the run was successful" do
229
+ let(:required_fields) do
230
+ %w{
231
+ chef_server_fqdn
232
+ entity_uuid
233
+ id
234
+ end_time
235
+ expanded_run_list
236
+ message_type
237
+ message_version
238
+ node
239
+ node_name
240
+ organization_name
241
+ resources
242
+ run_id
243
+ run_list
244
+ source
245
+ start_time
246
+ status
247
+ total_resource_count
248
+ updated_resource_count
249
+ deprecations
250
+ policy_name
251
+ policy_group
252
+ }
253
+ end
119
254
  let(:optional_fields) { %w{error} }
120
255
 
121
256
  before do
@@ -166,6 +301,8 @@ describe Chef::DataCollector::Messages do
166
301
  total_resource_count
167
302
  updated_resource_count
168
303
  deprecations
304
+ policy_name
305
+ policy_group
169
306
  }
170
307
  end
171
308
  let(:optional_fields) { [] }
@@ -0,0 +1,145 @@
1
+ #
2
+ # Author:: Salim Afiune (<afiune@chef.io)
3
+ #
4
+ # Copyright:: Copyright 2012-2017, Chef Software Inc.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ require "spec_helper"
21
+
22
+ describe Chef::DataCollector::ResourceReport do
23
+ let(:cookbook_repo_path) { File.join(CHEF_SPEC_DATA, "cookbooks") }
24
+ let(:cookbook_collection) { Chef::CookbookCollection.new(Chef::CookbookLoader.new(cookbook_repo_path)) }
25
+ let(:node) { Chef::Node.new }
26
+ let(:events) { Chef::EventDispatch::Dispatcher.new }
27
+ let(:run_context) { Chef::RunContext.new(node, cookbook_collection, events) }
28
+ let(:resource) { Chef::Resource.new("zelda", run_context) }
29
+ let(:report) { described_class.new(resource, :create) }
30
+
31
+ describe "#skipped" do
32
+ let(:conditional) { double("Chef::Resource::Conditional") }
33
+
34
+ it "should set status and conditional" do
35
+ report.skipped(conditional)
36
+ expect(report.conditional).to eq conditional
37
+ expect(report.status).to eq "skipped"
38
+ end
39
+ end
40
+
41
+ describe "#up_to_date" do
42
+ it "should set status" do
43
+ report.up_to_date
44
+ expect(report.status).to eq "up-to-date"
45
+ end
46
+ end
47
+
48
+ describe "#updated" do
49
+ it "should set status" do
50
+ report.updated
51
+ expect(report.status).to eq "updated"
52
+ end
53
+ end
54
+
55
+ describe "#elapsed_time_in_milliseconds" do
56
+
57
+ context "when elapsed_time is not set" do
58
+ it "should return nil" do
59
+ allow(report).to receive(:elapsed_time).and_return(nil)
60
+ expect(report.elapsed_time_in_milliseconds).to eq nil
61
+ end
62
+ end
63
+
64
+ context "when elapsed_time is set" do
65
+ it "should return it in milliseconds" do
66
+ allow(report).to receive(:elapsed_time).and_return(1)
67
+ expect(report.elapsed_time_in_milliseconds).to eq 1000
68
+ end
69
+ end
70
+ end
71
+
72
+ describe "#failed" do
73
+ let(:exception) { double("Chef::Exception::Test") }
74
+
75
+ it "should set exception and status" do
76
+ report.failed(exception)
77
+ expect(report.exception).to eq exception
78
+ expect(report.status).to eq "failed"
79
+ end
80
+ end
81
+
82
+ describe "#to_hash" do
83
+ context "for a simple_resource" do
84
+ let(:resource) do
85
+ klass = Class.new(Chef::Resource) do
86
+ resource_name "zelda"
87
+ end
88
+ klass.new("hyrule", run_context)
89
+ end
90
+ let(:hash) do
91
+ {
92
+ "after" => {},
93
+ "before" => {},
94
+ "delta" => "",
95
+ "duration" => "",
96
+ "id" => "hyrule",
97
+ "ignore_failure" => false,
98
+ "name" => "hyrule",
99
+ "result" => "create",
100
+ "status" => "unprocessed",
101
+ "type" => :zelda,
102
+ }
103
+ end
104
+
105
+ it "returns a hash containing the expected values" do
106
+ expect(report.to_hash).to eq hash
107
+ end
108
+ end
109
+
110
+ context "for a lazy_resource that got skipped" do
111
+ let(:resource) do
112
+ klass = Class.new(Chef::Resource) do
113
+ resource_name "link"
114
+ property :sword, String, name_property: true, identity: true
115
+ end
116
+ resource = klass.new("hyrule")
117
+ resource.sword = Chef::DelayedEvaluator.new { nil }
118
+ resource
119
+ end
120
+ let(:hash) do
121
+ {
122
+ "after" => {},
123
+ "before" => {},
124
+ "delta" => "",
125
+ "duration" => "",
126
+ "conditional" => "because",
127
+ "id" => "unknown identity (due to Chef::Exceptions::ValidationFailed)",
128
+ "ignore_failure" => false,
129
+ "name" => "hyrule",
130
+ "result" => "create",
131
+ "status" => "skipped",
132
+ "type" => :link,
133
+ }
134
+ end
135
+ let(:conditional) do
136
+ double("Chef::Resource::Conditional", :to_text => "because")
137
+ end
138
+
139
+ it "should handle any Exception and throw a helpful message by mocking the identity" do
140
+ report.skipped(conditional)
141
+ expect(report.to_hash).to eq hash
142
+ end
143
+ end
144
+ end
145
+ end
@@ -45,20 +45,6 @@ describe Chef::Deprecation do
45
45
  add_deprecation_warnings_for(DeprecatedMethods.instance_methods)
46
46
  end
47
47
 
48
- method_snapshot_file = File.join(CHEF_SPEC_DATA, "file-providers-method-snapshot-chef-11-4.json")
49
- method_snapshot = Chef::JSONCompat.parse(File.open(method_snapshot_file).read())
50
-
51
- method_snapshot.each do |class_name, old_methods|
52
- class_object = class_from_string(class_name)
53
- current_methods = class_object.public_instance_methods.map(&:to_sym)
54
-
55
- it "defines all methods on #{class_object} that were available in 11.0" do
56
- old_methods.each do |old_method|
57
- expect(current_methods).to include(old_method.to_sym)
58
- end
59
- end
60
- end
61
-
62
48
  context "when Chef::Config[:treat_deprecation_warnings_as_errors] is off" do
63
49
  before do
64
50
  Chef::Config[:treat_deprecation_warnings_as_errors] = false
@@ -39,7 +39,7 @@ describe Chef::EncryptedDataBagItem::Encryptor do
39
39
  let(:key) { "passwd" }
40
40
 
41
41
  it "encrypts to format version 1 by default" do
42
- expect(encryptor).to be_a_instance_of(Chef::EncryptedDataBagItem::Encryptor::Version1Encryptor)
42
+ expect(encryptor).to be_a_instance_of(Chef::EncryptedDataBagItem::Encryptor::Version3Encryptor)
43
43
  end
44
44
 
45
45
  describe "generating a random IV" do
@@ -66,8 +66,8 @@ describe Chef::EncryptedDataBagItem::Encryptor do
66
66
  final_data = encryptor.for_encrypted_item
67
67
  expect(final_data["encrypted_data"]).to eq encryptor.encrypted_data
68
68
  expect(final_data["iv"]).to eq Base64.encode64(encryptor.iv)
69
- expect(final_data["version"]).to eq 1
70
- expect(final_data["cipher"]).to eq "aes-256-cbc"
69
+ expect(final_data["version"]).to eq 3
70
+ expect(final_data["cipher"]).to eq "aes-256-gcm"
71
71
  end
72
72
  end
73
73
 
@@ -238,7 +238,7 @@ describe Chef::EncryptedDataBagItem::Decryptor do
238
238
  context "when decrypting a version 1 (JSON+aes-256-cbc+random iv) encrypted value" do
239
239
 
240
240
  let(:encrypted_value) do
241
- Chef::EncryptedDataBagItem::Encryptor.new(plaintext_data, encryption_key).for_encrypted_item
241
+ Chef::EncryptedDataBagItem::Encryptor::Version1Encryptor.new(plaintext_data, encryption_key).for_encrypted_item
242
242
  end
243
243
 
244
244
  it "selects the correct strategy for version 1" do
@@ -336,7 +336,7 @@ describe Chef::EncryptedDataBagItem do
336
336
  end
337
337
 
338
338
  it "encrypts non-collection objects" do
339
- expect(encoded_data["greeting"]["version"]).to eq 1
339
+ expect(encoded_data["greeting"]["version"]).to eq 3
340
340
  expect(encoded_data["greeting"]).to have_key("iv")
341
341
 
342
342
  iv = encoded_data["greeting"]["iv"]
@@ -346,7 +346,7 @@ describe Chef::EncryptedDataBagItem do
346
346
  end
347
347
 
348
348
  it "encrypts nested values" do
349
- expect(encoded_data["nested"]["version"]).to eq 1
349
+ expect(encoded_data["nested"]["version"]).to eq 3
350
350
  expect(encoded_data["nested"]).to have_key("iv")
351
351
 
352
352
  iv = encoded_data["nested"]["iv"]
@@ -49,7 +49,21 @@ describe Chef::Formatters::ErrorDescription do
49
49
 
50
50
  describe "#display" do
51
51
  before do
52
- stub_const("RUBY_PLATFORM", "ruby-foo-9000")
52
+ stub_const("Chef::VERSION", "1.2.3")
53
+ stub_const("RUBY_DESCRIPTION", "ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]")
54
+ allow(subject).to receive(:caller) { Kernel.caller + ["/test/bin/chef-client:1:in `<main>'"] }
55
+ allow(File).to receive(:realpath).and_call_original
56
+ allow(File).to receive(:realpath).with("/test/bin/chef-client").and_return("/test/bin/chef-client")
57
+ end
58
+
59
+ around do |ex|
60
+ old_program_name = $PROGRAM_NAME
61
+ begin
62
+ $PROGRAM_NAME = "chef-client"
63
+ ex.run
64
+ ensure
65
+ $PROGRAM_NAME = old_program_name
66
+ end
53
67
  end
54
68
 
55
69
  context "when no sections have been added" do
@@ -60,9 +74,12 @@ describe Chef::Formatters::ErrorDescription do
60
74
  test title
61
75
  ================================================================================
62
76
 
63
- Platform:
64
- ---------
65
- ruby-foo-9000
77
+ System Info:
78
+ ------------
79
+ chef_version=1.2.3
80
+ ruby=ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]
81
+ program_name=chef-client
82
+ executable=/test/bin/chef-client
66
83
 
67
84
  END
68
85
  end
@@ -84,9 +101,37 @@ test heading
84
101
  ------------
85
102
  test text
86
103
 
87
- Platform:
88
- ---------
89
- ruby-foo-9000
104
+ System Info:
105
+ ------------
106
+ chef_version=1.2.3
107
+ ruby=ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]
108
+ program_name=chef-client
109
+ executable=/test/bin/chef-client
110
+
111
+ END
112
+ end
113
+
114
+ end
115
+
116
+ context "when node object is available" do
117
+ it "should output the expected sections" do
118
+ # This can't be in a before block because the spec-wide helper calls a
119
+ # reset on global values.
120
+ Chef.set_node({ "platform" => "openvms", "platform_version" => "8.4-2L1" })
121
+ subject.display(out)
122
+ expect(out.out.string).to eq <<-END
123
+ ================================================================================
124
+ test title
125
+ ================================================================================
126
+
127
+ System Info:
128
+ ------------
129
+ chef_version=1.2.3
130
+ platform=openvms
131
+ platform_version=8.4-2L1
132
+ ruby=ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]
133
+ program_name=chef-client
134
+ executable=/test/bin/chef-client
90
135
 
91
136
  END
92
137
  end
@@ -0,0 +1,79 @@
1
+ #
2
+ # Copyright:: Copyright 2017, Chef Software, Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require "spec_helper"
19
+
20
+ describe Chef::HTTP::APIVersions do
21
+ class TestVersionClient < Chef::HTTP
22
+ use Chef::HTTP::APIVersions
23
+ end
24
+
25
+ before do
26
+ Chef::ServerAPIVersions.instance.reset!
27
+ end
28
+
29
+ let(:method) { "GET" }
30
+ let(:url) { "http://dummy.com" }
31
+ let(:headers) { {} }
32
+ let(:data) { false }
33
+
34
+ let(:request) {}
35
+ let(:return_value) { "200" }
36
+
37
+ # Test Variables
38
+ let(:response_body) { "Thanks for checking in." }
39
+ let(:response_headers) do
40
+ {
41
+ "x-ops-server-api-version" => { "min_version" => 0, "max_version" => 2 }.to_json,
42
+ }
43
+ end
44
+
45
+ let(:response) do
46
+ m = double("HttpResponse", :body => response_body)
47
+ allow(m).to receive(:key?).with("x-ops-server-api-version").and_return(true)
48
+ allow(m).to receive(:code).and_return(return_value)
49
+ allow(m).to receive(:[]) do |key|
50
+ response_headers[key]
51
+ end
52
+
53
+ m
54
+ end
55
+
56
+ let(:middleware) do
57
+ client = TestVersionClient.new(url)
58
+ client.middlewares[0]
59
+ end
60
+
61
+ def run_api_version_handler
62
+ middleware.handle_request(method, url, headers, data)
63
+ middleware.handle_response(response, request, return_value)
64
+ end
65
+
66
+ it "correctly stores server api versions" do
67
+ run_api_version_handler
68
+ expect(Chef::ServerAPIVersions.instance.min_server_version).to eq(0)
69
+ end
70
+
71
+ context "with an unacceptable api version" do
72
+ let (:return_value) { "406" }
73
+ it "resets the list of supported versions" do
74
+ Chef::ServerAPIVersions.instance.set_versions({ "min_version" => 1, "max_version" => 3 })
75
+ run_api_version_handler
76
+ expect(Chef::ServerAPIVersions.instance.min_server_version).to eq(0)
77
+ end
78
+ end
79
+ end
@@ -38,6 +38,26 @@ describe Chef::HTTP::Authenticator do
38
38
  to include({ "X-Ops-Server-API-Version" => Chef::HTTP::Authenticator::DEFAULT_SERVER_API_VERSION })
39
39
  end
40
40
 
41
+ context "when version_class is provided" do
42
+ class V0Class; extend Chef::Mixin::VersionedAPI; minimum_api_version 0; end
43
+ class V2Class; extend Chef::Mixin::VersionedAPI; minimum_api_version 2; end
44
+
45
+ class AuthFactoryClass
46
+ extend Chef::Mixin::VersionedAPIFactory
47
+ add_versioned_api_class V0Class
48
+ add_versioned_api_class V2Class
49
+ end
50
+
51
+ let(:class_instance) { Chef::HTTP::Authenticator.new({ version_class: AuthFactoryClass }) }
52
+
53
+ it "uses it to select the correct http version" do
54
+ Chef::ServerAPIVersions.instance.reset!
55
+ expect(AuthFactoryClass).to receive(:best_request_version).and_call_original
56
+ expect(class_instance.handle_request(method, url, headers, data)[2]).
57
+ to include({ "X-Ops-Server-API-Version" => "2" })
58
+ end
59
+ end
60
+
41
61
  context "when api_version is set to something other than the default" do
42
62
  let(:class_instance) { Chef::HTTP::Authenticator.new({ :api_version => "-10" }) }
43
63
 
@@ -132,7 +132,7 @@ describe Chef::HTTP::SocketlessChefZeroClient do
132
132
 
133
133
  let(:method) { :GET }
134
134
  let(:relative_url) { "clients" }
135
- let(:headers) { { "Accept" => "application/json" } }
135
+ let(:headers) { { "Accept" => "application/json", "X-Ops-Server-API-Version" => "2" } }
136
136
  let(:body) { false }
137
137
 
138
138
  let(:expected_rack_req) do
@@ -144,6 +144,7 @@ describe Chef::HTTP::SocketlessChefZeroClient do
144
144
  "QUERY_STRING" => uri.query,
145
145
  "SERVER_PORT" => uri.port,
146
146
  "HTTP_HOST" => "localhost:#{uri.port}",
147
+ "HTTP_X_OPS_SERVER_API_VERSION" => "2",
147
148
  "rack.url_scheme" => "chefzero",
148
149
  "rack.input" => an_instance_of(StringIO),
149
150
  }
@@ -22,28 +22,6 @@ require "chef/json_compat"
22
22
  describe Chef::JSONCompat do
23
23
  before { Chef::Config[:treat_deprecation_warnings_as_errors] = false }
24
24
 
25
- describe "#from_json with JSON containing an existing class" do
26
- let(:json) { '{"json_class": "Chef::Role"}' }
27
-
28
- it "emits a deprecation warning" do
29
- Chef::Config[:treat_deprecation_warnings_as_errors] = true
30
- expect { Chef::JSONCompat.from_json(json) }.to raise_error Chef::Exceptions::DeprecatedFeatureError,
31
- /Auto inflation of JSON data is deprecated. Please use Chef::Role#from_hash/
32
- end
33
-
34
- it "returns an instance of the class instead of a Hash" do
35
- expect(Chef::JSONCompat.from_json(json).class).to eq Chef::Role
36
- end
37
- end
38
-
39
- describe "#from_json with JSON containing comments" do
40
- let(:json) { %Q{{\n/* comment */\n// comment 2\n"json_class": "Chef::Role"}} }
41
-
42
- it "returns an instance of the class instead of a Hash" do
43
- expect(Chef::JSONCompat.from_json(json).class).to eq Chef::Role
44
- end
45
- end
46
-
47
25
  describe "#parse with JSON containing comments" do
48
26
  let(:json) { %Q{{\n/* comment */\n// comment 2\n"json_class": "Chef::Role"}} }
49
27
 
@@ -52,16 +30,6 @@ describe Chef::JSONCompat do
52
30
  end
53
31
  end
54
32
 
55
- describe 'with JSON containing "Chef::Sandbox" as a json_class value' do
56
- require "chef/sandbox" # Only needed for this test
57
-
58
- let(:json) { '{"json_class": "Chef::Sandbox", "arbitrary": "data"}' }
59
-
60
- it "returns a Hash, because Chef::Sandbox is a dummy class" do
61
- expect(Chef::JSONCompat.from_json(json)).to eq({ "json_class" => "Chef::Sandbox", "arbitrary" => "data" })
62
- end
63
- end
64
-
65
33
  describe "when pretty printing an object that defines #to_json" do
66
34
  class Foo
67
35
  def to_json(*a)
@@ -48,6 +48,35 @@ describe Chef::Knife::Bootstrap do
48
48
  expect(File.basename(knife.bootstrap_template)).to eq("chef-full")
49
49
  end
50
50
 
51
+ context "when using the chef-full default template" do
52
+ let(:rendered_template) do
53
+ knife.merge_configs
54
+ knife.render_template
55
+ end
56
+
57
+ it "should render client.rb" do
58
+ expect(rendered_template).to match("cat > /etc/chef/client.rb <<'EOP'")
59
+ expect(rendered_template).to match("chef_server_url \"https://localhost:443\"")
60
+ expect(rendered_template).to match("validation_client_name \"chef-validator\"")
61
+ expect(rendered_template).to match("log_location STDOUT")
62
+ end
63
+
64
+ it "should render first-boot.json" do
65
+ expect(rendered_template).to match("cat > /etc/chef/first-boot.json <<'EOP'")
66
+ expect(rendered_template).to match('{"run_list":\[\]}')
67
+ end
68
+
69
+ context "and encrypted_data_bag_secret was provided" do
70
+ it "should render encrypted_data_bag_secret file" do
71
+ expect(knife).to receive(:encryption_secret_provided_ignore_encrypt_flag?).and_return(true)
72
+ expect(knife).to receive(:read_secret).and_return("secrets")
73
+ expect(rendered_template).to match("cat > /etc/chef/encrypted_data_bag_secret <<'EOP'")
74
+ expect(rendered_template).to match('{"run_list":\[\]}')
75
+ expect(rendered_template).to match(%r{secrets})
76
+ end
77
+ end
78
+ end
79
+
51
80
  context "with --bootstrap-vault-item" do
52
81
  let(:bootstrap_cli_options) { [ "--bootstrap-vault-item", "vault1:item1", "--bootstrap-vault-item", "vault1:item2", "--bootstrap-vault-item", "vault2:item1" ] }
53
82
  it "sets the knife config cli option correctly" do
@@ -649,6 +678,7 @@ describe Chef::Knife::Bootstrap do
649
678
  Chef::Config[:knife][:forward_agent] = true
650
679
  Chef::Config[:knife][:ssh_identity_file] = "~/.ssh/you.rsa"
651
680
  Chef::Config[:knife][:ssh_gateway] = "towel.blinkenlights.nl"
681
+ Chef::Config[:knife][:ssh_gateway_identity] = "~/.ssh/gateway.rsa"
652
682
  Chef::Config[:knife][:host_key_verify] = true
653
683
  allow(knife).to receive(:render_template).and_return("")
654
684
  knife.config = {}
@@ -676,6 +706,10 @@ describe Chef::Knife::Bootstrap do
676
706
  expect(knife_ssh.config[:ssh_gateway]).to eq("towel.blinkenlights.nl")
677
707
  end
678
708
 
709
+ it "configures the ssh gateway identity" do
710
+ expect(knife_ssh.config[:ssh_gateway_identity]).to eq("~/.ssh/gateway.rsa")
711
+ end
712
+
679
713
  it "configures the host key verify mode" do
680
714
  expect(knife_ssh.config[:host_key_verify]).to eq(true)
681
715
  end
@@ -58,8 +58,6 @@ describe Chef::Knife::ConfigureClient do
58
58
  it "should write out the config file" do
59
59
  allow(FileUtils).to receive(:mkdir_p)
60
60
  @knife.run
61
- expect(@client_file.string).to match /log_level\s+\:info/
62
- expect(@client_file.string).to match /log_location\s+STDOUT/
63
61
  expect(@client_file.string).to match /chef_server_url\s+'https\:\/\/chef\.example\.com'/
64
62
  expect(@client_file.string).to match /validation_client_name\s+'chef-validator'/
65
63
  end