chef 16.13.16-universal-mingw32 → 17.3.48-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 (730) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +11 -22
  3. data/README.md +1 -1
  4. data/Rakefile +2 -2
  5. data/chef-universal-mingw32.gemspec +1 -1
  6. data/chef.gemspec +12 -24
  7. data/lib/chef/action_collection.rb +6 -26
  8. data/lib/chef/application.rb +1 -1
  9. data/lib/chef/application/base.rb +16 -1
  10. data/lib/chef/applications.rb +0 -1
  11. data/lib/chef/chef_fs/command_line.rb +5 -2
  12. data/lib/chef/chef_fs/file_pattern.rb +2 -2
  13. data/lib/chef/chef_fs/file_system.rb +9 -10
  14. data/lib/chef/client.rb +9 -3
  15. data/lib/chef/compliance/default_attributes.rb +5 -4
  16. data/lib/chef/compliance/fetcher/automate.rb +0 -7
  17. data/lib/chef/compliance/reporter/automate.rb +17 -7
  18. data/lib/chef/compliance/reporter/chef_server_automate.rb +11 -6
  19. data/lib/chef/compliance/reporter/cli.rb +77 -0
  20. data/lib/chef/compliance/reporter/compliance_enforcer.rb +4 -0
  21. data/lib/chef/compliance/reporter/json_file.rb +8 -1
  22. data/lib/chef/compliance/runner.rb +65 -27
  23. data/lib/chef/cookbook/cookbook_version_loader.rb +3 -3
  24. data/lib/chef/cookbook/gem_installer.rb +5 -1
  25. data/lib/chef/cookbook/synchronizer.rb +3 -5
  26. data/lib/chef/cookbook_loader.rb +2 -4
  27. data/lib/chef/cookbook_uploader.rb +0 -1
  28. data/lib/chef/cookbook_version.rb +26 -4
  29. data/lib/chef/data_bag_item.rb +11 -2
  30. data/lib/chef/data_collector.rb +0 -1
  31. data/lib/chef/data_collector/run_end_message.rb +1 -1
  32. data/lib/chef/delayed_evaluator.rb +4 -0
  33. data/lib/chef/deprecated.rb +18 -4
  34. data/lib/chef/dsl.rb +1 -0
  35. data/lib/chef/dsl/chef_vault.rb +6 -6
  36. data/lib/chef/dsl/declare_resource.rb +5 -10
  37. data/lib/chef/dsl/reboot_pending.rb +1 -2
  38. data/lib/chef/{knife/group_list.rb → dsl/render_helpers.rb} +18 -17
  39. data/lib/chef/dsl/secret.rb +64 -0
  40. data/lib/chef/dsl/toml.rb +116 -0
  41. data/lib/chef/dsl/universal.rb +5 -0
  42. data/lib/chef/event_dispatch/base.rb +2 -1
  43. data/lib/chef/exceptions.rb +25 -0
  44. data/lib/chef/formatters/doc.rb +2 -1
  45. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +20 -22
  46. data/lib/chef/group.rb +75 -0
  47. data/lib/chef/handler.rb +46 -8
  48. data/lib/chef/handler/slow_report.rb +66 -0
  49. data/lib/chef/json_compat.rb +1 -1
  50. data/lib/chef/mixin/get_source_from_package.rb +1 -1
  51. data/lib/chef/node.rb +21 -20
  52. data/lib/chef/node/attribute.rb +6 -4
  53. data/lib/chef/node/immutable_collections.rb +13 -0
  54. data/lib/chef/node/mixin/deep_merge_cache.rb +11 -7
  55. data/lib/chef/org.rb +3 -2
  56. data/lib/chef/policy_builder/policyfile.rb +88 -45
  57. data/lib/chef/property.rb +18 -0
  58. data/lib/chef/provider.rb +1 -1
  59. data/lib/chef/provider/cron.rb +1 -1
  60. data/lib/chef/provider/directory.rb +6 -6
  61. data/lib/chef/provider/execute.rb +2 -1
  62. data/lib/chef/provider/file.rb +3 -3
  63. data/lib/chef/provider/git.rb +5 -7
  64. data/lib/chef/provider/group/groupadd.rb +3 -3
  65. data/lib/chef/provider/group/groupmod.rb +3 -3
  66. data/lib/chef/provider/group/pw.rb +3 -3
  67. data/lib/chef/provider/ifconfig.rb +2 -2
  68. data/lib/chef/provider/link.rb +3 -3
  69. data/lib/chef/provider/lwrp_base.rb +1 -1
  70. data/lib/chef/provider/mount.rb +5 -5
  71. data/lib/chef/provider/mount/aix.rb +3 -3
  72. data/lib/chef/provider/mount/mount.rb +5 -5
  73. data/lib/chef/provider/mount/windows.rb +1 -1
  74. data/lib/chef/provider/package.rb +17 -21
  75. data/lib/chef/provider/package/apt.rb +27 -1
  76. data/lib/chef/provider/package/deb.rb +3 -3
  77. data/lib/chef/provider/package/dnf/dnf_helper.py +12 -11
  78. data/lib/chef/provider/package/dnf/python_helper.rb +9 -8
  79. data/lib/chef/provider/package/habitat.rb +168 -0
  80. data/lib/chef/provider/package/portage.rb +2 -2
  81. data/lib/chef/provider/package/powershell.rb +5 -0
  82. data/lib/chef/provider/package/rubygems.rb +11 -17
  83. data/lib/chef/provider/package/windows.rb +2 -4
  84. data/lib/chef/provider/package/yum.rb +1 -4
  85. data/lib/chef/provider/package/yum/python_helper.rb +15 -10
  86. data/lib/chef/provider/package/yum/yum_helper.py +47 -63
  87. data/lib/chef/provider/registry_key.rb +1 -1
  88. data/lib/chef/provider/route.rb +2 -2
  89. data/lib/chef/provider/service.rb +6 -6
  90. data/lib/chef/provider/service/aixinit.rb +1 -1
  91. data/lib/chef/provider/service/debian.rb +1 -1
  92. data/lib/chef/provider/service/freebsd.rb +15 -21
  93. data/lib/chef/provider/service/macosx.rb +4 -4
  94. data/lib/chef/provider/service/systemd.rb +43 -14
  95. data/lib/chef/provider/service/upstart.rb +2 -13
  96. data/lib/chef/provider/service/windows.rb +12 -12
  97. data/lib/chef/provider/subversion.rb +10 -12
  98. data/lib/chef/provider/support/zypper_repo.erb +4 -2
  99. data/lib/chef/provider/systemd_unit.rb +36 -10
  100. data/lib/chef/provider/template/content.rb +3 -7
  101. data/lib/chef/provider/user.rb +2 -2
  102. data/lib/chef/provider/user/dscl.rb +1 -1
  103. data/lib/chef/provider/user/mac.rb +17 -20
  104. data/lib/chef/provider/user/pw.rb +1 -1
  105. data/lib/chef/provider/user/windows.rb +1 -1
  106. data/lib/chef/provider/windows_script.rb +1 -1
  107. data/lib/chef/provider/zypper_repository.rb +28 -32
  108. data/lib/chef/providers.rb +1 -1
  109. data/lib/chef/resource.rb +6 -7
  110. data/lib/chef/resource/alternatives.rb +6 -6
  111. data/lib/chef/resource/apt_package.rb +1 -1
  112. data/lib/chef/resource/apt_preference.rb +2 -2
  113. data/lib/chef/resource/apt_repository.rb +6 -6
  114. data/lib/chef/resource/apt_update.rb +5 -4
  115. data/lib/chef/resource/archive_file.rb +2 -3
  116. data/lib/chef/resource/breakpoint.rb +1 -1
  117. data/lib/chef/resource/build_essential.rb +2 -6
  118. data/lib/chef/resource/chef_client_config.rb +10 -5
  119. data/lib/chef/resource/chef_client_cron.rb +5 -5
  120. data/lib/chef/resource/chef_client_launchd.rb +6 -6
  121. data/lib/chef/resource/chef_client_scheduled_task.rb +16 -16
  122. data/lib/chef/resource/chef_client_systemd_timer.rb +5 -5
  123. data/lib/chef/resource/chef_client_trusted_certificate.rb +2 -2
  124. data/lib/chef/resource/chef_handler.rb +3 -7
  125. data/lib/chef/resource/chef_sleep.rb +1 -1
  126. data/lib/chef/resource/chef_vault_secret.rb +5 -10
  127. data/lib/chef/resource/chocolatey_config.rb +2 -6
  128. data/lib/chef/resource/chocolatey_feature.rb +2 -6
  129. data/lib/chef/resource/chocolatey_source.rb +4 -10
  130. data/lib/chef/resource/cron/_cron_shared.rb +2 -2
  131. data/lib/chef/resource/cron/cron_d.rb +4 -6
  132. data/lib/chef/resource/cron_access.rb +2 -4
  133. data/lib/chef/resource/dmg_package.rb +6 -10
  134. data/lib/chef/resource/dpkg_package.rb +1 -1
  135. data/lib/chef/resource/dsc_resource.rb +1 -1
  136. data/lib/chef/resource/execute.rb +11 -6
  137. data/lib/chef/resource/file.rb +1 -1
  138. data/lib/chef/resource/gem_package.rb +2 -1
  139. data/lib/chef/resource/group.rb +6 -6
  140. data/lib/chef/{knife/recipe_list.rb → resource/habitat/_habitat_shared.rb} +13 -17
  141. data/lib/chef/resource/habitat/habitat_package.rb +129 -0
  142. data/lib/chef/resource/habitat/habitat_sup.rb +329 -0
  143. data/lib/chef/resource/habitat/habitat_sup_systemd.rb +67 -0
  144. data/lib/chef/resource/habitat/habitat_sup_windows.rb +90 -0
  145. data/lib/chef/resource/habitat_config.rb +107 -0
  146. data/lib/chef/resource/habitat_install.rb +247 -0
  147. data/lib/chef/resource/habitat_service.rb +451 -0
  148. data/lib/chef/resource/habitat_user_toml.rb +92 -0
  149. data/lib/chef/resource/homebrew_cask.rb +17 -10
  150. data/lib/chef/resource/homebrew_package.rb +1 -1
  151. data/lib/chef/resource/homebrew_tap.rb +4 -7
  152. data/lib/chef/resource/homebrew_update.rb +2 -2
  153. data/lib/chef/resource/hostname.rb +68 -22
  154. data/lib/chef/resource/http_request.rb +1 -1
  155. data/lib/chef/resource/inspec_waiver_file_entry.rb +156 -0
  156. data/lib/chef/resource/kernel_module.rb +6 -17
  157. data/lib/chef/resource/locale.rb +2 -3
  158. data/lib/chef/resource/lwrp_base.rb +20 -1
  159. data/lib/chef/resource/macos_userdefaults.rb +10 -14
  160. data/lib/chef/resource/mdadm.rb +53 -7
  161. data/lib/chef/resource/mount.rb +2 -1
  162. data/lib/chef/resource/ohai_hint.rb +2 -6
  163. data/lib/chef/resource/openbsd_package.rb +17 -0
  164. data/lib/chef/resource/openssl_dhparam.rb +1 -2
  165. data/lib/chef/resource/openssl_ec_private_key.rb +3 -5
  166. data/lib/chef/resource/openssl_ec_public_key.rb +1 -3
  167. data/lib/chef/resource/openssl_rsa_private_key.rb +2 -4
  168. data/lib/chef/resource/openssl_rsa_public_key.rb +1 -3
  169. data/lib/chef/resource/openssl_x509_certificate.rb +3 -6
  170. data/lib/chef/resource/openssl_x509_crl.rb +1 -3
  171. data/lib/chef/resource/openssl_x509_request.rb +1 -3
  172. data/lib/chef/resource/osx_profile.rb +3 -3
  173. data/lib/chef/resource/plist.rb +8 -8
  174. data/lib/chef/resource/powershell_package_source.rb +2 -4
  175. data/lib/chef/resource/powershell_script.rb +1 -1
  176. data/lib/chef/resource/reboot.rb +38 -9
  177. data/lib/chef/resource/remote_directory.rb +2 -2
  178. data/lib/chef/resource/remote_file.rb +3 -3
  179. data/lib/chef/resource/rhsm_errata.rb +16 -3
  180. data/lib/chef/resource/rhsm_errata_level.rb +11 -6
  181. data/lib/chef/resource/rhsm_register.rb +12 -6
  182. data/lib/chef/resource/rhsm_repo.rb +17 -6
  183. data/lib/chef/resource/rhsm_subscription.rb +2 -6
  184. data/lib/chef/resource/scm/git.rb +1 -1
  185. data/lib/chef/resource/ssh_known_hosts_entry.rb +4 -7
  186. data/lib/chef/resource/sudo.rb +8 -12
  187. data/lib/chef/resource/support/HabService.dll.config.erb +19 -0
  188. data/lib/chef/resource/support/client.erb +8 -1
  189. data/lib/chef/resource/support/sup.toml.erb +179 -0
  190. data/lib/chef/resource/swap_file.rb +2 -6
  191. data/lib/chef/resource/sysctl.rb +2 -6
  192. data/lib/chef/resource/systemd_unit.rb +2 -2
  193. data/lib/chef/resource/template.rb +1 -1
  194. data/lib/chef/resource/timezone.rb +1 -3
  195. data/lib/chef/resource/user/mac_user.rb +1 -1
  196. data/lib/chef/resource/user_ulimit.rb +2 -2
  197. data/lib/chef/resource/windows_ad_join.rb +2 -6
  198. data/lib/chef/resource/windows_audit_policy.rb +2 -2
  199. data/lib/chef/resource/windows_auto_run.rb +2 -5
  200. data/lib/chef/resource/windows_certificate.rb +207 -73
  201. data/lib/chef/resource/windows_defender.rb +163 -0
  202. data/lib/chef/resource/windows_defender_exclusion.rb +125 -0
  203. data/lib/chef/resource/windows_dfs_folder.rb +2 -6
  204. data/lib/chef/resource/windows_dfs_namespace.rb +2 -6
  205. data/lib/chef/resource/windows_dfs_server.rb +1 -3
  206. data/lib/chef/resource/windows_dns_record.rb +2 -6
  207. data/lib/chef/resource/windows_dns_zone.rb +2 -6
  208. data/lib/chef/resource/windows_env.rb +6 -5
  209. data/lib/chef/resource/windows_feature.rb +3 -9
  210. data/lib/chef/resource/windows_feature_dism.rb +3 -9
  211. data/lib/chef/resource/windows_feature_powershell.rb +3 -3
  212. data/lib/chef/resource/windows_firewall_profile.rb +4 -4
  213. data/lib/chef/resource/windows_firewall_rule.rb +20 -9
  214. data/lib/chef/resource/windows_font.rb +3 -5
  215. data/lib/chef/resource/windows_pagefile.rb +104 -69
  216. data/lib/chef/resource/windows_path.rb +4 -4
  217. data/lib/chef/resource/windows_printer.rb +80 -61
  218. data/lib/chef/resource/windows_printer_port.rb +49 -66
  219. data/lib/chef/resource/windows_security_policy.rb +56 -40
  220. data/lib/chef/resource/windows_share.rb +14 -21
  221. data/lib/chef/resource/windows_shortcut.rb +4 -6
  222. data/lib/chef/resource/windows_task.rb +19 -7
  223. data/lib/chef/resource/windows_uac.rb +3 -5
  224. data/lib/chef/resource/windows_update_settings.rb +259 -0
  225. data/lib/chef/resource/windows_user_privilege.rb +4 -4
  226. data/lib/chef/resource/windows_workgroup.rb +3 -4
  227. data/lib/chef/resource/yum_package.rb +10 -10
  228. data/lib/chef/resource/zypper_package.rb +4 -4
  229. data/lib/chef/resource/zypper_repository.rb +28 -8
  230. data/lib/chef/resource_builder.rb +8 -2
  231. data/lib/chef/resource_reporter.rb +0 -1
  232. data/lib/chef/resources.rb +13 -2
  233. data/lib/chef/run_lock.rb +1 -1
  234. data/lib/chef/runner.rb +1 -1
  235. data/lib/chef/secret_fetcher.rb +54 -0
  236. data/lib/chef/secret_fetcher/aws_secrets_manager.rb +53 -0
  237. data/lib/chef/secret_fetcher/azure_key_vault.rb +56 -0
  238. data/lib/chef/secret_fetcher/base.rb +72 -0
  239. data/lib/chef/secret_fetcher/example.rb +46 -0
  240. data/lib/chef/shell/ext.rb +3 -3
  241. data/lib/chef/user.rb +0 -1
  242. data/lib/chef/user_v1.rb +3 -4
  243. data/lib/chef/util/dsc/configuration_generator.rb +1 -0
  244. data/lib/chef/util/dsc/local_configuration_manager.rb +1 -1
  245. data/lib/chef/version.rb +1 -1
  246. data/lib/chef/win32/api.rb +9 -2
  247. data/lib/chef/win32/registry.rb +4 -2
  248. data/spec/data/cookbooks/openldap/libraries/openldap.rb +1 -1
  249. data/spec/data/lwrp/resources/bar.rb +2 -0
  250. data/spec/data/lwrp/resources/buck_passer.rb +1 -0
  251. data/spec/data/lwrp/resources/buck_passer_2.rb +1 -0
  252. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +1 -0
  253. data/spec/data/lwrp/resources/foo.rb +2 -0
  254. data/spec/data/lwrp/resources/inline_compiler.rb +1 -0
  255. data/spec/data/lwrp/resources/monkey_name_printer.rb +1 -0
  256. data/spec/data/lwrp/resources/paint_drying_watcher.rb +1 -0
  257. data/spec/data/lwrp/resources/thumb_twiddler.rb +1 -0
  258. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +2 -0
  259. data/spec/data/lwrp_const_scoping/resources/conflict.rb +1 -0
  260. data/spec/data/lwrp_override/resources/foo.rb +1 -0
  261. data/spec/data/rubygems.org/nonexistent_gem-info +1 -0
  262. data/spec/data/rubygems.org/sexp_processor-info +49 -0
  263. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  264. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  265. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  266. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  267. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  268. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +2 -0
  269. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  270. data/spec/data/run_context/cookbooks/test/resources/resource.rb +2 -0
  271. data/spec/functional/dsl/registry_helper_spec.rb +1 -1
  272. data/spec/functional/mixin/from_file_spec.rb +1 -1
  273. data/spec/functional/resource/aixinit_service_spec.rb +7 -7
  274. data/spec/functional/resource/apt_package_spec.rb +1 -1
  275. data/spec/functional/resource/chocolatey_package_spec.rb +13 -0
  276. data/spec/functional/resource/dnf_package_spec.rb +857 -534
  277. data/spec/functional/resource/group_spec.rb +1 -1
  278. data/spec/functional/resource/link_spec.rb +1 -1
  279. data/spec/functional/resource/registry_spec.rb +8 -8
  280. data/spec/functional/resource/remote_file_spec.rb +1 -1
  281. data/spec/functional/resource/user/mac_user_spec.rb +2 -2
  282. data/spec/functional/resource/windows_certificate_spec.rb +92 -35
  283. data/spec/functional/resource/windows_env_spec.rb +2 -2
  284. data/spec/functional/resource/windows_hostname_spec.rb +91 -0
  285. data/spec/functional/resource/windows_pagefile_spec.rb +98 -0
  286. data/spec/functional/resource/yum_package_spec.rb +495 -428
  287. data/spec/functional/version_spec.rb +1 -1
  288. data/spec/functional/win32/registry_spec.rb +1 -1
  289. data/spec/integration/client/client_spec.rb +5 -22
  290. data/spec/integration/client/exit_code_spec.rb +1 -1
  291. data/spec/integration/client/ipv6_spec.rb +1 -1
  292. data/spec/integration/compliance/compliance_spec.rb +1 -1
  293. data/spec/integration/ohai/ohai_spec.rb +7 -6
  294. data/spec/integration/recipes/accumulator_spec.rb +13 -1
  295. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +5 -1
  296. data/spec/integration/recipes/lwrp_spec.rb +3 -1
  297. data/spec/integration/recipes/notifies_spec.rb +15 -1
  298. data/spec/integration/recipes/notifying_block_spec.rb +2 -1
  299. data/spec/integration/recipes/recipe_dsl_spec.rb +10 -10
  300. data/spec/integration/recipes/resource_action_spec.rb +4 -4
  301. data/spec/integration/recipes/unified_mode_spec.rb +71 -1
  302. data/spec/integration/recipes/use_partial_spec.rb +4 -1
  303. data/spec/spec_helper.rb +13 -13
  304. data/spec/support/chef_helpers.rb +1 -17
  305. data/spec/support/lib/chef/resource/with_state.rb +0 -1
  306. data/spec/support/lib/chef/resource/zen_follower.rb +0 -1
  307. data/spec/support/lib/chef/resource/zen_master.rb +0 -1
  308. data/spec/support/matchers/leak.rb +7 -9
  309. data/spec/support/platform_helpers.rb +1 -8
  310. data/spec/support/shared/functional/execute_resource.rb +1 -1
  311. data/spec/support/shared/integration/integration_helper.rb +0 -1
  312. data/spec/support/shared/unit/provider/file.rb +3 -9
  313. data/spec/support/shared/unit/script_resource.rb +2 -2
  314. data/spec/unit/application/solo_spec.rb +2 -2
  315. data/spec/unit/chef_fs/diff_spec.rb +1 -1
  316. data/spec/unit/chef_fs/file_system/repository/directory_spec.rb +1 -1
  317. data/spec/unit/chef_fs/file_system_spec.rb +1 -1
  318. data/spec/unit/compliance/fetcher/automate_spec.rb +0 -16
  319. data/spec/unit/compliance/reporter/automate_spec.rb +26 -2
  320. data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +20 -0
  321. data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +1 -0
  322. data/spec/unit/compliance/runner_spec.rb +31 -5
  323. data/spec/unit/cookbook_version_spec.rb +52 -0
  324. data/spec/unit/data_bag_item_spec.rb +1 -6
  325. data/spec/unit/data_collector_spec.rb +47 -1
  326. data/spec/unit/dsl/reboot_pending_spec.rb +2 -2
  327. data/spec/unit/dsl/registry_helper_spec.rb +1 -1
  328. data/spec/unit/dsl/render_helpers_spec.rb +102 -0
  329. data/spec/unit/dsl/secret_spec.rb +65 -0
  330. data/spec/unit/handler_spec.rb +8 -2
  331. data/spec/unit/lwrp_spec.rb +1 -1
  332. data/spec/unit/mixin/params_validate_spec.rb +4 -3
  333. data/spec/unit/node/attribute_spec.rb +1 -1
  334. data/spec/unit/node_spec.rb +78 -0
  335. data/spec/unit/org_group_spec.rb +45 -0
  336. data/spec/unit/policy_builder/dynamic_spec.rb +0 -5
  337. data/spec/unit/policy_builder/policyfile_spec.rb +144 -56
  338. data/spec/unit/property_spec.rb +23 -22
  339. data/spec/unit/provider/apt_update_spec.rb +3 -1
  340. data/spec/unit/provider/cron_spec.rb +1 -1
  341. data/spec/unit/provider/group/gpasswd_spec.rb +2 -2
  342. data/spec/unit/provider/group/groupmod_spec.rb +2 -2
  343. data/spec/unit/provider/group/pw_spec.rb +2 -2
  344. data/spec/unit/provider/group_spec.rb +1 -1
  345. data/spec/unit/provider/link_spec.rb +1 -1
  346. data/spec/unit/provider/mount/aix_spec.rb +1 -1
  347. data/spec/unit/provider/package/apt_spec.rb +84 -18
  348. data/spec/unit/provider/package/deb_spec.rb +3 -3
  349. data/spec/unit/provider/package/dnf/python_helper_spec.rb +1 -0
  350. data/spec/unit/provider/package/powershell_spec.rb +74 -12
  351. data/spec/unit/provider/package/rubygems_spec.rb +21 -33
  352. data/spec/unit/provider/package/yum/python_helper_spec.rb +1 -0
  353. data/spec/unit/provider/service/arch_service_spec.rb +1 -0
  354. data/spec/unit/provider/service/debian_service_spec.rb +1 -0
  355. data/spec/unit/provider/service/macosx_spec.rb +2 -2
  356. data/spec/unit/provider/service/systemd_service_spec.rb +138 -23
  357. data/spec/unit/provider/service/upstart_service_spec.rb +0 -29
  358. data/spec/unit/provider/service/windows_spec.rb +2 -2
  359. data/spec/unit/provider/subversion_spec.rb +2 -2
  360. data/spec/unit/provider/systemd_unit_spec.rb +79 -60
  361. data/spec/unit/provider/zypper_repository_spec.rb +5 -12
  362. data/spec/unit/provider_spec.rb +0 -8
  363. data/spec/unit/resource/inspec_waiver_file_entry_spec.rb +80 -0
  364. data/spec/unit/resource/powershell_script_spec.rb +2 -2
  365. data/spec/unit/resource/windows_defender_exclusion_spec.rb +62 -0
  366. data/spec/unit/resource/windows_defender_spec.rb +71 -0
  367. data/spec/unit/resource/windows_firewall_rule_spec.rb +12 -7
  368. data/spec/unit/resource/windows_pagefile_spec.rb +4 -9
  369. data/spec/unit/resource/windows_task_spec.rb +1 -1
  370. data/spec/unit/resource/windows_update_settings_spec.rb +64 -0
  371. data/spec/unit/resource/zypper_repository_spec.rb +1 -1
  372. data/spec/unit/secret_fetcher/azure_key_vault_spec.rb +63 -0
  373. data/spec/unit/secret_fetcher_spec.rb +82 -0
  374. data/spec/unit/user_spec.rb +1 -1
  375. data/spec/unit/user_v1_spec.rb +6 -4
  376. data/tasks/rspec.rb +9 -6
  377. metadata +59 -519
  378. data/bin/knife +0 -24
  379. data/lib/chef/application/knife.rb +0 -234
  380. data/lib/chef/application/windows_service.rb +0 -338
  381. data/lib/chef/application/windows_service_manager.rb +0 -205
  382. data/lib/chef/chef_fs/knife.rb +0 -160
  383. data/lib/chef/chef_fs/parallelizer.rb +0 -102
  384. data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +0 -35
  385. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +0 -278
  386. data/lib/chef/cookbook_site_streaming_uploader.rb +0 -244
  387. data/lib/chef/knife.rb +0 -665
  388. data/lib/chef/knife/acl_add.rb +0 -57
  389. data/lib/chef/knife/acl_base.rb +0 -183
  390. data/lib/chef/knife/acl_bulk_add.rb +0 -78
  391. data/lib/chef/knife/acl_bulk_remove.rb +0 -83
  392. data/lib/chef/knife/acl_remove.rb +0 -62
  393. data/lib/chef/knife/acl_show.rb +0 -56
  394. data/lib/chef/knife/bootstrap.rb +0 -1192
  395. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +0 -162
  396. data/lib/chef/knife/bootstrap/client_builder.rb +0 -212
  397. data/lib/chef/knife/bootstrap/templates/README.md +0 -11
  398. data/lib/chef/knife/bootstrap/templates/chef-full.erb +0 -242
  399. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +0 -278
  400. data/lib/chef/knife/bootstrap/train_connector.rb +0 -336
  401. data/lib/chef/knife/client_bulk_delete.rb +0 -104
  402. data/lib/chef/knife/client_create.rb +0 -101
  403. data/lib/chef/knife/client_delete.rb +0 -62
  404. data/lib/chef/knife/client_edit.rb +0 -52
  405. data/lib/chef/knife/client_key_create.rb +0 -73
  406. data/lib/chef/knife/client_key_delete.rb +0 -80
  407. data/lib/chef/knife/client_key_edit.rb +0 -83
  408. data/lib/chef/knife/client_key_list.rb +0 -73
  409. data/lib/chef/knife/client_key_show.rb +0 -80
  410. data/lib/chef/knife/client_list.rb +0 -41
  411. data/lib/chef/knife/client_reregister.rb +0 -58
  412. data/lib/chef/knife/client_show.rb +0 -48
  413. data/lib/chef/knife/config_get.rb +0 -39
  414. data/lib/chef/knife/config_get_profile.rb +0 -37
  415. data/lib/chef/knife/config_list.rb +0 -139
  416. data/lib/chef/knife/config_list_profiles.rb +0 -37
  417. data/lib/chef/knife/config_show.rb +0 -127
  418. data/lib/chef/knife/config_use.rb +0 -61
  419. data/lib/chef/knife/config_use_profile.rb +0 -47
  420. data/lib/chef/knife/configure.rb +0 -150
  421. data/lib/chef/knife/configure_client.rb +0 -48
  422. data/lib/chef/knife/cookbook_bulk_delete.rb +0 -71
  423. data/lib/chef/knife/cookbook_delete.rb +0 -151
  424. data/lib/chef/knife/cookbook_download.rb +0 -142
  425. data/lib/chef/knife/cookbook_list.rb +0 -47
  426. data/lib/chef/knife/cookbook_metadata.rb +0 -106
  427. data/lib/chef/knife/cookbook_metadata_from_file.rb +0 -49
  428. data/lib/chef/knife/cookbook_show.rb +0 -98
  429. data/lib/chef/knife/cookbook_upload.rb +0 -292
  430. data/lib/chef/knife/core/bootstrap_context.rb +0 -264
  431. data/lib/chef/knife/core/cookbook_scm_repo.rb +0 -159
  432. data/lib/chef/knife/core/formatting_options.rb +0 -49
  433. data/lib/chef/knife/core/gem_glob_loader.rb +0 -138
  434. data/lib/chef/knife/core/generic_presenter.rb +0 -232
  435. data/lib/chef/knife/core/hashed_command_loader.rb +0 -100
  436. data/lib/chef/knife/core/node_editor.rb +0 -130
  437. data/lib/chef/knife/core/node_presenter.rb +0 -133
  438. data/lib/chef/knife/core/object_loader.rb +0 -115
  439. data/lib/chef/knife/core/status_presenter.rb +0 -147
  440. data/lib/chef/knife/core/subcommand_loader.rb +0 -203
  441. data/lib/chef/knife/core/text_formatter.rb +0 -85
  442. data/lib/chef/knife/core/ui.rb +0 -338
  443. data/lib/chef/knife/core/windows_bootstrap_context.rb +0 -406
  444. data/lib/chef/knife/data_bag_create.rb +0 -81
  445. data/lib/chef/knife/data_bag_delete.rb +0 -49
  446. data/lib/chef/knife/data_bag_edit.rb +0 -74
  447. data/lib/chef/knife/data_bag_from_file.rb +0 -113
  448. data/lib/chef/knife/data_bag_list.rb +0 -42
  449. data/lib/chef/knife/data_bag_secret_options.rb +0 -122
  450. data/lib/chef/knife/data_bag_show.rb +0 -69
  451. data/lib/chef/knife/delete.rb +0 -125
  452. data/lib/chef/knife/deps.rb +0 -156
  453. data/lib/chef/knife/diff.rb +0 -83
  454. data/lib/chef/knife/download.rb +0 -84
  455. data/lib/chef/knife/edit.rb +0 -88
  456. data/lib/chef/knife/environment_compare.rb +0 -128
  457. data/lib/chef/knife/environment_create.rb +0 -52
  458. data/lib/chef/knife/environment_delete.rb +0 -44
  459. data/lib/chef/knife/environment_edit.rb +0 -44
  460. data/lib/chef/knife/environment_from_file.rb +0 -84
  461. data/lib/chef/knife/environment_list.rb +0 -41
  462. data/lib/chef/knife/environment_show.rb +0 -47
  463. data/lib/chef/knife/exec.rb +0 -99
  464. data/lib/chef/knife/group_add.rb +0 -55
  465. data/lib/chef/knife/group_create.rb +0 -49
  466. data/lib/chef/knife/group_destroy.rb +0 -53
  467. data/lib/chef/knife/group_remove.rb +0 -56
  468. data/lib/chef/knife/group_show.rb +0 -49
  469. data/lib/chef/knife/key_create.rb +0 -112
  470. data/lib/chef/knife/key_create_base.rb +0 -50
  471. data/lib/chef/knife/key_delete.rb +0 -55
  472. data/lib/chef/knife/key_edit.rb +0 -118
  473. data/lib/chef/knife/key_edit_base.rb +0 -55
  474. data/lib/chef/knife/key_list.rb +0 -90
  475. data/lib/chef/knife/key_list_base.rb +0 -45
  476. data/lib/chef/knife/key_show.rb +0 -53
  477. data/lib/chef/knife/list.rb +0 -177
  478. data/lib/chef/knife/node_bulk_delete.rb +0 -75
  479. data/lib/chef/knife/node_create.rb +0 -47
  480. data/lib/chef/knife/node_delete.rb +0 -46
  481. data/lib/chef/knife/node_edit.rb +0 -70
  482. data/lib/chef/knife/node_environment_set.rb +0 -53
  483. data/lib/chef/knife/node_from_file.rb +0 -51
  484. data/lib/chef/knife/node_list.rb +0 -44
  485. data/lib/chef/knife/node_policy_set.rb +0 -79
  486. data/lib/chef/knife/node_run_list_add.rb +0 -104
  487. data/lib/chef/knife/node_run_list_remove.rb +0 -67
  488. data/lib/chef/knife/node_run_list_set.rb +0 -66
  489. data/lib/chef/knife/node_show.rb +0 -63
  490. data/lib/chef/knife/null.rb +0 -12
  491. data/lib/chef/knife/raw.rb +0 -123
  492. data/lib/chef/knife/rehash.rb +0 -50
  493. data/lib/chef/knife/role_bulk_delete.rb +0 -66
  494. data/lib/chef/knife/role_create.rb +0 -53
  495. data/lib/chef/knife/role_delete.rb +0 -46
  496. data/lib/chef/knife/role_edit.rb +0 -45
  497. data/lib/chef/knife/role_env_run_list_add.rb +0 -87
  498. data/lib/chef/knife/role_env_run_list_clear.rb +0 -55
  499. data/lib/chef/knife/role_env_run_list_remove.rb +0 -57
  500. data/lib/chef/knife/role_env_run_list_replace.rb +0 -60
  501. data/lib/chef/knife/role_env_run_list_set.rb +0 -70
  502. data/lib/chef/knife/role_from_file.rb +0 -51
  503. data/lib/chef/knife/role_list.rb +0 -42
  504. data/lib/chef/knife/role_run_list_add.rb +0 -87
  505. data/lib/chef/knife/role_run_list_clear.rb +0 -55
  506. data/lib/chef/knife/role_run_list_remove.rb +0 -56
  507. data/lib/chef/knife/role_run_list_replace.rb +0 -60
  508. data/lib/chef/knife/role_run_list_set.rb +0 -69
  509. data/lib/chef/knife/role_show.rb +0 -48
  510. data/lib/chef/knife/search.rb +0 -194
  511. data/lib/chef/knife/serve.rb +0 -65
  512. data/lib/chef/knife/show.rb +0 -72
  513. data/lib/chef/knife/ssh.rb +0 -645
  514. data/lib/chef/knife/ssl_check.rb +0 -284
  515. data/lib/chef/knife/ssl_fetch.rb +0 -161
  516. data/lib/chef/knife/status.rb +0 -95
  517. data/lib/chef/knife/supermarket_download.rb +0 -121
  518. data/lib/chef/knife/supermarket_install.rb +0 -192
  519. data/lib/chef/knife/supermarket_list.rb +0 -76
  520. data/lib/chef/knife/supermarket_search.rb +0 -53
  521. data/lib/chef/knife/supermarket_share.rb +0 -166
  522. data/lib/chef/knife/supermarket_show.rb +0 -66
  523. data/lib/chef/knife/supermarket_unshare.rb +0 -61
  524. data/lib/chef/knife/tag_create.rb +0 -52
  525. data/lib/chef/knife/tag_delete.rb +0 -60
  526. data/lib/chef/knife/tag_list.rb +0 -47
  527. data/lib/chef/knife/upload.rb +0 -86
  528. data/lib/chef/knife/user_create.rb +0 -107
  529. data/lib/chef/knife/user_delete.rb +0 -44
  530. data/lib/chef/knife/user_dissociate.rb +0 -42
  531. data/lib/chef/knife/user_edit.rb +0 -52
  532. data/lib/chef/knife/user_invite_add.rb +0 -43
  533. data/lib/chef/knife/user_invite_list.rb +0 -34
  534. data/lib/chef/knife/user_invite_rescind.rb +0 -63
  535. data/lib/chef/knife/user_key_create.rb +0 -73
  536. data/lib/chef/knife/user_key_delete.rb +0 -80
  537. data/lib/chef/knife/user_key_edit.rb +0 -83
  538. data/lib/chef/knife/user_key_list.rb +0 -73
  539. data/lib/chef/knife/user_key_show.rb +0 -80
  540. data/lib/chef/knife/user_list.rb +0 -42
  541. data/lib/chef/knife/user_reregister.rb +0 -59
  542. data/lib/chef/knife/user_show.rb +0 -48
  543. data/lib/chef/knife/xargs.rb +0 -282
  544. data/lib/chef/knife/yaml_convert.rb +0 -91
  545. data/lib/chef/provider/package/yum/simplejson/LICENSE.txt +0 -79
  546. data/lib/chef/provider/package/yum/simplejson/__init__.py +0 -318
  547. data/lib/chef/provider/package/yum/simplejson/__init__.pyc +0 -0
  548. data/lib/chef/provider/package/yum/simplejson/decoder.py +0 -354
  549. data/lib/chef/provider/package/yum/simplejson/decoder.pyc +0 -0
  550. data/lib/chef/provider/package/yum/simplejson/encoder.py +0 -440
  551. data/lib/chef/provider/package/yum/simplejson/encoder.pyc +0 -0
  552. data/lib/chef/provider/package/yum/simplejson/scanner.py +0 -65
  553. data/lib/chef/provider/package/yum/simplejson/scanner.pyc +0 -0
  554. data/lib/chef/provider/package/yum/simplejson/tool.py +0 -37
  555. data/lib/chef/resource/user/dscl_user.rb +0 -35
  556. data/spec/functional/knife/configure_spec.rb +0 -33
  557. data/spec/functional/knife/cookbook_delete_spec.rb +0 -156
  558. data/spec/functional/knife/exec_spec.rb +0 -55
  559. data/spec/functional/knife/rehash_spec.rb +0 -39
  560. data/spec/functional/knife/smoke_test.rb +0 -42
  561. data/spec/functional/knife/ssh_spec.rb +0 -352
  562. data/spec/functional/resource/user/dscl_spec.rb +0 -188
  563. data/spec/functional/resource/windows_service_spec.rb +0 -105
  564. data/spec/functional/win32/service_manager_spec.rb +0 -220
  565. data/spec/integration/knife/chef_fs_data_store_spec.rb +0 -557
  566. data/spec/integration/knife/chef_repo_path_spec.rb +0 -962
  567. data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -200
  568. data/spec/integration/knife/chefignore_spec.rb +0 -301
  569. data/spec/integration/knife/client_bulk_delete_spec.rb +0 -131
  570. data/spec/integration/knife/client_create_spec.rb +0 -70
  571. data/spec/integration/knife/client_delete_spec.rb +0 -64
  572. data/spec/integration/knife/client_key_create_spec.rb +0 -66
  573. data/spec/integration/knife/client_key_delete_spec.rb +0 -43
  574. data/spec/integration/knife/client_key_list_spec.rb +0 -61
  575. data/spec/integration/knife/client_key_show_spec.rb +0 -45
  576. data/spec/integration/knife/client_list_spec.rb +0 -49
  577. data/spec/integration/knife/client_show_spec.rb +0 -37
  578. data/spec/integration/knife/common_options_spec.rb +0 -174
  579. data/spec/integration/knife/config_list_spec.rb +0 -220
  580. data/spec/integration/knife/config_show_spec.rb +0 -192
  581. data/spec/integration/knife/config_use_spec.rb +0 -198
  582. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +0 -113
  583. data/spec/integration/knife/cookbook_bulk_delete_spec.rb +0 -65
  584. data/spec/integration/knife/cookbook_download_spec.rb +0 -72
  585. data/spec/integration/knife/cookbook_list_spec.rb +0 -55
  586. data/spec/integration/knife/cookbook_show_spec.rb +0 -149
  587. data/spec/integration/knife/cookbook_upload_spec.rb +0 -128
  588. data/spec/integration/knife/data_bag_create_spec.rb +0 -125
  589. data/spec/integration/knife/data_bag_delete_spec.rb +0 -59
  590. data/spec/integration/knife/data_bag_edit_spec.rb +0 -105
  591. data/spec/integration/knife/data_bag_from_file_spec.rb +0 -116
  592. data/spec/integration/knife/data_bag_list_spec.rb +0 -44
  593. data/spec/integration/knife/data_bag_show_spec.rb +0 -95
  594. data/spec/integration/knife/delete_spec.rb +0 -1018
  595. data/spec/integration/knife/deps_spec.rb +0 -703
  596. data/spec/integration/knife/diff_spec.rb +0 -605
  597. data/spec/integration/knife/download_spec.rb +0 -1336
  598. data/spec/integration/knife/environment_compare_spec.rb +0 -75
  599. data/spec/integration/knife/environment_create_spec.rb +0 -41
  600. data/spec/integration/knife/environment_delete_spec.rb +0 -37
  601. data/spec/integration/knife/environment_from_file_spec.rb +0 -116
  602. data/spec/integration/knife/environment_list_spec.rb +0 -42
  603. data/spec/integration/knife/environment_show_spec.rb +0 -77
  604. data/spec/integration/knife/list_spec.rb +0 -1060
  605. data/spec/integration/knife/node_bulk_delete_spec.rb +0 -52
  606. data/spec/integration/knife/node_create_spec.rb +0 -47
  607. data/spec/integration/knife/node_delete_spec.rb +0 -48
  608. data/spec/integration/knife/node_environment_set_spec.rb +0 -46
  609. data/spec/integration/knife/node_from_file_spec.rb +0 -59
  610. data/spec/integration/knife/node_list_spec.rb +0 -45
  611. data/spec/integration/knife/node_run_list_add_spec.rb +0 -54
  612. data/spec/integration/knife/node_run_list_remove_spec.rb +0 -36
  613. data/spec/integration/knife/node_run_list_set_spec.rb +0 -41
  614. data/spec/integration/knife/node_show_spec.rb +0 -36
  615. data/spec/integration/knife/raw_spec.rb +0 -297
  616. data/spec/integration/knife/redirection_spec.rb +0 -64
  617. data/spec/integration/knife/role_bulk_delete_spec.rb +0 -52
  618. data/spec/integration/knife/role_create_spec.rb +0 -41
  619. data/spec/integration/knife/role_delete_spec.rb +0 -48
  620. data/spec/integration/knife/role_from_file_spec.rb +0 -96
  621. data/spec/integration/knife/role_list_spec.rb +0 -45
  622. data/spec/integration/knife/role_show_spec.rb +0 -51
  623. data/spec/integration/knife/search_node_spec.rb +0 -40
  624. data/spec/integration/knife/serve_spec.rb +0 -92
  625. data/spec/integration/knife/show_spec.rb +0 -197
  626. data/spec/integration/knife/upload_spec.rb +0 -1617
  627. data/spec/support/shared/functional/win32_service.rb +0 -57
  628. data/spec/unit/application/knife_spec.rb +0 -241
  629. data/spec/unit/chef_fs/parallelizer_spec.rb +0 -479
  630. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -198
  631. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +0 -152
  632. data/spec/unit/knife/bootstrap/client_builder_spec.rb +0 -207
  633. data/spec/unit/knife/bootstrap/train_connector_spec.rb +0 -244
  634. data/spec/unit/knife/bootstrap_spec.rb +0 -2220
  635. data/spec/unit/knife/client_bulk_delete_spec.rb +0 -166
  636. data/spec/unit/knife/client_create_spec.rb +0 -169
  637. data/spec/unit/knife/client_delete_spec.rb +0 -99
  638. data/spec/unit/knife/client_edit_spec.rb +0 -53
  639. data/spec/unit/knife/client_list_spec.rb +0 -34
  640. data/spec/unit/knife/client_reregister_spec.rb +0 -62
  641. data/spec/unit/knife/client_show_spec.rb +0 -52
  642. data/spec/unit/knife/configure_client_spec.rb +0 -81
  643. data/spec/unit/knife/configure_spec.rb +0 -190
  644. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +0 -87
  645. data/spec/unit/knife/cookbook_delete_spec.rb +0 -239
  646. data/spec/unit/knife/cookbook_download_spec.rb +0 -255
  647. data/spec/unit/knife/cookbook_list_spec.rb +0 -88
  648. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +0 -72
  649. data/spec/unit/knife/cookbook_metadata_spec.rb +0 -182
  650. data/spec/unit/knife/cookbook_show_spec.rb +0 -253
  651. data/spec/unit/knife/cookbook_upload_spec.rb +0 -364
  652. data/spec/unit/knife/core/bootstrap_context_spec.rb +0 -287
  653. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +0 -187
  654. data/spec/unit/knife/core/gem_glob_loader_spec.rb +0 -209
  655. data/spec/unit/knife/core/hashed_command_loader_spec.rb +0 -112
  656. data/spec/unit/knife/core/node_editor_spec.rb +0 -211
  657. data/spec/unit/knife/core/object_loader_spec.rb +0 -81
  658. data/spec/unit/knife/core/status_presenter_spec.rb +0 -54
  659. data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -64
  660. data/spec/unit/knife/core/ui_spec.rb +0 -656
  661. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +0 -238
  662. data/spec/unit/knife/data_bag_create_spec.rb +0 -175
  663. data/spec/unit/knife/data_bag_edit_spec.rb +0 -126
  664. data/spec/unit/knife/data_bag_from_file_spec.rb +0 -174
  665. data/spec/unit/knife/data_bag_secret_options_spec.rb +0 -173
  666. data/spec/unit/knife/data_bag_show_spec.rb +0 -139
  667. data/spec/unit/knife/environment_compare_spec.rb +0 -112
  668. data/spec/unit/knife/environment_create_spec.rb +0 -91
  669. data/spec/unit/knife/environment_delete_spec.rb +0 -71
  670. data/spec/unit/knife/environment_edit_spec.rb +0 -79
  671. data/spec/unit/knife/environment_from_file_spec.rb +0 -90
  672. data/spec/unit/knife/environment_list_spec.rb +0 -54
  673. data/spec/unit/knife/environment_show_spec.rb +0 -52
  674. data/spec/unit/knife/key_create_spec.rb +0 -223
  675. data/spec/unit/knife/key_delete_spec.rb +0 -133
  676. data/spec/unit/knife/key_edit_spec.rb +0 -264
  677. data/spec/unit/knife/key_helper.rb +0 -74
  678. data/spec/unit/knife/key_list_spec.rb +0 -216
  679. data/spec/unit/knife/key_show_spec.rb +0 -126
  680. data/spec/unit/knife/node_bulk_delete_spec.rb +0 -94
  681. data/spec/unit/knife/node_delete_spec.rb +0 -77
  682. data/spec/unit/knife/node_edit_spec.rb +0 -116
  683. data/spec/unit/knife/node_environment_set_spec.rb +0 -61
  684. data/spec/unit/knife/node_from_file_spec.rb +0 -59
  685. data/spec/unit/knife/node_list_spec.rb +0 -62
  686. data/spec/unit/knife/node_policy_set_spec.rb +0 -122
  687. data/spec/unit/knife/node_run_list_add_spec.rb +0 -145
  688. data/spec/unit/knife/node_run_list_remove_spec.rb +0 -106
  689. data/spec/unit/knife/node_run_list_set_spec.rb +0 -115
  690. data/spec/unit/knife/node_show_spec.rb +0 -65
  691. data/spec/unit/knife/raw_spec.rb +0 -43
  692. data/spec/unit/knife/role_bulk_delete_spec.rb +0 -80
  693. data/spec/unit/knife/role_create_spec.rb +0 -80
  694. data/spec/unit/knife/role_delete_spec.rb +0 -67
  695. data/spec/unit/knife/role_edit_spec.rb +0 -77
  696. data/spec/unit/knife/role_env_run_list_add_spec.rb +0 -217
  697. data/spec/unit/knife/role_env_run_list_clear_spec.rb +0 -94
  698. data/spec/unit/knife/role_env_run_list_remove_spec.rb +0 -102
  699. data/spec/unit/knife/role_env_run_list_replace_spec.rb +0 -105
  700. data/spec/unit/knife/role_env_run_list_set_spec.rb +0 -99
  701. data/spec/unit/knife/role_from_file_spec.rb +0 -69
  702. data/spec/unit/knife/role_list_spec.rb +0 -54
  703. data/spec/unit/knife/role_run_list_add_spec.rb +0 -179
  704. data/spec/unit/knife/role_run_list_clear_spec.rb +0 -84
  705. data/spec/unit/knife/role_run_list_remove_spec.rb +0 -92
  706. data/spec/unit/knife/role_run_list_replace_spec.rb +0 -98
  707. data/spec/unit/knife/role_run_list_set_spec.rb +0 -89
  708. data/spec/unit/knife/role_show_spec.rb +0 -59
  709. data/spec/unit/knife/ssh_spec.rb +0 -403
  710. data/spec/unit/knife/ssl_check_spec.rb +0 -256
  711. data/spec/unit/knife/ssl_fetch_spec.rb +0 -222
  712. data/spec/unit/knife/status_spec.rb +0 -112
  713. data/spec/unit/knife/supermarket_download_spec.rb +0 -152
  714. data/spec/unit/knife/supermarket_install_spec.rb +0 -202
  715. data/spec/unit/knife/supermarket_list_spec.rb +0 -70
  716. data/spec/unit/knife/supermarket_search_spec.rb +0 -85
  717. data/spec/unit/knife/supermarket_share_spec.rb +0 -208
  718. data/spec/unit/knife/supermarket_unshare_spec.rb +0 -78
  719. data/spec/unit/knife/tag_create_spec.rb +0 -23
  720. data/spec/unit/knife/tag_delete_spec.rb +0 -25
  721. data/spec/unit/knife/tag_list_spec.rb +0 -23
  722. data/spec/unit/knife/user_create_spec.rb +0 -184
  723. data/spec/unit/knife/user_delete_spec.rb +0 -46
  724. data/spec/unit/knife/user_edit_spec.rb +0 -48
  725. data/spec/unit/knife/user_list_spec.rb +0 -36
  726. data/spec/unit/knife/user_reregister_spec.rb +0 -56
  727. data/spec/unit/knife/user_show_spec.rb +0 -46
  728. data/spec/unit/knife_spec.rb +0 -634
  729. data/spec/unit/provider/user/dscl_spec.rb +0 -699
  730. data/spec/unit/windows_service_spec.rb +0 -118
@@ -1,187 +0,0 @@
1
- #
2
- # Author:: Daniel DeLeo (<dan@chef.io>)
3
- # Copyright:: Copyright (c) Chef Software Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require "spec_helper"
20
- require "chef/knife/core/cookbook_scm_repo"
21
-
22
- describe Chef::Knife::CookbookSCMRepo do
23
- before do
24
- @repo_path = File.join(CHEF_SPEC_DATA, "cookbooks")
25
- @stdout, @stderr, @stdin = StringIO.new, StringIO.new, StringIO.new
26
- @ui = Chef::Knife::UI.new(@stdout, @stderr, @stdin, {})
27
- @cookbook_repo = Chef::Knife::CookbookSCMRepo.new(@repo_path, @ui, default_branch: "master")
28
-
29
- @branch_list = Mixlib::ShellOut.new
30
- @branch_list.stdout.replace(<<-BRANCHES)
31
- chef-vendor-apache2
32
- chef-vendor-build-essential
33
- chef-vendor-dynomite
34
- chef-vendor-ganglia
35
- chef-vendor-graphite
36
- chef-vendor-python
37
- chef-vendor-absent-new
38
- BRANCHES
39
- end
40
-
41
- it "has a path to the cookbook repo" do
42
- expect(@cookbook_repo.repo_path).to eq(@repo_path)
43
- end
44
-
45
- it "has a default branch" do
46
- expect(@cookbook_repo.default_branch).to eq("master")
47
- end
48
-
49
- describe "when sanity checking the repo" do
50
- it "exits when the directory does not exist" do
51
- expect(::File).to receive(:directory?).with(@repo_path).and_return(false)
52
- expect { @cookbook_repo.sanity_check }.to raise_error(SystemExit)
53
- end
54
-
55
- describe "and the repo dir exists" do
56
- before do
57
- allow(::File).to receive(:directory?).with(@repo_path).and_return(true)
58
- end
59
-
60
- it "exits when there is no git repo" do
61
- allow(::File).to receive(:directory?).with(/.*\.git/).and_return(false)
62
- expect { @cookbook_repo.sanity_check }.to raise_error(SystemExit)
63
- end
64
-
65
- describe "and the repo is a git repo" do
66
- before do
67
- allow(::File).to receive(:directory?).with(File.join(@repo_path, ".git")).and_return(true)
68
- end
69
-
70
- it "exits when the default branch doesn't exist" do
71
- @nobranches = Mixlib::ShellOut.new.tap { |s| s.stdout.replace "\n" }
72
- expect(@cookbook_repo).to receive(:shell_out!).with("git branch --no-color", cwd: @repo_path).and_return(@nobranches)
73
- expect { @cookbook_repo.sanity_check }.to raise_error(SystemExit)
74
- end
75
-
76
- describe "and the default branch exists" do
77
- before do
78
- @master_branch = Mixlib::ShellOut.new
79
- @master_branch.stdout.replace "* master\n"
80
- expect(@cookbook_repo).to receive(:shell_out!).with("git branch --no-color", cwd: @repo_path).and_return(@master_branch)
81
- end
82
-
83
- it "exits when the git repo is dirty" do
84
- @dirty_status = Mixlib::ShellOut.new
85
- @dirty_status.stdout.replace(<<-DIRTY)
86
- M chef/lib/chef/knife/cookbook_site_install.rb
87
- DIRTY
88
- expect(@cookbook_repo).to receive(:shell_out!).with("git status --porcelain", cwd: @repo_path).and_return(@dirty_status)
89
- expect { @cookbook_repo.sanity_check }.to raise_error(SystemExit)
90
- end
91
-
92
- describe "and the repo is clean" do
93
- before do
94
- @clean_status = Mixlib::ShellOut.new.tap { |s| s.stdout.replace("\n") }
95
- allow(@cookbook_repo).to receive(:shell_out!).with("git status --porcelain", cwd: @repo_path).and_return(@clean_status)
96
- end
97
-
98
- it "passes the sanity check" do
99
- @cookbook_repo.sanity_check
100
- end
101
-
102
- end
103
- end
104
- end
105
- end
106
- end
107
-
108
- it "resets to default state by checking out the default branch" do
109
- expect(@cookbook_repo).to receive(:shell_out!).with("git checkout master", cwd: @repo_path)
110
- @cookbook_repo.reset_to_default_state
111
- end
112
-
113
- it "determines if a the pristine copy branch exists" do
114
- expect(@cookbook_repo).to receive(:shell_out!).with("git branch --no-color", cwd: @repo_path).and_return(@branch_list)
115
- expect(@cookbook_repo.branch_exists?("chef-vendor-apache2")).to be_truthy
116
- expect(@cookbook_repo).to receive(:shell_out!).with("git branch --no-color", cwd: @repo_path).and_return(@branch_list)
117
- expect(@cookbook_repo.branch_exists?("chef-vendor-nginx")).to be_falsey
118
- end
119
-
120
- it "determines if a the branch not exists correctly without substring search" do
121
- expect(@cookbook_repo).to receive(:shell_out!).twice.with("git branch --no-color", cwd: @repo_path).and_return(@branch_list)
122
- expect(@cookbook_repo).not_to be_branch_exists("chef-vendor-absent")
123
- expect(@cookbook_repo).to be_branch_exists("chef-vendor-absent-new")
124
- end
125
-
126
- describe "when the pristine copy branch does not exist" do
127
- it "prepares for import by creating the pristine copy branch" do
128
- expect(@cookbook_repo).to receive(:shell_out!).with("git branch --no-color", cwd: @repo_path).and_return(@branch_list)
129
- expect(@cookbook_repo).to receive(:shell_out!).with("git checkout -b chef-vendor-nginx", cwd: @repo_path)
130
- @cookbook_repo.prepare_to_import("nginx")
131
- end
132
- end
133
-
134
- describe "when the pristine copy branch does exist" do
135
- it "prepares for import by checking out the pristine copy branch" do
136
- expect(@cookbook_repo).to receive(:shell_out!).with("git branch --no-color", cwd: @repo_path).and_return(@branch_list)
137
- expect(@cookbook_repo).to receive(:shell_out!).with("git checkout chef-vendor-apache2", cwd: @repo_path)
138
- @cookbook_repo.prepare_to_import("apache2")
139
- end
140
- end
141
-
142
- describe "when the pristine copy branch was not updated by the changes" do
143
- before do
144
- @updates = Mixlib::ShellOut.new
145
- @updates.stdout.replace("\n")
146
- allow(@cookbook_repo).to receive(:shell_out!).with("git status --porcelain -- apache2", cwd: @repo_path).and_return(@updates)
147
- end
148
-
149
- it "shows no changes in the pristine copy" do
150
- expect(@cookbook_repo.updated?("apache2")).to be_falsey
151
- end
152
-
153
- it "does nothing to finalize the updates" do
154
- expect(@cookbook_repo.finalize_updates_to("apache2", "1.2.3")).to be_falsey
155
- end
156
- end
157
-
158
- describe "when the pristine copy branch was updated by the changes" do
159
- before do
160
- @updates = Mixlib::ShellOut.new
161
- @updates.stdout.replace(" M cookbooks/apache2/recipes/default.rb\n")
162
- allow(@cookbook_repo).to receive(:shell_out!).with("git status --porcelain -- apache2", cwd: @repo_path).and_return(@updates)
163
- end
164
-
165
- it "shows changes in the pristine copy" do
166
- expect(@cookbook_repo.updated?("apache2")).to be_truthy
167
- end
168
-
169
- it "commits the changes to the repo and tags the commit" do
170
- expect(@cookbook_repo).to receive(:shell_out!).with("git add apache2", cwd: @repo_path)
171
- expect(@cookbook_repo).to receive(:shell_out!).with("git commit -m \"Import apache2 version 1.2.3\" -- apache2", cwd: @repo_path)
172
- expect(@cookbook_repo).to receive(:shell_out!).with("git tag -f cookbook-site-imported-apache2-1.2.3", cwd: @repo_path)
173
- expect(@cookbook_repo.finalize_updates_to("apache2", "1.2.3")).to be_truthy
174
- end
175
- end
176
-
177
- describe "when a custom default branch is specified" do
178
- before do
179
- @cookbook_repo = Chef::Knife::CookbookSCMRepo.new(@repo_path, @ui, default_branch: "develop")
180
- end
181
-
182
- it "resets to default state by checking out the default branch" do
183
- expect(@cookbook_repo).to receive(:shell_out!).with("git checkout develop", cwd: @repo_path)
184
- @cookbook_repo.reset_to_default_state
185
- end
186
- end
187
- end
@@ -1,209 +0,0 @@
1
- #
2
- # Copyright:: Copyright (c) Chef Software Inc.
3
- # License:: Apache License, Version 2.0
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
- #
17
-
18
- require "spec_helper"
19
-
20
- describe Chef::Knife::SubcommandLoader::GemGlobLoader do
21
- let(:loader) { Chef::Knife::SubcommandLoader::GemGlobLoader.new(File.join(CHEF_SPEC_DATA, "knife-site-subcommands")) }
22
- let(:home) { File.join(CHEF_SPEC_DATA, "knife-home") }
23
- let(:plugin_dir) { File.join(home, ".chef", "plugins", "knife") }
24
-
25
- before do
26
- allow(ChefUtils).to receive(:windows?) { false }
27
- Chef::Util::PathHelper.class_variable_set(:@@home_dir, home)
28
- end
29
-
30
- after do
31
- Chef::Util::PathHelper.class_variable_set(:@@home_dir, nil)
32
- end
33
-
34
- it "builds a list of the core subcommand file require paths" do
35
- expect(loader.subcommand_files).not_to be_empty
36
- loader.subcommand_files.each do |require_path|
37
- expect(require_path).to match(%r{chef/knife/.*|plugins/knife/.*})
38
- end
39
- end
40
-
41
- it "finds files installed via rubygems" do
42
- expect(loader.find_subcommands_via_rubygems).to include("chef/knife/node_create")
43
- loader.find_subcommands_via_rubygems.each_value { |abs_path| expect(abs_path).to match(%r{chef/knife/.+}) }
44
- end
45
-
46
- it "finds files from latest version of installed gems" do
47
- gems = [ double("knife-ec2-0.5.12") ]
48
- gem_files = [
49
- "/usr/lib/ruby/gems/knife-ec2-0.5.12/lib/chef/knife/ec2_base.rb",
50
- "/usr/lib/ruby/gems/knife-ec2-0.5.12/lib/chef/knife/ec2_otherstuff.rb",
51
- ]
52
- expect($LOAD_PATH).to receive(:map).and_return([])
53
- if Gem::Specification.respond_to? :latest_specs
54
- expect(Gem::Specification).to receive(:latest_specs).with(true).and_return(gems)
55
- expect(gems[0]).to receive(:matches_for_glob).with(%r{chef/knife/\*\.rb\{(.*),\.rb,(.*)\}}).and_return(gem_files)
56
- else
57
- expect(Gem.source_index).to receive(:latest_specs).with(true).and_return(gems)
58
- expect(gems[0]).to receive(:require_paths).twice.and_return(["lib"])
59
- expect(gems[0]).to receive(:full_gem_path).and_return("/usr/lib/ruby/gems/knife-ec2-0.5.12")
60
- expect(Dir).to receive(:[]).with("/usr/lib/ruby/gems/knife-ec2-0.5.12/lib/chef/knife/*.rb").and_return(gem_files)
61
- end
62
- expect(loader).to receive(:find_subcommands_via_dirglob).and_return({})
63
- expect(loader.subcommand_files.select { |file| file =~ /knife-ec2/ }.sort).to eq(gem_files)
64
- end
65
-
66
- it "finds files using a dirglob when rubygems is not available" do
67
- expect(loader.find_subcommands_via_dirglob).to include("chef/knife/node_create")
68
- loader.find_subcommands_via_dirglob.each_value { |abs_path| expect(abs_path).to match(%r{chef/knife/.+}) }
69
- end
70
-
71
- it "finds user-specific subcommands in the user's ~/.chef directory" do
72
- expected_command = File.join(home, ".chef", "plugins", "knife", "example_home_subcommand.rb")
73
- expect(loader.site_subcommands).to include(expected_command)
74
- end
75
-
76
- it "finds repo specific subcommands by searching for a .chef directory" do
77
- expected_command = File.join(CHEF_SPEC_DATA, "knife-site-subcommands", "plugins", "knife", "example_subcommand.rb")
78
- expect(loader.site_subcommands).to include(expected_command)
79
- end
80
-
81
- # https://github.com/chef/chef-dk/issues/227
82
- #
83
- # `knife` in ChefDK isn't from a gem install, it's directly run from a clone
84
- # of the source, but there can be one or more versions of chef also installed
85
- # as a gem. If the gem install contains a command that doesn't exist in the
86
- # source tree of the "primary" chef install, it can be loaded and cause an
87
- # error. We also want to ensure that we only load builtin commands from the
88
- # "primary" chef install.
89
- context "when a different version of chef is also installed as a gem" do
90
-
91
- let(:all_found_commands) do
92
- [
93
- "/opt/chefdk/embedded/apps/chef/lib/chef/knife/bootstrap.rb",
94
- "/opt/chefdk/embedded/apps/chef/lib/chef/knife/client_bulk_delete.rb",
95
- "/opt/chefdk/embedded/apps/chef/lib/chef/knife/client_create.rb",
96
-
97
- # We use the fake version 1.0.0 because that version doesn't exist,
98
- # which ensures it won't ever equal "chef-#{Chef::VERSION}"
99
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-1.0.0/lib/chef/knife/bootstrap.rb",
100
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-1.0.0/lib/chef/knife/client_bulk_delete.rb",
101
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-1.0.0/lib/chef/knife/client_create.rb",
102
-
103
- # Test that we don't accept a version number that is different only in
104
- # trailing characters, e.g. we are running Chef 12.0.0 but there is a
105
- # Chef 12.0.0.rc.0 gem also:
106
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-#{Chef::VERSION}.rc.0/lib/chef/knife/thing.rb",
107
-
108
- # Test that we ignore the platform suffix when checking for different
109
- # gem versions.
110
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-#{Chef::VERSION}-x86-mingw32/lib/chef/knife/valid.rb",
111
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-#{Chef::VERSION}-i386-mingw64/lib/chef/knife/valid-too.rb",
112
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-#{Chef::VERSION}-mswin32/lib/chef/knife/also-valid.rb",
113
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-#{Chef::VERSION}-universal-mingw32/lib/chef/knife/universal-is-valid.rb",
114
- # ...but don't ignore the .rc / .dev parts in the case when we have
115
- # platform suffixes
116
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-#{Chef::VERSION}.rc.0-x86-mingw32/lib/chef/knife/invalid.rb",
117
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-#{Chef::VERSION}.dev-mswin32/lib/chef/knife/invalid-too.rb",
118
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-#{Chef::VERSION}.dev.0-x86-mingw64/lib/chef/knife/still-invalid.rb",
119
-
120
- # This command is "extra" compared to what's in the embedded/apps/chef install:
121
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-1.0.0/lib/chef/knife/data_bag_secret_options.rb",
122
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-vault-2.2.4/lib/chef/knife/decrypt.rb",
123
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/knife-spork-1.4.1/lib/chef/knife/spork-bump.rb",
124
-
125
- # These are fake commands that have names designed to test that the
126
- # regex is strict enough
127
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-foo-#{Chef::VERSION}/lib/chef/knife/chef-foo.rb",
128
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/foo-chef-#{Chef::VERSION}/lib/chef/knife/foo-chef.rb",
129
-
130
- # In a real scenario, we'd use rubygems APIs to only select the most
131
- # recent gem, but for this test we want to check that we're doing the
132
- # right thing both when the plugin version matches and does not match
133
- # the current chef version. Looking at
134
- # `SubcommandLoader::MATCHES_THIS_CHEF_GEM` and
135
- # `SubcommandLoader::MATCHES_CHEF_GEM` should make it clear why we want
136
- # to test these two cases.
137
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-bar-1.0.0/lib/chef/knife/chef-bar.rb",
138
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/bar-chef-1.0.0/lib/chef/knife/bar-chef.rb",
139
- ]
140
- end
141
-
142
- let(:expected_valid_commands) do
143
- [
144
- "/opt/chefdk/embedded/apps/chef/lib/chef/knife/bootstrap.rb",
145
- "/opt/chefdk/embedded/apps/chef/lib/chef/knife/client_bulk_delete.rb",
146
- "/opt/chefdk/embedded/apps/chef/lib/chef/knife/client_create.rb",
147
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-#{Chef::VERSION}-x86-mingw32/lib/chef/knife/valid.rb",
148
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-#{Chef::VERSION}-i386-mingw64/lib/chef/knife/valid-too.rb",
149
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-#{Chef::VERSION}-mswin32/lib/chef/knife/also-valid.rb",
150
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-#{Chef::VERSION}-universal-mingw32/lib/chef/knife/universal-is-valid.rb",
151
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-vault-2.2.4/lib/chef/knife/decrypt.rb",
152
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/knife-spork-1.4.1/lib/chef/knife/spork-bump.rb",
153
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-foo-#{Chef::VERSION}/lib/chef/knife/chef-foo.rb",
154
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/foo-chef-#{Chef::VERSION}/lib/chef/knife/foo-chef.rb",
155
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-bar-1.0.0/lib/chef/knife/chef-bar.rb",
156
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/bar-chef-1.0.0/lib/chef/knife/bar-chef.rb",
157
- ]
158
- end
159
-
160
- before do
161
- expect(loader).to receive(:find_files_latest_gems).with("chef/knife/*.rb").and_return(all_found_commands)
162
- expect(loader).to receive(:find_subcommands_via_dirglob).and_return({})
163
- end
164
-
165
- it "ignores commands from the non-matching gem install" do
166
- expect(loader.find_subcommands_via_rubygems.values).to eq(expected_valid_commands)
167
- end
168
-
169
- end
170
-
171
- describe "finding 3rd party plugins" do
172
- let(:env_home) { "/home/alice" }
173
- let(:manifest_path) { env_home + "/.chef/plugin_manifest.json" }
174
-
175
- before do
176
- env_dup = ENV.to_hash
177
- allow(ENV).to receive(:[]) { |key| env_dup[key] }
178
- allow(ENV).to receive(:[]).with("HOME").and_return(env_home)
179
- end
180
-
181
- it "searches rubygems for plugins" do
182
- if Gem::Specification.respond_to?(:latest_specs)
183
- expect(Gem::Specification).to receive(:latest_specs).and_call_original
184
- else
185
- expect(Gem.source_index).to receive(:latest_specs).and_call_original
186
- end
187
- loader.subcommand_files.each do |require_path|
188
- expect(require_path).to match(%r{chef/knife/.*|plugins/knife/.*})
189
- end
190
- end
191
-
192
- context "and HOME environment variable is not set" do
193
- before do
194
- allow(ENV).to receive(:[]).with("HOME").and_return(nil)
195
- end
196
-
197
- it "searches rubygems for plugins" do
198
- if Gem::Specification.respond_to?(:latest_specs)
199
- expect(Gem::Specification).to receive(:latest_specs).and_call_original
200
- else
201
- expect(Gem.source_index).to receive(:latest_specs).and_call_original
202
- end
203
- loader.subcommand_files.each do |require_path|
204
- expect(require_path).to match(%r{chef/knife/.*|plugins/knife/.*})
205
- end
206
- end
207
- end
208
- end
209
- end
@@ -1,112 +0,0 @@
1
- #
2
- # Copyright:: Copyright (c) Chef Software Inc.
3
- # License:: Apache License, Version 2.0
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
- #
17
-
18
- require "spec_helper"
19
-
20
- describe Chef::Knife::SubcommandLoader::HashedCommandLoader do
21
- before do
22
- allow(ChefUtils).to receive(:windows?) { false }
23
- end
24
-
25
- let(:plugin_manifest) do
26
- {
27
- "_autogenerated_command_paths" => {
28
- "plugins_paths" => {
29
- "cool_a" => ["/file/for/plugin/a"],
30
- "cooler_b" => ["/file/for/plugin/b"],
31
- },
32
- "plugins_by_category" => {
33
- "cool" => [
34
- "cool_a",
35
- ],
36
- "cooler" => [
37
- "cooler_b",
38
- ],
39
- },
40
- },
41
- }
42
- end
43
-
44
- let(:loader) do
45
- Chef::Knife::SubcommandLoader::HashedCommandLoader.new(
46
- File.join(CHEF_SPEC_DATA, "knife-site-subcommands"),
47
- plugin_manifest
48
- )
49
- end
50
-
51
- describe "#list_commands" do
52
- before do
53
- allow(File).to receive(:exist?).and_return(true)
54
- end
55
-
56
- it "lists all commands by category when no argument is given" do
57
- expect(loader.list_commands).to eq({ "cool" => ["cool_a"], "cooler" => ["cooler_b"] })
58
- end
59
-
60
- it "lists only commands in the given category when a category is given" do
61
- expect(loader.list_commands("cool")).to eq({ "cool" => ["cool_a"] })
62
- end
63
-
64
- context "when the plugin path is invalid" do
65
- before do
66
- expect(File).to receive(:exist?).with("/file/for/plugin/b").and_return(false)
67
- end
68
-
69
- it "lists all commands by category when no argument is given" do
70
- expect(Chef::Log).to receive(:error).with(/There are plugin files specified in the knife cache that cannot be found/)
71
- expect(Chef::Log).to receive(:error).with("Missing files:\n\t/file/for/plugin/b")
72
- expect(loader.list_commands).to eq({})
73
- end
74
- end
75
- end
76
-
77
- describe "#subcommand_files" do
78
- it "lists all the files" do
79
- expect(loader.subcommand_files).to eq(["/file/for/plugin/a", "/file/for/plugin/b"])
80
- end
81
- end
82
-
83
- describe "#load_commands" do
84
- before do
85
- allow(Kernel).to receive(:load).and_return(true)
86
- end
87
-
88
- it "returns false for non-existant commands" do
89
- expect(loader.load_command(["nothere"])).to eq(false)
90
- end
91
-
92
- it "loads the correct file and returns true if the command exists" do
93
- allow(File).to receive(:exist?).and_return(true)
94
- expect(Kernel).to receive(:load).with("/file/for/plugin/a").and_return(true)
95
- expect(loader.load_command(["cool_a"])).to eq(true)
96
- end
97
- end
98
-
99
- describe "#subcommand_for_args" do
100
- it "returns the subcommands for an exact match" do
101
- expect(loader.subcommand_for_args(["cooler_b"])).to eq("cooler_b")
102
- end
103
-
104
- it "finds the right subcommand even when _'s are elided" do
105
- expect(loader.subcommand_for_args(%w{cooler b})).to eq("cooler_b")
106
- end
107
-
108
- it "returns nil if the the subcommand isn't in our manifest" do
109
- expect(loader.subcommand_for_args(["cooler c"])).to eq(nil)
110
- end
111
- end
112
- end