chef 16.18.30 → 17.10.163

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 (881) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +24 -33
  3. data/README.md +1 -1
  4. data/Rakefile +4 -4
  5. data/chef-universal-mingw32.gemspec +3 -3
  6. data/chef.gemspec +25 -30
  7. data/lib/chef/action_collection.rb +6 -26
  8. data/lib/chef/api_client.rb +1 -1
  9. data/lib/chef/application/base.rb +28 -3
  10. data/lib/chef/application/exit_code.rb +7 -21
  11. data/lib/chef/application.rb +3 -1
  12. data/lib/chef/applications.rb +0 -1
  13. data/lib/chef/chef_fs/command_line.rb +5 -2
  14. data/lib/chef/chef_fs/file_pattern.rb +3 -3
  15. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +1 -1
  16. data/lib/chef/chef_fs/file_system/repository/base_file.rb +1 -1
  17. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +1 -1
  18. data/lib/chef/chef_fs/file_system.rb +9 -10
  19. data/lib/chef/chef_fs/path_utils.rb +1 -1
  20. data/lib/chef/client.rb +10 -20
  21. data/lib/chef/compliance/default_attributes.rb +20 -7
  22. data/lib/chef/compliance/fetcher/automate.rb +0 -7
  23. data/lib/chef/compliance/input.rb +115 -0
  24. data/lib/chef/compliance/input_collection.rb +139 -0
  25. data/lib/chef/compliance/profile.rb +122 -0
  26. data/lib/chef/compliance/profile_collection.rb +109 -0
  27. data/lib/chef/compliance/reporter/automate.rb +18 -8
  28. data/lib/chef/compliance/reporter/chef_server_automate.rb +11 -6
  29. data/lib/chef/compliance/reporter/cli.rb +77 -0
  30. data/lib/chef/compliance/reporter/compliance_enforcer.rb +5 -1
  31. data/lib/chef/compliance/reporter/json_file.rb +8 -1
  32. data/lib/chef/compliance/runner.rb +177 -37
  33. data/lib/chef/compliance/waiver.rb +115 -0
  34. data/lib/chef/compliance/waiver_collection.rb +143 -0
  35. data/lib/chef/cookbook/cookbook_version_loader.rb +3 -3
  36. data/lib/chef/cookbook/synchronizer.rb +3 -5
  37. data/lib/chef/cookbook/syntax_check.rb +1 -1
  38. data/lib/chef/cookbook_loader.rb +2 -4
  39. data/lib/chef/cookbook_uploader.rb +1 -2
  40. data/lib/chef/cookbook_version.rb +1 -1
  41. data/lib/chef/data_bag_item.rb +11 -2
  42. data/lib/chef/data_collector.rb +0 -1
  43. data/lib/chef/delayed_evaluator.rb +4 -0
  44. data/lib/chef/deprecated.rb +6 -2
  45. data/lib/chef/dsl/chef_vault.rb +6 -6
  46. data/lib/chef/{knife/group_list.rb → dsl/compliance.rb} +11 -16
  47. data/lib/chef/dsl/declare_resource.rb +5 -10
  48. data/lib/chef/{knife/client_show.rb → dsl/reader_helpers.rb} +24 -21
  49. data/lib/chef/dsl/reboot_pending.rb +2 -3
  50. data/lib/chef/dsl/recipe.rb +4 -2
  51. data/lib/chef/{knife/data_bag_list.rb → dsl/render_helpers.rb} +19 -17
  52. data/lib/chef/dsl/secret.rb +170 -0
  53. data/lib/chef/dsl/toml.rb +116 -0
  54. data/lib/chef/dsl/universal.rb +7 -0
  55. data/lib/chef/dsl.rb +1 -0
  56. data/lib/chef/event_dispatch/base.rb +46 -3
  57. data/lib/chef/exceptions.rb +30 -0
  58. data/lib/chef/formatters/doc.rb +62 -14
  59. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +20 -22
  60. data/lib/chef/formatters/minimal.rb +6 -5
  61. data/lib/chef/group.rb +75 -0
  62. data/lib/chef/handler/slow_report.rb +66 -0
  63. data/lib/chef/handler.rb +46 -8
  64. data/lib/chef/http/basic_client.rb +15 -7
  65. data/lib/chef/http/ssl_policies.rb +3 -3
  66. data/lib/chef/http.rb +7 -3
  67. data/lib/chef/json_compat.rb +1 -1
  68. data/lib/chef/mixin/get_source_from_package.rb +1 -1
  69. data/lib/chef/mixin/homebrew_user.rb +15 -5
  70. data/lib/chef/mixin/openssl_helper.rb +17 -13
  71. data/lib/chef/mixin/powershell_exec.rb +27 -7
  72. data/lib/chef/mixin/properties.rb +6 -0
  73. data/lib/chef/mixin/why_run.rb +8 -2
  74. data/lib/chef/node/attribute.rb +6 -4
  75. data/lib/chef/node/immutable_collections.rb +13 -0
  76. data/lib/chef/node/mixin/deep_merge_cache.rb +11 -7
  77. data/lib/chef/node.rb +1 -1
  78. data/lib/chef/org.rb +3 -2
  79. data/lib/chef/platform/query_helpers.rb +2 -2
  80. data/lib/chef/policy_builder/expand_node_object.rb +1 -2
  81. data/lib/chef/policy_builder/policyfile.rb +84 -46
  82. data/lib/chef/powershell.rb +8 -6
  83. data/lib/chef/property.rb +18 -0
  84. data/lib/chef/provider/cron.rb +7 -4
  85. data/lib/chef/provider/directory.rb +8 -8
  86. data/lib/chef/provider/execute.rb +3 -2
  87. data/lib/chef/provider/file.rb +5 -3
  88. data/lib/chef/provider/git.rb +6 -8
  89. data/lib/chef/provider/group/groupadd.rb +3 -3
  90. data/lib/chef/provider/group/groupmod.rb +3 -3
  91. data/lib/chef/provider/group/pw.rb +3 -3
  92. data/lib/chef/provider/ifconfig/debian.rb +1 -1
  93. data/lib/chef/provider/ifconfig.rb +7 -7
  94. data/lib/chef/provider/launchd.rb +6 -6
  95. data/lib/chef/provider/link.rb +5 -5
  96. data/lib/chef/provider/lwrp_base.rb +1 -1
  97. data/lib/chef/provider/mount/aix.rb +3 -3
  98. data/lib/chef/provider/mount/linux.rb +16 -2
  99. data/lib/chef/provider/mount/mount.rb +6 -6
  100. data/lib/chef/provider/mount/windows.rb +1 -1
  101. data/lib/chef/provider/mount.rb +5 -5
  102. data/lib/chef/provider/package/apt.rb +27 -1
  103. data/lib/chef/provider/package/chocolatey.rb +14 -1
  104. data/lib/chef/provider/package/deb.rb +3 -3
  105. data/lib/chef/provider/package/dnf/dnf_helper.py +12 -11
  106. data/lib/chef/provider/package/dnf/python_helper.rb +9 -8
  107. data/lib/chef/provider/package/dnf.rb +1 -1
  108. data/lib/chef/provider/package/habitat.rb +168 -0
  109. data/lib/chef/provider/package/portage.rb +2 -2
  110. data/lib/chef/provider/package/powershell.rb +13 -10
  111. data/lib/chef/provider/package/rubygems.rb +15 -21
  112. data/lib/chef/provider/package/windows.rb +2 -4
  113. data/lib/chef/provider/package/yum/python_helper.rb +109 -35
  114. data/lib/chef/provider/package/yum/yum_helper.py +42 -60
  115. data/lib/chef/provider/package/yum.rb +40 -16
  116. data/lib/chef/provider/package/zypper.rb +7 -0
  117. data/lib/chef/provider/package.rb +80 -49
  118. data/lib/chef/provider/registry_key.rb +4 -3
  119. data/lib/chef/provider/remote_file/http.rb +1 -1
  120. data/lib/chef/provider/route.rb +2 -2
  121. data/lib/chef/provider/service/aixinit.rb +1 -1
  122. data/lib/chef/provider/service/debian.rb +1 -1
  123. data/lib/chef/provider/service/freebsd.rb +15 -21
  124. data/lib/chef/provider/service/macosx.rb +4 -4
  125. data/lib/chef/provider/service/systemd.rb +43 -14
  126. data/lib/chef/provider/service/upstart.rb +2 -13
  127. data/lib/chef/provider/service/windows.rb +16 -16
  128. data/lib/chef/provider/service.rb +6 -6
  129. data/lib/chef/provider/subversion.rb +18 -20
  130. data/lib/chef/provider/support/yum_repo.erb +1 -1
  131. data/lib/chef/provider/support/zypper_repo.erb +4 -2
  132. data/lib/chef/provider/systemd_unit.rb +53 -26
  133. data/lib/chef/provider/template/content.rb +2 -6
  134. data/lib/chef/provider/template.rb +1 -1
  135. data/lib/chef/provider/user/dscl.rb +1 -1
  136. data/lib/chef/provider/user/mac.rb +23 -26
  137. data/lib/chef/provider/user/pw.rb +1 -1
  138. data/lib/chef/provider/user/windows.rb +3 -3
  139. data/lib/chef/provider/user.rb +7 -3
  140. data/lib/chef/provider/windows_script.rb +1 -1
  141. data/lib/chef/provider/yum_repository.rb +27 -43
  142. data/lib/chef/provider/zypper_repository.rb +31 -35
  143. data/lib/chef/provider.rb +32 -4
  144. data/lib/chef/provider_resolver.rb +8 -2
  145. data/lib/chef/providers.rb +1 -2
  146. data/lib/chef/pwsh.rb +3 -2
  147. data/lib/chef/resource/alternatives.rb +6 -6
  148. data/lib/chef/resource/apt_package.rb +3 -3
  149. data/lib/chef/resource/apt_preference.rb +2 -2
  150. data/lib/chef/resource/apt_repository.rb +6 -6
  151. data/lib/chef/resource/apt_update.rb +5 -4
  152. data/lib/chef/resource/archive_file.rb +19 -17
  153. data/lib/chef/resource/breakpoint.rb +1 -1
  154. data/lib/chef/resource/build_essential.rb +2 -6
  155. data/lib/chef/resource/chef_client_config.rb +38 -6
  156. data/lib/chef/resource/chef_client_cron.rb +5 -5
  157. data/lib/chef/resource/chef_client_launchd.rb +7 -7
  158. data/lib/chef/resource/chef_client_scheduled_task.rb +61 -18
  159. data/lib/chef/resource/chef_client_systemd_timer.rb +6 -6
  160. data/lib/chef/resource/chef_client_trusted_certificate.rb +2 -2
  161. data/lib/chef/resource/chef_handler.rb +3 -7
  162. data/lib/chef/resource/chef_sleep.rb +1 -1
  163. data/lib/chef/resource/chef_vault_secret.rb +5 -10
  164. data/lib/chef/resource/chocolatey_config.rb +16 -20
  165. data/lib/chef/resource/chocolatey_feature.rb +3 -7
  166. data/lib/chef/resource/chocolatey_package.rb +3 -3
  167. data/lib/chef/resource/chocolatey_source.rb +28 -12
  168. data/lib/chef/resource/cron/_cron_shared.rb +2 -2
  169. data/lib/chef/resource/cron/cron.rb +75 -1
  170. data/lib/chef/resource/cron/cron_d.rb +5 -6
  171. data/lib/chef/resource/cron_access.rb +2 -4
  172. data/lib/chef/resource/directory.rb +1 -1
  173. data/lib/chef/resource/dmg_package.rb +6 -10
  174. data/lib/chef/resource/dnf_package.rb +4 -6
  175. data/lib/chef/resource/dpkg_package.rb +6 -1
  176. data/lib/chef/resource/dsc_resource.rb +1 -1
  177. data/lib/chef/resource/execute.rb +14 -12
  178. data/lib/chef/resource/file/verification/json.rb +50 -0
  179. data/lib/chef/resource/{user/dscl_user.rb → file/verification/yaml.rb} +26 -9
  180. data/lib/chef/resource/file.rb +1 -1
  181. data/lib/chef/resource/gem_package.rb +2 -1
  182. data/lib/chef/resource/group.rb +6 -6
  183. data/lib/chef/{knife/recipe_list.rb → resource/habitat/_habitat_shared.rb} +13 -17
  184. data/lib/chef/resource/habitat/habitat_package.rb +129 -0
  185. data/lib/chef/resource/habitat/habitat_sup.rb +329 -0
  186. data/lib/chef/resource/habitat/habitat_sup_systemd.rb +67 -0
  187. data/lib/chef/resource/habitat/habitat_sup_windows.rb +90 -0
  188. data/lib/chef/resource/habitat_config.rb +107 -0
  189. data/lib/chef/resource/habitat_install.rb +247 -0
  190. data/lib/chef/resource/habitat_service.rb +451 -0
  191. data/lib/chef/resource/habitat_user_toml.rb +92 -0
  192. data/lib/chef/resource/homebrew_cask.rb +10 -10
  193. data/lib/chef/resource/homebrew_package.rb +1 -1
  194. data/lib/chef/resource/homebrew_tap.rb +9 -16
  195. data/lib/chef/resource/homebrew_update.rb +2 -2
  196. data/lib/chef/resource/hostname.rb +68 -22
  197. data/lib/chef/resource/http_request.rb +1 -1
  198. data/lib/chef/resource/inspec_input.rb +127 -0
  199. data/lib/chef/resource/inspec_waiver.rb +184 -0
  200. data/lib/chef/resource/inspec_waiver_file_entry.rb +156 -0
  201. data/lib/chef/resource/kernel_module.rb +32 -18
  202. data/lib/chef/resource/launchd.rb +5 -8
  203. data/lib/chef/resource/locale.rb +7 -5
  204. data/lib/chef/resource/lwrp_base.rb +20 -1
  205. data/lib/chef/resource/macos_userdefaults.rb +54 -144
  206. data/lib/chef/resource/mdadm.rb +53 -7
  207. data/lib/chef/resource/mount.rb +2 -1
  208. data/lib/chef/resource/ohai_hint.rb +2 -6
  209. data/lib/chef/resource/openbsd_package.rb +17 -0
  210. data/lib/chef/resource/openssl_dhparam.rb +1 -2
  211. data/lib/chef/resource/openssl_ec_private_key.rb +3 -5
  212. data/lib/chef/resource/openssl_ec_public_key.rb +1 -3
  213. data/lib/chef/resource/openssl_rsa_private_key.rb +2 -4
  214. data/lib/chef/resource/openssl_rsa_public_key.rb +1 -3
  215. data/lib/chef/resource/openssl_x509_certificate.rb +4 -7
  216. data/lib/chef/resource/openssl_x509_crl.rb +1 -3
  217. data/lib/chef/resource/openssl_x509_request.rb +1 -3
  218. data/lib/chef/resource/osx_profile.rb +3 -3
  219. data/lib/chef/resource/plist.rb +8 -8
  220. data/lib/chef/resource/powershell_package_source.rb +235 -73
  221. data/lib/chef/resource/powershell_script.rb +1 -1
  222. data/lib/chef/resource/reboot.rb +38 -9
  223. data/lib/chef/resource/registry_key.rb +36 -48
  224. data/lib/chef/resource/remote_directory.rb +2 -2
  225. data/lib/chef/resource/remote_file.rb +103 -7
  226. data/lib/chef/resource/rhsm_errata.rb +16 -3
  227. data/lib/chef/resource/rhsm_errata_level.rb +11 -6
  228. data/lib/chef/resource/rhsm_register.rb +42 -3
  229. data/lib/chef/resource/rhsm_repo.rb +17 -6
  230. data/lib/chef/resource/rhsm_subscription.rb +2 -6
  231. data/lib/chef/resource/ruby_block.rb +100 -0
  232. data/lib/chef/resource/scm/git.rb +1 -1
  233. data/lib/chef/resource/scm/subversion.rb +1 -1
  234. data/lib/chef/resource/ssh_known_hosts_entry.rb +4 -7
  235. data/lib/chef/resource/sudo.rb +8 -12
  236. data/lib/chef/resource/support/HabService.dll.config.erb +19 -0
  237. data/lib/chef/resource/support/client.erb +11 -1
  238. data/lib/chef/resource/support/sup.toml.erb +179 -0
  239. data/lib/chef/resource/swap_file.rb +2 -6
  240. data/lib/chef/resource/sysctl.rb +2 -6
  241. data/lib/chef/resource/systemd_unit.rb +2 -2
  242. data/lib/chef/resource/template.rb +1 -1
  243. data/lib/chef/resource/timezone.rb +3 -5
  244. data/lib/chef/resource/user/mac_user.rb +1 -1
  245. data/lib/chef/resource/user_ulimit.rb +2 -2
  246. data/lib/chef/resource/windows_ad_join.rb +2 -6
  247. data/lib/chef/resource/windows_audit_policy.rb +2 -2
  248. data/lib/chef/resource/windows_auto_run.rb +3 -6
  249. data/lib/chef/resource/windows_certificate.rb +235 -90
  250. data/lib/chef/resource/windows_defender.rb +163 -0
  251. data/lib/chef/resource/windows_defender_exclusion.rb +125 -0
  252. data/lib/chef/resource/windows_dfs_folder.rb +2 -6
  253. data/lib/chef/resource/windows_dfs_namespace.rb +4 -8
  254. data/lib/chef/resource/windows_dfs_server.rb +1 -3
  255. data/lib/chef/resource/windows_dns_record.rb +2 -6
  256. data/lib/chef/resource/windows_dns_zone.rb +2 -6
  257. data/lib/chef/resource/windows_env.rb +6 -5
  258. data/lib/chef/resource/windows_feature.rb +3 -9
  259. data/lib/chef/resource/windows_feature_dism.rb +3 -9
  260. data/lib/chef/resource/windows_feature_powershell.rb +11 -12
  261. data/lib/chef/resource/windows_firewall_profile.rb +4 -4
  262. data/lib/chef/resource/windows_firewall_rule.rb +20 -9
  263. data/lib/chef/resource/windows_font.rb +3 -5
  264. data/lib/chef/resource/windows_pagefile.rb +111 -69
  265. data/lib/chef/resource/windows_path.rb +4 -4
  266. data/lib/chef/resource/windows_printer.rb +80 -61
  267. data/lib/chef/resource/windows_printer_port.rb +49 -66
  268. data/lib/chef/resource/windows_security_policy.rb +10 -10
  269. data/lib/chef/resource/windows_share.rb +14 -21
  270. data/lib/chef/resource/windows_shortcut.rb +4 -6
  271. data/lib/chef/resource/windows_task.rb +44 -17
  272. data/lib/chef/resource/windows_uac.rb +3 -5
  273. data/lib/chef/resource/windows_update_settings.rb +259 -0
  274. data/lib/chef/resource/windows_workgroup.rb +3 -4
  275. data/lib/chef/resource/yum_package.rb +11 -15
  276. data/lib/chef/resource/zypper_package.rb +4 -4
  277. data/lib/chef/resource/zypper_repository.rb +28 -8
  278. data/lib/chef/resource.rb +24 -27
  279. data/lib/chef/resource_builder.rb +8 -2
  280. data/lib/chef/resource_inspector.rb +6 -2
  281. data/lib/chef/resource_reporter.rb +1 -2
  282. data/lib/chef/resources.rb +15 -2
  283. data/lib/chef/run_context/cookbook_compiler.rb +112 -28
  284. data/lib/chef/run_context.rb +47 -1
  285. data/lib/chef/run_lock.rb +2 -2
  286. data/lib/chef/runner.rb +1 -1
  287. data/lib/chef/secret_fetcher/akeyless_vault.rb +57 -0
  288. data/lib/chef/secret_fetcher/aws_secrets_manager.rb +65 -0
  289. data/lib/chef/secret_fetcher/azure_key_vault.rb +134 -0
  290. data/lib/chef/secret_fetcher/base.rb +76 -0
  291. data/lib/chef/secret_fetcher/example.rb +46 -0
  292. data/lib/chef/secret_fetcher/hashi_vault.rb +134 -0
  293. data/lib/chef/secret_fetcher.rb +60 -0
  294. data/lib/chef/user.rb +0 -1
  295. data/lib/chef/user_v1.rb +3 -4
  296. data/lib/chef/util/dsc/configuration_generator.rb +2 -1
  297. data/lib/chef/util/dsc/local_configuration_manager.rb +1 -1
  298. data/lib/chef/version.rb +1 -1
  299. data/lib/chef/win32/api.rb +1 -1
  300. data/lib/chef/win32/registry.rb +4 -2
  301. data/spec/data/archive_file/test_archive.tar.gz +0 -0
  302. data/spec/data/cookbooks/openldap/libraries/openldap.rb +1 -1
  303. data/spec/data/lwrp/resources/bar.rb +2 -0
  304. data/spec/data/lwrp/resources/buck_passer.rb +1 -0
  305. data/spec/data/lwrp/resources/buck_passer_2.rb +1 -0
  306. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +1 -0
  307. data/spec/data/lwrp/resources/foo.rb +2 -0
  308. data/spec/data/lwrp/resources/inline_compiler.rb +1 -0
  309. data/spec/data/lwrp/resources/monkey_name_printer.rb +1 -0
  310. data/spec/data/lwrp/resources/paint_drying_watcher.rb +1 -0
  311. data/spec/data/lwrp/resources/thumb_twiddler.rb +1 -0
  312. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +2 -0
  313. data/spec/data/lwrp_const_scoping/resources/conflict.rb +1 -0
  314. data/spec/data/lwrp_override/resources/foo.rb +1 -0
  315. data/spec/data/rubygems.org/nonexistent_gem-info +1 -0
  316. data/spec/data/rubygems.org/sexp_processor-info +49 -0
  317. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  318. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  319. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  320. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  321. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  322. data/spec/data/run_context/cookbooks/test/resources/resource.rb +2 -0
  323. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +2 -0
  324. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  325. data/spec/data/trusted_certs/example.crt +29 -20
  326. data/spec/data/trusted_certs/example_no_cn.crt +30 -34
  327. data/spec/data/trusted_certs/opscode.pem +33 -54
  328. data/spec/functional/assets/yumrepo/repodata/01a3b-filelists.sqlite.bz2 +0 -0
  329. data/spec/functional/assets/yumrepo/repodata/401dc-filelists.xml.gz +0 -0
  330. data/spec/functional/assets/yumrepo/repodata/5dc1e-primary.sqlite.bz2 +0 -0
  331. data/spec/functional/assets/yumrepo/repodata/6bf96-other.xml.gz +0 -0
  332. data/spec/functional/assets/yumrepo/repodata/7c365-other.sqlite.bz2 +0 -0
  333. data/spec/functional/assets/yumrepo/repodata/dabe2-primary.xml.gz +0 -0
  334. data/spec/functional/dsl/reboot_pending_spec.rb +3 -3
  335. data/spec/functional/dsl/registry_helper_spec.rb +2 -2
  336. data/spec/functional/mixin/from_file_spec.rb +1 -1
  337. data/spec/functional/resource/aixinit_service_spec.rb +7 -7
  338. data/spec/functional/resource/apt_package_spec.rb +1 -1
  339. data/spec/functional/resource/archive_file_spec.rb +88 -0
  340. data/spec/functional/resource/chocolatey_package_spec.rb +41 -20
  341. data/spec/functional/resource/cookbook_file_spec.rb +1 -1
  342. data/spec/functional/resource/dnf_package_spec.rb +997 -645
  343. data/spec/functional/resource/dpkg_package_spec.rb +16 -0
  344. data/spec/functional/resource/dsc_script_spec.rb +5 -5
  345. data/spec/functional/resource/group_spec.rb +39 -19
  346. data/spec/functional/resource/link_spec.rb +1 -1
  347. data/spec/functional/resource/macos_userdefaults_spec.rb +139 -0
  348. data/spec/functional/resource/powershell_package_source_spec.rb +5 -6
  349. data/spec/functional/resource/registry_spec.rb +89 -89
  350. data/spec/functional/resource/remote_file_spec.rb +1 -1
  351. data/spec/functional/resource/template_spec.rb +1 -1
  352. data/spec/functional/resource/user/mac_user_spec.rb +2 -2
  353. data/spec/functional/resource/windows_certificate_spec.rb +122 -37
  354. data/spec/functional/resource/windows_env_spec.rb +2 -2
  355. data/spec/functional/resource/windows_font_spec.rb +1 -2
  356. data/spec/functional/resource/windows_hostname_spec.rb +91 -0
  357. data/spec/functional/resource/windows_pagefile_spec.rb +125 -0
  358. data/spec/functional/resource/yum_package_spec.rb +1197 -451
  359. data/spec/functional/resource/zypper_package_spec.rb +17 -0
  360. data/spec/functional/shell_spec.rb +1 -0
  361. data/spec/functional/version_spec.rb +1 -1
  362. data/spec/functional/win32/registry_spec.rb +12 -9
  363. data/spec/integration/client/client_spec.rb +37 -23
  364. data/spec/integration/client/exit_code_spec.rb +1 -1
  365. data/spec/integration/client/fips_spec.rb +9 -1
  366. data/spec/integration/client/ipv6_spec.rb +1 -1
  367. data/spec/integration/client/open_ssl_spec.rb +20 -0
  368. data/spec/integration/compliance/compliance_spec.rb +62 -1
  369. data/spec/integration/ohai/ohai_spec.rb +7 -6
  370. data/spec/integration/recipes/accumulator_spec.rb +13 -1
  371. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +5 -1
  372. data/spec/integration/recipes/lwrp_spec.rb +3 -1
  373. data/spec/integration/recipes/notifies_spec.rb +15 -1
  374. data/spec/integration/recipes/notifying_block_spec.rb +2 -1
  375. data/spec/integration/recipes/recipe_dsl_spec.rb +10 -10
  376. data/spec/integration/recipes/resource_action_spec.rb +6 -6
  377. data/spec/integration/recipes/unified_mode_spec.rb +71 -1
  378. data/spec/integration/recipes/use_partial_spec.rb +4 -1
  379. data/spec/spec_helper.rb +20 -18
  380. data/spec/support/chef_helpers.rb +1 -17
  381. data/spec/support/lib/chef/resource/with_state.rb +0 -1
  382. data/spec/support/lib/chef/resource/zen_follower.rb +0 -1
  383. data/spec/support/lib/chef/resource/zen_master.rb +0 -1
  384. data/spec/support/matchers/leak.rb +7 -9
  385. data/spec/support/platform_helpers.rb +14 -13
  386. data/spec/support/ruby_installer.rb +51 -0
  387. data/spec/support/shared/functional/execute_resource.rb +1 -1
  388. data/spec/support/shared/functional/file_resource.rb +2 -2
  389. data/spec/support/shared/functional/http.rb +9 -9
  390. data/spec/support/shared/integration/integration_helper.rb +0 -1
  391. data/spec/support/shared/unit/provider/file.rb +3 -9
  392. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +1 -1
  393. data/spec/support/shared/unit/script_resource.rb +2 -2
  394. data/spec/unit/application/base_spec.rb +40 -0
  395. data/spec/unit/application/solo_spec.rb +2 -2
  396. data/spec/unit/chef_fs/diff_spec.rb +1 -1
  397. data/spec/unit/chef_fs/file_system/repository/directory_spec.rb +1 -1
  398. data/spec/unit/chef_fs/file_system_spec.rb +1 -1
  399. data/spec/unit/client_spec.rb +0 -16
  400. data/spec/unit/compliance/fetcher/automate_spec.rb +0 -16
  401. data/spec/unit/compliance/input_spec.rb +104 -0
  402. data/spec/unit/compliance/profile_spec.rb +120 -0
  403. data/spec/unit/compliance/reporter/automate_spec.rb +26 -2
  404. data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +21 -1
  405. data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +4 -3
  406. data/spec/unit/compliance/runner_spec.rb +137 -6
  407. data/spec/unit/compliance/waiver_spec.rb +104 -0
  408. data/spec/unit/data_bag_item_spec.rb +1 -6
  409. data/spec/unit/dsl/reboot_pending_spec.rb +3 -3
  410. data/spec/unit/dsl/registry_helper_spec.rb +7 -7
  411. data/spec/unit/dsl/render_helpers_spec.rb +102 -0
  412. data/spec/unit/dsl/secret_spec.rb +175 -0
  413. data/spec/unit/file_access_control_spec.rb +1 -1
  414. data/spec/unit/formatters/doc_spec.rb +1 -1
  415. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +1 -1
  416. data/spec/unit/handler_spec.rb +8 -2
  417. data/spec/unit/http/basic_client_spec.rb +30 -0
  418. data/spec/unit/http_spec.rb +8 -2
  419. data/spec/unit/lwrp_spec.rb +3 -3
  420. data/spec/unit/mixin/default_paths_spec.rb +1 -1
  421. data/spec/unit/mixin/homebrew_user_spec.rb +30 -7
  422. data/spec/unit/mixin/openssl_helper_spec.rb +1 -1
  423. data/spec/unit/mixin/params_validate_spec.rb +4 -3
  424. data/spec/unit/mixin/powershell_exec_spec.rb +9 -9
  425. data/spec/unit/mixin/powershell_out_spec.rb +2 -2
  426. data/spec/unit/mixin/securable_spec.rb +3 -3
  427. data/spec/unit/mixin/why_run_spec.rb +53 -0
  428. data/spec/unit/node/attribute_spec.rb +1 -1
  429. data/spec/unit/node_spec.rb +78 -0
  430. data/spec/unit/org_group_spec.rb +45 -0
  431. data/spec/unit/platform/query_helpers_spec.rb +5 -5
  432. data/spec/unit/policy_builder/dynamic_spec.rb +0 -5
  433. data/spec/unit/policy_builder/policyfile_spec.rb +133 -55
  434. data/spec/unit/property_spec.rb +23 -22
  435. data/spec/unit/provider/apt_update_spec.rb +3 -1
  436. data/spec/unit/provider/cron_spec.rb +46 -1
  437. data/spec/unit/provider/dsc_script_spec.rb +8 -8
  438. data/spec/unit/provider/group/gpasswd_spec.rb +2 -2
  439. data/spec/unit/provider/group/groupadd_spec.rb +1 -0
  440. data/spec/unit/provider/group/groupmod_spec.rb +2 -2
  441. data/spec/unit/provider/group/pw_spec.rb +2 -2
  442. data/spec/unit/provider/group/usermod_spec.rb +4 -4
  443. data/spec/unit/provider/group_spec.rb +1 -1
  444. data/spec/unit/provider/ifconfig/aix_spec.rb +14 -14
  445. data/spec/unit/provider/ifconfig/debian_spec.rb +1 -1
  446. data/spec/unit/provider/ifconfig/redhat_spec.rb +1 -1
  447. data/spec/unit/provider/ifconfig_spec.rb +5 -3
  448. data/spec/unit/provider/link_spec.rb +14 -8
  449. data/spec/unit/provider/mount/aix_spec.rb +1 -1
  450. data/spec/unit/provider/mount/linux_spec.rb +16 -3
  451. data/spec/unit/provider/package/apt_spec.rb +84 -18
  452. data/spec/unit/provider/package/bff_spec.rb +1 -0
  453. data/spec/unit/provider/package/chocolatey_spec.rb +20 -3
  454. data/spec/unit/provider/package/deb_spec.rb +3 -3
  455. data/spec/unit/provider/package/dnf/python_helper_spec.rb +1 -0
  456. data/spec/unit/provider/package/powershell_spec.rb +114 -114
  457. data/spec/unit/provider/package/rubygems_spec.rb +27 -36
  458. data/spec/unit/provider/package/solaris_spec.rb +1 -0
  459. data/spec/unit/provider/package/windows_spec.rb +1 -1
  460. data/spec/unit/provider/package/yum/python_helper_spec.rb +1 -0
  461. data/spec/unit/provider/registry_key_spec.rb +4 -4
  462. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +3 -3
  463. data/spec/unit/provider/remote_file/http_spec.rb +10 -0
  464. data/spec/unit/provider/service/arch_service_spec.rb +3 -2
  465. data/spec/unit/provider/service/debian_service_spec.rb +2 -0
  466. data/spec/unit/provider/service/gentoo_service_spec.rb +3 -2
  467. data/spec/unit/provider/service/macosx_spec.rb +3 -2
  468. data/spec/unit/provider/service/redhat_spec.rb +4 -1
  469. data/spec/unit/provider/service/simple_service_spec.rb +6 -4
  470. data/spec/unit/provider/service/systemd_service_spec.rb +138 -23
  471. data/spec/unit/provider/service/upstart_service_spec.rb +3 -32
  472. data/spec/unit/provider/service/windows_spec.rb +7 -7
  473. data/spec/unit/provider/subversion_spec.rb +6 -6
  474. data/spec/unit/provider/systemd_unit_spec.rb +79 -60
  475. data/spec/unit/provider/template_spec.rb +2 -2
  476. data/spec/unit/provider/user/linux_spec.rb +55 -0
  477. data/spec/unit/provider/user/solaris_spec.rb +1 -1
  478. data/spec/unit/provider/user_spec.rb +2 -0
  479. data/spec/unit/provider/windows_env_spec.rb +1 -1
  480. data/spec/unit/provider/zypper_repository_spec.rb +6 -13
  481. data/spec/unit/provider_spec.rb +23 -8
  482. data/spec/unit/resource/archive_file_spec.rb +400 -2
  483. data/spec/unit/resource/chef_client_config_spec.rb +8 -0
  484. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +69 -0
  485. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +1 -1
  486. data/spec/unit/resource/chocolatey_config_spec.rb +1 -1
  487. data/spec/unit/resource/chocolatey_feature_spec.rb +1 -1
  488. data/spec/unit/resource/chocolatey_source_spec.rb +1 -1
  489. data/spec/unit/resource/conditional_spec.rb +4 -4
  490. data/spec/unit/resource/dpkg_package_spec.rb +12 -0
  491. data/spec/unit/resource/file/verification/json_spec.rb +72 -0
  492. data/spec/unit/resource/file/verification/yaml_spec.rb +67 -0
  493. data/spec/unit/resource/inspec_input_spec.rb +300 -0
  494. data/spec/unit/resource/inspec_waiver_file_entry_spec.rb +80 -0
  495. data/spec/unit/resource/inspec_waiver_spec.rb +312 -0
  496. data/spec/unit/resource/kernel_module_spec.rb +2 -1
  497. data/spec/unit/resource/macos_user_defaults_spec.rb +36 -96
  498. data/spec/unit/resource/powershell_package_source_spec.rb +63 -62
  499. data/spec/unit/resource/powershell_script_spec.rb +2 -2
  500. data/spec/unit/resource/registry_key_spec.rb +10 -10
  501. data/spec/unit/resource/rhsm_register_spec.rb +42 -0
  502. data/spec/unit/resource/windows_auto_run_spec.rb +1 -1
  503. data/spec/unit/resource/windows_defender_exclusion_spec.rb +62 -0
  504. data/spec/unit/resource/windows_defender_spec.rb +71 -0
  505. data/spec/unit/resource/windows_feature_powershell_spec.rb +1 -1
  506. data/spec/unit/resource/windows_firewall_rule_spec.rb +14 -9
  507. data/spec/unit/resource/windows_pagefile_spec.rb +4 -9
  508. data/spec/unit/resource/windows_task_spec.rb +4 -4
  509. data/spec/unit/resource/windows_update_settings_spec.rb +64 -0
  510. data/spec/unit/resource/zypper_repository_spec.rb +1 -1
  511. data/spec/unit/resource_reporter_spec.rb +2 -2
  512. data/spec/unit/resource_spec.rb +56 -23
  513. data/spec/unit/run_context_spec.rb +16 -0
  514. data/spec/unit/secret_fetcher/akeyless_vault_spec.rb +37 -0
  515. data/spec/unit/secret_fetcher/aws_secrets_manager_spec.rb +70 -0
  516. data/spec/unit/secret_fetcher/azure_key_vault_spec.rb +149 -0
  517. data/spec/unit/secret_fetcher/hashi_vault_spec.rb +126 -0
  518. data/spec/unit/secret_fetcher_spec.rb +82 -0
  519. data/spec/unit/user_spec.rb +1 -1
  520. data/spec/unit/user_v1_spec.rb +6 -4
  521. data/spec/unit/util/backup_spec.rb +1 -1
  522. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +2 -2
  523. data/spec/unit/win32/registry_spec.rb +3 -3
  524. data/tasks/rspec.rb +10 -6
  525. metadata +181 -532
  526. data/bin/knife +0 -24
  527. data/lib/chef/application/knife.rb +0 -234
  528. data/lib/chef/application/windows_service.rb +0 -338
  529. data/lib/chef/application/windows_service_manager.rb +0 -205
  530. data/lib/chef/chef_fs/knife.rb +0 -160
  531. data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +0 -35
  532. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +0 -278
  533. data/lib/chef/chef_fs/parallelizer.rb +0 -102
  534. data/lib/chef/cookbook_site_streaming_uploader.rb +0 -244
  535. data/lib/chef/knife/acl_add.rb +0 -57
  536. data/lib/chef/knife/acl_base.rb +0 -183
  537. data/lib/chef/knife/acl_bulk_add.rb +0 -78
  538. data/lib/chef/knife/acl_bulk_remove.rb +0 -83
  539. data/lib/chef/knife/acl_remove.rb +0 -62
  540. data/lib/chef/knife/acl_show.rb +0 -56
  541. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +0 -162
  542. data/lib/chef/knife/bootstrap/client_builder.rb +0 -212
  543. data/lib/chef/knife/bootstrap/templates/README.md +0 -11
  544. data/lib/chef/knife/bootstrap/templates/chef-full.erb +0 -242
  545. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +0 -278
  546. data/lib/chef/knife/bootstrap/train_connector.rb +0 -336
  547. data/lib/chef/knife/bootstrap.rb +0 -1192
  548. data/lib/chef/knife/client_bulk_delete.rb +0 -104
  549. data/lib/chef/knife/client_create.rb +0 -101
  550. data/lib/chef/knife/client_delete.rb +0 -62
  551. data/lib/chef/knife/client_edit.rb +0 -52
  552. data/lib/chef/knife/client_key_create.rb +0 -73
  553. data/lib/chef/knife/client_key_delete.rb +0 -80
  554. data/lib/chef/knife/client_key_edit.rb +0 -83
  555. data/lib/chef/knife/client_key_list.rb +0 -73
  556. data/lib/chef/knife/client_key_show.rb +0 -80
  557. data/lib/chef/knife/client_list.rb +0 -41
  558. data/lib/chef/knife/client_reregister.rb +0 -58
  559. data/lib/chef/knife/config_get.rb +0 -39
  560. data/lib/chef/knife/config_get_profile.rb +0 -37
  561. data/lib/chef/knife/config_list.rb +0 -139
  562. data/lib/chef/knife/config_list_profiles.rb +0 -37
  563. data/lib/chef/knife/config_show.rb +0 -127
  564. data/lib/chef/knife/config_use.rb +0 -61
  565. data/lib/chef/knife/config_use_profile.rb +0 -47
  566. data/lib/chef/knife/configure.rb +0 -150
  567. data/lib/chef/knife/configure_client.rb +0 -48
  568. data/lib/chef/knife/cookbook_bulk_delete.rb +0 -71
  569. data/lib/chef/knife/cookbook_delete.rb +0 -151
  570. data/lib/chef/knife/cookbook_download.rb +0 -142
  571. data/lib/chef/knife/cookbook_list.rb +0 -47
  572. data/lib/chef/knife/cookbook_metadata.rb +0 -106
  573. data/lib/chef/knife/cookbook_metadata_from_file.rb +0 -49
  574. data/lib/chef/knife/cookbook_show.rb +0 -98
  575. data/lib/chef/knife/cookbook_upload.rb +0 -292
  576. data/lib/chef/knife/core/bootstrap_context.rb +0 -264
  577. data/lib/chef/knife/core/cookbook_scm_repo.rb +0 -159
  578. data/lib/chef/knife/core/formatting_options.rb +0 -49
  579. data/lib/chef/knife/core/gem_glob_loader.rb +0 -138
  580. data/lib/chef/knife/core/generic_presenter.rb +0 -232
  581. data/lib/chef/knife/core/hashed_command_loader.rb +0 -100
  582. data/lib/chef/knife/core/node_editor.rb +0 -130
  583. data/lib/chef/knife/core/node_presenter.rb +0 -133
  584. data/lib/chef/knife/core/object_loader.rb +0 -115
  585. data/lib/chef/knife/core/status_presenter.rb +0 -147
  586. data/lib/chef/knife/core/subcommand_loader.rb +0 -203
  587. data/lib/chef/knife/core/text_formatter.rb +0 -85
  588. data/lib/chef/knife/core/ui.rb +0 -338
  589. data/lib/chef/knife/core/windows_bootstrap_context.rb +0 -405
  590. data/lib/chef/knife/data_bag_create.rb +0 -81
  591. data/lib/chef/knife/data_bag_delete.rb +0 -49
  592. data/lib/chef/knife/data_bag_edit.rb +0 -74
  593. data/lib/chef/knife/data_bag_from_file.rb +0 -113
  594. data/lib/chef/knife/data_bag_secret_options.rb +0 -122
  595. data/lib/chef/knife/data_bag_show.rb +0 -69
  596. data/lib/chef/knife/delete.rb +0 -125
  597. data/lib/chef/knife/deps.rb +0 -156
  598. data/lib/chef/knife/diff.rb +0 -83
  599. data/lib/chef/knife/download.rb +0 -84
  600. data/lib/chef/knife/edit.rb +0 -88
  601. data/lib/chef/knife/environment_compare.rb +0 -128
  602. data/lib/chef/knife/environment_create.rb +0 -52
  603. data/lib/chef/knife/environment_delete.rb +0 -44
  604. data/lib/chef/knife/environment_edit.rb +0 -44
  605. data/lib/chef/knife/environment_from_file.rb +0 -84
  606. data/lib/chef/knife/environment_list.rb +0 -41
  607. data/lib/chef/knife/environment_show.rb +0 -47
  608. data/lib/chef/knife/exec.rb +0 -99
  609. data/lib/chef/knife/group_add.rb +0 -55
  610. data/lib/chef/knife/group_create.rb +0 -49
  611. data/lib/chef/knife/group_destroy.rb +0 -53
  612. data/lib/chef/knife/group_remove.rb +0 -56
  613. data/lib/chef/knife/group_show.rb +0 -49
  614. data/lib/chef/knife/key_create.rb +0 -112
  615. data/lib/chef/knife/key_create_base.rb +0 -50
  616. data/lib/chef/knife/key_delete.rb +0 -55
  617. data/lib/chef/knife/key_edit.rb +0 -118
  618. data/lib/chef/knife/key_edit_base.rb +0 -55
  619. data/lib/chef/knife/key_list.rb +0 -90
  620. data/lib/chef/knife/key_list_base.rb +0 -45
  621. data/lib/chef/knife/key_show.rb +0 -53
  622. data/lib/chef/knife/list.rb +0 -177
  623. data/lib/chef/knife/node_bulk_delete.rb +0 -75
  624. data/lib/chef/knife/node_create.rb +0 -47
  625. data/lib/chef/knife/node_delete.rb +0 -46
  626. data/lib/chef/knife/node_edit.rb +0 -70
  627. data/lib/chef/knife/node_environment_set.rb +0 -53
  628. data/lib/chef/knife/node_from_file.rb +0 -51
  629. data/lib/chef/knife/node_list.rb +0 -44
  630. data/lib/chef/knife/node_policy_set.rb +0 -79
  631. data/lib/chef/knife/node_run_list_add.rb +0 -104
  632. data/lib/chef/knife/node_run_list_remove.rb +0 -67
  633. data/lib/chef/knife/node_run_list_set.rb +0 -66
  634. data/lib/chef/knife/node_show.rb +0 -63
  635. data/lib/chef/knife/null.rb +0 -12
  636. data/lib/chef/knife/raw.rb +0 -123
  637. data/lib/chef/knife/rehash.rb +0 -50
  638. data/lib/chef/knife/role_bulk_delete.rb +0 -66
  639. data/lib/chef/knife/role_create.rb +0 -53
  640. data/lib/chef/knife/role_delete.rb +0 -46
  641. data/lib/chef/knife/role_edit.rb +0 -45
  642. data/lib/chef/knife/role_env_run_list_add.rb +0 -87
  643. data/lib/chef/knife/role_env_run_list_clear.rb +0 -55
  644. data/lib/chef/knife/role_env_run_list_remove.rb +0 -57
  645. data/lib/chef/knife/role_env_run_list_replace.rb +0 -60
  646. data/lib/chef/knife/role_env_run_list_set.rb +0 -70
  647. data/lib/chef/knife/role_from_file.rb +0 -51
  648. data/lib/chef/knife/role_list.rb +0 -42
  649. data/lib/chef/knife/role_run_list_add.rb +0 -87
  650. data/lib/chef/knife/role_run_list_clear.rb +0 -55
  651. data/lib/chef/knife/role_run_list_remove.rb +0 -56
  652. data/lib/chef/knife/role_run_list_replace.rb +0 -60
  653. data/lib/chef/knife/role_run_list_set.rb +0 -69
  654. data/lib/chef/knife/role_show.rb +0 -48
  655. data/lib/chef/knife/search.rb +0 -194
  656. data/lib/chef/knife/serve.rb +0 -65
  657. data/lib/chef/knife/show.rb +0 -72
  658. data/lib/chef/knife/ssh.rb +0 -645
  659. data/lib/chef/knife/ssl_check.rb +0 -284
  660. data/lib/chef/knife/ssl_fetch.rb +0 -161
  661. data/lib/chef/knife/status.rb +0 -95
  662. data/lib/chef/knife/supermarket_download.rb +0 -121
  663. data/lib/chef/knife/supermarket_install.rb +0 -192
  664. data/lib/chef/knife/supermarket_list.rb +0 -76
  665. data/lib/chef/knife/supermarket_search.rb +0 -53
  666. data/lib/chef/knife/supermarket_share.rb +0 -166
  667. data/lib/chef/knife/supermarket_show.rb +0 -66
  668. data/lib/chef/knife/supermarket_unshare.rb +0 -61
  669. data/lib/chef/knife/tag_create.rb +0 -52
  670. data/lib/chef/knife/tag_delete.rb +0 -60
  671. data/lib/chef/knife/tag_list.rb +0 -47
  672. data/lib/chef/knife/upload.rb +0 -86
  673. data/lib/chef/knife/user_create.rb +0 -107
  674. data/lib/chef/knife/user_delete.rb +0 -44
  675. data/lib/chef/knife/user_dissociate.rb +0 -42
  676. data/lib/chef/knife/user_edit.rb +0 -52
  677. data/lib/chef/knife/user_invite_add.rb +0 -43
  678. data/lib/chef/knife/user_invite_list.rb +0 -34
  679. data/lib/chef/knife/user_invite_rescind.rb +0 -63
  680. data/lib/chef/knife/user_key_create.rb +0 -73
  681. data/lib/chef/knife/user_key_delete.rb +0 -80
  682. data/lib/chef/knife/user_key_edit.rb +0 -83
  683. data/lib/chef/knife/user_key_list.rb +0 -73
  684. data/lib/chef/knife/user_key_show.rb +0 -80
  685. data/lib/chef/knife/user_list.rb +0 -42
  686. data/lib/chef/knife/user_reregister.rb +0 -59
  687. data/lib/chef/knife/user_show.rb +0 -48
  688. data/lib/chef/knife/xargs.rb +0 -282
  689. data/lib/chef/knife/yaml_convert.rb +0 -91
  690. data/lib/chef/knife.rb +0 -665
  691. data/lib/chef/provider/group/suse.rb +0 -82
  692. data/lib/chef/provider/package/yum/simplejson/LICENSE.txt +0 -79
  693. data/lib/chef/provider/package/yum/simplejson/__init__.py +0 -318
  694. data/lib/chef/provider/package/yum/simplejson/__init__.pyc +0 -0
  695. data/lib/chef/provider/package/yum/simplejson/decoder.py +0 -354
  696. data/lib/chef/provider/package/yum/simplejson/decoder.pyc +0 -0
  697. data/lib/chef/provider/package/yum/simplejson/encoder.py +0 -440
  698. data/lib/chef/provider/package/yum/simplejson/encoder.pyc +0 -0
  699. data/lib/chef/provider/package/yum/simplejson/scanner.py +0 -65
  700. data/lib/chef/provider/package/yum/simplejson/scanner.pyc +0 -0
  701. data/lib/chef/provider/package/yum/simplejson/tool.py +0 -37
  702. data/spec/functional/knife/configure_spec.rb +0 -33
  703. data/spec/functional/knife/cookbook_delete_spec.rb +0 -156
  704. data/spec/functional/knife/exec_spec.rb +0 -55
  705. data/spec/functional/knife/rehash_spec.rb +0 -39
  706. data/spec/functional/knife/smoke_test.rb +0 -42
  707. data/spec/functional/knife/ssh_spec.rb +0 -352
  708. data/spec/functional/resource/user/dscl_spec.rb +0 -188
  709. data/spec/functional/resource/windows_service_spec.rb +0 -105
  710. data/spec/functional/win32/service_manager_spec.rb +0 -220
  711. data/spec/integration/knife/chef_fs_data_store_spec.rb +0 -557
  712. data/spec/integration/knife/chef_repo_path_spec.rb +0 -962
  713. data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -200
  714. data/spec/integration/knife/chefignore_spec.rb +0 -301
  715. data/spec/integration/knife/client_bulk_delete_spec.rb +0 -131
  716. data/spec/integration/knife/client_create_spec.rb +0 -70
  717. data/spec/integration/knife/client_delete_spec.rb +0 -64
  718. data/spec/integration/knife/client_key_create_spec.rb +0 -66
  719. data/spec/integration/knife/client_key_delete_spec.rb +0 -43
  720. data/spec/integration/knife/client_key_list_spec.rb +0 -61
  721. data/spec/integration/knife/client_key_show_spec.rb +0 -45
  722. data/spec/integration/knife/client_list_spec.rb +0 -49
  723. data/spec/integration/knife/client_show_spec.rb +0 -37
  724. data/spec/integration/knife/common_options_spec.rb +0 -174
  725. data/spec/integration/knife/config_list_spec.rb +0 -220
  726. data/spec/integration/knife/config_show_spec.rb +0 -192
  727. data/spec/integration/knife/config_use_spec.rb +0 -198
  728. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +0 -113
  729. data/spec/integration/knife/cookbook_bulk_delete_spec.rb +0 -65
  730. data/spec/integration/knife/cookbook_download_spec.rb +0 -72
  731. data/spec/integration/knife/cookbook_list_spec.rb +0 -55
  732. data/spec/integration/knife/cookbook_show_spec.rb +0 -149
  733. data/spec/integration/knife/cookbook_upload_spec.rb +0 -128
  734. data/spec/integration/knife/data_bag_create_spec.rb +0 -125
  735. data/spec/integration/knife/data_bag_delete_spec.rb +0 -59
  736. data/spec/integration/knife/data_bag_edit_spec.rb +0 -105
  737. data/spec/integration/knife/data_bag_from_file_spec.rb +0 -116
  738. data/spec/integration/knife/data_bag_list_spec.rb +0 -44
  739. data/spec/integration/knife/data_bag_show_spec.rb +0 -95
  740. data/spec/integration/knife/delete_spec.rb +0 -1018
  741. data/spec/integration/knife/deps_spec.rb +0 -703
  742. data/spec/integration/knife/diff_spec.rb +0 -605
  743. data/spec/integration/knife/download_spec.rb +0 -1336
  744. data/spec/integration/knife/environment_compare_spec.rb +0 -75
  745. data/spec/integration/knife/environment_create_spec.rb +0 -41
  746. data/spec/integration/knife/environment_delete_spec.rb +0 -37
  747. data/spec/integration/knife/environment_from_file_spec.rb +0 -116
  748. data/spec/integration/knife/environment_list_spec.rb +0 -42
  749. data/spec/integration/knife/environment_show_spec.rb +0 -77
  750. data/spec/integration/knife/list_spec.rb +0 -1060
  751. data/spec/integration/knife/node_bulk_delete_spec.rb +0 -52
  752. data/spec/integration/knife/node_create_spec.rb +0 -47
  753. data/spec/integration/knife/node_delete_spec.rb +0 -48
  754. data/spec/integration/knife/node_environment_set_spec.rb +0 -46
  755. data/spec/integration/knife/node_from_file_spec.rb +0 -59
  756. data/spec/integration/knife/node_list_spec.rb +0 -45
  757. data/spec/integration/knife/node_run_list_add_spec.rb +0 -54
  758. data/spec/integration/knife/node_run_list_remove_spec.rb +0 -36
  759. data/spec/integration/knife/node_run_list_set_spec.rb +0 -41
  760. data/spec/integration/knife/node_show_spec.rb +0 -36
  761. data/spec/integration/knife/raw_spec.rb +0 -297
  762. data/spec/integration/knife/redirection_spec.rb +0 -64
  763. data/spec/integration/knife/role_bulk_delete_spec.rb +0 -52
  764. data/spec/integration/knife/role_create_spec.rb +0 -41
  765. data/spec/integration/knife/role_delete_spec.rb +0 -48
  766. data/spec/integration/knife/role_from_file_spec.rb +0 -96
  767. data/spec/integration/knife/role_list_spec.rb +0 -45
  768. data/spec/integration/knife/role_show_spec.rb +0 -51
  769. data/spec/integration/knife/search_node_spec.rb +0 -40
  770. data/spec/integration/knife/serve_spec.rb +0 -92
  771. data/spec/integration/knife/show_spec.rb +0 -197
  772. data/spec/integration/knife/upload_spec.rb +0 -1616
  773. data/spec/support/shared/functional/win32_service.rb +0 -57
  774. data/spec/unit/application/knife_spec.rb +0 -241
  775. data/spec/unit/chef_fs/parallelizer_spec.rb +0 -479
  776. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -198
  777. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +0 -152
  778. data/spec/unit/knife/bootstrap/client_builder_spec.rb +0 -207
  779. data/spec/unit/knife/bootstrap/train_connector_spec.rb +0 -244
  780. data/spec/unit/knife/bootstrap_spec.rb +0 -2220
  781. data/spec/unit/knife/client_bulk_delete_spec.rb +0 -166
  782. data/spec/unit/knife/client_create_spec.rb +0 -169
  783. data/spec/unit/knife/client_delete_spec.rb +0 -99
  784. data/spec/unit/knife/client_edit_spec.rb +0 -53
  785. data/spec/unit/knife/client_list_spec.rb +0 -34
  786. data/spec/unit/knife/client_reregister_spec.rb +0 -62
  787. data/spec/unit/knife/client_show_spec.rb +0 -52
  788. data/spec/unit/knife/configure_client_spec.rb +0 -81
  789. data/spec/unit/knife/configure_spec.rb +0 -190
  790. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +0 -87
  791. data/spec/unit/knife/cookbook_delete_spec.rb +0 -239
  792. data/spec/unit/knife/cookbook_download_spec.rb +0 -255
  793. data/spec/unit/knife/cookbook_list_spec.rb +0 -88
  794. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +0 -72
  795. data/spec/unit/knife/cookbook_metadata_spec.rb +0 -182
  796. data/spec/unit/knife/cookbook_show_spec.rb +0 -253
  797. data/spec/unit/knife/cookbook_upload_spec.rb +0 -364
  798. data/spec/unit/knife/core/bootstrap_context_spec.rb +0 -287
  799. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +0 -187
  800. data/spec/unit/knife/core/gem_glob_loader_spec.rb +0 -209
  801. data/spec/unit/knife/core/hashed_command_loader_spec.rb +0 -112
  802. data/spec/unit/knife/core/node_editor_spec.rb +0 -211
  803. data/spec/unit/knife/core/object_loader_spec.rb +0 -81
  804. data/spec/unit/knife/core/status_presenter_spec.rb +0 -54
  805. data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -64
  806. data/spec/unit/knife/core/ui_spec.rb +0 -656
  807. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +0 -238
  808. data/spec/unit/knife/data_bag_create_spec.rb +0 -175
  809. data/spec/unit/knife/data_bag_edit_spec.rb +0 -126
  810. data/spec/unit/knife/data_bag_from_file_spec.rb +0 -174
  811. data/spec/unit/knife/data_bag_secret_options_spec.rb +0 -173
  812. data/spec/unit/knife/data_bag_show_spec.rb +0 -139
  813. data/spec/unit/knife/environment_compare_spec.rb +0 -112
  814. data/spec/unit/knife/environment_create_spec.rb +0 -91
  815. data/spec/unit/knife/environment_delete_spec.rb +0 -71
  816. data/spec/unit/knife/environment_edit_spec.rb +0 -79
  817. data/spec/unit/knife/environment_from_file_spec.rb +0 -90
  818. data/spec/unit/knife/environment_list_spec.rb +0 -54
  819. data/spec/unit/knife/environment_show_spec.rb +0 -52
  820. data/spec/unit/knife/key_create_spec.rb +0 -223
  821. data/spec/unit/knife/key_delete_spec.rb +0 -133
  822. data/spec/unit/knife/key_edit_spec.rb +0 -264
  823. data/spec/unit/knife/key_helper.rb +0 -74
  824. data/spec/unit/knife/key_list_spec.rb +0 -216
  825. data/spec/unit/knife/key_show_spec.rb +0 -126
  826. data/spec/unit/knife/node_bulk_delete_spec.rb +0 -94
  827. data/spec/unit/knife/node_delete_spec.rb +0 -77
  828. data/spec/unit/knife/node_edit_spec.rb +0 -116
  829. data/spec/unit/knife/node_environment_set_spec.rb +0 -61
  830. data/spec/unit/knife/node_from_file_spec.rb +0 -59
  831. data/spec/unit/knife/node_list_spec.rb +0 -62
  832. data/spec/unit/knife/node_policy_set_spec.rb +0 -122
  833. data/spec/unit/knife/node_run_list_add_spec.rb +0 -145
  834. data/spec/unit/knife/node_run_list_remove_spec.rb +0 -106
  835. data/spec/unit/knife/node_run_list_set_spec.rb +0 -115
  836. data/spec/unit/knife/node_show_spec.rb +0 -65
  837. data/spec/unit/knife/raw_spec.rb +0 -43
  838. data/spec/unit/knife/role_bulk_delete_spec.rb +0 -80
  839. data/spec/unit/knife/role_create_spec.rb +0 -80
  840. data/spec/unit/knife/role_delete_spec.rb +0 -67
  841. data/spec/unit/knife/role_edit_spec.rb +0 -77
  842. data/spec/unit/knife/role_env_run_list_add_spec.rb +0 -217
  843. data/spec/unit/knife/role_env_run_list_clear_spec.rb +0 -94
  844. data/spec/unit/knife/role_env_run_list_remove_spec.rb +0 -102
  845. data/spec/unit/knife/role_env_run_list_replace_spec.rb +0 -105
  846. data/spec/unit/knife/role_env_run_list_set_spec.rb +0 -99
  847. data/spec/unit/knife/role_from_file_spec.rb +0 -69
  848. data/spec/unit/knife/role_list_spec.rb +0 -54
  849. data/spec/unit/knife/role_run_list_add_spec.rb +0 -179
  850. data/spec/unit/knife/role_run_list_clear_spec.rb +0 -84
  851. data/spec/unit/knife/role_run_list_remove_spec.rb +0 -92
  852. data/spec/unit/knife/role_run_list_replace_spec.rb +0 -98
  853. data/spec/unit/knife/role_run_list_set_spec.rb +0 -89
  854. data/spec/unit/knife/role_show_spec.rb +0 -59
  855. data/spec/unit/knife/ssh_spec.rb +0 -403
  856. data/spec/unit/knife/ssl_check_spec.rb +0 -256
  857. data/spec/unit/knife/ssl_fetch_spec.rb +0 -222
  858. data/spec/unit/knife/status_spec.rb +0 -112
  859. data/spec/unit/knife/supermarket_download_spec.rb +0 -152
  860. data/spec/unit/knife/supermarket_install_spec.rb +0 -202
  861. data/spec/unit/knife/supermarket_list_spec.rb +0 -70
  862. data/spec/unit/knife/supermarket_search_spec.rb +0 -85
  863. data/spec/unit/knife/supermarket_share_spec.rb +0 -208
  864. data/spec/unit/knife/supermarket_unshare_spec.rb +0 -78
  865. data/spec/unit/knife/tag_create_spec.rb +0 -23
  866. data/spec/unit/knife/tag_delete_spec.rb +0 -25
  867. data/spec/unit/knife/tag_list_spec.rb +0 -23
  868. data/spec/unit/knife/user_create_spec.rb +0 -184
  869. data/spec/unit/knife/user_delete_spec.rb +0 -46
  870. data/spec/unit/knife/user_edit_spec.rb +0 -48
  871. data/spec/unit/knife/user_list_spec.rb +0 -36
  872. data/spec/unit/knife/user_reregister_spec.rb +0 -56
  873. data/spec/unit/knife/user_show_spec.rb +0 -46
  874. data/spec/unit/knife_spec.rb +0 -634
  875. data/spec/unit/provider/group/suse_spec.rb +0 -90
  876. data/spec/unit/provider/user/dscl_spec.rb +0 -699
  877. data/spec/unit/windows_service_spec.rb +0 -118
  878. /data/spec/functional/assets/chocolatey_feed/{test-A.1.0.nupkg → test-A.1.0.0.nupkg} +0 -0
  879. /data/spec/functional/assets/chocolatey_feed/{test-A.1.5.nupkg → test-A.1.5.0.nupkg} +0 -0
  880. /data/spec/functional/assets/chocolatey_feed/{test-A.2.0.nupkg → test-A.2.0.0.nupkg} +0 -0
  881. /data/spec/functional/assets/chocolatey_feed/{test-B.1.0.nupkg → test-B.1.0.0.nupkg} +0 -0
@@ -33,15 +33,43 @@ describe Chef::Resource::ArchiveFile, :not_supported_on_aix do
33
33
  let(:node) { Chef::Node.new }
34
34
  let(:events) { Chef::EventDispatch::Dispatcher.new }
35
35
  let(:run_context) { Chef::RunContext.new(node, {}, events) }
36
- let(:resource) { Chef::Resource::ArchiveFile.new("foo", run_context) }
36
+ let(:destination) { Dir.mktmpdir }
37
+ let(:path) { File.expand_path("/tmp/foo.zip") }
38
+ let(:resource) do
39
+ r = Chef::Resource::ArchiveFile.new(path, run_context)
40
+ r.destination = destination
41
+ r
42
+ end
37
43
  let(:provider) { resource.provider_for_action(:extract) }
44
+ let(:entry_time) { Time.new(2021, 5, 25, 2, 2, 0, "-05:00") }
45
+ let(:older_time) { entry_time - 100 }
46
+ let(:newer_time) { entry_time + 100 }
47
+
48
+ let(:archive_reader) { instance_double("Archive::Reader", close: nil) }
49
+ let(:archive_entry_1) { instance_double("Archive::Entry", pathname: "folder-1/", mtime: entry_time) }
50
+ let(:archive_entry_2) { instance_double("Archive::Entry", pathname: "folder-1/file-1.txt", mtime: entry_time) }
51
+ let(:archive_entry_3) { instance_double("Archive::Entry", pathname: "folder-1/folder-2/", mtime: entry_time) }
52
+ let(:archive_entry_4) { instance_double("Archive::Entry", pathname: "folder-1/folder-2/file-2.txt", mtime: entry_time) }
53
+
54
+ let(:archive_reader_with_strip_components_1) { instance_double("Archive::Reader", close: nil) }
55
+ let(:archive_entry_2_s1) { instance_double("Archive::Entry", pathname: "file-1.txt", mtime: entry_time) }
56
+ let(:archive_entry_3_s1) { instance_double("Archive::Entry", pathname: "folder-2/", mtime: entry_time) }
57
+ let(:archive_entry_4_s1) { instance_double("Archive::Entry", pathname: "folder-2/file-2.txt", mtime: entry_time) }
58
+
59
+ let(:archive_reader_with_strip_components_2) { instance_double("Archive::Reader", close: nil) }
60
+ let(:archive_entry_4_s2) { instance_double("Archive::Entry", pathname: "file-2.txt", mtime: entry_time) }
61
+
62
+ before do
63
+ allow(resource).to receive(:provider_for_action).with(:extract).and_return(provider)
64
+ end
38
65
 
39
66
  it "has a resource name of :archive_file" do
40
67
  expect(resource.resource_name).to eql(:archive_file)
41
68
  end
42
69
 
43
70
  it "has a name property of path" do
44
- expect(resource.path).to match(/.*foo$/)
71
+ r = Chef::Resource::ArchiveFile.new("my-name", run_context)
72
+ expect(r.path).to match("my-name")
45
73
  end
46
74
 
47
75
  it "sets the default action as :extract" do
@@ -56,6 +84,376 @@ describe Chef::Resource::ArchiveFile, :not_supported_on_aix do
56
84
  expect(resource.mode).to eql("755")
57
85
  end
58
86
 
87
+ it "strip_components property defaults to 0" do
88
+ expect(resource.strip_components).to eql(0)
89
+ end
90
+
91
+ describe "#action_extract" do
92
+ before do
93
+ allow(FileUtils).to receive(:mkdir_p)
94
+ allow(File).to receive(:exist?).and_call_original
95
+ allow(File).to receive(:exist?).with(path).and_return(true)
96
+ allow(File).to receive(:exist?).with(destination).and_return(true)
97
+
98
+ allow(Archive::Reader).to receive(:open_filename).with(path, nil, strip_components: 0).and_return(archive_reader)
99
+ allow(archive_reader).to receive(:each_entry)
100
+ .and_yield(archive_entry_1)
101
+ .and_yield(archive_entry_2)
102
+ .and_yield(archive_entry_3)
103
+ .and_yield(archive_entry_4)
104
+ allow(archive_reader).to receive(:extract).with(archive_entry_1, any_args)
105
+ allow(archive_reader).to receive(:extract).with(archive_entry_2, any_args)
106
+ allow(archive_reader).to receive(:extract).with(archive_entry_3, any_args)
107
+ allow(archive_reader).to receive(:extract).with(archive_entry_4, any_args)
108
+
109
+ allow(Archive::Reader).to receive(:open_filename).with(path, nil, strip_components: 1).and_return(archive_reader_with_strip_components_1)
110
+ allow(archive_reader_with_strip_components_1).to receive(:each_entry)
111
+ .and_yield(archive_entry_2_s1)
112
+ .and_yield(archive_entry_3_s1)
113
+ .and_yield(archive_entry_4_s1)
114
+ allow(archive_reader_with_strip_components_1).to receive(:extract).with(archive_entry_2_s1, any_args)
115
+ allow(archive_reader_with_strip_components_1).to receive(:extract).with(archive_entry_3_s1, any_args)
116
+ allow(archive_reader_with_strip_components_1).to receive(:extract).with(archive_entry_4_s1, any_args)
117
+
118
+ allow(Archive::Reader).to receive(:open_filename).with(path, nil, strip_components: 2).and_return(archive_reader_with_strip_components_2)
119
+ allow(archive_reader_with_strip_components_2).to receive(:each_entry)
120
+ .and_yield(archive_entry_4_s2)
121
+ allow(archive_reader_with_strip_components_2).to receive(:extract).with(archive_entry_4_s2, any_args)
122
+
123
+ allow(File).to receive(:exist?).with("#{destination}/folder-1").and_return(true)
124
+ allow(File).to receive(:exist?).with("#{destination}/folder-1/file-1.txt").and_return(true)
125
+ allow(File).to receive(:exist?).with("#{destination}/folder-1/folder-2").and_return(true)
126
+ allow(File).to receive(:exist?).with("#{destination}/folder-1/folder-2/file-2.txt").and_return(true)
127
+
128
+ allow(File).to receive(:mtime).with("#{destination}/folder-1").and_return(entry_time)
129
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/file-1.txt").and_return(entry_time)
130
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2").and_return(entry_time)
131
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2/file-2.txt").and_return(entry_time)
132
+
133
+ resource.overwrite(true) # Force it to converge
134
+ end
135
+
136
+ context "when destination directory does not exist" do
137
+ before do
138
+ allow(File).to receive(:exist?).with(destination).and_return(false)
139
+ end
140
+
141
+ it "creates destination directory" do
142
+ expect(FileUtils).to receive(:mkdir_p).with(destination, { mode: 493 })
143
+ resource.run_action(:extract)
144
+ end
145
+ end
146
+
147
+ context "when destination directory exists" do
148
+ before do
149
+ allow(File).to receive(:exist?).with(destination).and_return(true)
150
+ end
151
+
152
+ it "does not create destination directory" do
153
+ expect(FileUtils).not_to receive(:mkdir_p)
154
+ resource.run_action(:extract)
155
+ end
156
+
157
+ context "when overwrite is set to false" do
158
+ before do
159
+ resource.overwrite(false)
160
+ end
161
+
162
+ context "when files on disk have identical modified times than what is in the archive" do
163
+ before do
164
+ allow(File).to receive(:mtime).with("#{destination}/folder-1").and_return(entry_time)
165
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/file-1.txt").and_return(entry_time)
166
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2").and_return(entry_time)
167
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2/file-2.txt").and_return(entry_time)
168
+ end
169
+
170
+ it "does not extract archive" do
171
+ expect(provider).not_to receive(:extract)
172
+ resource.run_action(:extract)
173
+ end
174
+ end
175
+
176
+ context "when files on disk have newer modified times than what is in the archive" do
177
+ before do
178
+ allow(File).to receive(:mtime).with("#{destination}/folder-1").and_return(newer_time)
179
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/file-1.txt").and_return(newer_time)
180
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2").and_return(newer_time)
181
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2/file-2.txt").and_return(newer_time)
182
+ end
183
+
184
+ it "does not extract archive" do
185
+ expect(provider).not_to receive(:extract)
186
+ resource.run_action(:extract)
187
+ end
188
+ end
189
+
190
+ context "when files on disk have older modified times than what is in the archive" do
191
+ before do
192
+ allow(File).to receive(:mtime).with("#{destination}/folder-1").and_return(older_time)
193
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/file-1.txt").and_return(older_time)
194
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2").and_return(older_time)
195
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2/file-2.txt").and_return(older_time)
196
+ end
197
+
198
+ it "does not extract archive" do
199
+ expect(provider).not_to receive(:extract)
200
+ resource.run_action(:extract)
201
+ end
202
+ end
203
+ end
204
+
205
+ context "when overwrite is set to true" do
206
+ before do
207
+ resource.overwrite(true)
208
+ end
209
+
210
+ context "when files on disk have identical modified times than what is in the archive" do
211
+ before do
212
+ allow(File).to receive(:mtime).with("#{destination}/folder-1").and_return(entry_time)
213
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/file-1.txt").and_return(entry_time)
214
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2").and_return(entry_time)
215
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2/file-2.txt").and_return(entry_time)
216
+ end
217
+
218
+ it "extracts archive" do
219
+ expect(provider).to receive(:extract)
220
+ resource.run_action(:extract)
221
+ end
222
+ end
223
+
224
+ context "when files on disk have newer modified times than what is in the archive" do
225
+ before do
226
+ allow(File).to receive(:mtime).with("#{destination}/folder-1").and_return(newer_time)
227
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/file-1.txt").and_return(newer_time)
228
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2").and_return(newer_time)
229
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2/file-2.txt").and_return(newer_time)
230
+ end
231
+
232
+ it "extracts archive" do
233
+ expect(provider).to receive(:extract)
234
+ resource.run_action(:extract)
235
+ end
236
+ end
237
+
238
+ context "when files on disk have older modified times than what is in the archive" do
239
+ before do
240
+ allow(File).to receive(:mtime).with("#{destination}/folder-1").and_return(older_time)
241
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/file-1.txt").and_return(older_time)
242
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2").and_return(older_time)
243
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2/file-2.txt").and_return(older_time)
244
+ end
245
+
246
+ it "extracts archive" do
247
+ expect(provider).to receive(:extract)
248
+ resource.run_action(:extract)
249
+ end
250
+ end
251
+ end
252
+
253
+ context "when overwrite is set to :auto" do
254
+ before do
255
+ resource.overwrite(:auto)
256
+ end
257
+
258
+ context "when strip_components is set to 0" do
259
+ before do
260
+ resource.strip_components(0)
261
+ end
262
+
263
+ context "when files on disk have identical modified times than what is in the archive" do
264
+ before do
265
+ allow(File).to receive(:mtime).with("#{destination}/folder-1").and_return(entry_time)
266
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/file-1.txt").and_return(entry_time)
267
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2").and_return(entry_time)
268
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2/file-2.txt").and_return(entry_time)
269
+ end
270
+
271
+ context "when there is at least one missing files on disk" do
272
+ before do
273
+ expect(File).to receive(:exist?).with("#{destination}/folder-1").and_return(false)
274
+ expect(File).to receive(:exist?).with("#{destination}/folder-1/file-1.txt").and_return(true)
275
+ expect(File).to receive(:exist?).with("#{destination}/folder-1/folder-2").and_return(true)
276
+ expect(File).to receive(:exist?).with("#{destination}/folder-1/folder-2/file-2.txt").and_return(true)
277
+ end
278
+
279
+ it "extracts archive" do
280
+ expect(provider).to receive(:extract)
281
+ resource.run_action(:extract)
282
+ end
283
+ end
284
+
285
+ context "when there are no missing files on disk" do
286
+ before do
287
+ expect(File).to receive(:exist?).with("#{destination}/folder-1").and_return(true)
288
+ expect(File).to receive(:exist?).with("#{destination}/folder-1/file-1.txt").and_return(true)
289
+ expect(File).to receive(:exist?).with("#{destination}/folder-1/folder-2").and_return(true)
290
+ expect(File).to receive(:exist?).with("#{destination}/folder-1/folder-2/file-2.txt").and_return(true)
291
+ end
292
+
293
+ it "does not extract archive" do
294
+ expect(provider).not_to receive(:extract)
295
+ resource.run_action(:extract)
296
+ end
297
+ end
298
+ end
299
+ end
300
+
301
+ context "when strip_components is set to 1" do
302
+ before do
303
+ resource.strip_components(1)
304
+ end
305
+
306
+ context "when files on disk have identical modified times than what is in the archive" do
307
+ before do
308
+ allow(File).to receive(:mtime).with("#{destination}/file-1.txt").and_return(entry_time)
309
+ allow(File).to receive(:mtime).with("#{destination}/folder-2").and_return(entry_time)
310
+ allow(File).to receive(:mtime).with("#{destination}/folder-2/file-2.txt").and_return(entry_time)
311
+ end
312
+
313
+ context "when there is at least one missing files on disk" do
314
+ before do
315
+ expect(File).not_to receive(:exist?).with("#{destination}/folder-1")
316
+ expect(File).not_to receive(:exist?).with("#{destination}/folder-1/file-1.txt")
317
+ expect(File).not_to receive(:exist?).with("#{destination}/folder-1/folder-2")
318
+ expect(File).not_to receive(:exist?).with("#{destination}/folder-1/folder-2/file-2.txt")
319
+ expect(File).to receive(:exist?).with("#{destination}/file-1.txt").and_return(false)
320
+ expect(File).to receive(:exist?).with("#{destination}/folder-2").and_return(true)
321
+ expect(File).to receive(:exist?).with("#{destination}/folder-2/file-2.txt").and_return(true)
322
+ end
323
+
324
+ it "extracts archive" do
325
+ expect(provider).to receive(:extract)
326
+ resource.run_action(:extract)
327
+ end
328
+ end
329
+
330
+ context "when there are no missing files on disk" do
331
+ before do
332
+ expect(File).not_to receive(:exist?).with("#{destination}/folder-1")
333
+ expect(File).not_to receive(:exist?).with("#{destination}/folder-1/file-1.txt")
334
+ expect(File).not_to receive(:exist?).with("#{destination}/folder-1/folder-2")
335
+ expect(File).not_to receive(:exist?).with("#{destination}/folder-1/folder-2/file-2.txt")
336
+ expect(File).to receive(:exist?).with("#{destination}/file-1.txt").and_return(true)
337
+ expect(File).to receive(:exist?).with("#{destination}/folder-2").and_return(true)
338
+ expect(File).to receive(:exist?).with("#{destination}/folder-2/file-2.txt").and_return(true)
339
+ end
340
+
341
+ it "does not extract archive" do
342
+ expect(provider).not_to receive(:extract)
343
+ resource.run_action(:extract)
344
+ end
345
+ end
346
+ end
347
+ end
348
+
349
+ context "when files on disk have newer modified times than what is in the archive" do
350
+ before do
351
+ allow(File).to receive(:mtime).with("#{destination}/folder-1").and_return(newer_time)
352
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/file-1.txt").and_return(newer_time)
353
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2").and_return(newer_time)
354
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2/file-2.txt").and_return(newer_time)
355
+ end
356
+
357
+ it "extracts archive" do
358
+ expect(provider).to receive(:extract)
359
+ resource.run_action(:extract)
360
+ end
361
+ end
362
+
363
+ context "when files on disk have older modified times than what is in the archive" do
364
+ before do
365
+ allow(File).to receive(:mtime).with("#{destination}/folder-1").and_return(older_time)
366
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/file-1.txt").and_return(older_time)
367
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2").and_return(older_time)
368
+ allow(File).to receive(:mtime).with("#{destination}/folder-1/folder-2/file-2.txt").and_return(older_time)
369
+ end
370
+
371
+ it "extracts archive" do
372
+ expect(provider).to receive(:extract)
373
+ resource.run_action(:extract)
374
+ end
375
+ end
376
+ end
377
+ end
378
+
379
+ context "when strip_components is set to 0" do
380
+ before do
381
+ resource.strip_components(0)
382
+ end
383
+
384
+ it "does not strip any paths" do
385
+ expect(archive_reader).to receive(:extract).with(archive_entry_1, 4)
386
+ expect(archive_reader).to receive(:extract).with(archive_entry_2, 4)
387
+ expect(archive_reader).to receive(:extract).with(archive_entry_3, 4)
388
+ expect(archive_reader).to receive(:extract).with(archive_entry_4, 4)
389
+ resource.run_action(:extract)
390
+ end
391
+ end
392
+
393
+ context "when strip_components is set to 1" do
394
+ before do
395
+ resource.strip_components(1)
396
+ end
397
+
398
+ it "strips leading number of paths specified in strip_components" do
399
+ expect(archive_reader_with_strip_components_1).to receive(:extract).with(archive_entry_2_s1, 4)
400
+ expect(archive_reader_with_strip_components_1).to receive(:extract).with(archive_entry_3_s1, 4)
401
+ expect(archive_reader_with_strip_components_1).to receive(:extract).with(archive_entry_4_s1, 4)
402
+ resource.run_action(:extract)
403
+ end
404
+ end
405
+
406
+ context "when strip_components is set to 2" do
407
+ before do
408
+ resource.strip_components(2)
409
+ end
410
+
411
+ it "strips leading number of paths specified in strip_components" do
412
+ expect(archive_reader_with_strip_components_2).to receive(:extract).with(archive_entry_4_s2, 4)
413
+ resource.run_action(:extract)
414
+ end
415
+ end
416
+
417
+ context "when owner property is set" do
418
+ before { resource.owner "root" }
419
+
420
+ it "chowns all archive file/directory paths" do
421
+ expect(FileUtils).to receive(:chown).with("root", nil, "#{destination}/folder-1/")
422
+ expect(FileUtils).to receive(:chown).with("root", nil, "#{destination}/folder-1/file-1.txt")
423
+ expect(FileUtils).to receive(:chown).with("root", nil, "#{destination}/folder-1/folder-2/")
424
+ expect(FileUtils).to receive(:chown).with("root", nil, "#{destination}/folder-1/folder-2/file-2.txt")
425
+ resource.run_action(:extract)
426
+ end
427
+ end
428
+
429
+ context "when group property is set" do
430
+ before { resource.group "root" }
431
+
432
+ it "chowns all archive file/directory paths" do
433
+ expect(FileUtils).to receive(:chown).with(nil, "root", "#{destination}/folder-1/")
434
+ expect(FileUtils).to receive(:chown).with(nil, "root", "#{destination}/folder-1/file-1.txt")
435
+ expect(FileUtils).to receive(:chown).with(nil, "root", "#{destination}/folder-1/folder-2/")
436
+ expect(FileUtils).to receive(:chown).with(nil, "root", "#{destination}/folder-1/folder-2/file-2.txt")
437
+ resource.run_action(:extract)
438
+ end
439
+ end
440
+
441
+ context "when owner and group properties are set" do
442
+ before do
443
+ resource.owner "root"
444
+ resource.group "root"
445
+ end
446
+
447
+ it "chowns all archive file/directory paths" do
448
+ expect(FileUtils).to receive(:chown).with("root", "root", "#{destination}/folder-1/")
449
+ expect(FileUtils).to receive(:chown).with("root", "root", "#{destination}/folder-1/file-1.txt")
450
+ expect(FileUtils).to receive(:chown).with("root", "root", "#{destination}/folder-1/folder-2/")
451
+ expect(FileUtils).to receive(:chown).with("root", "root", "#{destination}/folder-1/folder-2/file-2.txt")
452
+ resource.run_action(:extract)
453
+ end
454
+ end
455
+ end
456
+
59
457
  it "mode property throws a deprecation warning if Integers are passed" do
60
458
  expect(Chef::Log).to receive(:deprecation)
61
459
  resource.mode 755
@@ -134,4 +134,12 @@ describe Chef::Resource::ChefClientConfig do
134
134
  expect(provider.format_handler([{ "class" => "Foo", "arguments" => ["'one'", "two", "three"] }])).to eql(["Foo.new('one',two,three)"])
135
135
  end
136
136
  end
137
+
138
+ describe "rubygems_url property" do
139
+ it "accepts nil, a single URL, or an array of URLs" do
140
+ expect { resource.rubygems_url(nil) }.not_to raise_error
141
+ expect { resource.rubygems_url("https://rubygems.internal.example.com") }.not_to raise_error
142
+ expect { resource.rubygems_url(["https://rubygems.east.example.com", "https://rubygems.west.example.com"]) }.not_to raise_error
143
+ end
144
+ end
137
145
  end
@@ -25,6 +25,11 @@ describe Chef::Resource::ChefClientScheduledTask do
25
25
  let(:resource) { Chef::Resource::ChefClientScheduledTask.new("fakey_fakerton", run_context) }
26
26
  let(:provider) { resource.provider_for_action(:add) }
27
27
 
28
+ before do
29
+ allow(ENV).to receive(:[]).and_call_original
30
+ allow(ENV).to receive(:[]).with("COMSPEC").and_return("C:\\Windows\\System32\\cmd.exe")
31
+ end
32
+
28
33
  it "sets the default action as :add" do
29
34
  expect(resource.action).to eql([:add])
30
35
  end
@@ -73,11 +78,75 @@ describe Chef::Resource::ChefClientScheduledTask do
73
78
  expect(resource.chef_binary_path).to eql("C:/opscode/chef/bin/chef-client")
74
79
  end
75
80
 
81
+ context "priority" do
82
+ it "default value is 7" do
83
+ expect(resource.priority).to eq(7)
84
+ end
85
+
86
+ it "raise error when priority value less than 0" do
87
+ expect { resource.priority(-1) }.to raise_error(Chef::Exceptions::ValidationFailed, "Option priority's value -1 should be in range of 0 to 10!")
88
+ end
89
+
90
+ it "raise error when priority values is greater than 10" do
91
+ expect { resource.priority 11 }.to raise_error(Chef::Exceptions::ValidationFailed, "Option priority's value 11 should be in range of 0 to 10!")
92
+ end
93
+ end
94
+
76
95
  it "supports :add and :remove actions" do
77
96
  expect { resource.action :add }.not_to raise_error
78
97
  expect { resource.action :remove }.not_to raise_error
79
98
  end
80
99
 
100
+ it "expects use_consistent_splay to be true when set" do
101
+ resource.use_consistent_splay = true
102
+ expect(resource.use_consistent_splay).to eql(true)
103
+ end
104
+
105
+ context "when configured to use a consistent splay" do
106
+ before do
107
+ node.automatic_attrs[:shard_seed] = nil
108
+ allow(node).to receive(:name).and_return("test_node")
109
+ resource.config_directory = "C:/chef" # Allows local unit testing on nix flavors
110
+ resource.use_consistent_splay = true
111
+ end
112
+
113
+ it "sleeps the same amount each time based on splay before running the task" do
114
+ expect(provider.full_command).to eql("C:\\Windows\\System32\\cmd.exe /c \"C:/windows/system32/windowspowershell/v1.0/powershell.exe Start-Sleep -s 272 && C:/opscode/chef/bin/chef-client -L C:/chef/log/client.log -c C:/chef/client.rb\"")
115
+ end
116
+ end
117
+
118
+ describe "#consistent_splay_command" do
119
+ context "when use_consistent_splay is false" do
120
+ it "returns nil" do
121
+ expect(provider.consistent_splay_command).to eql(nil)
122
+ end
123
+ end
124
+
125
+ context "when use_consistent_splay is true" do
126
+ before do
127
+ resource.use_consistent_splay true
128
+ allow(provider).to receive(:splay_sleep_time).and_return(222)
129
+ end
130
+
131
+ it "returns a powershell sleep command to be appended to the chef client run command" do
132
+ expect(provider.consistent_splay_command).to eql("C:/windows/system32/windowspowershell/v1.0/powershell.exe Start-Sleep -s 222 && ")
133
+ end
134
+ end
135
+ end
136
+
137
+ describe "#splay_sleep_time" do
138
+ it "uses shard_seed attribute if present" do
139
+ node.automatic_attrs[:shard_seed] = "73399073"
140
+ expect(provider.splay_sleep_time(300)).to satisfy { |v| v >= 0 && v <= 300 }
141
+ end
142
+
143
+ it "uses a hex conversion of a md5 hash of the splay if present" do
144
+ node.automatic_attrs[:shard_seed] = nil
145
+ allow(node).to receive(:name).and_return("test_node")
146
+ expect(provider.splay_sleep_time(300)).to satisfy { |v| v >= 0 && v <= 300 }
147
+ end
148
+ end
149
+
81
150
  describe "#client_cmd" do
82
151
  it "creates a valid command if using all default properties" do
83
152
  expect(provider.client_cmd).to eql("C:/opscode/chef/bin/chef-client -L /etc/chef/log/client.log -c /etc/chef/client.rb") | eql("C:/opscode/chef/bin/chef-client -L C:\\chef/log/client.log -c C:\\chef/client.rb")
@@ -102,7 +102,7 @@ describe Chef::Resource::ChefClientSystemdTimer do
102
102
 
103
103
  it "sets CPUQuota if cpu_quota property is set" do
104
104
  resource.cpu_quota 50
105
- expect(provider.service_content["Service"]["CPUQuota"]).to eq(50)
105
+ expect(provider.service_content["Service"]["CPUQuota"]).to eq("50%")
106
106
  end
107
107
  end
108
108
  end
@@ -41,7 +41,7 @@ describe Chef::Resource::ChocolateyConfig do
41
41
  # we save off the ENV and set ALLUSERSPROFILE so these specs will work on *nix and non-C drive Windows installs
42
42
  before(:each) do
43
43
  @original_env = ENV.to_hash
44
- ENV["ALLUSERSPROFILE"] = 'C:\ProgramData'
44
+ ENV["ALLUSERSPROFILE"] = "C:\\ProgramData"
45
45
  end
46
46
 
47
47
  after(:each) do
@@ -41,7 +41,7 @@ describe Chef::Resource::ChocolateyFeature do
41
41
  # we save off the ENV and set ALLUSERSPROFILE so these specs will work on *nix and non-C drive Windows installs
42
42
  before(:each) do
43
43
  @original_env = ENV.to_hash
44
- ENV["ALLUSERSPROFILE"] = 'C:\ProgramData'
44
+ ENV["ALLUSERSPROFILE"] = "C:\\ProgramData"
45
45
  end
46
46
 
47
47
  after(:each) do
@@ -54,7 +54,7 @@ describe Chef::Resource::ChocolateySource do
54
54
  allow(resource).to receive(:provider_for_action).and_return(enable_provider)
55
55
  allow(resource.class).to receive(:new).and_return(current_resource)
56
56
  @original_env = ENV.to_hash
57
- ENV["ALLUSERSPROFILE"] = 'C:\ProgramData'
57
+ ENV["ALLUSERSPROFILE"] = "C:\\ProgramData"
58
58
  end
59
59
 
60
60
  after(:each) do
@@ -59,7 +59,7 @@ describe Chef::Resource::Conditional do
59
59
 
60
60
  describe "after running a negative/false command given as a string" do
61
61
  before do
62
- @status.send("success?=", false)
62
+ @status.send(:"success?=", false)
63
63
  @conditional = Chef::Resource::Conditional.only_if(@parent_resource, "false")
64
64
  end
65
65
 
@@ -80,7 +80,7 @@ describe Chef::Resource::Conditional do
80
80
 
81
81
  describe "after running a negative/false command given as an array" do
82
82
  before do
83
- @status.send("success?=", false)
83
+ @status.send(:"success?=", false)
84
84
  @conditional = Chef::Resource::Conditional.only_if(@parent_resource, ["false"])
85
85
  end
86
86
 
@@ -162,7 +162,7 @@ describe Chef::Resource::Conditional do
162
162
 
163
163
  describe "after running a failed/false command given as a string" do
164
164
  before do
165
- @status.send("success?=", false)
165
+ @status.send(:"success?=", false)
166
166
  @conditional = Chef::Resource::Conditional.not_if(@parent_resource, "false")
167
167
  end
168
168
 
@@ -183,7 +183,7 @@ describe Chef::Resource::Conditional do
183
183
 
184
184
  describe "after running a failed/false command given as an array" do
185
185
  before do
186
- @status.send("success?=", false)
186
+ @status.send(:"success?=", false)
187
187
  @conditional = Chef::Resource::Conditional.not_if(@parent_resource, ["false"])
188
188
  end
189
189
 
@@ -57,4 +57,16 @@ describe Chef::Resource::DpkgPackage, "initialize" do
57
57
  end
58
58
  end
59
59
 
60
+ describe Chef::Resource::DpkgPackage, "allow_downgrade" do
61
+ before(:each) do
62
+ @resource = Chef::Resource::DpkgPackage.new("fakey_fakerton")
63
+ end
64
+
65
+ it "should allow you to specify whether allow_downgrade is true or false" do
66
+ expect { @resource.allow_downgrade true }.not_to raise_error
67
+ expect { @resource.allow_downgrade false }.not_to raise_error
68
+ expect { @resource.allow_downgrade "something" }.to raise_error(ArgumentError)
69
+ end
70
+ end
71
+
60
72
  end