chef 15.11.3-universal-mingw32 → 16.1.16-universal-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (513) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -7
  3. data/README.md +1 -1
  4. data/Rakefile +44 -16
  5. data/chef.gemspec +6 -4
  6. data/distro/powershell/chef/chef.psm1 +3 -3
  7. data/distro/templates/powershell/chef/chef.psm1.erb +3 -3
  8. data/lib/chef/action_collection.rb +16 -5
  9. data/lib/chef/application.rb +33 -54
  10. data/lib/chef/application/apply.rb +18 -1
  11. data/lib/chef/application/base.rb +8 -3
  12. data/lib/chef/application/knife.rb +1 -1
  13. data/lib/chef/chef_class.rb +4 -4
  14. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +1 -1
  15. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +1 -1
  16. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +6 -2
  17. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +3 -3
  18. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  19. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
  20. data/lib/chef/chef_fs/path_utils.rb +3 -3
  21. data/lib/chef/client.rb +16 -14
  22. data/lib/chef/config.rb +1 -1
  23. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  24. data/lib/chef/cookbook/gem_installer.rb +1 -1
  25. data/lib/chef/cookbook/metadata.rb +45 -22
  26. data/lib/chef/cookbook_loader.rb +1 -1
  27. data/lib/chef/cookbook_manifest.rb +1 -1
  28. data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
  29. data/lib/chef/cookbook_version.rb +38 -3
  30. data/lib/chef/data_collector.rb +1 -1
  31. data/lib/chef/data_collector/error_handlers.rb +1 -1
  32. data/lib/chef/data_collector/run_end_message.rb +7 -1
  33. data/lib/chef/decorator/lazy_array.rb +2 -2
  34. data/lib/chef/deprecated.rb +4 -0
  35. data/lib/chef/digester.rb +4 -4
  36. data/lib/chef/dist.rb +8 -0
  37. data/lib/chef/dsl/chef_vault.rb +84 -0
  38. data/lib/chef/dsl/declare_resource.rb +7 -5
  39. data/lib/chef/dsl/platform_introspection.rb +3 -2
  40. data/lib/chef/dsl/recipe.rb +7 -12
  41. data/lib/chef/dsl/universal.rb +3 -7
  42. data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
  43. data/lib/chef/encrypted_data_bag_item/encryptor.rb +1 -1
  44. data/lib/chef/event_dispatch/base.rb +3 -0
  45. data/lib/chef/formatters/base.rb +1 -1
  46. data/lib/chef/formatters/doc.rb +1 -1
  47. data/lib/chef/formatters/indentable_output_stream.rb +7 -16
  48. data/lib/chef/http.rb +1 -1
  49. data/lib/chef/http/decompressor.rb +1 -1
  50. data/lib/chef/http/http_request.rb +3 -2
  51. data/lib/chef/json_compat.rb +1 -1
  52. data/lib/chef/key.rb +1 -1
  53. data/lib/chef/knife.rb +2 -4
  54. data/lib/chef/knife/acl_add.rb +57 -0
  55. data/lib/chef/knife/acl_base.rb +183 -0
  56. data/lib/chef/knife/acl_bulk_add.rb +78 -0
  57. data/lib/chef/knife/acl_bulk_remove.rb +83 -0
  58. data/lib/chef/knife/acl_remove.rb +62 -0
  59. data/lib/chef/knife/acl_show.rb +56 -0
  60. data/lib/chef/knife/bootstrap.rb +84 -90
  61. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +2 -2
  62. data/lib/chef/knife/bootstrap/client_builder.rb +2 -2
  63. data/lib/chef/knife/bootstrap/templates/chef-full.erb +11 -11
  64. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +12 -12
  65. data/lib/chef/knife/core/bootstrap_context.rb +63 -60
  66. data/lib/chef/knife/core/generic_presenter.rb +4 -3
  67. data/lib/chef/knife/core/hashed_command_loader.rb +1 -1
  68. data/lib/chef/knife/core/node_presenter.rb +2 -2
  69. data/lib/chef/knife/core/status_presenter.rb +5 -5
  70. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  71. data/lib/chef/knife/core/ui.rb +17 -1
  72. data/lib/chef/knife/core/windows_bootstrap_context.rb +44 -42
  73. data/lib/chef/knife/data_bag_secret_options.rb +18 -45
  74. data/lib/chef/knife/group_add.rb +55 -0
  75. data/lib/chef/knife/{cookbook_site_download.rb → group_create.rb} +21 -12
  76. data/lib/chef/knife/group_destroy.rb +53 -0
  77. data/lib/chef/knife/{cookbook_site_list.rb → group_list.rb} +14 -11
  78. data/lib/chef/knife/group_remove.rb +56 -0
  79. data/lib/chef/knife/{cookbook_site_install.rb → group_show.rb} +21 -12
  80. data/lib/chef/knife/key_create_base.rb +1 -1
  81. data/lib/chef/knife/key_edit_base.rb +1 -1
  82. data/lib/chef/knife/ssh.rb +12 -31
  83. data/lib/chef/knife/status.rb +3 -3
  84. data/lib/chef/knife/supermarket_download.rb +1 -2
  85. data/lib/chef/knife/supermarket_install.rb +2 -3
  86. data/lib/chef/knife/supermarket_list.rb +1 -2
  87. data/lib/chef/knife/supermarket_search.rb +1 -2
  88. data/lib/chef/knife/supermarket_share.rb +1 -2
  89. data/lib/chef/knife/supermarket_show.rb +1 -2
  90. data/lib/chef/knife/supermarket_unshare.rb +1 -2
  91. data/lib/chef/knife/{cookbook_site_show.rb → user_dissociate.rb} +15 -13
  92. data/lib/chef/knife/{cookbook_site_search.rb → user_invite_add.rb} +16 -13
  93. data/lib/chef/knife/user_invite_list.rb +34 -0
  94. data/lib/chef/knife/user_invite_rescind.rb +63 -0
  95. data/lib/chef/knife/yaml_convert.rb +91 -0
  96. data/lib/chef/mixin/api_version_request_handling.rb +1 -1
  97. data/lib/chef/mixin/checksum.rb +0 -1
  98. data/lib/chef/mixin/openssl_helper.rb +4 -4
  99. data/lib/chef/mixin/powershell_exec.rb +10 -1
  100. data/lib/chef/mixin/powershell_out.rb +1 -1
  101. data/lib/chef/mixin/properties.rb +16 -2
  102. data/lib/chef/mixin/shell_out.rb +1 -5
  103. data/lib/chef/monkey_patches/net_http.rb +0 -4
  104. data/lib/chef/node.rb +18 -6
  105. data/lib/chef/node/attribute.rb +2 -2
  106. data/lib/chef/node/immutable_collections.rb +1 -1
  107. data/lib/chef/node/mixin/immutablize_array.rb +4 -0
  108. data/lib/chef/node/mixin/immutablize_hash.rb +3 -0
  109. data/lib/chef/node_map.rb +5 -31
  110. data/lib/chef/platform/priority_map.rb +4 -4
  111. data/lib/chef/platform/query_helpers.rb +6 -34
  112. data/lib/chef/policy_builder/policyfile.rb +1 -1
  113. data/lib/chef/powershell.rb +14 -0
  114. data/lib/chef/property.rb +24 -6
  115. data/lib/chef/provider.rb +40 -6
  116. data/lib/chef/provider/cron.rb +2 -2
  117. data/lib/chef/provider/directory.rb +3 -3
  118. data/lib/chef/provider/dsc_resource.rb +1 -1
  119. data/lib/chef/provider/dsc_script.rb +1 -1
  120. data/lib/chef/provider/execute.rb +3 -9
  121. data/lib/chef/provider/file.rb +6 -6
  122. data/lib/chef/provider/git.rb +84 -27
  123. data/lib/chef/provider/group.rb +4 -4
  124. data/lib/chef/provider/http_request.rb +6 -6
  125. data/lib/chef/provider/ifconfig.rb +4 -4
  126. data/lib/chef/provider/launchd.rb +45 -64
  127. data/lib/chef/provider/link.rb +2 -2
  128. data/lib/chef/provider/mount.rb +5 -5
  129. data/lib/chef/provider/osx_profile.rb +7 -3
  130. data/lib/chef/provider/package.rb +2 -2
  131. data/lib/chef/provider/package/cab.rb +5 -6
  132. data/lib/chef/provider/package/chocolatey.rb +1 -3
  133. data/lib/chef/provider/package/dnf.rb +66 -10
  134. data/lib/chef/provider/package/dnf/dnf_helper.py +85 -26
  135. data/lib/chef/provider/package/dnf/python_helper.rb +79 -36
  136. data/lib/chef/provider/package/dnf/version.rb +5 -1
  137. data/lib/chef/provider/package/dpkg.rb +1 -1
  138. data/lib/chef/provider/package/freebsd/base.rb +2 -1
  139. data/lib/chef/provider/package/homebrew.rb +107 -43
  140. data/lib/chef/provider/package/macports.rb +0 -2
  141. data/lib/chef/provider/package/msu.rb +4 -1
  142. data/lib/chef/provider/package/pacman.rb +25 -34
  143. data/lib/chef/provider/package/portage.rb +1 -0
  144. data/lib/chef/provider/package/powershell.rb +1 -1
  145. data/lib/chef/provider/package/rubygems.rb +30 -3
  146. data/lib/chef/provider/package/windows.rb +29 -53
  147. data/lib/chef/provider/package/windows/msi.rb +2 -2
  148. data/lib/chef/provider/package/yum.rb +1 -9
  149. data/lib/chef/provider/package/yum/yum_cache.rb +1 -1
  150. data/lib/chef/provider/package/zypper.rb +0 -1
  151. data/lib/chef/provider/powershell_script.rb +5 -11
  152. data/lib/chef/provider/registry_key.rb +4 -4
  153. data/lib/chef/provider/remote_directory.rb +5 -5
  154. data/lib/chef/provider/remote_file/ftp.rb +3 -2
  155. data/lib/chef/provider/remote_file/local_file.rb +2 -1
  156. data/lib/chef/provider/remote_file/sftp.rb +3 -2
  157. data/lib/chef/provider/route.rb +5 -3
  158. data/lib/chef/provider/ruby_block.rb +1 -1
  159. data/lib/chef/provider/script.rb +2 -2
  160. data/lib/chef/provider/service.rb +8 -8
  161. data/lib/chef/provider/service/aixinit.rb +1 -1
  162. data/lib/chef/provider/service/arch.rb +1 -1
  163. data/lib/chef/provider/service/debian.rb +30 -28
  164. data/lib/chef/provider/service/macosx.rb +16 -10
  165. data/lib/chef/provider/service/systemd.rb +12 -12
  166. data/lib/chef/provider/service/upstart.rb +1 -1
  167. data/lib/chef/provider/service/windows.rb +5 -11
  168. data/lib/chef/provider/subversion.rb +25 -5
  169. data/lib/chef/provider/systemd_unit.rb +26 -25
  170. data/lib/chef/provider/user.rb +6 -6
  171. data/lib/chef/provider/user/aix.rb +1 -1
  172. data/lib/chef/provider/user/dscl.rb +6 -6
  173. data/lib/chef/provider/user/mac.rb +20 -15
  174. data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
  175. data/lib/chef/provider/windows_env.rb +3 -3
  176. data/lib/chef/provider/windows_script.rb +2 -2
  177. data/lib/chef/provider/windows_task.rb +10 -10
  178. data/lib/chef/providers.rb +0 -6
  179. data/lib/chef/recipe.rb +36 -0
  180. data/lib/chef/resource.rb +44 -57
  181. data/lib/chef/resource/action_class.rb +24 -22
  182. data/lib/chef/resource/alternatives.rb +210 -0
  183. data/lib/chef/resource/apt_package.rb +33 -3
  184. data/lib/chef/resource/apt_preference.rb +103 -7
  185. data/lib/chef/resource/apt_repository.rb +357 -18
  186. data/lib/chef/resource/apt_update.rb +58 -5
  187. data/lib/chef/resource/archive_file.rb +6 -5
  188. data/lib/chef/resource/bash.rb +3 -1
  189. data/lib/chef/resource/batch.rb +1 -1
  190. data/lib/chef/resource/bff_package.rb +10 -2
  191. data/lib/chef/resource/breakpoint.rb +1 -2
  192. data/lib/chef/resource/build_essential.rb +49 -51
  193. data/lib/chef/resource/cab_package.rb +9 -2
  194. data/lib/chef/resource/chef_client_cron.rb +228 -0
  195. data/lib/chef/resource/chef_client_scheduled_task.rb +201 -0
  196. data/lib/chef/resource/chef_client_systemd_timer.rb +180 -0
  197. data/lib/chef/resource/chef_gem.rb +15 -18
  198. data/lib/chef/resource/chef_handler.rb +5 -4
  199. data/lib/chef/resource/chef_sleep.rb +7 -5
  200. data/lib/chef/resource/chef_vault_secret.rb +135 -0
  201. data/lib/chef/resource/chocolatey_config.rb +8 -4
  202. data/lib/chef/resource/chocolatey_feature.rb +7 -4
  203. data/lib/chef/resource/chocolatey_package.rb +7 -4
  204. data/lib/chef/resource/chocolatey_source.rb +7 -4
  205. data/lib/chef/resource/cookbook_file.rb +4 -3
  206. data/lib/chef/resource/cron.rb +34 -80
  207. data/lib/chef/resource/cron_access.rb +10 -6
  208. data/lib/chef/resource/cron_d.rb +44 -95
  209. data/lib/chef/resource/csh.rb +3 -1
  210. data/lib/chef/resource/directory.rb +3 -3
  211. data/lib/chef/resource/dmg_package.rb +22 -19
  212. data/lib/chef/resource/dnf_package.rb +3 -4
  213. data/lib/chef/resource/dpkg_package.rb +3 -2
  214. data/lib/chef/resource/dsc_resource.rb +6 -4
  215. data/lib/chef/resource/dsc_script.rb +3 -2
  216. data/lib/chef/resource/execute.rb +15 -14
  217. data/lib/chef/resource/file.rb +14 -9
  218. data/lib/chef/resource/freebsd_package.rb +3 -2
  219. data/lib/chef/resource/gem_package.rb +19 -11
  220. data/lib/chef/resource/group.rb +5 -2
  221. data/lib/chef/resource/helpers/cron_validations.rb +98 -0
  222. data/lib/chef/resource/homebrew_cask.rb +3 -2
  223. data/lib/chef/resource/homebrew_package.rb +5 -3
  224. data/lib/chef/resource/homebrew_tap.rb +3 -2
  225. data/lib/chef/resource/hostname.rb +26 -20
  226. data/lib/chef/resource/http_request.rb +1 -2
  227. data/lib/chef/resource/ifconfig.rb +8 -8
  228. data/lib/chef/resource/ips_package.rb +11 -3
  229. data/lib/chef/resource/kernel_module.rb +30 -30
  230. data/lib/chef/resource/ksh.rb +3 -1
  231. data/lib/chef/resource/launchd.rb +3 -3
  232. data/lib/chef/resource/link.rb +5 -27
  233. data/lib/chef/resource/locale.rb +60 -26
  234. data/lib/chef/resource/log.rb +13 -2
  235. data/lib/chef/resource/lwrp_base.rb +1 -1
  236. data/lib/chef/resource/macos_userdefaults.rb +18 -10
  237. data/lib/chef/resource/macosx_service.rb +3 -2
  238. data/lib/chef/resource/macports_package.rb +10 -2
  239. data/lib/chef/resource/mdadm.rb +63 -3
  240. data/lib/chef/resource/mount.rb +4 -1
  241. data/lib/chef/resource/msu_package.rb +19 -2
  242. data/lib/chef/resource/notify_group.rb +8 -3
  243. data/lib/chef/resource/ohai.rb +20 -4
  244. data/lib/chef/resource/ohai_hint.rb +4 -13
  245. data/lib/chef/resource/openbsd_package.rb +10 -2
  246. data/lib/chef/resource/openssl_dhparam.rb +11 -2
  247. data/lib/chef/resource/openssl_ec_private_key.rb +24 -2
  248. data/lib/chef/resource/openssl_ec_public_key.rb +22 -2
  249. data/lib/chef/resource/openssl_rsa_private_key.rb +21 -2
  250. data/lib/chef/resource/openssl_rsa_public_key.rb +23 -2
  251. data/lib/chef/resource/openssl_x509_certificate.rb +38 -2
  252. data/lib/chef/resource/openssl_x509_crl.rb +13 -2
  253. data/lib/chef/resource/openssl_x509_request.rb +38 -2
  254. data/lib/chef/resource/osx_profile.rb +4 -3
  255. data/lib/chef/resource/package.rb +3 -2
  256. data/lib/chef/resource/pacman_package.rb +3 -2
  257. data/lib/chef/resource/paludis_package.rb +13 -4
  258. data/lib/chef/resource/perl.rb +3 -1
  259. data/lib/chef/resource/plist.rb +207 -0
  260. data/lib/chef/resource/portage_package.rb +14 -4
  261. data/lib/chef/resource/powershell_package.rb +2 -4
  262. data/lib/chef/resource/powershell_package_source.rb +4 -2
  263. data/lib/chef/resource/powershell_script.rb +8 -18
  264. data/lib/chef/resource/python.rb +3 -1
  265. data/lib/chef/resource/reboot.rb +1 -2
  266. data/lib/chef/resource/registry_key.rb +2 -3
  267. data/lib/chef/resource/remote_directory.rb +3 -1
  268. data/lib/chef/resource/remote_file.rb +3 -2
  269. data/lib/chef/resource/rhsm_errata.rb +1 -4
  270. data/lib/chef/resource/rhsm_errata_level.rb +1 -2
  271. data/lib/chef/resource/rhsm_register.rb +3 -3
  272. data/lib/chef/resource/rhsm_repo.rb +4 -3
  273. data/lib/chef/resource/rhsm_subscription.rb +5 -4
  274. data/lib/chef/resource/route.rb +6 -2
  275. data/lib/chef/resource/rpm_package.rb +13 -3
  276. data/lib/chef/resource/ruby.rb +3 -1
  277. data/lib/chef/resource/ruby_block.rb +2 -5
  278. data/lib/chef/resource/scm/_scm.rb +49 -0
  279. data/lib/chef/resource/{scm.rb → scm/git.rb} +16 -30
  280. data/lib/chef/resource/{subversion.rb → scm/subversion.rb} +10 -7
  281. data/lib/chef/resource/script.rb +7 -4
  282. data/lib/chef/resource/service.rb +7 -8
  283. data/lib/chef/resource/smartos_package.rb +10 -2
  284. data/lib/chef/resource/snap_package.rb +4 -2
  285. data/lib/chef/resource/solaris_package.rb +10 -2
  286. data/lib/chef/resource/ssh_known_hosts_entry.rb +6 -3
  287. data/lib/chef/resource/sudo.rb +11 -11
  288. data/lib/chef/resource/support/cron.d.erb +1 -1
  289. data/lib/chef/resource/support/cron_access.erb +1 -1
  290. data/lib/chef/resource/support/sudoer.erb +1 -2
  291. data/lib/chef/resource/support/ulimit.erb +41 -0
  292. data/lib/chef/resource/swap_file.rb +7 -5
  293. data/lib/chef/resource/sysctl.rb +63 -4
  294. data/lib/chef/resource/systemd_unit.rb +6 -4
  295. data/lib/chef/resource/template.rb +0 -1
  296. data/lib/chef/resource/timezone.rb +8 -19
  297. data/lib/chef/resource/user.rb +3 -5
  298. data/lib/chef/resource/user/aix_user.rb +0 -2
  299. data/lib/chef/resource/user/dscl_user.rb +1 -1
  300. data/lib/chef/resource/user/linux_user.rb +0 -2
  301. data/lib/chef/resource/user/mac_user.rb +1 -1
  302. data/lib/chef/resource/user/pw_user.rb +0 -2
  303. data/lib/chef/resource/user/solaris_user.rb +0 -2
  304. data/lib/chef/resource/user/windows_user.rb +0 -2
  305. data/lib/chef/resource/user_ulimit.rb +116 -0
  306. data/lib/chef/resource/whyrun_safe_ruby_block.rb +1 -0
  307. data/lib/chef/resource/windows_ad_join.rb +20 -7
  308. data/lib/chef/resource/windows_auto_run.rb +2 -3
  309. data/lib/chef/resource/windows_certificate.rb +3 -3
  310. data/lib/chef/resource/windows_dfs_folder.rb +1 -2
  311. data/lib/chef/resource/windows_dfs_namespace.rb +1 -2
  312. data/lib/chef/resource/windows_dfs_server.rb +2 -3
  313. data/lib/chef/resource/windows_dns_record.rb +0 -1
  314. data/lib/chef/resource/windows_dns_zone.rb +0 -1
  315. data/lib/chef/resource/windows_env.rb +12 -4
  316. data/lib/chef/resource/windows_feature.rb +59 -4
  317. data/lib/chef/resource/windows_feature_dism.rb +24 -24
  318. data/lib/chef/resource/windows_feature_powershell.rb +44 -78
  319. data/lib/chef/resource/windows_firewall_rule.rb +121 -8
  320. data/lib/chef/resource/windows_font.rb +10 -2
  321. data/lib/chef/resource/windows_package.rb +76 -7
  322. data/lib/chef/resource/windows_pagefile.rb +31 -4
  323. data/lib/chef/resource/windows_path.rb +18 -2
  324. data/lib/chef/resource/windows_printer.rb +26 -7
  325. data/lib/chef/resource/windows_printer_port.rb +29 -2
  326. data/lib/chef/resource/windows_script.rb +3 -4
  327. data/lib/chef/resource/windows_security_policy.rb +119 -0
  328. data/lib/chef/resource/windows_service.rb +46 -32
  329. data/lib/chef/resource/windows_share.rb +22 -6
  330. data/lib/chef/resource/windows_shortcut.rb +13 -3
  331. data/lib/chef/resource/windows_task.rb +129 -16
  332. data/lib/chef/resource/windows_uac.rb +20 -2
  333. data/lib/chef/resource/windows_user_privilege.rb +199 -0
  334. data/lib/chef/resource/windows_workgroup.rb +19 -4
  335. data/lib/chef/resource/yum_package.rb +91 -7
  336. data/lib/chef/resource/yum_repository.rb +30 -12
  337. data/lib/chef/resource/zypper_package.rb +32 -5
  338. data/lib/chef/resource/zypper_repository.rb +19 -6
  339. data/lib/chef/resource_builder.rb +8 -0
  340. data/lib/chef/resource_inspector.rb +3 -2
  341. data/lib/chef/resource_resolver.rb +7 -14
  342. data/lib/chef/resources.rb +11 -3
  343. data/lib/chef/run_context/cookbook_compiler.rb +29 -5
  344. data/lib/chef/scan_access_control.rb +1 -1
  345. data/lib/chef/shell.rb +22 -0
  346. data/lib/chef/shell/ext.rb +1 -1
  347. data/lib/chef/version.rb +1 -1
  348. data/lib/chef/win32/api.rb +2 -2
  349. data/lib/chef/win32/api/error.rb +3 -1
  350. data/lib/chef/win32/api/file.rb +1 -1
  351. data/lib/chef/win32/api/net.rb +1 -0
  352. data/lib/chef/win32/api/security.rb +6 -0
  353. data/lib/chef/win32/file.rb +1 -9
  354. data/lib/chef/win32/mutex.rb +1 -1
  355. data/lib/chef/win32/net.rb +1 -0
  356. data/lib/chef/win32/security.rb +40 -2
  357. data/lib/chef/win32/security/sid.rb +4 -4
  358. data/spec/functional/assets/inittest +8 -7
  359. data/spec/functional/knife/ssh_spec.rb +23 -19
  360. data/spec/functional/resource/cron_spec.rb +10 -29
  361. data/spec/functional/resource/dnf_package_spec.rb +441 -156
  362. data/spec/functional/resource/git_spec.rb +184 -134
  363. data/spec/functional/resource/insserv_spec.rb +1 -1
  364. data/spec/functional/resource/launchd_spec.rb +232 -0
  365. data/spec/functional/resource/link_spec.rb +3 -3
  366. data/spec/functional/resource/locale_spec.rb +13 -2
  367. data/spec/functional/resource/msu_package_spec.rb +5 -2
  368. data/spec/functional/resource/powershell_script_spec.rb +7 -68
  369. data/spec/functional/resource/remote_file_spec.rb +1 -1
  370. data/spec/functional/resource/windows_security_policy_spec.rb +90 -0
  371. data/spec/functional/resource/windows_task_spec.rb +4 -4
  372. data/spec/functional/resource/windows_user_privilege_spec.rb +193 -0
  373. data/spec/functional/run_lock_spec.rb +1 -1
  374. data/spec/functional/shell_spec.rb +1 -1
  375. data/spec/functional/util/powershell/cmdlet_spec.rb +1 -1
  376. data/spec/functional/version_spec.rb +1 -1
  377. data/spec/functional/win32/registry_spec.rb +0 -6
  378. data/spec/functional/win32/security_spec.rb +22 -0
  379. data/spec/integration/client/client_spec.rb +123 -2
  380. data/spec/integration/knife/cookbook_show_spec.rb +28 -26
  381. data/spec/integration/knife/data_bag_show_spec.rb +1 -1
  382. data/spec/integration/knife/raw_spec.rb +34 -6
  383. data/spec/integration/knife/redirection_spec.rb +2 -2
  384. data/spec/integration/knife/show_spec.rb +32 -3
  385. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +3 -3
  386. data/spec/integration/recipes/noop_resource_spec.rb +1 -1
  387. data/spec/integration/recipes/notifies_spec.rb +49 -20
  388. data/spec/integration/recipes/notifying_block_spec.rb +8 -5
  389. data/spec/integration/recipes/provider_choice.rb +2 -0
  390. data/spec/integration/recipes/recipe_dsl_spec.rb +45 -143
  391. data/spec/integration/recipes/resource_action_spec.rb +16 -11
  392. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +1 -1
  393. data/spec/integration/recipes/resource_load_spec.rb +133 -12
  394. data/spec/integration/recipes/use_partial_spec.rb +112 -0
  395. data/spec/integration/solo/solo_spec.rb +3 -3
  396. data/spec/spec_helper.rb +18 -3
  397. data/spec/support/chef_helpers.rb +2 -2
  398. data/spec/support/lib/chef/resource/zen_follower.rb +2 -0
  399. data/spec/support/platform_helpers.rb +2 -20
  400. data/spec/support/recipe_dsl_helper.rb +83 -0
  401. data/spec/support/shared/functional/http.rb +2 -2
  402. data/spec/support/shared/functional/windows_script.rb +3 -16
  403. data/spec/support/shared/integration/knife_support.rb +9 -6
  404. data/spec/support/shared/unit/mock_shellout.rb +1 -1
  405. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +4 -4
  406. data/spec/unit/application/apply_spec.rb +3 -0
  407. data/spec/unit/application/client_spec.rb +5 -1
  408. data/spec/unit/application_spec.rb +1 -2
  409. data/spec/unit/client_spec.rb +7 -5
  410. data/spec/unit/cookbook/gem_installer_spec.rb +2 -2
  411. data/spec/unit/cookbook/metadata_spec.rb +38 -19
  412. data/spec/unit/data_collector_spec.rb +39 -18
  413. data/spec/unit/file_access_control_spec.rb +1 -1
  414. data/spec/unit/json_compat_spec.rb +1 -1
  415. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +15 -15
  416. data/spec/unit/knife/bootstrap/client_builder_spec.rb +9 -9
  417. data/spec/unit/knife/bootstrap_spec.rb +20 -38
  418. data/spec/unit/knife/cookbook_show_spec.rb +1 -0
  419. data/spec/unit/knife/core/bootstrap_context_spec.rb +23 -43
  420. data/spec/unit/knife/core/ui_spec.rb +16 -0
  421. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +9 -63
  422. data/spec/unit/knife/data_bag_secret_options_spec.rb +22 -14
  423. data/spec/unit/knife/ssh_spec.rb +8 -111
  424. data/spec/unit/knife/status_spec.rb +1 -1
  425. data/spec/unit/knife_spec.rb +18 -0
  426. data/spec/unit/mixin/openssl_helper_spec.rb +4 -4
  427. data/spec/unit/mixin/powershell_exec_spec.rb +10 -0
  428. data/spec/unit/mixin/shell_out_spec.rb +25 -31
  429. data/spec/unit/node/attribute_spec.rb +3 -3
  430. data/spec/unit/node_spec.rb +24 -0
  431. data/spec/unit/platform/query_helpers_spec.rb +0 -143
  432. data/spec/unit/property/state_spec.rb +12 -7
  433. data/spec/unit/property/validation_spec.rb +25 -1
  434. data/spec/unit/property_spec.rb +12 -9
  435. data/spec/unit/provider/apt_preference_spec.rb +14 -10
  436. data/spec/unit/provider/apt_repository_spec.rb +34 -36
  437. data/spec/unit/provider/apt_update_spec.rb +12 -11
  438. data/spec/unit/provider/cookbook_file_spec.rb +4 -4
  439. data/spec/unit/provider/cron_spec.rb +2 -2
  440. data/spec/unit/provider/directory_spec.rb +4 -15
  441. data/spec/unit/provider/file_spec.rb +4 -4
  442. data/spec/unit/provider/git_spec.rb +41 -1
  443. data/spec/unit/provider/group/groupadd_spec.rb +1 -1
  444. data/spec/unit/provider/launchd_spec.rb +8 -50
  445. data/spec/unit/provider/link_spec.rb +0 -1
  446. data/spec/unit/provider/log_spec.rb +3 -3
  447. data/spec/unit/provider/mdadm_spec.rb +3 -3
  448. data/spec/unit/provider/package/dnf/python_helper_spec.rb +1 -1
  449. data/spec/unit/provider/package/homebrew_spec.rb +280 -174
  450. data/spec/unit/provider/package/pacman_spec.rb +65 -147
  451. data/spec/unit/provider/package/portage_spec.rb +2 -2
  452. data/spec/unit/provider/package/powershell_spec.rb +3 -2
  453. data/spec/unit/provider/package/rubygems_spec.rb +211 -26
  454. data/spec/unit/provider/package/windows/exe_spec.rb +1 -1
  455. data/spec/unit/provider/powershell_script_spec.rb +21 -61
  456. data/spec/unit/provider/remote_file_spec.rb +3 -4
  457. data/spec/unit/provider/service/debian_service_spec.rb +34 -13
  458. data/spec/unit/provider/service/macosx_spec.rb +210 -214
  459. data/spec/unit/provider/service/systemd_service_spec.rb +23 -23
  460. data/spec/unit/provider/subversion_spec.rb +4 -2
  461. data/spec/unit/provider/template_spec.rb +3 -4
  462. data/spec/unit/provider/zypper_repository_spec.rb +17 -17
  463. data/spec/unit/provider_resolver_spec.rb +4 -4
  464. data/spec/unit/recipe_spec.rb +68 -0
  465. data/spec/unit/resource/alternatives_spec.rb +120 -0
  466. data/spec/unit/resource/apt_preference_spec.rb +0 -18
  467. data/spec/unit/resource/apt_repository_spec.rb +0 -18
  468. data/spec/unit/resource/apt_update_spec.rb +0 -18
  469. data/spec/unit/resource/chef_client_cron_spec.rb +119 -0
  470. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +102 -0
  471. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +70 -0
  472. data/spec/unit/resource/chef_vault_secret_spec.rb +40 -0
  473. data/spec/unit/resource/chocolatey_source_spec.rb +2 -1
  474. data/spec/unit/resource/cron_d_spec.rb +6 -48
  475. data/spec/unit/resource/cron_spec.rb +4 -10
  476. data/spec/unit/resource/gem_package_spec.rb +3 -3
  477. data/spec/unit/resource/helpers/cron_validations_spec.rb +77 -0
  478. data/spec/unit/resource/link_spec.rb +0 -4
  479. data/spec/unit/resource/locale_spec.rb +0 -34
  480. data/spec/unit/resource/msu_package_spec.rb +4 -0
  481. data/spec/unit/resource/ohai_spec.rb +56 -2
  482. data/spec/unit/resource/plist_spec.rb +130 -0
  483. data/spec/unit/resource/powershell_script_spec.rb +0 -5
  484. data/spec/unit/resource/{git_spec.rb → scm/git_spec.rb} +50 -2
  485. data/spec/unit/resource/{scm_spec.rb → scm/scm.rb} +1 -52
  486. data/spec/unit/resource/{subversion_spec.rb → scm/subversion_spec.rb} +2 -3
  487. data/spec/unit/resource/service_spec.rb +4 -0
  488. data/spec/unit/resource/user_spec.rb +2 -2
  489. data/spec/unit/resource/user_ulimit_spec.rb +53 -0
  490. data/spec/unit/resource/windows_feature_dism_spec.rb +2 -17
  491. data/spec/unit/resource/windows_feature_powershell_spec.rb +2 -17
  492. data/spec/unit/resource/windows_firewall_rule_spec.rb +88 -41
  493. data/spec/unit/resource/windows_package_spec.rb +14 -0
  494. data/spec/unit/resource/windows_service_spec.rb +9 -0
  495. data/spec/unit/resource_reporter_spec.rb +2 -6
  496. data/spec/unit/resource_spec.rb +10 -3
  497. data/spec/unit/run_lock_spec.rb +1 -1
  498. data/spec/unit/scan_access_control_spec.rb +1 -1
  499. data/spec/unit/search/query_spec.rb +1 -1
  500. data/spec/unit/win32/registry_spec.rb +1 -1
  501. data/tasks/rspec.rb +6 -14
  502. metadata +92 -37
  503. data/lib/chef/dsl/core.rb +0 -52
  504. data/lib/chef/knife/cookbook_site_share.rb +0 -41
  505. data/lib/chef/knife/cookbook_site_unshare.rb +0 -41
  506. data/lib/chef/provider/apt_preference.rb +0 -93
  507. data/lib/chef/provider/apt_repository.rb +0 -358
  508. data/lib/chef/provider/apt_update.rb +0 -79
  509. data/lib/chef/provider/log.rb +0 -43
  510. data/lib/chef/provider/mdadm.rb +0 -85
  511. data/lib/chef/provider/ohai.rb +0 -45
  512. data/lib/chef/resource/git.rb +0 -37
  513. data/spec/unit/provider/ohai_spec.rb +0 -84
@@ -74,6 +74,8 @@ require "spec/support/local_gems.rb" if File.exists?(File.join(File.dirname(__FI
74
74
  require "spec/support/platform_helpers"
75
75
  require "spec/support/shared/unit/mock_shellout"
76
76
 
77
+ require "spec/support/recipe_dsl_helper"
78
+
77
79
  # Autoloads support files
78
80
  # Excludes support/platforms by default
79
81
  # Do not change the gsub.
@@ -103,6 +105,12 @@ resource_priority_map ||= nil
103
105
  provider_handler_map ||= nil
104
106
  resource_handler_map ||= nil
105
107
 
108
+ class UnexpectedSystemExit < RuntimeError
109
+ def self.from(system_exit)
110
+ new(system_exit.message).tap { |e| e.set_backtrace(system_exit.backtrace) }
111
+ end
112
+ end
113
+
106
114
  RSpec.configure do |config|
107
115
  config.include(Matchers)
108
116
  config.include(MockShellout::RSpec)
@@ -137,11 +145,9 @@ RSpec.configure do |config|
137
145
  config.filter_run_excluding not_supported_on_aix: true if aix?
138
146
  config.filter_run_excluding not_supported_on_solaris: true if solaris?
139
147
  config.filter_run_excluding not_supported_on_gce: true if gce?
140
- config.filter_run_excluding not_supported_on_nano: true if windows_nano_server?
141
148
  config.filter_run_excluding win2012r2_only: true unless windows_2012r2?
142
149
  config.filter_run_excluding windows64_only: true unless windows64?
143
150
  config.filter_run_excluding windows32_only: true unless windows32?
144
- config.filter_run_excluding windows_nano_only: true unless windows_nano_server?
145
151
  config.filter_run_excluding windows_gte_10: true unless windows_gte_10?
146
152
  config.filter_run_excluding windows_lt_10: true if windows_gte_10?
147
153
  config.filter_run_excluding ruby64_only: true unless ruby_64bit?
@@ -160,7 +166,7 @@ RSpec.configure do |config|
160
166
  config.filter_run_excluding linux_only: true unless linux?
161
167
  config.filter_run_excluding aix_only: true unless aix?
162
168
  config.filter_run_excluding suse_only: true unless suse?
163
- config.filter_run_excluding sles11: true unless sles11?
169
+ config.filter_run_excluding opensuse: true unless opensuse?
164
170
  config.filter_run_excluding debian_family_only: true unless debian_family?
165
171
  config.filter_run_excluding supports_cloexec: true unless supports_cloexec?
166
172
  config.filter_run_excluding selinux_only: true unless selinux_enabled?
@@ -282,6 +288,15 @@ RSpec.configure do |config|
282
288
  config.before(:suite) do
283
289
  ARGV.clear
284
290
  end
291
+
292
+ # Protect Rspec from accidental exit(0) causing rspec to terminate without error
293
+ config.around(:example) do |ex|
294
+ begin
295
+ ex.run
296
+ rescue SystemExit => e
297
+ raise UnexpectedSystemExit.from(e)
298
+ end
299
+ end
285
300
  end
286
301
 
287
302
  require "webrick/utils"
@@ -27,7 +27,7 @@ Chef::Log.level(Chef::Config.log_level)
27
27
  Chef::Config.solo(false)
28
28
 
29
29
  def sha256_checksum(path)
30
- OpenSSL::Digest::SHA256.hexdigest(File.read(path))
30
+ OpenSSL::Digest.hexdigest("SHA256", File.read(path))
31
31
  end
32
32
 
33
33
  # extracted from Ruby < 2.5 to return a unique temp file name without creating it
@@ -65,7 +65,7 @@ end
65
65
  def system_windows_service_gem?
66
66
  windows_service_gem_check_command = %{ruby -r "win32/daemon" -e ":noop" > #{DEV_NULL} 2>&1}
67
67
  if defined?(Bundler)
68
- Bundler.with_clean_env do
68
+ Bundler.with_unbundled_env do
69
69
  # This returns true if the gem can be loaded
70
70
  system(windows_service_gem_check_command)
71
71
  end
@@ -22,6 +22,8 @@ class Chef
22
22
  class Resource
23
23
  class ZenFollower < Chef::Resource
24
24
 
25
+ provides :zen_follower
26
+
25
27
  provides :follower, platform: "zen"
26
28
 
27
29
  def master(arg = nil)
@@ -88,11 +88,6 @@ def windows_powershell_dsc?
88
88
  supports_dsc
89
89
  end
90
90
 
91
- def windows_nano_server?
92
- require "chef/platform/query_helpers"
93
- Chef::Platform.windows_nano_server?
94
- end
95
-
96
91
  def windows_user_right?(right)
97
92
  return false unless windows?
98
93
 
@@ -100,19 +95,6 @@ def windows_user_right?(right)
100
95
  Chef::ReservedNames::Win32::Security.get_account_right(ENV["USERNAME"]).include?(right)
101
96
  end
102
97
 
103
- def mac_osx_106?
104
- if File.exists? "/usr/bin/sw_vers"
105
- result = ShellHelpers.shell_out("/usr/bin/sw_vers")
106
- result.stdout.each_line do |line|
107
- if line =~ /^ProductVersion:\s10.6.*$/
108
- return true
109
- end
110
- end
111
- end
112
-
113
- false
114
- end
115
-
116
98
  def mac_osx_1014?
117
99
  if mac_osx?
118
100
  ver = Chef::Version.new(ohai[:platform_version])
@@ -179,8 +161,8 @@ def rhel6?
179
161
  rhel? && !!(ohai[:platform_version].to_i == 6)
180
162
  end
181
163
 
182
- def sles11?
183
- suse? && !!(ohai[:platform_version].to_i == 11)
164
+ def opensuse?
165
+ suse? && !!(ohai[:platform_version].to_i >= 15)
184
166
  end
185
167
 
186
168
  def rhel7?
@@ -0,0 +1,83 @@
1
+ #
2
+ # This is a helper for functional tests to embed the recipe DSL directly into the rspec example blocks using
3
+ # unified mode.
4
+ #
5
+ # If you wind up wanting to stub/expect on internal details of the resource/provider you are not testing the
6
+ # public API and are trying to write a unit test, which this is not designed for.
7
+ #
8
+ # If you want to start writing full recipes and testing them, doing notifies/subscribes/etc then you are writing
9
+ # an integration test, and not a functional single-resource test, which this is not designed for.
10
+ #
11
+ # Examples:
12
+ #
13
+ # it "creates a file" do
14
+ # FileUtils.rm_f("/tmp/foo.xyz")
15
+ # file "/tmp/foo.xyz" do # please use proper tmpdir though
16
+ # content "whatever"
17
+ # end.should_be_updated
18
+ # expect(IO.read("/tmp/foo.xyz").to eql("content")
19
+ # end
20
+ #
21
+ # it "is idempotent" do
22
+ # FileUtils.rm_f("/tmp/foo.xyz")
23
+ # file "/tmp/foo.xyz" do # please use proper tmpdir though
24
+ # content "whatever"
25
+ # end.should_be_updated
26
+ # file "/tmp/foo.xyz" do # please use proper tmpdir though
27
+ # content "whatever"
28
+ # end.should_not_be_updated
29
+ # expect(IO.read("/tmp/foo.xyz").to eql("content")
30
+ # end
31
+ #
32
+ # it "has a failure" do
33
+ # FileUtils.rm_f("/tmp/foo.xyz")
34
+ # expect { file "/tmp/lksjdflksjdf/foo.xyz" do
35
+ # content "whatever"
36
+ # end }.to raise_error(Chef::Exception::EnclosingDirectoryDoesNotExist)
37
+ # end
38
+ #
39
+ module RecipeDSLHelper
40
+ include Chef::DSL::Recipe
41
+ def event_dispatch
42
+ @event_dispatch ||= Chef::EventDispatch::Dispatcher.new
43
+ end
44
+
45
+ def node
46
+ @node ||= Chef::Node.new.tap do |n|
47
+ # clone the global ohai data to keep tests fast but reasonably isolated
48
+ n.consume_external_attrs(OHAI_SYSTEM.data.dup, {})
49
+ end
50
+ end
51
+
52
+ def run_context
53
+ @run_context ||= Chef::RunContext.new(node, {}, event_dispatch).tap do |rc|
54
+ rc.resource_collection.unified_mode = true
55
+ Chef::Runner.new(rc)
56
+ end
57
+ end
58
+
59
+ def cookbook_name
60
+ "rspec"
61
+ end
62
+
63
+ def recipe_name
64
+ "default"
65
+ end
66
+
67
+ def declare_resource(type, name, created_at: nil, run_context: self.run_context, &resource_attrs_block)
68
+ created_at = caller[0]
69
+ rspec_context = self
70
+ # we slightly abuse the "enclosing_provider" method_missing magic to send methods to the rspec example block so that
71
+ # rspec `let` methods work as arguments to resource properties
72
+ resource = super(type, name, created_at: created_at, run_context: run_context, enclosing_provider: rspec_context, &resource_attrs_block)
73
+ # we also inject these methods to make terse expression of checking the updated status (so it is more readiable and
74
+ # therefore should get used more -- even though it is "should" vs. "expect")
75
+ resource.define_singleton_method(:should_be_updated) do
76
+ rspec_context.expect(self).to be_updated
77
+ end
78
+ resource.define_singleton_method(:should_not_be_updated) do
79
+ rspec_context.expect(self).not_to be_updated
80
+ end
81
+ resource
82
+ end
83
+ end
@@ -35,11 +35,11 @@ module ChefHTTPShared
35
35
  content
36
36
  end
37
37
 
38
- def start_tiny_server(server_opts = {})
38
+ def start_tiny_server(**server_opts)
39
39
  nyan_uncompressed_size = File::Stat.new(nyan_uncompressed_filename).size
40
40
  nyan_compressed_size = File::Stat.new(nyan_compressed_filename).size
41
41
 
42
- @server = TinyServer::Manager.new(server_opts)
42
+ @server = TinyServer::Manager.new(**server_opts)
43
43
  @server.start
44
44
  @api = TinyServer::API.instance
45
45
  @api.clear
@@ -99,7 +99,7 @@ shared_context Chef::Resource::WindowsScript do
99
99
  end
100
100
  end
101
101
 
102
- context "when the guard's architecture is specified as 32-bit", :not_supported_on_nano do
102
+ context "when the guard's architecture is specified as 32-bit" do
103
103
  let (:guard_architecture) { :i386 }
104
104
  it "executes a 32-bit guard" do
105
105
  resource.only_if resource_guard_command, architecture: guard_architecture
@@ -107,17 +107,6 @@ shared_context Chef::Resource::WindowsScript do
107
107
  expect(get_guard_process_architecture).to eq("x86")
108
108
  end
109
109
  end
110
-
111
- context "when the guard's architecture is specified as 32-bit", :windows_nano_only do
112
- let (:guard_architecture) { :i386 }
113
- it "raises an error" do
114
- resource.only_if resource_guard_command, architecture: guard_architecture
115
- expect { resource.run_action(:run) }.to raise_error(
116
- Chef::Exceptions::Win32ArchitectureIncorrect,
117
- /cannot execute script with requested architecture 'i386' on Windows Nano Server/
118
- )
119
- end
120
- end
121
110
  end
122
111
  end
123
112
 
@@ -157,7 +146,7 @@ shared_context Chef::Resource::WindowsScript do
157
146
  shared_examples_for "a script whose file system location cannot be accessed by other non-admin users" do
158
147
  let(:ruby_access_command) { file_access_command }
159
148
  it "generates a script in the local file system that prevents read access to other non-admin users" do
160
- shell_out!(access_command, { user: windows_nonadmin_user, password: windows_nonadmin_user_password, returns: [access_denied_sentinel] })
149
+ shell_out!(access_command, user: windows_nonadmin_user, password: windows_nonadmin_user_password, returns: [access_denied_sentinel])
161
150
  end
162
151
  end
163
152
 
@@ -218,8 +207,6 @@ shared_context Chef::Resource::WindowsScript do
218
207
 
219
208
  context "when evaluating guards" do
220
209
  it "has a guard_interpreter attribute set to the short name of the resource" do
221
- pending "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
222
-
223
210
  expect(resource.guard_interpreter).to eq(resource.resource_name)
224
211
  resource.not_if "findstr.exe /thiscommandhasnonzeroexitstatus"
225
212
  expect(Chef::Resource).to receive(:resource_for_node).and_call_original
@@ -238,7 +225,7 @@ shared_context Chef::Resource::WindowsScript do
238
225
  it_behaves_like "a script resource with architecture attribute"
239
226
  end
240
227
 
241
- context "when the architecture attribute is :i386", :not_supported_on_nano do
228
+ context "when the architecture attribute is :i386" do
242
229
  let(:resource_architecture) { :i386 }
243
230
  it_behaves_like "a script resource with architecture attribute"
244
231
  end
@@ -170,21 +170,24 @@ module KnifeSupport
170
170
 
171
171
  def should_result_in(expected)
172
172
  expected[:stdout] = "" unless expected[:stdout]
173
+ expected[:stdout] = expected[:stdout].is_a?(String) ? expected[:stdout].gsub(/[ \t\f\v]+$/, "") : expected[:stdout]
173
174
  expected[:stderr] = "" unless expected[:stderr]
175
+ expected[:stderr] = expected[:stderr].is_a?(String) ? expected[:stderr].gsub(/[ \t\f\v]+$/, "") : expected[:stderr]
174
176
  expected[:exit_code] = 0 unless expected[:exit_code]
175
177
  # TODO make this go away
176
178
  stderr_actual = @stderr.sub(/^WARNING: No knife configuration file found\n/, "")
177
-
178
- if expected[:stderr].is_a?(Regexp)
179
- expect(stderr_actual).to match(expected[:stderr])
180
- else
181
- expect(stderr_actual).to eq(expected[:stderr])
182
- end
179
+ stderr_actual = stderr_actual.gsub(/[ \t\f\v]+$/, "")
183
180
  stdout_actual = @stdout
181
+ stdout_actual = stdout_actual.gsub(/[ \t\f\v]+$/, "")
184
182
  if ChefUtils.windows?
185
183
  stderr_actual = stderr_actual.gsub("\r\n", "\n")
186
184
  stdout_actual = stdout_actual.gsub("\r\n", "\n")
187
185
  end
186
+ if expected[:stderr].is_a?(Regexp)
187
+ expect(stderr_actual).to match(expected[:stderr])
188
+ else
189
+ expect(stderr_actual).to eq(expected[:stderr])
190
+ end
188
191
  expect(@exit_code).to eq(expected[:exit_code])
189
192
  if expected[:stdout].is_a?(Regexp)
190
193
  expect(stdout_actual).to match(expected[:stdout])
@@ -23,7 +23,7 @@
23
23
  class MockShellout
24
24
  module RSpec
25
25
  def mock_shellout_command(command, **result)
26
- allow(::Mixlib::ShellOut).to receive(:new).with(command, anything).and_return MockShellout.new(result)
26
+ allow(::Mixlib::ShellOut).to receive(:new).with(command, anything).and_return MockShellout.new(**result)
27
27
  end
28
28
  end
29
29
 
@@ -106,25 +106,25 @@ shared_examples_for "a useradd-based user provider" do |supported_useradd_option
106
106
 
107
107
  describe "when the resource has a different home directory and supports home directory management" do
108
108
  before do
109
- @new_resource.home "/wowaweea"
109
+ @new_resource.home "/banana"
110
110
  @new_resource.manage_home true
111
111
  end
112
112
 
113
113
  it "should set -m -d /homedir" do
114
- expect(provider.universal_options).to eq(%w{-d /wowaweea})
114
+ expect(provider.universal_options).to eq(%w{-d /banana})
115
115
  expect(provider.usermod_options).to eq(%w{-m})
116
116
  end
117
117
  end
118
118
 
119
119
  describe "when the resource has a different home directory and supports home directory management (using real attributes)" do
120
120
  before do
121
- @new_resource.home("/wowaweea")
121
+ @new_resource.home("/banana")
122
122
  @new_resource.manage_home true
123
123
  @new_resource.non_unique false
124
124
  end
125
125
 
126
126
  it "should set -m -d /homedir" do
127
- expect(provider.universal_options).to eq(%w{-d /wowaweea})
127
+ expect(provider.universal_options).to eq(%w{-d /banana})
128
128
  expect(provider.usermod_options).to eq(%w{-m})
129
129
  end
130
130
  end
@@ -46,6 +46,7 @@ describe Chef::Application::Apply do
46
46
  it "should read text properly" do
47
47
  expect(@app.read_recipe_file(@recipe_file_name)[0]).to eq(@recipe_text)
48
48
  end
49
+
49
50
  it "should return a file_handle" do
50
51
  expect(@app.read_recipe_file(@recipe_file_name)[1]).to be_instance_of(RSpec::Mocks::Double)
51
52
  end
@@ -57,6 +58,7 @@ describe Chef::Application::Apply do
57
58
  @app.read_recipe_file(nil)
58
59
  end
59
60
  end
61
+
60
62
  describe "when recipe doesn't exist" do
61
63
  before do
62
64
  allow(File).to receive(:exist?).with(@recipe_path).and_return(false)
@@ -68,6 +70,7 @@ describe Chef::Application::Apply do
68
70
  end
69
71
  end
70
72
  end
73
+
71
74
  describe "temp_recipe_file" do
72
75
  before do
73
76
  @app.instance_variable_set(:@recipe_text, @recipe_text)
@@ -303,8 +303,12 @@ describe Chef::Application::Client, "reconfigure" do
303
303
  context "when there is no new config" do
304
304
  let(:config_exists) { false }
305
305
 
306
- it "does not updates the config" do
306
+ it "does not update the config" do
307
307
  expect(Chef::Config).not_to receive(:from_string)
308
+ .with(
309
+ "new_config",
310
+ File.join("the_path_to_the_repo", ".chef/config.rb")
311
+ )
308
312
 
309
313
  app.reconfigure
310
314
  end
@@ -194,7 +194,6 @@ describe Chef::Application do
194
194
  it "should initialise the chef logger" do
195
195
  allow(Chef::Log).to receive(:level=)
196
196
  @monologger = double("Monologger")
197
- expect(MonoLogger).to receive(:new).with(Chef::Config[:log_location]).and_return(@monologger)
198
197
  allow(MonoLogger).to receive(:new).with(STDOUT).and_return(@monologger)
199
198
  allow(@monologger).to receive(:formatter=).with(Chef::Log.logger.formatter)
200
199
  expect(Chef::Log).to receive(:init).with(@monologger)
@@ -272,7 +271,7 @@ describe Chef::Application do
272
271
  it "it sets log_location to an instance of #{expected_class}" do
273
272
  expect(expected_class).to receive(:new).with no_args
274
273
  @app.configure_logging
275
- expect(Chef::Config[:log_location]).to be logger_instance
274
+ expect(Chef::Config[:log_location]).to eq([ logger_instance, STDOUT ])
276
275
  end
277
276
  end
278
277
  end
@@ -308,13 +308,15 @@ describe Chef::Client do
308
308
  end
309
309
 
310
310
  describe "eol release warning" do
311
- it "warns when the date is after April 30, 2021" do
311
+ it "warns when running an EOL release" do
312
+ stub_const("Chef::VERSION", 15)
312
313
  allow(Time).to receive(:now).and_return(Time.new(2021, 5, 1, 5))
313
314
  expect(logger).to receive(:warn).with(/This release of.*became end of life \(EOL\) on May 1st 2021/)
314
315
  client.warn_if_eol
315
316
  end
316
317
 
317
- it "does not warn when date is before May 1st 2021" do
318
+ it "does not warn when running an non-EOL release" do
319
+ stub_const("Chef::VERSION", 15)
318
320
  allow(Time).to receive(:now).and_return(Time.new(2021, 4, 31))
319
321
  expect(logger).to_not receive(:warn).with(/became end of life/)
320
322
  client.warn_if_eol
@@ -349,7 +351,7 @@ describe Chef::Client do
349
351
  describe "configuring output formatters" do
350
352
  context "when no formatter has been configured" do
351
353
  it "configures the :doc formatter" do
352
- expect(client.formatters_for_run).to eq([[:doc]])
354
+ expect(client.formatters_for_run).to eq([[:doc, nil]])
353
355
  end
354
356
 
355
357
  context "and force_logger is set" do
@@ -368,7 +370,7 @@ describe Chef::Client do
368
370
  end
369
371
 
370
372
  it "configures the :doc formatter" do
371
- expect(client.formatters_for_run).to eq([[:doc]])
373
+ expect(client.formatters_for_run).to eq([[:doc, nil]])
372
374
  end
373
375
  end
374
376
 
@@ -379,7 +381,7 @@ describe Chef::Client do
379
381
  end
380
382
 
381
383
  it "configures the :doc formatter" do
382
- expect(client.formatters_for_run).to eq([[:doc]])
384
+ expect(client.formatters_for_run).to eq([[:doc, nil]])
383
385
  end
384
386
  end
385
387
  end