chef 16.1.16 → 16.18.30

Sign up to get free protection for your applications and to get access to all the features.
Files changed (822) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +32 -27
  3. data/README.md +5 -5
  4. data/Rakefile +35 -30
  5. data/bin/knife +1 -1
  6. data/chef-universal-mingw32.gemspec +5 -5
  7. data/chef.gemspec +32 -10
  8. data/lib/chef/action_collection.rb +5 -1
  9. data/lib/chef/api_client/registration.rb +2 -2
  10. data/lib/chef/application/apply.rb +19 -13
  11. data/lib/chef/application/base.rb +27 -24
  12. data/lib/chef/application/client.rb +17 -6
  13. data/lib/chef/application/exit_code.rb +13 -4
  14. data/lib/chef/application/knife.rb +22 -11
  15. data/lib/chef/application/solo.rb +2 -1
  16. data/lib/chef/application/windows_service.rb +39 -39
  17. data/lib/chef/application/windows_service_manager.rb +7 -7
  18. data/lib/chef/application.rb +33 -19
  19. data/lib/chef/{whitelist.rb → attribute_allowlist.rb} +11 -11
  20. data/lib/chef/{blacklist.rb → attribute_blocklist.rb} +9 -9
  21. data/lib/chef/chef_class.rb +0 -1
  22. data/lib/chef/chef_fs/chef_fs_data_store.rb +55 -55
  23. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
  24. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  25. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -2
  26. data/lib/chef/chef_fs/file_pattern.rb +1 -1
  27. data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +10 -10
  28. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +2 -2
  29. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +1 -5
  30. data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +8 -8
  31. data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +8 -8
  32. data/lib/chef/chef_fs/file_system/repository/base_file.rb +1 -0
  33. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +2 -2
  34. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +2 -2
  35. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +18 -18
  36. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  37. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +1 -1
  38. data/lib/chef/chef_fs/knife.rb +2 -2
  39. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
  40. data/lib/chef/chef_fs/parallelizer.rb +0 -1
  41. data/lib/chef/chef_fs/path_utils.rb +1 -1
  42. data/lib/chef/client.rb +32 -59
  43. data/lib/chef/compliance/default_attributes.rb +97 -0
  44. data/lib/chef/compliance/fetcher/automate.rb +80 -0
  45. data/lib/chef/compliance/fetcher/chef_server.rb +134 -0
  46. data/lib/chef/compliance/reporter/automate.rb +201 -0
  47. data/lib/chef/compliance/reporter/chef_server_automate.rb +94 -0
  48. data/lib/chef/compliance/reporter/compliance_enforcer.rb +20 -0
  49. data/lib/chef/compliance/reporter/json_file.rb +19 -0
  50. data/lib/chef/compliance/runner.rb +269 -0
  51. data/lib/chef/cookbook/chefignore.rb +1 -1
  52. data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
  53. data/lib/chef/cookbook/gem_installer.rb +6 -2
  54. data/lib/chef/cookbook/metadata.rb +1 -1
  55. data/lib/chef/cookbook/remote_file_vendor.rb +1 -3
  56. data/lib/chef/cookbook/synchronizer.rb +2 -2
  57. data/lib/chef/cookbook/syntax_check.rb +1 -2
  58. data/lib/chef/cookbook_loader.rb +15 -29
  59. data/lib/chef/cookbook_manifest.rb +2 -1
  60. data/lib/chef/cookbook_site_streaming_uploader.rb +13 -11
  61. data/lib/chef/cookbook_uploader.rb +1 -1
  62. data/lib/chef/cookbook_version.rb +30 -11
  63. data/lib/chef/data_bag.rb +5 -6
  64. data/lib/chef/data_collector/config_validation.rb +22 -13
  65. data/lib/chef/data_collector/run_end_message.rb +15 -5
  66. data/lib/chef/data_collector/run_start_message.rb +1 -1
  67. data/lib/chef/data_collector.rb +7 -6
  68. data/lib/chef/deprecated.rb +27 -5
  69. data/lib/chef/deprecation/warnings.rb +2 -2
  70. data/lib/chef/digester.rb +4 -3
  71. data/lib/chef/dsl/chef_vault.rb +1 -1
  72. data/lib/chef/dsl/data_query.rb +2 -2
  73. data/lib/chef/dsl/platform_introspection.rb +10 -8
  74. data/lib/chef/dsl/reboot_pending.rb +1 -1
  75. data/lib/chef/encrypted_data_bag_item/assertions.rb +1 -1
  76. data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
  77. data/lib/chef/encrypted_data_bag_item/encryptor.rb +3 -3
  78. data/lib/chef/encrypted_data_bag_item.rb +3 -4
  79. data/lib/chef/environment.rb +6 -7
  80. data/lib/chef/event_loggers/windows_eventlog.rb +2 -2
  81. data/lib/chef/exceptions.rb +16 -6
  82. data/lib/chef/file_access_control/windows.rb +12 -11
  83. data/lib/chef/file_access_control.rb +1 -1
  84. data/lib/chef/file_cache.rb +4 -4
  85. data/lib/chef/file_content_management/deploy/mv_unix.rb +1 -1
  86. data/lib/chef/file_content_management/tempfile.rb +10 -10
  87. data/lib/chef/formatters/doc.rb +7 -6
  88. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +6 -5
  89. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +3 -3
  90. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +3 -3
  91. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +9 -9
  92. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +8 -8
  93. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +3 -3
  94. data/lib/chef/formatters/error_mapper.rb +2 -2
  95. data/lib/chef/formatters/indentable_output_stream.rb +2 -2
  96. data/lib/chef/formatters/minimal.rb +5 -4
  97. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +28 -39
  98. data/lib/chef/handler/json_file.rb +1 -1
  99. data/lib/chef/handler.rb +2 -0
  100. data/lib/chef/http/auth_credentials.rb +5 -1
  101. data/lib/chef/http/authenticator.rb +4 -2
  102. data/lib/chef/http/basic_client.rb +4 -2
  103. data/lib/chef/http/decompressor.rb +1 -1
  104. data/lib/chef/http/http_request.rb +8 -6
  105. data/lib/chef/http/json_output.rb +1 -1
  106. data/lib/chef/http/socketless_chef_zero_client.rb +5 -2
  107. data/lib/chef/http/ssl_policies.rb +52 -15
  108. data/lib/chef/http.rb +38 -31
  109. data/lib/chef/json_compat.rb +4 -9
  110. data/lib/chef/key.rb +1 -1
  111. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  112. data/lib/chef/knife/bootstrap/templates/chef-full.erb +12 -12
  113. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +9 -9
  114. data/lib/chef/knife/bootstrap/train_connector.rb +2 -1
  115. data/lib/chef/knife/bootstrap.rb +93 -40
  116. data/lib/chef/knife/client_bulk_delete.rb +1 -1
  117. data/lib/chef/knife/client_create.rb +3 -3
  118. data/lib/chef/knife/config_get.rb +8 -96
  119. data/lib/chef/knife/config_get_profile.rb +9 -9
  120. data/lib/chef/knife/config_list.rb +139 -0
  121. data/lib/chef/knife/config_list_profiles.rb +8 -95
  122. data/lib/chef/knife/config_show.rb +127 -0
  123. data/lib/chef/knife/config_use.rb +61 -0
  124. data/lib/chef/knife/config_use_profile.rb +12 -17
  125. data/lib/chef/knife/configure.rb +5 -3
  126. data/lib/chef/knife/cookbook_delete.rb +1 -1
  127. data/lib/chef/knife/cookbook_download.rb +1 -1
  128. data/lib/chef/knife/cookbook_metadata.rb +1 -1
  129. data/lib/chef/knife/cookbook_upload.rb +29 -37
  130. data/lib/chef/knife/core/bootstrap_context.rb +3 -3
  131. data/lib/chef/knife/core/cookbook_scm_repo.rb +2 -2
  132. data/lib/chef/knife/core/formatting_options.rb +49 -0
  133. data/lib/chef/knife/core/gem_glob_loader.rb +2 -2
  134. data/lib/chef/knife/core/generic_presenter.rb +1 -1
  135. data/lib/chef/knife/core/hashed_command_loader.rb +3 -2
  136. data/lib/chef/knife/core/node_presenter.rb +0 -25
  137. data/lib/chef/knife/core/object_loader.rb +1 -1
  138. data/lib/chef/knife/core/status_presenter.rb +1 -26
  139. data/lib/chef/knife/core/subcommand_loader.rb +20 -1
  140. data/lib/chef/knife/core/ui.rb +12 -3
  141. data/lib/chef/knife/core/windows_bootstrap_context.rb +51 -42
  142. data/lib/chef/knife/data_bag_create.rb +1 -1
  143. data/lib/chef/knife/delete.rb +15 -15
  144. data/lib/chef/knife/exec.rb +4 -4
  145. data/lib/chef/knife/node_bulk_delete.rb +1 -1
  146. data/lib/chef/knife/node_policy_set.rb +2 -2
  147. data/lib/chef/knife/node_run_list_add.rb +1 -1
  148. data/lib/chef/knife/node_run_list_remove.rb +2 -2
  149. data/lib/chef/knife/node_run_list_set.rb +1 -1
  150. data/lib/chef/knife/node_show.rb +4 -3
  151. data/lib/chef/knife/rehash.rb +3 -21
  152. data/lib/chef/knife/role_bulk_delete.rb +1 -1
  153. data/lib/chef/knife/role_env_run_list_add.rb +1 -1
  154. data/lib/chef/knife/role_env_run_list_set.rb +1 -1
  155. data/lib/chef/knife/role_run_list_add.rb +1 -1
  156. data/lib/chef/knife/role_run_list_set.rb +1 -1
  157. data/lib/chef/knife/search.rb +2 -2
  158. data/lib/chef/knife/serve.rb +3 -3
  159. data/lib/chef/knife/ssh.rb +33 -12
  160. data/lib/chef/knife/ssl_check.rb +3 -3
  161. data/lib/chef/knife/status.rb +10 -13
  162. data/lib/chef/knife/supermarket_share.rb +1 -1
  163. data/lib/chef/knife/supermarket_unshare.rb +1 -1
  164. data/lib/chef/knife/tag_create.rb +1 -1
  165. data/lib/chef/knife/tag_delete.rb +1 -1
  166. data/lib/chef/knife/user_create.rb +2 -2
  167. data/lib/chef/knife/xargs.rb +19 -19
  168. data/lib/chef/knife/yaml_convert.rb +1 -1
  169. data/lib/chef/knife.rb +9 -9
  170. data/lib/chef/local_mode.rb +2 -2
  171. data/lib/chef/log/syslog.rb +2 -2
  172. data/lib/chef/log/winevt.rb +2 -2
  173. data/lib/chef/log.rb +8 -3
  174. data/lib/chef/mixin/checksum.rb +5 -0
  175. data/{spec/functional/resource/base.rb → lib/chef/mixin/chef_utils_wiring.rb} +24 -12
  176. data/lib/chef/mixin/convert_to_class_name.rb +0 -56
  177. data/lib/chef/mixin/deep_merge.rb +35 -18
  178. data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/mixin/default_paths.rb} +11 -13
  179. data/lib/chef/mixin/openssl_helper.rb +32 -11
  180. data/lib/chef/mixin/path_sanity.rb +5 -4
  181. data/lib/chef/mixin/powershell_exec.rb +17 -22
  182. data/lib/chef/mixin/powershell_out.rb +12 -5
  183. data/lib/chef/mixin/properties.rb +2 -0
  184. data/lib/chef/mixin/securable.rb +2 -2
  185. data/lib/chef/mixin/shell_out.rb +4 -188
  186. data/lib/chef/mixin/template.rb +4 -3
  187. data/lib/chef/mixin/unformatter.rb +1 -1
  188. data/lib/chef/mixin/uris.rb +4 -2
  189. data/lib/chef/mixin/versioned_api.rb +1 -2
  190. data/lib/chef/mixin/which.rb +6 -3
  191. data/lib/chef/mixins.rb +1 -0
  192. data/lib/chef/monkey_patches/webrick-utils.rb +10 -10
  193. data/lib/chef/node/attribute.rb +22 -7
  194. data/lib/chef/node/attribute_collections.rb +2 -6
  195. data/lib/chef/node/mixin/deep_merge_cache.rb +4 -4
  196. data/lib/chef/node/mixin/immutablize_hash.rb +2 -0
  197. data/lib/chef/node.rb +43 -18
  198. data/lib/chef/node_map.rb +21 -18
  199. data/lib/chef/platform/query_helpers.rb +4 -4
  200. data/lib/chef/platform/service_helpers.rb +31 -28
  201. data/lib/chef/policy_builder/dynamic.rb +2 -0
  202. data/lib/chef/policy_builder/policyfile.rb +8 -3
  203. data/lib/chef/powershell.rb +10 -4
  204. data/lib/chef/property.rb +2 -2
  205. data/lib/chef/provider/batch.rb +3 -10
  206. data/lib/chef/provider/cron/unix.rb +0 -2
  207. data/lib/chef/provider/cron.rb +9 -28
  208. data/lib/chef/provider/dsc_resource.rb +12 -24
  209. data/lib/chef/provider/dsc_script.rb +16 -20
  210. data/lib/chef/provider/execute.rb +2 -1
  211. data/lib/chef/provider/file.rb +5 -5
  212. data/lib/chef/provider/git.rb +22 -14
  213. data/lib/chef/provider/group/dscl.rb +3 -3
  214. data/lib/chef/provider/group/suse.rb +5 -5
  215. data/lib/chef/provider/group/windows.rb +13 -2
  216. data/lib/chef/provider/group.rb +14 -8
  217. data/lib/chef/provider/ifconfig/debian.rb +38 -22
  218. data/lib/chef/provider/ifconfig/redhat.rb +54 -18
  219. data/lib/chef/provider/ifconfig.rb +16 -19
  220. data/lib/chef/provider/launchd.rb +3 -13
  221. data/lib/chef/provider/link.rb +0 -9
  222. data/lib/chef/provider/mount/aix.rb +1 -1
  223. data/lib/chef/provider/mount/linux.rb +67 -0
  224. data/lib/chef/provider/mount/mount.rb +41 -43
  225. data/lib/chef/provider/mount/solaris.rb +0 -1
  226. data/lib/chef/provider/mount/windows.rb +2 -2
  227. data/lib/chef/provider/mount.rb +23 -3
  228. data/lib/chef/provider/noop.rb +1 -1
  229. data/lib/chef/provider/package/apt.rb +1 -1
  230. data/lib/chef/provider/package/chocolatey.rb +6 -6
  231. data/lib/chef/provider/package/dnf/dnf_helper.py +23 -6
  232. data/lib/chef/provider/package/dnf/python_helper.rb +6 -6
  233. data/lib/chef/provider/package/dnf.rb +39 -12
  234. data/lib/chef/provider/package/dpkg.rb +3 -12
  235. data/lib/chef/provider/package/freebsd/base.rb +3 -2
  236. data/lib/chef/provider/package/freebsd/pkgng.rb +4 -2
  237. data/lib/chef/provider/package/homebrew.rb +1 -1
  238. data/lib/chef/provider/package/ips.rb +1 -1
  239. data/lib/chef/provider/package/openbsd.rb +1 -1
  240. data/lib/chef/provider/package/portage.rb +2 -2
  241. data/lib/chef/provider/package/powershell.rb +10 -2
  242. data/lib/chef/provider/package/rubygems.rb +25 -22
  243. data/lib/chef/provider/package/snap.rb +99 -34
  244. data/lib/chef/provider/package/solaris.rb +0 -2
  245. data/lib/chef/provider/package/windows/msi.rb +3 -3
  246. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +12 -10
  247. data/lib/chef/provider/package/windows.rb +12 -7
  248. data/lib/chef/provider/package/yum/rpm_utils.rb +1 -1
  249. data/lib/chef/provider/package/yum/yum_helper.py +4 -10
  250. data/lib/chef/provider/package/zypper.rb +99 -73
  251. data/lib/chef/provider/package.rb +53 -18
  252. data/lib/chef/provider/powershell_script.rb +40 -17
  253. data/lib/chef/provider/registry_key.rb +4 -3
  254. data/lib/chef/provider/remote_file/content.rb +3 -0
  255. data/lib/chef/provider/remote_file/ftp.rb +6 -4
  256. data/lib/chef/provider/remote_file/http.rb +4 -1
  257. data/lib/chef/provider/remote_file/sftp.rb +6 -4
  258. data/lib/chef/provider/route.rb +4 -8
  259. data/lib/chef/provider/script.rb +4 -75
  260. data/lib/chef/provider/service/arch.rb +2 -2
  261. data/lib/chef/provider/service/debian.rb +5 -4
  262. data/lib/chef/provider/service/gentoo.rb +2 -2
  263. data/lib/chef/provider/service/macosx.rb +7 -7
  264. data/lib/chef/provider/service/openbsd.rb +5 -8
  265. data/lib/chef/provider/service/redhat.rb +4 -4
  266. data/lib/chef/provider/service/upstart.rb +1 -1
  267. data/lib/chef/provider/service/windows.rb +11 -11
  268. data/lib/chef/provider/service.rb +2 -2
  269. data/lib/chef/provider/subversion.rb +2 -2
  270. data/lib/chef/provider/systemd_unit.rb +0 -2
  271. data/lib/chef/provider/template/content.rb +2 -1
  272. data/lib/chef/provider/template_finder.rb +2 -10
  273. data/lib/chef/provider/user/aix.rb +1 -1
  274. data/lib/chef/provider/user/dscl.rb +10 -10
  275. data/lib/chef/provider/user/linux.rb +3 -3
  276. data/lib/chef/provider/user/mac.rb +29 -21
  277. data/lib/chef/provider/user/solaris.rb +1 -1
  278. data/lib/chef/provider/user/windows.rb +10 -3
  279. data/lib/chef/provider/user.rb +17 -9
  280. data/lib/chef/provider/windows_script.rb +87 -25
  281. data/lib/chef/provider/yum_repository.rb +3 -3
  282. data/lib/chef/provider/zypper_repository.rb +33 -14
  283. data/lib/chef/provider.rb +1 -5
  284. data/lib/chef/provider_resolver.rb +1 -1
  285. data/lib/chef/providers.rb +1 -4
  286. data/lib/chef/pwsh.rb +71 -0
  287. data/lib/chef/recipe.rb +2 -2
  288. data/lib/chef/resource/alternatives.rb +1 -1
  289. data/lib/chef/resource/apt_package.rb +1 -1
  290. data/lib/chef/resource/apt_repository.rb +7 -15
  291. data/lib/chef/resource/archive_file.rb +28 -8
  292. data/lib/chef/resource/bash.rb +119 -2
  293. data/lib/chef/resource/batch.rb +5 -3
  294. data/lib/chef/resource/bff_package.rb +22 -0
  295. data/lib/chef/resource/breakpoint.rb +59 -2
  296. data/lib/chef/resource/build_essential.rb +7 -10
  297. data/lib/chef/resource/cab_package.rb +29 -0
  298. data/lib/chef/resource/chef_client_config.rb +313 -0
  299. data/lib/chef/resource/chef_client_cron.rb +36 -29
  300. data/lib/chef/resource/chef_client_launchd.rb +194 -0
  301. data/lib/chef/resource/chef_client_scheduled_task.rb +36 -21
  302. data/lib/chef/resource/chef_client_systemd_timer.rb +29 -22
  303. data/lib/chef/resource/chef_client_trusted_certificate.rb +102 -0
  304. data/lib/chef/resource/chef_gem.rb +58 -22
  305. data/lib/chef/resource/chef_handler.rb +149 -4
  306. data/lib/chef/resource/chef_sleep.rb +3 -3
  307. data/lib/chef/resource/chef_vault_secret.rb +14 -14
  308. data/lib/chef/resource/chocolatey_feature.rb +1 -2
  309. data/lib/chef/resource/cookbook_file.rb +2 -2
  310. data/lib/chef/resource/cron/_cron_shared.rb +99 -0
  311. data/lib/chef/resource/cron/cron.rb +46 -0
  312. data/lib/chef/resource/{cron_d.rb → cron/cron_d.rb} +9 -89
  313. data/lib/chef/resource/cron_access.rb +13 -5
  314. data/lib/chef/resource/csh.rb +2 -3
  315. data/lib/chef/resource/dmg_package.rb +2 -2
  316. data/lib/chef/resource/dnf_package.rb +2 -2
  317. data/lib/chef/resource/dsc_resource.rb +0 -1
  318. data/lib/chef/resource/dsc_script.rb +9 -2
  319. data/lib/chef/resource/execute.rb +486 -15
  320. data/lib/chef/resource/file.rb +5 -5
  321. data/lib/chef/resource/freebsd_package.rb +1 -1
  322. data/lib/chef/resource/gem_package.rb +36 -3
  323. data/lib/chef/resource/helpers/cron_validations.rb +6 -3
  324. data/lib/chef/resource/homebrew_cask.rb +16 -10
  325. data/lib/chef/resource/homebrew_package.rb +32 -3
  326. data/lib/chef/resource/homebrew_update.rb +110 -0
  327. data/lib/chef/resource/hostname.rb +27 -40
  328. data/lib/chef/resource/http_request.rb +1 -1
  329. data/lib/chef/resource/ifconfig.rb +52 -5
  330. data/lib/chef/resource/kernel_module.rb +15 -2
  331. data/lib/chef/resource/ksh.rb +3 -3
  332. data/lib/chef/resource/launchd.rb +18 -17
  333. data/lib/chef/resource/locale.rb +4 -4
  334. data/lib/chef/resource/lwrp_base.rb +4 -5
  335. data/lib/chef/resource/macos_userdefaults.rb +176 -61
  336. data/lib/chef/resource/mdadm.rb +2 -2
  337. data/lib/chef/resource/mount.rb +9 -3
  338. data/lib/chef/resource/notify_group.rb +0 -1
  339. data/lib/chef/resource/ohai.rb +46 -3
  340. data/lib/chef/resource/ohai_hint.rb +33 -0
  341. data/lib/chef/resource/openssl_dhparam.rb +29 -5
  342. data/lib/chef/resource/openssl_ec_private_key.rb +8 -3
  343. data/lib/chef/resource/openssl_ec_public_key.rb +4 -2
  344. data/lib/chef/resource/openssl_rsa_private_key.rb +8 -3
  345. data/lib/chef/resource/openssl_rsa_public_key.rb +2 -0
  346. data/lib/chef/resource/openssl_x509_certificate.rb +49 -49
  347. data/lib/chef/resource/openssl_x509_crl.rb +22 -12
  348. data/lib/chef/resource/openssl_x509_request.rb +37 -36
  349. data/lib/chef/resource/osx_profile.rb +292 -6
  350. data/lib/chef/resource/perl.rb +2 -3
  351. data/lib/chef/resource/plist.rb +26 -11
  352. data/lib/chef/resource/powershell_package_source.rb +25 -24
  353. data/lib/chef/resource/powershell_script.rb +40 -41
  354. data/lib/chef/resource/python.rb +2 -3
  355. data/lib/chef/resource/reboot.rb +2 -2
  356. data/lib/chef/resource/registry_key.rb +93 -2
  357. data/lib/chef/resource/remote_directory.rb +1 -1
  358. data/lib/chef/resource/remote_file.rb +26 -10
  359. data/lib/chef/resource/rhsm_register.rb +39 -10
  360. data/lib/chef/resource/rhsm_subscription.rb +5 -5
  361. data/lib/chef/resource/route.rb +1 -1
  362. data/lib/chef/resource/ruby.rb +1 -6
  363. data/lib/chef/resource/ruby_block.rb +2 -2
  364. data/lib/chef/resource/scm/_scm.rb +2 -1
  365. data/lib/chef/resource/scm/git.rb +82 -1
  366. data/lib/chef/resource/scm/subversion.rb +14 -2
  367. data/lib/chef/resource/script.rb +2 -2
  368. data/lib/chef/resource/service.rb +5 -5
  369. data/lib/chef/resource/solaris_package.rb +0 -2
  370. data/lib/chef/resource/ssh_known_hosts_entry.rb +18 -3
  371. data/lib/chef/resource/sudo.rb +32 -5
  372. data/lib/chef/resource/support/client.erb +68 -0
  373. data/lib/chef/resource/support/cron.d.erb +1 -1
  374. data/lib/chef/resource/support/cron_access.erb +1 -1
  375. data/lib/chef/resource/support/sudoer.erb +1 -1
  376. data/lib/chef/resource/support/ulimit.erb +1 -1
  377. data/lib/chef/resource/swap_file.rb +17 -0
  378. data/lib/chef/resource/sysctl.rb +6 -10
  379. data/lib/chef/resource/systemd_unit.rb +45 -4
  380. data/lib/chef/resource/template.rb +4 -4
  381. data/lib/chef/resource/timezone.rb +122 -68
  382. data/lib/chef/resource/user/windows_user.rb +5 -0
  383. data/lib/chef/resource/user_ulimit.rb +2 -1
  384. data/lib/chef/resource/windows_ad_join.rb +51 -13
  385. data/lib/chef/resource/windows_audit_policy.rb +232 -0
  386. data/lib/chef/resource/windows_auto_run.rb +13 -0
  387. data/lib/chef/resource/windows_certificate.rb +95 -39
  388. data/lib/chef/resource/windows_dfs_folder.rb +2 -0
  389. data/lib/chef/resource/windows_dfs_namespace.rb +2 -0
  390. data/lib/chef/resource/windows_dfs_server.rb +9 -4
  391. data/lib/chef/resource/windows_dns_record.rb +25 -5
  392. data/lib/chef/resource/windows_dns_zone.rb +12 -7
  393. data/lib/chef/resource/windows_env.rb +173 -0
  394. data/lib/chef/resource/windows_feature.rb +4 -0
  395. data/lib/chef/resource/windows_feature_dism.rb +10 -0
  396. data/lib/chef/resource/windows_feature_powershell.rb +14 -2
  397. data/lib/chef/resource/windows_firewall_profile.rb +196 -0
  398. data/lib/chef/resource/windows_firewall_rule.rb +14 -14
  399. data/lib/chef/resource/windows_font.rb +7 -5
  400. data/lib/chef/resource/windows_package.rb +30 -6
  401. data/lib/chef/resource/windows_pagefile.rb +5 -1
  402. data/lib/chef/resource/windows_path.rb +38 -0
  403. data/lib/chef/resource/windows_printer.rb +22 -21
  404. data/lib/chef/resource/windows_printer_port.rb +20 -17
  405. data/lib/chef/resource/windows_script.rb +2 -16
  406. data/lib/chef/resource/windows_security_policy.rb +98 -49
  407. data/lib/chef/resource/windows_service.rb +108 -0
  408. data/lib/chef/resource/windows_share.rb +23 -21
  409. data/lib/chef/resource/windows_shortcut.rb +3 -2
  410. data/lib/chef/resource/windows_task.rb +633 -32
  411. data/lib/chef/resource/windows_uac.rb +5 -1
  412. data/lib/chef/resource/windows_user_privilege.rb +111 -77
  413. data/lib/chef/resource/windows_workgroup.rb +11 -10
  414. data/lib/chef/resource/yum_package.rb +2 -2
  415. data/lib/chef/resource/yum_repository.rb +15 -10
  416. data/lib/chef/resource.rb +60 -27
  417. data/lib/chef/resource_collection/resource_set.rb +2 -6
  418. data/lib/chef/resource_collection/stepable_iterator.rb +1 -2
  419. data/lib/chef/resource_inspector.rb +82 -70
  420. data/lib/chef/resource_reporter.rb +1 -3
  421. data/lib/chef/resources.rb +9 -3
  422. data/lib/chef/role.rb +3 -4
  423. data/lib/chef/run_context/cookbook_compiler.rb +21 -21
  424. data/lib/chef/run_context.rb +2 -2
  425. data/lib/chef/run_lock.rb +3 -3
  426. data/lib/chef/run_status.rb +2 -6
  427. data/lib/chef/search/query.rb +7 -6
  428. data/lib/chef/server_api.rb +0 -4
  429. data/lib/chef/server_api_versions.rb +4 -0
  430. data/lib/chef/shell/ext.rb +15 -15
  431. data/lib/chef/shell/shell_session.rb +4 -2
  432. data/lib/chef/shell.rb +63 -27
  433. data/lib/chef/train_transport.rb +5 -104
  434. data/lib/chef/util/backup.rb +2 -2
  435. data/lib/chef/util/diff.rb +16 -17
  436. data/lib/chef/util/dsc/configuration_generator.rb +53 -12
  437. data/lib/chef/util/dsc/lcm_output_parser.rb +4 -7
  438. data/lib/chef/util/dsc/local_configuration_manager.rb +18 -15
  439. data/lib/chef/util/dsc/resource_store.rb +5 -11
  440. data/lib/chef/util/powershell/ps_credential.rb +18 -14
  441. data/lib/chef/util/threaded_job_queue.rb +0 -2
  442. data/lib/chef/util/windows/net_user.rb +1 -1
  443. data/lib/chef/util/windows/volume.rb +1 -1
  444. data/lib/chef/version.rb +2 -2
  445. data/lib/chef/version_string.rb +1 -1
  446. data/lib/chef/win32/api/file.rb +4 -0
  447. data/lib/chef/win32/api.rb +9 -2
  448. data/lib/chef/win32/crypto.rb +1 -1
  449. data/lib/chef/win32/file/version_info.rb +5 -5
  450. data/lib/chef/win32/file.rb +4 -4
  451. data/lib/chef/win32/registry.rb +4 -6
  452. data/lib/chef/win32/security/sid.rb +1 -1
  453. data/lib/chef/win32/security.rb +1 -1
  454. data/lib/chef/win32/unicode.rb +1 -1
  455. data/lib/chef/win32/version.rb +4 -2
  456. data/spec/data/lwrp/providers/buck_passer.rb +1 -1
  457. data/spec/data/lwrp/providers/buck_passer_2.rb +1 -1
  458. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +1 -1
  459. data/spec/data/rubygems.org/latest_specs.4.8.gz +0 -0
  460. data/spec/data/rubygems.org/nonexistent_gem +0 -0
  461. data/spec/data/rubygems.org/sexp_processor +0 -0
  462. data/spec/data/rubygems.org/sexp_processor-4.15.1.gemspec.rz +0 -0
  463. data/spec/data/shef-config.rb +1 -1
  464. data/spec/data/ssl/binary/chef-rspec-der.cert +0 -0
  465. data/spec/data/ssl/binary/chef-rspec-der.key +0 -0
  466. data/spec/data/ssl/chef-rspec.cert +15 -15
  467. data/spec/functional/assets/yumrepo-empty/repodata/01a3b-filelists.sqlite.bz2 +0 -0
  468. data/spec/functional/assets/yumrepo-empty/repodata/401dc-filelists.xml.gz +0 -0
  469. data/spec/functional/assets/yumrepo-empty/repodata/5dc1e-primary.sqlite.bz2 +0 -0
  470. data/spec/functional/assets/yumrepo-empty/repodata/6bf96-other.xml.gz +0 -0
  471. data/spec/functional/assets/yumrepo-empty/repodata/7c365-other.sqlite.bz2 +0 -0
  472. data/spec/functional/assets/yumrepo-empty/repodata/dabe2-primary.xml.gz +0 -0
  473. data/spec/functional/assets/yumrepo-empty/repodata/repomd.xml +55 -0
  474. data/spec/functional/event_loggers/windows_eventlog_spec.rb +6 -5
  475. data/spec/functional/knife/configure_spec.rb +1 -1
  476. data/spec/functional/knife/ssh_spec.rb +5 -16
  477. data/spec/functional/mixin/powershell_out_spec.rb +11 -3
  478. data/spec/functional/resource/aix_service_spec.rb +11 -4
  479. data/spec/functional/resource/aixinit_service_spec.rb +9 -10
  480. data/spec/functional/resource/apt_package_spec.rb +4 -7
  481. data/spec/functional/resource/bash_spec.rb +3 -2
  482. data/spec/functional/resource/bff_spec.rb +3 -3
  483. data/spec/functional/resource/chocolatey_package_spec.rb +11 -3
  484. data/spec/functional/resource/cookbook_file_spec.rb +1 -1
  485. data/spec/functional/resource/cron_spec.rb +24 -6
  486. data/spec/functional/resource/dnf_package_spec.rb +323 -17
  487. data/spec/functional/resource/dsc_resource_spec.rb +1 -1
  488. data/spec/functional/resource/dsc_script_spec.rb +6 -10
  489. data/spec/functional/resource/execute_spec.rb +1 -1
  490. data/spec/functional/resource/git_spec.rb +23 -1
  491. data/spec/functional/resource/group_spec.rb +26 -10
  492. data/spec/functional/resource/ifconfig_spec.rb +9 -1
  493. data/spec/functional/resource/insserv_spec.rb +8 -8
  494. data/spec/functional/resource/link_spec.rb +30 -25
  495. data/spec/functional/resource/mount_spec.rb +19 -3
  496. data/spec/functional/resource/msu_package_spec.rb +9 -3
  497. data/spec/functional/resource/ohai_spec.rb +2 -10
  498. data/spec/functional/resource/powershell_package_source_spec.rb +107 -0
  499. data/spec/functional/resource/powershell_script_spec.rb +65 -22
  500. data/spec/functional/resource/remote_file_spec.rb +9 -15
  501. data/spec/functional/resource/rpm_spec.rb +3 -3
  502. data/spec/functional/resource/timezone_spec.rb +2 -0
  503. data/spec/functional/resource/user/dscl_spec.rb +1 -1
  504. data/spec/functional/resource/user/mac_user_spec.rb +1 -1
  505. data/spec/functional/resource/windows_certificate_spec.rb +206 -382
  506. data/spec/functional/resource/windows_firewall_rule_spec.rb +93 -0
  507. data/spec/functional/resource/windows_font_spec.rb +50 -0
  508. data/spec/functional/resource/windows_package_spec.rb +36 -11
  509. data/spec/functional/resource/windows_path_spec.rb +4 -0
  510. data/spec/functional/resource/windows_security_policy_spec.rb +0 -4
  511. data/spec/functional/resource/windows_service_spec.rb +4 -0
  512. data/spec/functional/resource/windows_share_spec.rb +103 -0
  513. data/spec/functional/resource/windows_task_spec.rb +27 -27
  514. data/spec/functional/resource/windows_user_privilege_spec.rb +1 -2
  515. data/spec/functional/resource/yum_package_spec.rb +16 -1
  516. data/spec/functional/resource/zypper_package_spec.rb +15 -1
  517. data/spec/functional/run_lock_spec.rb +26 -25
  518. data/spec/functional/shell_spec.rb +10 -6
  519. data/spec/functional/version_spec.rb +4 -4
  520. data/spec/functional/win32/crypto_spec.rb +1 -1
  521. data/spec/functional/win32/registry_spec.rb +8 -8
  522. data/spec/functional/win32/service_manager_spec.rb +1 -1
  523. data/spec/integration/client/client_spec.rb +6 -5
  524. data/spec/integration/client/exit_code_spec.rb +3 -2
  525. data/spec/integration/client/fips_spec.rb +21 -0
  526. data/spec/integration/client/ipv6_spec.rb +1 -1
  527. data/spec/integration/compliance/compliance_spec.rb +82 -0
  528. data/spec/integration/knife/client_key_create_spec.rb +1 -1
  529. data/spec/integration/knife/common_options_spec.rb +12 -12
  530. data/spec/integration/knife/config_list_spec.rb +220 -0
  531. data/spec/integration/knife/config_show_spec.rb +192 -0
  532. data/spec/integration/knife/config_use_spec.rb +198 -0
  533. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
  534. data/spec/integration/knife/cookbook_upload_spec.rb +28 -1
  535. data/spec/integration/knife/data_bag_from_file_spec.rb +1 -1
  536. data/spec/integration/knife/delete_spec.rb +1 -1
  537. data/spec/integration/knife/diff_spec.rb +3 -1
  538. data/spec/integration/knife/download_spec.rb +5 -3
  539. data/spec/integration/knife/environment_from_file_spec.rb +1 -1
  540. data/spec/integration/knife/node_create_spec.rb +1 -1
  541. data/spec/integration/knife/node_environment_set_spec.rb +1 -1
  542. data/spec/integration/knife/node_from_file_spec.rb +1 -1
  543. data/spec/integration/knife/node_run_list_add_spec.rb +4 -4
  544. data/spec/integration/knife/node_run_list_remove_spec.rb +1 -1
  545. data/spec/integration/knife/node_run_list_set_spec.rb +1 -1
  546. data/spec/integration/knife/node_show_spec.rb +1 -1
  547. data/spec/integration/knife/role_from_file_spec.rb +1 -1
  548. data/spec/integration/knife/serve_spec.rb +5 -5
  549. data/spec/integration/knife/upload_spec.rb +8 -7
  550. data/spec/integration/ohai/ohai_spec.rb +61 -0
  551. data/spec/integration/recipes/accumulator_spec.rb +1 -1
  552. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +2 -2
  553. data/spec/integration/recipes/lwrp_spec.rb +1 -1
  554. data/spec/integration/recipes/notifies_spec.rb +2 -2
  555. data/spec/integration/recipes/notifying_block_spec.rb +1 -1
  556. data/spec/integration/recipes/provider_choice.rb +2 -2
  557. data/spec/integration/recipes/recipe_dsl_spec.rb +6 -1
  558. data/spec/integration/recipes/remote_directory.rb +1 -1
  559. data/spec/integration/recipes/resource_action_spec.rb +14 -0
  560. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +2 -0
  561. data/spec/integration/recipes/resource_load_spec.rb +4 -2
  562. data/spec/integration/recipes/unified_mode_spec.rb +1 -1
  563. data/spec/integration/recipes/use_partial_spec.rb +1 -1
  564. data/spec/integration/solo/solo_spec.rb +5 -5
  565. data/spec/spec_helper.rb +30 -17
  566. data/spec/stress/win32/file_spec.rb +1 -1
  567. data/spec/support/chef_helpers.rb +3 -22
  568. data/spec/support/lib/chef/resource/cat.rb +1 -1
  569. data/spec/support/lib/chef/resource/one_two_three_four.rb +1 -1
  570. data/spec/support/matchers/leak.rb +2 -2
  571. data/spec/support/mock/platform.rb +24 -16
  572. data/spec/support/platform_helpers.rb +36 -41
  573. data/spec/support/platforms/win32/spec_service.rb +2 -2
  574. data/spec/support/shared/functional/directory_resource.rb +1 -1
  575. data/spec/support/shared/functional/execute_resource.rb +2 -2
  576. data/spec/support/shared/functional/file_resource.rb +20 -21
  577. data/spec/support/shared/functional/securable_resource.rb +109 -29
  578. data/spec/support/shared/functional/securable_resource_with_reporting.rb +0 -1
  579. data/spec/support/shared/functional/win32_service.rb +2 -2
  580. data/spec/support/shared/functional/windows_script.rb +5 -5
  581. data/spec/support/shared/integration/integration_helper.rb +22 -52
  582. data/spec/support/shared/integration/knife_support.rb +2 -9
  583. data/spec/support/shared/unit/application_dot_d.rb +5 -4
  584. data/spec/support/shared/unit/execute_resource.rb +1 -1
  585. data/spec/support/shared/unit/knife_shared.rb +1 -1
  586. data/spec/support/shared/unit/provider/file.rb +26 -8
  587. data/spec/support/shared/unit/script_resource.rb +10 -24
  588. data/spec/support/shared/unit/windows_script_resource.rb +16 -29
  589. data/spec/tiny_server.rb +0 -1
  590. data/spec/unit/application/client_spec.rb +2 -2
  591. data/spec/unit/application/exit_code_spec.rb +10 -0
  592. data/spec/unit/application/solo_spec.rb +4 -2
  593. data/spec/unit/application_spec.rb +15 -8
  594. data/spec/unit/chef_fs/config_spec.rb +3 -3
  595. data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  596. data/spec/unit/chef_fs/diff_spec.rb +8 -8
  597. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +2 -4
  598. data/spec/unit/chef_fs/{parallelizer.rb → parallelizer_spec.rb} +6 -2
  599. data/spec/unit/chef_fs/path_util_spec.rb +1 -1
  600. data/spec/unit/client_spec.rb +25 -5
  601. data/spec/unit/compliance/fetcher/automate_spec.rb +142 -0
  602. data/spec/unit/compliance/fetcher/chef_server_spec.rb +93 -0
  603. data/spec/unit/compliance/reporter/automate_spec.rb +427 -0
  604. data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +177 -0
  605. data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +48 -0
  606. data/spec/unit/compliance/runner_spec.rb +215 -0
  607. data/spec/unit/cookbook/gem_installer_spec.rb +2 -1
  608. data/spec/unit/cookbook/synchronizer_spec.rb +28 -26
  609. data/spec/unit/cookbook_spec.rb +2 -2
  610. data/spec/unit/cookbook_version_spec.rb +52 -0
  611. data/spec/unit/daemon_spec.rb +1 -5
  612. data/spec/unit/data_bag_spec.rb +6 -3
  613. data/spec/unit/data_collector/config_validation_spec.rb +208 -0
  614. data/spec/unit/data_collector_spec.rb +100 -120
  615. data/spec/unit/decorator_spec.rb +23 -23
  616. data/spec/unit/dsl/declare_resource_spec.rb +1 -1
  617. data/spec/unit/dsl/platform_introspection_spec.rb +1 -0
  618. data/spec/unit/dsl/reboot_pending_spec.rb +2 -2
  619. data/spec/unit/environment_spec.rb +12 -8
  620. data/spec/unit/event_dispatch/dispatcher_spec.rb +3 -0
  621. data/spec/unit/file_access_control_spec.rb +1 -1
  622. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +2 -2
  623. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +11 -11
  624. data/spec/unit/guard_interpreter_spec.rb +1 -1
  625. data/spec/unit/http/api_versions_spec.rb +20 -2
  626. data/spec/unit/http/ssl_policies_spec.rb +125 -66
  627. data/spec/unit/json_compat_spec.rb +1 -1
  628. data/spec/unit/knife/bootstrap_spec.rb +69 -45
  629. data/spec/unit/knife/client_create_spec.rb +2 -2
  630. data/spec/unit/knife/configure_client_spec.rb +5 -5
  631. data/spec/unit/knife/configure_spec.rb +3 -3
  632. data/spec/unit/knife/cookbook_delete_spec.rb +2 -2
  633. data/spec/unit/knife/cookbook_download_spec.rb +8 -8
  634. data/spec/unit/knife/cookbook_list_spec.rb +2 -2
  635. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -1
  636. data/spec/unit/knife/cookbook_metadata_spec.rb +3 -3
  637. data/spec/unit/knife/cookbook_show_spec.rb +6 -7
  638. data/spec/unit/knife/cookbook_upload_spec.rb +7 -10
  639. data/spec/unit/knife/core/hashed_command_loader_spec.rb +3 -3
  640. data/spec/unit/knife/core/node_editor_spec.rb +1 -1
  641. data/spec/unit/knife/core/status_presenter_spec.rb +54 -0
  642. data/spec/unit/knife/core/ui_spec.rb +1 -0
  643. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +24 -15
  644. data/spec/unit/knife/data_bag_edit_spec.rb +1 -1
  645. data/spec/unit/knife/environment_compare_spec.rb +3 -3
  646. data/spec/unit/knife/ssh_spec.rb +2 -2
  647. data/spec/unit/knife/supermarket_download_spec.rb +8 -8
  648. data/spec/unit/knife/supermarket_list_spec.rb +3 -3
  649. data/spec/unit/knife/supermarket_search_spec.rb +1 -1
  650. data/spec/unit/knife/supermarket_share_spec.rb +6 -7
  651. data/spec/unit/knife/tag_create_spec.rb +1 -1
  652. data/spec/unit/knife/tag_delete_spec.rb +1 -1
  653. data/spec/unit/knife/user_create_spec.rb +1 -1
  654. data/spec/unit/log/syslog_spec.rb +6 -10
  655. data/spec/unit/log/winevt_spec.rb +21 -13
  656. data/spec/unit/lwrp_spec.rb +12 -9
  657. data/spec/unit/mixin/checksum_spec.rb +28 -0
  658. data/spec/unit/mixin/deep_merge_spec.rb +15 -0
  659. data/spec/unit/mixin/{path_sanity_spec.rb → default_paths_spec.rb} +14 -14
  660. data/spec/unit/mixin/openssl_helper_spec.rb +1 -8
  661. data/spec/unit/mixin/powershell_exec_spec.rb +43 -6
  662. data/spec/unit/mixin/powershell_out_spec.rb +16 -4
  663. data/spec/unit/mixin/powershell_type_coercions_spec.rb +1 -1
  664. data/spec/unit/mixin/securable_spec.rb +2 -3
  665. data/spec/unit/mixin/shell_out_spec.rb +25 -26
  666. data/spec/unit/mixin/subclass_directive_spec.rb +2 -2
  667. data/spec/unit/mixin/template_spec.rb +30 -30
  668. data/spec/unit/mixin/unformatter_spec.rb +2 -2
  669. data/spec/unit/mixin/uris_spec.rb +1 -1
  670. data/spec/unit/mixin/user_context_spec.rb +1 -9
  671. data/spec/unit/mixin/which.rb +9 -1
  672. data/spec/unit/mixin/windows_architecture_helper_spec.rb +4 -4
  673. data/spec/unit/node/immutable_collections_spec.rb +8 -4
  674. data/spec/unit/node_spec.rb +103 -16
  675. data/spec/unit/platform/query_helpers_spec.rb +13 -14
  676. data/spec/unit/policy_builder/policyfile_spec.rb +11 -1
  677. data/spec/unit/property_spec.rb +6 -6
  678. data/spec/unit/provider/batch_spec.rb +130 -0
  679. data/spec/unit/provider/cron/unix_spec.rb +1 -1
  680. data/spec/unit/provider/cron_spec.rb +43 -49
  681. data/spec/unit/provider/dsc_resource_spec.rb +30 -63
  682. data/spec/unit/provider/dsc_script_spec.rb +11 -11
  683. data/spec/unit/provider/execute_spec.rb +1 -8
  684. data/spec/unit/provider/git_spec.rb +3 -3
  685. data/spec/unit/provider/group/windows_spec.rb +6 -0
  686. data/spec/unit/provider/group_spec.rb +1 -1
  687. data/spec/unit/provider/ifconfig_spec.rb +0 -1
  688. data/spec/unit/provider/mdadm_spec.rb +1 -3
  689. data/spec/unit/provider/mount/linux_spec.rb +107 -0
  690. data/spec/unit/provider/mount/mount_spec.rb +73 -10
  691. data/spec/unit/provider/mount/solaris_spec.rb +1 -1
  692. data/spec/unit/provider/mount/windows_spec.rb +1 -0
  693. data/spec/unit/provider/mount_spec.rb +31 -0
  694. data/spec/unit/provider/package/chocolatey_spec.rb +2 -3
  695. data/spec/unit/provider/package/dnf/python_helper_spec.rb +8 -2
  696. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +1 -1
  697. data/spec/unit/provider/package/openbsd_spec.rb +1 -1
  698. data/spec/unit/provider/package/pacman_spec.rb +17 -20
  699. data/spec/unit/provider/package/powershell_spec.rb +162 -99
  700. data/spec/unit/provider/package/rubygems_spec.rb +50 -20
  701. data/spec/unit/provider/package/smartos_spec.rb +1 -1
  702. data/spec/unit/provider/package/snap_spec.rb +1 -1
  703. data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +3 -3
  704. data/spec/unit/provider/package/windows_spec.rb +30 -53
  705. data/spec/unit/provider/package/zypper_spec.rb +0 -25
  706. data/spec/unit/provider/package_spec.rb +2 -2
  707. data/spec/unit/provider/powershell_script_spec.rb +20 -44
  708. data/spec/unit/provider/remote_directory_spec.rb +9 -9
  709. data/spec/unit/provider/route_spec.rb +0 -2
  710. data/spec/unit/provider/script_spec.rb +20 -110
  711. data/spec/unit/provider/service/arch_service_spec.rb +3 -2
  712. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  713. data/spec/unit/provider/service/gentoo_service_spec.rb +7 -7
  714. data/spec/unit/provider/service/macosx_spec.rb +6 -6
  715. data/spec/unit/provider/service/redhat_spec.rb +3 -3
  716. data/spec/unit/provider/service/upstart_service_spec.rb +3 -3
  717. data/spec/unit/provider/service/windows_spec.rb +2 -6
  718. data/spec/unit/provider/subversion_spec.rb +0 -3
  719. data/spec/unit/provider/systemd_unit_spec.rb +29 -25
  720. data/spec/unit/provider/user/dscl_spec.rb +2 -2
  721. data/spec/unit/provider/user_spec.rb +7 -1
  722. data/spec/unit/provider/windows_env_spec.rb +22 -37
  723. data/spec/unit/provider/windows_path_spec.rb +6 -11
  724. data/spec/unit/provider/windows_task_spec.rb +7 -6
  725. data/spec/unit/provider/zypper_repository_spec.rb +60 -10
  726. data/spec/unit/provider_spec.rb +1 -0
  727. data/spec/unit/recipe_spec.rb +1 -1
  728. data/spec/unit/resource/archive_file_spec.rb +23 -2
  729. data/spec/unit/resource/batch_spec.rb +6 -6
  730. data/spec/unit/resource/breakpoint_spec.rb +1 -1
  731. data/spec/unit/resource/build_essential_spec.rb +0 -12
  732. data/spec/unit/resource/chef_client_config_spec.rb +137 -0
  733. data/spec/unit/resource/chef_client_cron_spec.rb +51 -14
  734. data/spec/unit/resource/chef_client_launchd_spec.rb +127 -0
  735. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +17 -7
  736. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +43 -5
  737. data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +68 -0
  738. data/spec/unit/resource/cron_spec.rb +2 -2
  739. data/spec/unit/resource/execute_spec.rb +123 -118
  740. data/spec/unit/resource/file/verification_spec.rb +2 -1
  741. data/spec/unit/resource/helpers/cron_validations_spec.rb +5 -1
  742. data/spec/unit/resource/homebrew_cask_spec.rb +29 -11
  743. data/spec/unit/resource/homebrew_update_spec.rb +30 -0
  744. data/spec/unit/resource/ifconfig_spec.rb +2 -10
  745. data/spec/unit/resource/launchd_spec.rb +8 -0
  746. data/spec/unit/resource/macos_user_defaults_spec.rb +103 -2
  747. data/spec/unit/resource/mount_spec.rb +28 -5
  748. data/spec/unit/resource/osx_profile_spec.rb +299 -0
  749. data/spec/unit/resource/powershell_package_source_spec.rb +20 -20
  750. data/spec/unit/resource/powershell_script_spec.rb +15 -108
  751. data/spec/unit/resource/rhsm_register_spec.rb +56 -18
  752. data/spec/unit/resource/rhsm_subscription_spec.rb +50 -3
  753. data/spec/unit/resource/script_spec.rb +6 -1
  754. data/spec/unit/resource/service_spec.rb +2 -2
  755. data/spec/unit/resource/solaris_package_spec.rb +8 -10
  756. data/spec/unit/resource/systemd_unit_spec.rb +1 -1
  757. data/spec/unit/resource/timezone_spec.rb +64 -1
  758. data/spec/unit/{log_spec.rb → resource/user/windows_user_spec.rb} +16 -4
  759. data/spec/unit/resource/user_ulimit_spec.rb +14 -1
  760. data/spec/unit/resource/windows_audit_policy_spec.rb +64 -0
  761. data/spec/unit/resource/windows_certificate_spec.rb +12 -0
  762. data/spec/unit/resource/windows_dns_record_spec.rb +3 -3
  763. data/spec/unit/resource/windows_dns_zone_spec.rb +2 -2
  764. data/spec/unit/resource/windows_feature_powershell_spec.rb +30 -4
  765. data/spec/unit/resource/windows_firewall_profile_spec.rb +77 -0
  766. data/spec/unit/resource/windows_package_spec.rb +1 -0
  767. data/spec/unit/resource/windows_task_spec.rb +1 -1
  768. data/spec/unit/resource/windows_uac_spec.rb +3 -3
  769. data/spec/unit/resource/windows_user_privilege_spec.rb +55 -0
  770. data/spec/unit/resource/yum_repository_spec.rb +21 -21
  771. data/spec/unit/resource_inspector_spec.rb +10 -5
  772. data/spec/unit/resource_reporter_spec.rb +1 -1
  773. data/spec/unit/resource_spec.rb +137 -3
  774. data/spec/unit/role_spec.rb +30 -28
  775. data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -1
  776. data/spec/unit/run_lock_spec.rb +6 -2
  777. data/spec/unit/runner_spec.rb +1 -2
  778. data/spec/unit/scan_access_control_spec.rb +1 -1
  779. data/spec/unit/server_api_spec.rb +43 -16
  780. data/spec/unit/shell/shell_ext_spec.rb +46 -3
  781. data/spec/unit/shell/shell_session_spec.rb +35 -64
  782. data/spec/unit/shell_spec.rb +18 -21
  783. data/spec/unit/train_transport_spec.rb +14 -13
  784. data/spec/unit/util/backup_spec.rb +1 -1
  785. data/spec/unit/util/diff_spec.rb +1 -15
  786. data/spec/unit/util/dsc/configuration_generator_spec.rb +80 -1
  787. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +27 -35
  788. data/spec/unit/util/powershell/ps_credential_spec.rb +2 -2
  789. data/spec/unit/util/selinux_spec.rb +4 -1
  790. data/spec/unit/util/threaded_job_queue_spec.rb +9 -0
  791. data/spec/unit/win32/security_spec.rb +4 -3
  792. data/tasks/rspec.rb +2 -4
  793. metadata +172 -104
  794. data/lib/chef/dist.rb +0 -68
  795. data/lib/chef/monkey_patches/net_http.rb +0 -22
  796. data/lib/chef/provider/osx_profile.rb +0 -255
  797. data/lib/chef/provider/windows_env.rb +0 -210
  798. data/lib/chef/provider/windows_path.rb +0 -61
  799. data/lib/chef/provider/windows_task.rb +0 -635
  800. data/lib/chef/resource/cron.rb +0 -157
  801. data/lib/chef/util/powershell/cmdlet.rb +0 -173
  802. data/lib/chef/util/powershell/cmdlet_result.rb +0 -61
  803. data/spec/data/trusted_certs_empty/.gitkeep +0 -0
  804. data/spec/data/trusted_certs_empty/README.md +0 -1
  805. data/spec/functional/assets/yumrepo/repodata/4632d67cb92636e7575d911c24f0e04d3505a944e97c483abe0c3e73a7c62d33-filelists.sqlite.bz2 +0 -0
  806. data/spec/functional/assets/yumrepo/repodata/74599b793e54d877323837d2d81a1c3c594c44e4335f9528234bb490f7b9b439-other.xml.gz +0 -0
  807. data/spec/functional/assets/yumrepo/repodata/a845d418f919d2115ab95a56b2c76f6825ad0d0bede49181a55c04f58995d057-primary.sqlite.bz2 +0 -0
  808. data/spec/functional/assets/yumrepo/repodata/af9b7cf9ef23bd7b43068d74a460f3b5d06753d638e58e4a0c9edc35bfb9cdc4-other.sqlite.bz2 +0 -0
  809. data/spec/functional/assets/yumrepo/repodata/bdb4f5f1492a3b9532f22c43110a81500dd744f23da0aec5c33b2a41317c737d-filelists.xml.gz +0 -0
  810. data/spec/functional/assets/yumrepo/repodata/c10d1d34ce99e02f12ec96ef68360543ab1bb7c3cb81a4a2bf78df7d8597e9df-primary.xml.gz +0 -0
  811. data/spec/functional/util/powershell/cmdlet_spec.rb +0 -111
  812. data/spec/integration/knife/config_get_profile_spec.rb +0 -113
  813. data/spec/integration/knife/config_get_spec.rb +0 -191
  814. data/spec/integration/knife/config_list_profiles_spec.rb +0 -190
  815. data/spec/integration/knife/config_use_profile_spec.rb +0 -101
  816. data/spec/scripts/ssl-serve.rb +0 -47
  817. data/spec/support/mock/constant.rb +0 -52
  818. data/spec/unit/provider/osx_profile_spec.rb +0 -255
  819. data/spec/unit/provider_resolver_spec.rb +0 -885
  820. data/spec/unit/resource/data/InstallHistory_with_CLT.plist +0 -92
  821. data/spec/unit/resource/data/InstallHistory_without_CLT.plist +0 -38
  822. data/spec/unit/util/powershell/cmdlet_spec.rb +0 -106
@@ -259,7 +259,7 @@ describe Chef::Role do
259
259
  it "should return a Chef::Role object from JSON" do
260
260
  expect(Dir).to receive(:glob).and_return(["#{Chef::Config[:role_path]}/memes", "#{Chef::Config[:role_path]}/memes/lolcat.json"])
261
261
  file_path = File.join(Chef::Config[:role_path], "memes/lolcat.json")
262
- expect(File).to receive(:exists?).with(file_path).exactly(1).times.and_return(true)
262
+ expect(File).to receive(:exist?).with(file_path).exactly(1).times.and_return(true)
263
263
  expect(IO).to receive(:read).with(file_path).and_return('{"name": "ceiling_cat", "json_class": "Chef::Role" }')
264
264
  expect(@role).to be_a_kind_of(Chef::Role)
265
265
  @role.class.from_disk("lolcat")
@@ -268,7 +268,7 @@ describe Chef::Role do
268
268
  it "should return a Chef::Role object from a Ruby DSL" do
269
269
  expect(Dir).to receive(:glob).and_return(["#{Chef::Config[:role_path]}/memes", "#{Chef::Config[:role_path]}/memes/lolcat.rb"])
270
270
  rb_path = File.join(Chef::Config[:role_path], "memes/lolcat.rb")
271
- expect(File).to receive(:exists?).with(rb_path).exactly(1).times.and_return(true)
271
+ expect(File).to receive(:exist?).with(rb_path).exactly(1).times.and_return(true)
272
272
  expect(File).to receive(:readable?).with(rb_path).exactly(1).times.and_return(true)
273
273
  expect(File).to receive(:file?).with(rb_path).exactly(1).times.and_return(true)
274
274
  expect(IO).to receive(:read).with(rb_path).and_return(ROLE_DSL)
@@ -280,8 +280,8 @@ describe Chef::Role do
280
280
  expect(Dir).to receive(:glob).and_return(["#{Chef::Config[:role_path]}/memes", "#{Chef::Config[:role_path]}/memes/lolcat.json", "#{Chef::Config[:role_path]}/memes/lolcat.rb"])
281
281
  js_path = File.join(Chef::Config[:role_path], "memes/lolcat.json")
282
282
  rb_path = File.join(Chef::Config[:role_path], "memes/lolcat.rb")
283
- expect(File).to receive(:exists?).with(js_path).exactly(1).times.and_return(true)
284
- expect(File).not_to receive(:exists?).with(rb_path)
283
+ expect(File).to receive(:exist?).with(js_path).exactly(1).times.and_return(true)
284
+ expect(File).not_to receive(:exist?).with(rb_path)
285
285
  expect(IO).to receive(:read).with(js_path).and_return('{"name": "ceiling_cat", "json_class": "Chef::Role" }')
286
286
  expect(@role).to be_a_kind_of(Chef::Role)
287
287
  @role.class.from_disk("lolcat")
@@ -289,19 +289,19 @@ describe Chef::Role do
289
289
 
290
290
  it "should raise an exception if the file does not exist" do
291
291
  expect(Dir).to receive(:glob).and_return(["#{Chef::Config[:role_path]}/meme.rb"])
292
- expect(File).not_to receive(:exists?)
292
+ expect(File).not_to receive(:exist?)
293
293
  expect { @role.class.from_disk("lolcat") }.to raise_error(Chef::Exceptions::RoleNotFound)
294
294
  end
295
295
 
296
296
  it "should raise an exception if two files exist with the same name" do
297
297
  expect(Dir).to receive(:glob).and_return(["#{Chef::Config[:role_path]}/memes/lolcat.rb", "#{Chef::Config[:role_path]}/lolcat.rb"])
298
- expect(File).not_to receive(:exists?)
298
+ expect(File).not_to receive(:exist?)
299
299
  expect { @role.class.from_disk("lolcat") }.to raise_error(Chef::Exceptions::DuplicateRole)
300
300
  end
301
301
 
302
302
  it "should not raise an exception if two files exist with a similar name" do
303
303
  expect(Dir).to receive(:glob).and_return(["#{Chef::Config[:role_path]}/memes/lolcat.rb", "#{Chef::Config[:role_path]}/super_lolcat.rb"])
304
- expect(File).to receive(:exists?).with("#{Chef::Config[:role_path]}/memes/lolcat.rb").and_return(true)
304
+ expect(File).to receive(:exist?).with("#{Chef::Config[:role_path]}/memes/lolcat.rb").and_return(true)
305
305
  allow_any_instance_of(Chef::Role).to receive(:from_file).with("#{Chef::Config[:role_path]}/memes/lolcat.rb")
306
306
  expect { @role.class.from_disk("lolcat") }.not_to raise_error
307
307
  end
@@ -310,50 +310,52 @@ describe Chef::Role do
310
310
  describe "when loading from disk and role_path is an array" do
311
311
 
312
312
  before(:each) do
313
- Chef::Config[:role_path] = ["/path1", "/path/path2"]
313
+ Chef::Config[:role_path] = ["/path1", "/path1/path2"]
314
314
  end
315
315
 
316
+ let(:root) { windows? ? "C:/path1" : "/path1" }
317
+
316
318
  it "should return a Chef::Role object from JSON" do
317
- expect(Dir).to receive(:glob).with(File.join("/path1", "**", "**")).exactly(1).times.and_return(["/path1/lolcat.json"])
318
- expect(File).to receive(:exists?).with("/path1/lolcat.json").exactly(1).times.and_return(true)
319
- expect(IO).to receive(:read).with("/path1/lolcat.json").and_return('{"name": "ceiling_cat", "json_class": "Chef::Role" }')
319
+ expect(Dir).to receive(:glob).with(File.join(root, "**", "**")).exactly(1).times.and_return(["#{root}/lolcat.json"])
320
+ expect(File).to receive(:exist?).with("#{root}/lolcat.json").exactly(1).times.and_return(true)
321
+ expect(IO).to receive(:read).with("#{root}/lolcat.json").and_return('{"name": "ceiling_cat", "json_class": "Chef::Role" }')
320
322
  expect(@role).to be_a_kind_of(Chef::Role)
321
323
  @role.class.from_disk("lolcat")
322
324
  end
323
325
 
324
326
  it "should return a Chef::Role object from JSON when role is in the second path" do
325
- expect(Dir).to receive(:glob).with(File.join("/path1", "**", "**")).exactly(1).times.and_return([])
326
- expect(Dir).to receive(:glob).with(File.join("/path/path2", "**", "**")).exactly(1).times.and_return(["/path/path2/lolcat.json"])
327
- expect(File).to receive(:exists?).with("/path/path2/lolcat.json").exactly(1).times.and_return(true)
328
- expect(IO).to receive(:read).with("/path/path2/lolcat.json").and_return('{"name": "ceiling_cat", "json_class": "Chef::Role" }')
327
+ expect(Dir).to receive(:glob).with(File.join(root, "**", "**")).exactly(1).times.and_return([])
328
+ expect(Dir).to receive(:glob).with(File.join("#{root}/path2", "**", "**")).exactly(1).times.and_return(["#{root}/path2/lolcat.json"])
329
+ expect(File).to receive(:exist?).with("#{root}/path2/lolcat.json").exactly(1).times.and_return(true)
330
+ expect(IO).to receive(:read).with("#{root}/path2/lolcat.json").and_return('{"name": "ceiling_cat", "json_class": "Chef::Role" }')
329
331
  expect(@role).to be_a_kind_of(Chef::Role)
330
332
  @role.class.from_disk("lolcat")
331
333
  end
332
334
 
333
335
  it "should return a Chef::Role object from a Ruby DSL" do
334
- expect(Dir).to receive(:glob).with(File.join("/path1", "**", "**")).exactly(1).times.and_return(["/path1/lolcat.rb"])
335
- expect(File).to receive(:exists?).with("/path1/lolcat.rb").exactly(1).times.and_return(true)
336
- expect(File).to receive(:readable?).with("/path1/lolcat.rb").and_return(true)
337
- expect(File).to receive(:file?).with("/path1/lolcat.rb").and_return(true)
338
- expect(IO).to receive(:read).with("/path1/lolcat.rb").exactly(1).times.and_return(ROLE_DSL)
336
+ expect(Dir).to receive(:glob).with(File.join(root, "**", "**")).exactly(1).times.and_return(["#{root}/lolcat.rb"])
337
+ expect(File).to receive(:exist?).with("#{root}/lolcat.rb").exactly(1).times.and_return(true)
338
+ expect(File).to receive(:readable?).with("#{root}/lolcat.rb").and_return(true)
339
+ expect(File).to receive(:file?).with("#{root}/lolcat.rb").and_return(true)
340
+ expect(IO).to receive(:read).with("#{root}/lolcat.rb").exactly(1).times.and_return(ROLE_DSL)
339
341
  expect(@role).to be_a_kind_of(Chef::Role)
340
342
  @role.class.from_disk("lolcat")
341
343
  end
342
344
 
343
345
  it "should return a Chef::Role object from a Ruby DSL when role is in the second path" do
344
- expect(Dir).to receive(:glob).with(File.join("/path1", "**", "**")).exactly(1).times.and_return([])
345
- expect(Dir).to receive(:glob).with(File.join("/path/path2", "**", "**")).exactly(1).times.and_return(["/path/path2/lolcat.rb"])
346
- expect(File).to receive(:exists?).with("/path/path2/lolcat.rb").exactly(1).times.and_return(true)
347
- expect(File).to receive(:readable?).with("/path/path2/lolcat.rb").and_return(true)
348
- expect(File).to receive(:file?).with("/path/path2/lolcat.rb").and_return(true)
349
- expect(IO).to receive(:read).with("/path/path2/lolcat.rb").exactly(1).times.and_return(ROLE_DSL)
346
+ expect(Dir).to receive(:glob).with(File.join(root, "**", "**")).exactly(1).times.and_return([])
347
+ expect(Dir).to receive(:glob).with(File.join("#{root}/path2", "**", "**")).exactly(1).times.and_return(["#{root}/path2/lolcat.rb"])
348
+ expect(File).to receive(:exist?).with("#{root}/path2/lolcat.rb").exactly(1).times.and_return(true)
349
+ expect(File).to receive(:readable?).with("#{root}/path2/lolcat.rb").and_return(true)
350
+ expect(File).to receive(:file?).with("#{root}/path2/lolcat.rb").and_return(true)
351
+ expect(IO).to receive(:read).with("#{root}/path2/lolcat.rb").exactly(1).times.and_return(ROLE_DSL)
350
352
  expect(@role).to be_a_kind_of(Chef::Role)
351
353
  @role.class.from_disk("lolcat")
352
354
  end
353
355
 
354
356
  it "should raise an exception if the file does not exist" do
355
- expect(Dir).to receive(:glob).with(File.join("/path1", "**", "**")).exactly(1).times.and_return([])
356
- expect(Dir).to receive(:glob).with(File.join("/path/path2", "**", "**")).exactly(1).times.and_return([])
357
+ expect(Dir).to receive(:glob).with(File.join(root, "**", "**")).exactly(1).times.and_return([])
358
+ expect(Dir).to receive(:glob).with(File.join("#{root}/path2", "**", "**")).exactly(1).times.and_return([])
357
359
  expect { @role.class.from_disk("lolcat") }.to raise_error(Chef::Exceptions::RoleNotFound)
358
360
  end
359
361
 
@@ -175,7 +175,7 @@ describe Chef::RunContext::CookbookCompiler do
175
175
  describe "event dispatch" do
176
176
  let(:recipe) { "dependency1::default" }
177
177
  let(:recipe_path) do
178
- File.expand_path("../../../data/run_context/cookbooks/dependency1/recipes/default.rb", __FILE__)
178
+ File.expand_path("../../data/run_context/cookbooks/dependency1/recipes/default.rb", __dir__)
179
179
  end
180
180
  before do
181
181
  node.run_list(recipe)
@@ -15,10 +15,14 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
 
18
- require_relative "../spec_helper"
18
+ require "spec_helper"
19
19
  require "chef/client"
20
20
 
21
- describe Chef::RunLock do
21
+ # FIXME: these are disabled on MacOS due to timing issues in our anka build cluster
22
+ # these issues should be fixed and the tests should be re-eenabled. If we are getting
23
+ # omnibus test phases on mac tests which are reasonable and not ~3 hours long, then the
24
+ # condition to avoid this testing on macs can be deleted
25
+ describe Chef::RunLock, :not_supported_on_macos do
22
26
 
23
27
  default_cache_path = windows? ? 'C:\chef' : "/var/chef"
24
28
  default_pid_location = windows? ? 'C:\chef\cache\chef-client-running.pid' : "/var/chef/cache/chef-client-running.pid"
@@ -111,8 +111,7 @@ describe Chef::Runner do
111
111
 
112
112
  it "should use the provider specified by the resource (if it has one)" do
113
113
  provider = Chef::Provider::Easy.new(run_context.resource_collection[0], run_context)
114
- # Expect provider to be called twice, because will fall back to old provider lookup
115
- expect(run_context.resource_collection[0]).to receive(:provider).twice.and_return(Chef::Provider::Easy)
114
+ expect(run_context.resource_collection[0]).to receive(:provider).once.and_return(Chef::Provider::Easy)
116
115
  expect(Chef::Provider::Easy).to receive(:new).once.and_return(provider)
117
116
  runner.converge
118
117
  end
@@ -15,7 +15,7 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- require_relative "../spec_helper"
18
+ require "spec_helper"
19
19
  require "chef/scan_access_control"
20
20
 
21
21
  describe Chef::ScanAccessControl do
@@ -59,20 +59,22 @@ describe Chef::ServerAPI do
59
59
  end
60
60
 
61
61
  context "versioned apis" do
62
- class VersionedClassV0
63
- extend Chef::Mixin::VersionedAPI
64
- minimum_api_version 0
65
- end
66
-
67
- class VersionedClassV2
68
- extend Chef::Mixin::VersionedAPI
69
- minimum_api_version 2
70
- end
71
-
72
- class VersionedClassVersions
73
- extend Chef::Mixin::VersionedAPIFactory
74
- add_versioned_api_class VersionedClassV0
75
- add_versioned_api_class VersionedClassV2
62
+ let(:version_class) do
63
+ Class.new do
64
+ extend Chef::Mixin::VersionedAPIFactory
65
+
66
+ version_class_v0 = Class.new do
67
+ extend Chef::Mixin::VersionedAPI
68
+ minimum_api_version 0
69
+ end
70
+ add_versioned_api_class version_class_v0
71
+
72
+ version_class_v2 = Class.new do
73
+ extend Chef::Mixin::VersionedAPI
74
+ minimum_api_version 2
75
+ end
76
+ add_versioned_api_class version_class_v2
77
+ end
76
78
  end
77
79
 
78
80
  before do
@@ -80,7 +82,7 @@ describe Chef::ServerAPI do
80
82
  end
81
83
 
82
84
  let(:versioned_client) do
83
- Chef::ServerAPI.new(url, version_class: VersionedClassVersions)
85
+ Chef::ServerAPI.new(url, version_class: version_class)
84
86
  end
85
87
 
86
88
  it "on protocol negotiation it posts the same message body without doubly-encoding the json string" do
@@ -114,11 +116,36 @@ describe Chef::ServerAPI do
114
116
 
115
117
  it "500 on a get retries and gets correctly " do
116
118
  WebMock.disable_net_connect!
117
- get_body = { bar: "baz" }
118
119
  headers = { "Accept" => "application/json", "Accept-Encoding" => "gzip;q=1.0,deflate;q=0.6,identity;q=0.3", "Host" => "chef.example.com:4000", "X-Chef-Version" => Chef::VERSION, "X-Ops-Sign" => "algorithm=sha1;version=1.1;", "X-Ops-Userid" => "silent-bob" }
119
120
  stub_request(:get, "http://chef.example.com:4000/foo").with(headers: headers).to_return(status: [500, "Internal Server Error"])
120
121
  stub_request(:get, "http://chef.example.com:4000/foo").with(headers: headers).to_return(status: 200, body: "", headers: {})
121
122
  client.get("foo")
122
123
  end
124
+
125
+ it "406 on a post does protocol negotiation" do
126
+ WebMock.disable_net_connect!
127
+ post_body = { bar: "baz" }
128
+ body_406 = '{"error":"invalid-x-ops-server-api-version","message":"Specified version 2 not supported","min_version":0,"max_version":1}'
129
+ stub_request(:post, "http://chef.example.com:4000/foo").with(body: post_body.to_json, headers: { "X-Ops-Server-Api-Version" => "2" }).to_return(status: [406, "Not Acceptable"], body: body_406 )
130
+ stub_request(:post, "http://chef.example.com:4000/foo").with(body: post_body.to_json, headers: { "X-Ops-Server-Api-Version" => "0" }).to_return(status: 200, body: "", headers: {})
131
+ client.post("foo", post_body)
132
+ end
133
+
134
+ it "406 on a put does protocol negotiation" do
135
+ WebMock.disable_net_connect!
136
+ put_body = { bar: "baz" }
137
+ body_406 = '{"error":"invalid-x-ops-server-api-version","message":"Specified version 2 not supported","min_version":0,"max_version":1}'
138
+ stub_request(:put, "http://chef.example.com:4000/foo").with(body: put_body.to_json, headers: { "X-Ops-Server-Api-Version" => "2" }).to_return(status: [406, "Not Acceptable"], body: body_406 )
139
+ stub_request(:put, "http://chef.example.com:4000/foo").with(body: put_body.to_json, headers: { "X-Ops-Server-Api-Version" => "0" }).to_return(status: 200, body: "", headers: {})
140
+ client.put("foo", put_body)
141
+ end
142
+
143
+ it "406 on a get does protocol negotiation" do
144
+ WebMock.disable_net_connect!
145
+ body_406 = '{"error":"invalid-x-ops-server-api-version","message":"Specified version 2 not supported","min_version":0,"max_version":1}'
146
+ stub_request(:get, "http://chef.example.com:4000/foo").with(headers: { "X-Ops-Server-Api-Version" => "2" }).to_return(status: [406, "Not Acceptable"], body: body_406 )
147
+ stub_request(:get, "http://chef.example.com:4000/foo").with(headers: { "X-Ops-Server-Api-Version" => "0" }).to_return(status: 200, body: "", headers: {})
148
+ client.get("foo")
149
+ end
123
150
  end
124
151
  end
@@ -19,14 +19,57 @@
19
19
  require "spec_helper"
20
20
 
21
21
  describe Shell::Extensions do
22
+ let(:test_shell_session) do
23
+ Class.new(Shell::ShellSession) do
24
+ def rebuild_node
25
+ nil
26
+ end
27
+
28
+ def rebuild_collection
29
+ nil
30
+ end
31
+
32
+ def loading
33
+ nil
34
+ end
35
+
36
+ def loading_complete
37
+ nil
38
+ end
39
+ end
40
+ end
41
+
42
+ let(:test_job_manager) do
43
+ Class.new do
44
+ attr_accessor :jobs
45
+ end
46
+ end
47
+
48
+ let(:object_test_harness) do
49
+ Proc.new do
50
+ extend Shell::Extensions::ObjectCoreExtensions
51
+
52
+ def conf=(new_conf)
53
+ @conf = new_conf
54
+ end
55
+
56
+ def conf
57
+ @conf
58
+ end
59
+
60
+ desc "rspecin'"
61
+ def rspec_method; end
62
+ end
63
+ end
64
+
22
65
  describe "extending object for top level methods" do
23
66
 
24
67
  before do
25
- @shell_client = TestableShellSession.instance
68
+ @shell_client = test_shell_session.instance
26
69
  allow(Shell).to receive(:session).and_return(@shell_client)
27
- @job_manager = TestJobManager.new
70
+ @job_manager = test_job_manager.new
28
71
  @root_context = Object.new
29
- @root_context.instance_eval(&ObjectTestHarness)
72
+ @root_context.instance_eval(&object_test_harness)
30
73
  Shell::Extensions.extend_context_object(@root_context)
31
74
  @root_context.conf = double("irbconf")
32
75
  end
@@ -18,32 +18,10 @@
18
18
  require "spec_helper"
19
19
  require "ostruct"
20
20
 
21
- class TestableShellSession < Shell::ShellSession
22
-
23
- def rebuild_node
24
- nil
25
- end
26
-
27
- def rebuild_collection
28
- nil
29
- end
30
-
31
- def loading
32
- nil
33
- end
34
-
35
- def loading_complete
36
- nil
37
- end
38
-
39
- end
40
-
41
21
  describe Shell::ShellSession do
42
-
43
22
  it "is a singleton object" do
44
23
  expect(Shell::ShellSession).to include(Singleton)
45
24
  end
46
-
47
25
  end
48
26
 
49
27
  describe Shell::ClientSession do
@@ -120,20 +98,10 @@ end
120
98
 
121
99
  describe Shell::StandAloneSession do
122
100
  let(:json_attribs) { { "a" => "b" } }
123
- let(:chef_rest) { double("Chef::ServerAPI") }
124
101
  let(:node) { Chef::Node.new }
125
- let(:events) { Chef::EventDispatch::Dispatcher.new }
126
102
  let(:session) { Shell::StandAloneSession.instance }
127
- let(:client) do
128
- double("Chef::Client.new",
129
- run_ohai: true,
130
- load_node: true,
131
- build_node: true,
132
- register: true,
133
- sync_cookbooks: {})
134
- end
135
103
  let(:recipe) { Chef::Recipe.new(nil, nil, run_context) }
136
- let(:run_context) { Chef::RunContext.new(node, {}, events) }
104
+ let(:run_context) { Chef::RunContext.new(node, {}, Chef::EventDispatch::Dispatcher.new) }
137
105
 
138
106
  before do
139
107
  Chef::Config[:shell_config] = { override_runlist: [Chef::RunList::RunListItem.new("shell::override")] }
@@ -172,6 +140,12 @@ describe Shell::StandAloneSession do
172
140
  end
173
141
 
174
142
  it "passes the shell CLI args to the client" do
143
+ client = double("Chef::Client.new",
144
+ run_ohai: true,
145
+ load_node: true,
146
+ build_node: true,
147
+ register: true,
148
+ sync_cookbooks: {})
175
149
  expect(Chef::Client).to receive(:new).with(json_attribs, Chef::Config[:shell_config]).and_return(client)
176
150
  session.send(:rebuild_node)
177
151
  end
@@ -180,68 +154,65 @@ end
180
154
 
181
155
  describe Shell::SoloLegacySession do
182
156
  let(:json_attribs) { { "a" => "b" } }
157
+ let(:node) { Chef::Node.new }
158
+ let(:session) { Shell::SoloLegacySession.instance }
159
+ let(:recipe) { Chef::Recipe.new(nil, nil, run_context) }
160
+ let(:run_context) { Chef::RunContext.new(node, {}, Chef::EventDispatch::Dispatcher.new) }
183
161
 
184
162
  before do
185
163
  Chef::Config[:shell_config] = { override_runlist: [Chef::RunList::RunListItem.new("shell::override")] }
186
- Chef::Config[:shell_solo] = true
187
- @session = Shell::SoloLegacySession.instance
188
- @node = Chef::Node.new
189
- @events = Chef::EventDispatch::Dispatcher.new
190
- @run_context = @session.run_context = Chef::RunContext.new(@node, {}, @events)
191
- @session.node = @node
192
- @recipe = @session.recipe = Chef::Recipe.new(nil, nil, @run_context)
193
- Shell::Extensions.extend_context_recipe(@recipe)
194
- end
195
-
196
- after do
197
- Chef::Config[:shell_solo] = nil
164
+ Chef::Config[:solo_legacy_shell] = true
165
+ session.node = node
166
+ session.json_configuration = json_attribs
167
+ session.run_context = run_context
168
+ session.recipe = recipe
169
+ Shell::Extensions.extend_context_recipe(recipe)
198
170
  end
199
171
 
200
172
  it "returns a collection based on it's compilation object and the extra recipe provided by chef-shell" do
201
- allow(@session).to receive(:node_built?).and_return(true)
173
+ allow(session).to receive(:node_built?).and_return(true)
202
174
  kitteh = Chef::Resource::Cat.new("keyboard")
203
- @recipe.run_context.resource_collection << kitteh
204
- expect(@session.resource_collection.include?(kitteh)).to be true
175
+ recipe.run_context.resource_collection << kitteh
176
+ expect(session.resource_collection.include?(kitteh)).to be true
205
177
  end
206
178
 
207
179
  it "returns definitions from its compilation object" do
208
- expect(@session.definitions).to eq(@run_context.definitions)
180
+ expect(session.definitions).to eq(run_context.definitions)
209
181
  end
210
182
 
211
183
  it "keeps json attribs and passes them to the node for consumption" do
212
- @session.node_attributes = { "besnard_lakes" => "are_the_dark_horse" }
213
- expect(@session.node["besnard_lakes"]).to eq("are_the_dark_horse")
184
+ session.node_attributes = { "besnard_lakes" => "are_the_dark_horse" }
185
+ expect(session.node["besnard_lakes"]).to eq("are_the_dark_horse")
214
186
  # pending "1) keep attribs in an ivar 2) pass them to the node 3) feed them to the node on reset"
215
187
  end
216
188
 
217
189
  it "generates its resource collection from the compiled cookbooks and the ad hoc recipe" do
218
- allow(@session).to receive(:node_built?).and_return(true)
190
+ allow(session).to receive(:node_built?).and_return(true)
219
191
  kitteh_cat = Chef::Resource::Cat.new("kitteh")
220
- @run_context.resource_collection << kitteh_cat
192
+ run_context.resource_collection << kitteh_cat
221
193
  keyboard_cat = Chef::Resource::Cat.new("keyboard_cat")
222
- @recipe.run_context.resource_collection << keyboard_cat
223
- # @session.rebuild_collection
224
- expect(@session.resource_collection.include?(kitteh_cat)).to be true
225
- expect(@session.resource_collection.include?(keyboard_cat)).to be true
194
+ recipe.run_context.resource_collection << keyboard_cat
195
+ # session.rebuild_collection
196
+ expect(session.resource_collection.include?(kitteh_cat)).to be true
197
+ expect(session.resource_collection.include?(keyboard_cat)).to be true
226
198
  end
227
199
 
228
200
  it "runs chef with a resource collection from the compiled cookbooks" do
229
- allow(@session).to receive(:node_built?).and_return(true)
201
+ allow(session).to receive(:node_built?).and_return(true)
230
202
  chef_runner = double("Chef::Runner.new", converge: :converged)
231
- expect(Chef::Runner).to receive(:new).with(an_instance_of(Chef::RunContext)).and_return(chef_runner)
203
+ expect(Chef::Runner).to receive(:new).with(session.recipe.run_context).and_return(chef_runner)
232
204
 
233
- expect(@recipe.run_chef).to eq(:converged)
205
+ expect(recipe.run_chef).to eq(:converged)
234
206
  end
235
207
 
236
208
  it "passes the shell CLI args to the client" do
237
- @client = double("Chef::Client.new",
209
+ client = double("Chef::Client.new",
238
210
  run_ohai: true,
239
211
  load_node: true,
240
212
  build_node: true,
241
213
  register: true,
242
214
  sync_cookbooks: {})
243
- expect(Chef::Client).to receive(:new).with(json_attribs, Chef::Config[:shell_config]).and_return(@client)
244
- @session.json_configuration = json_attribs
245
- @session.send(:rebuild_node)
215
+ expect(Chef::Client).to receive(:new).with(json_attribs, Chef::Config[:shell_config]).and_return(client)
216
+ session.send(:rebuild_node)
246
217
  end
247
218
  end
@@ -18,26 +18,23 @@
18
18
  require "spec_helper"
19
19
  require "ostruct"
20
20
 
21
- ObjectTestHarness = Proc.new do
22
- extend Shell::Extensions::ObjectCoreExtensions
23
-
24
- def conf=(new_conf)
25
- @conf = new_conf
26
- end
27
-
28
- def conf
29
- @conf
30
- end
21
+ describe Shell do
22
+ let(:object_test_harness) do
23
+ Proc.new do
24
+ extend Shell::Extensions::ObjectCoreExtensions
31
25
 
32
- desc "rspecin'"
33
- def rspec_method; end
34
- end
26
+ def conf=(new_conf)
27
+ @conf = new_conf
28
+ end
35
29
 
36
- class TestJobManager
37
- attr_accessor :jobs
38
- end
30
+ def conf
31
+ @conf
32
+ end
39
33
 
40
- describe Shell do
34
+ desc "rspecin'"
35
+ def rspec_method; end
36
+ end
37
+ end
41
38
 
42
39
  before do
43
40
  Shell.irb_conf = {}
@@ -66,7 +63,7 @@ describe Shell do
66
63
 
67
64
  conf = OpenStruct.new
68
65
  conf.main = Object.new
69
- conf.main.instance_eval(&ObjectTestHarness)
66
+ conf.main.instance_eval(&object_test_harness)
70
67
  Shell.irb_conf[:IRB_RC].call(conf)
71
68
  expect(conf.prompt_c).to eq("chef > ")
72
69
  expect(conf.return_format).to eq(" => %s \n")
@@ -107,7 +104,7 @@ describe Shell do
107
104
 
108
105
  before do
109
106
  @chef_object = Object.new
110
- @chef_object.instance_eval(&ObjectTestHarness)
107
+ @chef_object.instance_eval(&object_test_harness)
111
108
  end
112
109
 
113
110
  it "creates help text for methods with descriptions" do
@@ -153,8 +150,8 @@ describe Shell do
153
150
  end
154
151
 
155
152
  it "creates a help banner with the command descriptions" do
156
- expect(@chef_object.help_banner).to match(/^\|\ Command[\s]+\|\ Description[\s]*$/)
157
- expect(@chef_object.help_banner).to match(/^\|\ rspec_method[\s]+\|\ rspecin\'[\s]*$/)
153
+ expect(@chef_object.help_banner).to match(/^\|\ Command\s+\|\ Description\s*$/)
154
+ expect(@chef_object.help_banner).to match(/^\|\ rspec_method\s+\|\ rspecin\'\s*$/)
158
155
  end
159
156
  end
160
157
 
@@ -19,32 +19,33 @@
19
19
  require "spec_helper"
20
20
 
21
21
  describe Chef::TrainTransport do
22
+ let(:transport) { Chef::TrainTransport.new(Chef::Log) }
23
+
22
24
  describe "load_credentials" do
23
- let(:transport) { Chef::TrainTransport.new }
24
25
  let(:good_credentials) { { "switch.cisco.com" => { "user" => "cisco", "password" => "cisco", "enable_password" => "secret" } } }
25
26
 
26
27
  before do
27
- allow(Chef::TrainTransport).to receive(:parse_credentials_file).and_return(good_credentials)
28
+ allow(transport).to receive(:parse_credentials_file).and_return(good_credentials)
28
29
  end
29
30
 
30
31
  it "matches credentials when they exist" do
31
- expect(Chef::TrainTransport.load_credentials("switch.cisco.com")[:user]).to eq("cisco")
32
- expect(Chef::TrainTransport.load_credentials("switch.cisco.com")[:password]).to eq("cisco")
33
- expect(Chef::TrainTransport.load_credentials("switch.cisco.com")[:enable_password]).to eq("secret")
32
+ expect(transport.load_credentials("switch.cisco.com")[:user]).to eq("cisco")
33
+ expect(transport.load_credentials("switch.cisco.com")[:password]).to eq("cisco")
34
+ expect(transport.load_credentials("switch.cisco.com")[:enable_password]).to eq("secret")
34
35
  end
35
36
 
36
37
  it "returns nil if there is no match" do
37
- expect(Chef::TrainTransport.load_credentials("router.unicorns.com")).to be_nil
38
+ expect(transport.load_credentials("router.unicorns.com")).to be_nil
38
39
  end
39
40
 
40
41
  # [foo.example.org] => {"foo"=>{"example"=>{"org"=>{}}}}
41
42
  # ['foo.example.org'] => {"foo.example.org"=>{}}
42
43
  it "warns if the host has been split by toml" do
43
- allow(Chef::TrainTransport).to receive(:credentials_file_path).and_return("/Users/scotthourglass/.chef/credentials")
44
- allow(Chef::TrainTransport).to receive(:parse_credentials_file).and_return({ "foo" => { "example" => { "org" => {} } } })
44
+ allow(transport).to receive(:credentials_file_path).and_return("/Users/scotthourglass/.chef/credentials")
45
+ allow(transport).to receive(:parse_credentials_file).and_return({ "foo" => { "example" => { "org" => {} } } })
45
46
  expect(Chef::Log).to receive(:warn).with(/as a Hash/)
46
47
  expect(Chef::Log).to receive(:warn).with(/Hostnames must be surrounded by single quotes/)
47
- expect(Chef::TrainTransport.load_credentials("foo.example.org")).to be_nil
48
+ expect(transport.load_credentials("foo.example.org")).to be_nil
48
49
  end
49
50
  end
50
51
 
@@ -60,25 +61,25 @@ describe Chef::TrainTransport do
60
61
 
61
62
  it "returns the path if it exists" do
62
63
  allow(File).to receive(:exist?).with(config_cred_file_path).and_return(true)
63
- expect(Chef::TrainTransport.credentials_file_path).to eq(config_cred_file_path)
64
+ expect(transport.credentials_file_path).to eq(config_cred_file_path)
64
65
  end
65
66
 
66
67
  it "raises an error if it does not exist" do
67
68
  allow(File).to receive(:exist?).and_return(false)
68
- expect { Chef::TrainTransport.credentials_file_path }.to raise_error(ArgumentError, /does not exist/)
69
+ expect { transport.credentials_file_path }.to raise_error(ArgumentError, /does not exist/)
69
70
  end
70
71
  end
71
72
 
72
73
  it "raises an error if the default creds files do not exist" do
73
74
  allow(File).to receive(:exist?).and_return(false)
74
- expect { Chef::TrainTransport.credentials_file_path }.to raise_error(ArgumentError, /does not exist/)
75
+ expect { transport.credentials_file_path }.to raise_error(ArgumentError, /does not exist/)
75
76
  end
76
77
 
77
78
  it "returns the path to the default config file if it exists" do
78
79
  tm_config = double("Config Context", host: "foo.example.org", credentials_file: nil)
79
80
  allow(Chef::Config).to receive(:target_mode).and_return(tm_config)
80
81
  allow(File).to receive(:exist?).with(host_cred_file_path).and_return(true)
81
- expect(Chef::TrainTransport.credentials_file_path).to eq(host_cred_file_path)
82
+ expect(transport.credentials_file_path).to eq(host_cred_file_path)
82
83
  end
83
84
  end
84
85
  end
@@ -21,7 +21,7 @@ require "tmpdir"
21
21
 
22
22
  describe Chef::Util::Backup do
23
23
 
24
- let (:tempfile) do
24
+ let(:tempfile) do
25
25
  Tempfile.new("chef-util-backup-spec-test")
26
26
  end
27
27