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:: AJ Christensen (<aj@junglist.gen.nz>)
3
3
  # Author:: Mark Mzyk (mmzyk@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");
@@ -187,53 +187,56 @@ describe Chef::Application do
187
187
  allow(Chef::Log).to receive(:level=)
188
188
  @monologger = double("Monologger")
189
189
  expect(MonoLogger).to receive(:new).with(Chef::Config[:log_location]).and_return(@monologger)
190
+ allow(MonoLogger).to receive(:new).with(STDOUT).and_return(@monologger)
191
+ allow(@monologger).to receive(:formatter=).with(Chef::Log.logger.formatter)
190
192
  expect(Chef::Log).to receive(:init).with(@monologger)
191
193
  @app.configure_logging
192
194
  end
193
195
 
194
196
  shared_examples_for "log_level_is_auto" do
195
- context "when STDOUT is to a tty" do
197
+ before do
198
+ allow(STDOUT).to receive(:tty?).and_return(true)
199
+ end
200
+
201
+ it "configures the log level to :warn" do
202
+ @app.configure_logging
203
+ expect(Chef::Log.level).to eq(:warn)
204
+ end
205
+
206
+ context "when force_formater is configured" do
196
207
  before do
197
- allow(STDOUT).to receive(:tty?).and_return(true)
208
+ Chef::Config[:force_formatter] = true
198
209
  end
199
210
 
200
- it "configures the log level to :warn" do
211
+ it "configures the log level to warn" do
201
212
  @app.configure_logging
202
213
  expect(Chef::Log.level).to eq(:warn)
203
214
  end
204
-
205
- context "when force_logger is configured" do
206
- before do
207
- Chef::Config[:force_logger] = true
208
- end
209
-
210
- it "configures the log level to info" do
211
- @app.configure_logging
212
- expect(Chef::Log.level).to eq(:info)
213
- end
214
- end
215
215
  end
216
216
 
217
- context "when STDOUT is not to a tty" do
217
+ context "when force_logger is configured" do
218
218
  before do
219
- allow(STDOUT).to receive(:tty?).and_return(false)
219
+ Chef::Config[:force_logger] = true
220
220
  end
221
221
 
222
- it "configures the log level to :info" do
222
+ it "configures the log level to info" do
223
223
  @app.configure_logging
224
224
  expect(Chef::Log.level).to eq(:info)
225
225
  end
226
+ end
226
227
 
227
- context "when force_formatter is configured" do
228
- before do
229
- Chef::Config[:force_formatter] = true
230
- end
231
- it "sets the log level to :warn" do
232
- @app.configure_logging
233
- expect(Chef::Log.level).to eq(:warn)
234
- end
228
+ context "when both are is configured" do
229
+ before do
230
+ Chef::Config[:force_logger] = true
231
+ Chef::Config[:force_formatter] = true
232
+ end
233
+
234
+ it "configures the log level to warn" do
235
+ @app.configure_logging
236
+ expect(Chef::Log.level).to eq(:warn)
235
237
  end
236
238
  end
239
+
237
240
  end
238
241
 
239
242
  context "when log_level is not set" do
@@ -299,16 +302,23 @@ describe Chef::Application do
299
302
  Chef::Application.fatal! "blah"
300
303
  end
301
304
 
302
- describe "when an exit code is supplied" do
305
+ describe "when a standard exit code is supplied" do
303
306
  it "should exit with the given exit code" do
304
- expect(Process).to receive(:exit).with(-100).and_return(true)
307
+ expect(Process).to receive(:exit).with(42).and_return(true)
308
+ Chef::Application.fatal! "blah", 42
309
+ end
310
+ end
311
+
312
+ describe "when a non-standard exit code is supplied" do
313
+ it "should exit with the default exit code" do
314
+ expect(Process).to receive(:exit).with(1).and_return(true)
305
315
  Chef::Application.fatal! "blah", -100
306
316
  end
307
317
  end
308
318
 
309
319
  describe "when an exit code is not supplied" do
310
320
  it "should exit with the default exit code" do
311
- expect(Process).to receive(:exit).with(-1).and_return(true)
321
+ expect(Process).to receive(:exit).with(1).and_return(true)
312
322
  Chef::Application.fatal! "blah"
313
323
  end
314
324
  end
@@ -17,7 +17,7 @@
17
17
  #
18
18
 
19
19
  require "spec_helper"
20
- require "chef/chef_fs/file_system/operation_failed_error"
20
+ require "chef/chef_fs/file_system/exceptions"
21
21
 
22
22
  describe Chef::ChefFS::FileSystem::OperationFailedError do
23
23
  context "message" do
@@ -2,7 +2,7 @@
2
2
  # Author:: Adam Jacob (<adam@chef.io>)
3
3
  # Author:: Tim Hinderliter (<tim@chef.io>)
4
4
  # Author:: Christopher Walters (<cw@chef.io>)
5
- # Copyright:: Copyright 2008-2016, Chef Software, Inc.
5
+ # Copyright:: Copyright 2008-2017, Chef Software Inc.
6
6
  # License:: Apache License, Version 2.0
7
7
  #
8
8
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -71,48 +71,40 @@ describe Chef::Client do
71
71
 
72
72
  describe "configuring output formatters" do
73
73
  context "when no formatter has been configured" do
74
- context "and STDOUT is a TTY" do
74
+ it "configures the :doc formatter" do
75
+ expect(client.formatters_for_run).to eq([[:doc]])
76
+ end
77
+
78
+ context "and force_logger is set" do
75
79
  before do
76
- allow(STDOUT).to receive(:tty?).and_return(true)
80
+ Chef::Config[:force_logger] = true
77
81
  end
78
82
 
79
- it "configures the :doc formatter" do
80
- expect(client.formatters_for_run).to eq([[:doc]])
83
+ it "configures the :null formatter" do
84
+ expect(client.formatters_for_run).to eq([[:null]])
81
85
  end
86
+ end
82
87
 
83
- context "and force_logger is set" do
84
- before do
85
- Chef::Config[:force_logger] = true
86
- end
87
-
88
- it "configures the :null formatter" do
89
- expect(Chef::Config[:force_logger]).to be_truthy
90
- expect(client.formatters_for_run).to eq([[:null]])
91
- end
92
-
88
+ context "and force_formatter is set" do
89
+ before do
90
+ Chef::Config[:force_formatter] = true
93
91
  end
94
92
 
93
+ it "configures the :doc formatter" do
94
+ expect(client.formatters_for_run).to eq([[:doc]])
95
+ end
95
96
  end
96
97
 
97
- context "and STDOUT is not a TTY" do
98
+ context "both are set" do
98
99
  before do
99
- allow(STDOUT).to receive(:tty?).and_return(false)
100
+ Chef::Config[:force_formatter] = true
101
+ Chef::Config[:force_logger] = true
100
102
  end
101
103
 
102
- it "configures the :null formatter" do
103
- expect(client.formatters_for_run).to eq([[:null]])
104
- end
105
-
106
- context "and force_formatter is set" do
107
- before do
108
- Chef::Config[:force_formatter] = true
109
- end
110
- it "it configures the :doc formatter" do
111
- expect(client.formatters_for_run).to eq([[:doc]])
112
- end
104
+ it "configures the :doc formatter" do
105
+ expect(client.formatters_for_run).to eq([[:doc]])
113
106
  end
114
107
  end
115
-
116
108
  end
117
109
 
118
110
  context "when a formatter is configured" do
@@ -188,7 +180,7 @@ describe Chef::Client do
188
180
  # ---Client#sync_cookbooks -- downloads the list of cookbooks to sync
189
181
  #
190
182
  expect_any_instance_of(Chef::CookbookSynchronizer).to receive(:sync_cookbooks)
191
- expect(Chef::ServerAPI).to receive(:new).with(Chef::Config[:chef_server_url]).and_return(http_cookbook_sync)
183
+ expect(Chef::ServerAPI).to receive(:new).with(Chef::Config[:chef_server_url], version_class: Chef::CookbookManifestVersions).and_return(http_cookbook_sync)
192
184
  expect(http_cookbook_sync).to receive(:post).
193
185
  with("environments/_default/cookbook_versions", { :run_list => ["override_recipe"] }).
194
186
  and_return({})
@@ -222,7 +214,7 @@ describe Chef::Client do
222
214
  # ---Client#sync_cookbooks -- downloads the list of cookbooks to sync
223
215
  #
224
216
  expect_any_instance_of(Chef::CookbookSynchronizer).to receive(:sync_cookbooks)
225
- expect(Chef::ServerAPI).to receive(:new).with(Chef::Config[:chef_server_url]).and_return(http_cookbook_sync)
217
+ expect(Chef::ServerAPI).to receive(:new).with(Chef::Config[:chef_server_url], version_class: Chef::CookbookManifestVersions).and_return(http_cookbook_sync)
226
218
  expect(http_cookbook_sync).to receive(:post).
227
219
  with("environments/_default/cookbook_versions", { :run_list => ["new_run_list_recipe"] }).
228
220
  and_return({})
@@ -402,6 +394,55 @@ describe Chef::Client do
402
394
  end
403
395
  end
404
396
 
397
+ describe "load_required_recipe" do
398
+ let(:rest) { double("Chef::ServerAPI (required recipe)") }
399
+ let(:run_context) { double("Chef::RunContext") }
400
+ let(:recipe) { double("Chef::Recipe (required recipe)") }
401
+ let(:required_recipe) do
402
+ <<EOM
403
+ fake_recipe_variable = "for reals"
404
+ EOM
405
+ end
406
+
407
+ context "when required_recipe is configured" do
408
+
409
+ before(:each) do
410
+ expect(rest).to receive(:get).with("required_recipe").and_return(required_recipe)
411
+ expect(Chef::Recipe).to receive(:new).with(nil, nil, run_context).and_return(recipe)
412
+ expect(recipe).to receive(:from_file)
413
+ end
414
+
415
+ it "fetches the recipe and adds it to the run context" do
416
+ client.load_required_recipe(rest, run_context)
417
+ end
418
+
419
+ context "when the required_recipe has bad contents" do
420
+ let(:required_recipe) do
421
+ <<EOM
422
+ this is not a recipe
423
+ EOM
424
+ end
425
+ it "should not raise an error" do
426
+ expect { client.load_required_recipe(rest, run_context) }.not_to raise_error()
427
+ end
428
+ end
429
+ end
430
+
431
+ context "when required_recipe returns 404" do
432
+ let(:http_response) { Net::HTTPNotFound.new("1.1", "404", "Not Found") }
433
+ let(:http_exception) { Net::HTTPServerException.new('404 "Not Found"', http_response) }
434
+
435
+ before(:each) do
436
+ expect(rest).to receive(:get).with("required_recipe").and_raise(http_exception)
437
+ end
438
+
439
+ it "should log and continue on" do
440
+ expect(Chef::Log).to receive(:debug)
441
+ client.load_required_recipe(rest, run_context)
442
+ end
443
+ end
444
+ end
445
+
405
446
  describe "windows_admin_check" do
406
447
  context "platform is not windows" do
407
448
  before do
@@ -58,7 +58,7 @@ describe Chef::ConfigFetcher do
58
58
  and_return(invalid_json)
59
59
 
60
60
  expect(Chef::Application).to receive(:fatal!).
61
- with(invalid_json_error_regex, Chef::Exceptions::DeprecatedExitCode.new)
61
+ with(invalid_json_error_regex)
62
62
  fetcher.fetch_json
63
63
  end
64
64
  end
@@ -104,7 +104,7 @@ describe Chef::ConfigFetcher do
104
104
  with("").and_return(invalid_json)
105
105
 
106
106
  expect(Chef::Application).to receive(:fatal!).
107
- with(invalid_json_error_regex, Chef::Exceptions::DeprecatedExitCode.new)
107
+ with(invalid_json_error_regex)
108
108
  fetcher.fetch_json
109
109
  end
110
110
  end
@@ -40,42 +40,45 @@ describe Chef::Cookbook::CookbookVersionLoader do
40
40
  File.join(cookbook_path, cookbook_relative_path)
41
41
  end
42
42
 
43
+ def full_paths_for_part(part)
44
+ loaded_cookbook.files_for(part).inject([]) { |memo, f| memo << f[:full_path]; memo }
45
+ end
46
+
43
47
  it "loads attribute files of the cookbook" do
44
- expect(loaded_cookbook.attribute_filenames).to include(full_path("/attributes/default.rb"))
45
- expect(loaded_cookbook.attribute_filenames).to include(full_path("/attributes/smokey.rb"))
48
+ expect(full_paths_for_part("attributes")).to include(full_path("/attributes/default.rb"))
49
+ expect(full_paths_for_part("attributes")).to include(full_path("/attributes/smokey.rb"))
46
50
  end
47
51
 
48
52
  it "loads definition files" do
49
- expect(loaded_cookbook.definition_filenames).to include(full_path("/definitions/client.rb"))
50
- expect(loaded_cookbook.definition_filenames).to include(full_path("/definitions/server.rb"))
53
+ expect(full_paths_for_part("definitions")).to include(full_path("/definitions/client.rb"))
54
+ expect(full_paths_for_part("definitions")).to include(full_path("/definitions/server.rb"))
51
55
  end
52
56
 
53
57
  it "loads recipes" do
54
- expect(loaded_cookbook.recipe_filenames).to include(full_path("/recipes/default.rb"))
55
- expect(loaded_cookbook.recipe_filenames).to include(full_path("/recipes/gigantor.rb"))
56
- expect(loaded_cookbook.recipe_filenames).to include(full_path("/recipes/one.rb"))
57
- expect(loaded_cookbook.recipe_filenames).to include(full_path("/recipes/return.rb"))
58
+ expect(full_paths_for_part("recipes")).to include(full_path("/recipes/default.rb"))
59
+ expect(full_paths_for_part("recipes")).to include(full_path("/recipes/gigantor.rb"))
60
+ expect(full_paths_for_part("recipes")).to include(full_path("/recipes/one.rb"))
61
+ expect(full_paths_for_part("recipes")).to include(full_path("/recipes/return.rb"))
58
62
  end
59
63
 
60
64
  it "loads libraries" do
61
- expect(loaded_cookbook.library_filenames).to include(full_path("/libraries/openldap.rb"))
62
- expect(loaded_cookbook.library_filenames).to include(full_path("/libraries/openldap/version.rb"))
65
+ expect(full_paths_for_part("libraries")).to include(full_path("/libraries/openldap.rb"))
66
+ expect(full_paths_for_part("libraries")).to include(full_path("/libraries/openldap/version.rb"))
63
67
  end
64
68
 
65
69
  it "loads static files in the files/ dir" do
66
- expect(loaded_cookbook.file_filenames).to include(full_path("/files/default/remotedir/remotesubdir/remote_subdir_file1.txt"))
67
- expect(loaded_cookbook.file_filenames).to include(full_path("/files/default/remotedir/remotesubdir/remote_subdir_file2.txt"))
70
+ expect(full_paths_for_part("files")).to include(full_path("/files/default/remotedir/remotesubdir/remote_subdir_file1.txt"))
71
+ expect(full_paths_for_part("files")).to include(full_path("/files/default/remotedir/remotesubdir/remote_subdir_file2.txt"))
68
72
  end
69
73
 
70
74
  it "loads files that start with a ." do
71
- expect(loaded_cookbook.file_filenames).to include(full_path("/files/default/.dotfile"))
72
- expect(loaded_cookbook.file_filenames).to include(full_path("/files/default/.ssh/id_rsa"))
73
- expect(loaded_cookbook.file_filenames).to include(full_path("/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir"))
75
+ expect(full_paths_for_part("files")).to include(full_path("/files/default/.dotfile"))
76
+ expect(full_paths_for_part("files")).to include(full_path("/files/default/.ssh/id_rsa"))
77
+ expect(full_paths_for_part("files")).to include(full_path("/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir"))
74
78
  end
75
79
 
76
80
  it "loads root files that start with a ." do
77
81
  expect(loaded_cookbook.all_files).to include(full_path(".root_dotfile"))
78
- expect(loaded_cookbook.root_filenames).to include(full_path(".root_dotfile"))
79
82
  end
80
83
 
81
84
  it "loads all unignored files, even if they don't match a segment type" do
@@ -97,13 +100,22 @@ describe Chef::Cookbook::CookbookVersionLoader do
97
100
  let(:cookbook_path) { File.join(CHEF_SPEC_DATA, "kitchen/openldap") }
98
101
 
99
102
  it "skips ignored files" do
100
- expect(loaded_cookbook.recipe_filenames).to include(full_path("recipes/gigantor.rb"))
101
- expect(loaded_cookbook.recipe_filenames).to include(full_path("recipes/woot.rb"))
102
- expect(loaded_cookbook.recipe_filenames).to_not include(full_path("recipes/ignoreme.rb"))
103
+ expect(full_paths_for_part("recipes")).to include(full_path("recipes/gigantor.rb"))
104
+ expect(full_paths_for_part("recipes")).to include(full_path("recipes/woot.rb"))
105
+ expect(full_paths_for_part("recipes")).to_not include(full_path("recipes/ignoreme.rb"))
103
106
  end
104
107
 
105
108
  end
106
109
 
110
+ context "when a cookbook's metadata.rb does not parse but the compiled metadata.json is present" do
111
+ let(:cookbook_path) { File.join(CHEF_SPEC_DATA, "prefer_metadata_json") }
112
+
113
+ it "reads the cookbook" do
114
+ expect(loaded_cookbook.metadata.name.to_s).to eq("prefer_metadata_json")
115
+ expect(loaded_cookbook.metadata.version.to_s).to eq("1.2.3")
116
+ end
117
+ end
118
+
107
119
  context "when the given path is not actually a cookbook" do
108
120
 
109
121
  let(:cookbook_path) { File.join(CHEF_SPEC_DATA, "cookbooks/NOTHING_HERE_FOLKS") }
@@ -16,6 +16,7 @@
16
16
  # limitations under the License.
17
17
  #
18
18
  require "spec_helper"
19
+ require "chef/cookbook_version"
19
20
 
20
21
  describe Chef::Cookbook::FileVendor do
21
22
 
@@ -25,6 +26,12 @@ describe Chef::Cookbook::FileVendor do
25
26
 
26
27
  let(:http) { double("Chef::ServerAPI") }
27
28
 
29
+ # A manifest is a Hash of the format defined by Chef::CookbookVersion#manifest
30
+ let(:manifest) do
31
+ cbv = Chef::CookbookVersion.new("bob", Array(Dir.tmpdir))
32
+ cbv.cookbook_manifest
33
+ end
34
+
28
35
  before do
29
36
  file_vendor_class.fetch_from_remote(http)
30
37
  end
@@ -39,8 +46,11 @@ describe Chef::Cookbook::FileVendor do
39
46
 
40
47
  context "with a manifest from a cookbook version" do
41
48
 
42
- # A manifest is a Hash of the format defined by Chef::CookbookVersion#manifest
43
- let(:manifest) { { :cookbook_name => "bob", :name => "bob-1.2.3" } }
49
+ # # A manifest is a Hash of the format defined by Chef::CookbookVersion#manifest
50
+ # let(:manifest) do
51
+ # cbv = Chef::CookbookVersion.new("bob", Array(Dir.tmpdir))
52
+ # cbv.cookbook_manifest
53
+ # end
44
54
 
45
55
  it "creates a RemoteFileVendor for a given manifest" do
46
56
  file_vendor = file_vendor_class.create_from_manifest(manifest)
@@ -53,9 +63,6 @@ describe Chef::Cookbook::FileVendor do
53
63
 
54
64
  context "with a manifest from a cookbook artifact" do
55
65
 
56
- # A manifest is a Hash of the format defined by Chef::CookbookVersion#manifest
57
- let(:manifest) { { :name => "bob" } }
58
-
59
66
  it "creates a RemoteFileVendor for a given manifest" do
60
67
  file_vendor = file_vendor_class.create_from_manifest(manifest)
61
68
  expect(file_vendor).to be_a_kind_of(Chef::Cookbook::RemoteFileVendor)
@@ -70,8 +77,10 @@ describe Chef::Cookbook::FileVendor do
70
77
 
71
78
  let(:cookbook_path) { %w{/var/chef/cookbooks /var/chef/other_cookbooks} }
72
79
 
73
- # A manifest is a Hash of the format defined by Chef::CookbookVersion#manifest
74
- let(:manifest) { { :cookbook_name => "bob" } }
80
+ let(:manifest) do
81
+ cbv = Chef::CookbookVersion.new("bob", Array(Dir.tmpdir))
82
+ cbv.cookbook_manifest
83
+ end
75
84
 
76
85
  before do
77
86
  file_vendor_class.fetch_from_disk(cookbook_path)
@@ -97,8 +106,10 @@ describe Chef::Cookbook::FileVendor do
97
106
  context "when vendoring a cookbook with a name mismatch" do
98
107
  let(:cookbook_path) { File.join(CHEF_SPEC_DATA, "cookbooks") }
99
108
 
100
- # A manifest is a Hash of the format defined by Chef::CookbookVersion#manifest
101
- let(:manifest) { { :cookbook_name => "name-mismatch" } }
109
+ let(:manifest) do
110
+ cbv = Chef::CookbookVersion.new("name-mismatch", Array(Dir.tmpdir))
111
+ cbv.cookbook_manifest
112
+ end
102
113
 
103
114
  before do
104
115
  file_vendor_class.fetch_from_disk(cookbook_path)
@@ -0,0 +1,85 @@
1
+ require "spec_helper"
2
+ require "bundler/dsl"
3
+
4
+ describe Chef::Cookbook::GemInstaller do
5
+ let(:cookbook_collection) do
6
+ {
7
+ test: double(
8
+ :cookbook,
9
+ metadata: double(
10
+ :metadata,
11
+ gems: [["httpclient"], ["nokogiri"]]
12
+ )
13
+ ),
14
+ test2: double(
15
+ :cookbook,
16
+ metadata: double(
17
+ :metadata,
18
+ gems: [["httpclient", ">= 2.0"]]
19
+ )
20
+ ),
21
+ test3: double(
22
+ :cookbook,
23
+ metadata: double(
24
+ :metadata,
25
+ gems: [["httpclient", ">= 1.0"]]
26
+ )
27
+ ),
28
+ }
29
+ end
30
+
31
+ let(:gem_installer) do
32
+ described_class.new(cookbook_collection, Chef::EventDispatch::Dispatcher.new)
33
+ end
34
+
35
+ let(:gemfile) do
36
+ StringIO.new
37
+ end
38
+
39
+ let(:shell_out) do
40
+ double(:shell_out, stdout: "")
41
+ end
42
+
43
+ let(:bundler_dsl) do
44
+ b = Bundler::Dsl.new
45
+ b.instance_eval(gemfile.string)
46
+ b
47
+ end
48
+
49
+ before(:each) do
50
+ # Prepare mocks: using a StringIO instead of a File
51
+ expect(Dir).to receive(:mktmpdir).and_yield("")
52
+ expect(File).to receive(:open).and_yield(gemfile)
53
+ expect(gemfile).to receive(:path).and_return("")
54
+ expect(IO).to receive(:read).and_return("")
55
+ expect(gem_installer).to receive(:shell_out!).and_return(shell_out)
56
+
57
+ end
58
+
59
+ it "generates a valid Gemfile" do
60
+ expect { gem_installer.install }.to_not raise_error
61
+
62
+ expect { bundler_dsl }.to_not raise_error
63
+ end
64
+
65
+ it "generate a Gemfile with all constraints" do
66
+ expect { gem_installer.install }.to_not raise_error
67
+
68
+ expect(bundler_dsl.dependencies.find { |d| d.name == "httpclient" }.requirements_list.length).to eql(2)
69
+ end
70
+
71
+ it "generates a valid Gemfile when Chef::Config[:rubygems_url] is set to a String" do
72
+ Chef::Config[:rubygems_url] = "https://www.rubygems.org"
73
+ expect { gem_installer.install }.to_not raise_error
74
+
75
+ expect(bundler_dsl.dependencies.find { |d| d.name == "httpclient" }.requirements_list.length).to eql(2)
76
+ end
77
+
78
+ it "generates a valid Gemfile when Chef::Config[:rubygems_url] is set to an Array" do
79
+ Chef::Config[:rubygems_url] = [ "https://www.rubygems.org" ]
80
+
81
+ expect { gem_installer.install }.to_not raise_error
82
+
83
+ expect(bundler_dsl.dependencies.find { |d| d.name == "httpclient" }.requirements_list.length).to eql(2)
84
+ end
85
+ end