chef 16.11.7-universal-mingw32 → 17.2.29-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 (733) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +9 -21
  3. data/README.md +1 -1
  4. data/Rakefile +13 -2
  5. data/chef-universal-mingw32.gemspec +1 -1
  6. data/chef.gemspec +11 -24
  7. data/distro/ruby_bin_folder/AMD64/Chef.PowerShell.Wrapper.dll +0 -0
  8. data/distro/ruby_bin_folder/AMD64/Chef.PowerShell.dll +0 -0
  9. data/distro/ruby_bin_folder/AMD64/Newtonsoft.Json.dll +0 -0
  10. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.PowerShell.Wrapper.Core.dll +0 -0
  11. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.dll +0 -0
  12. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.pdb +0 -0
  13. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.NETCore.App.deps.json +153 -149
  14. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Diagnostics.dll +0 -0
  15. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Management.dll +0 -0
  16. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Utility.dll +0 -0
  17. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.ConsoleHost.dll +0 -0
  18. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.CoreCLR.Eventing.dll +0 -0
  19. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.MarkdownRender.dll +0 -0
  20. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Security.dll +0 -0
  21. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.WSMan.Management.dll +0 -0
  22. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.WSMan.Runtime.dll +0 -0
  23. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Newtonsoft.Json.dll +0 -0
  24. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.EventLog.Messages.dll +0 -0
  25. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.EventLog.dll +0 -0
  26. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Drawing.Common.dll +0 -0
  27. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Management.Automation.dll +0 -0
  28. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Pkcs.dll +0 -0
  29. data/distro/ruby_bin_folder/x86/Chef.PowerShell.dll +0 -0
  30. data/distro/ruby_bin_folder/x86/Chef.Powershell.Wrapper.dll +0 -0
  31. data/distro/ruby_bin_folder/x86/Newtonsoft.Json.dll +0 -0
  32. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.PowerShell.Wrapper.Core.dll +0 -0
  33. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.dll +0 -0
  34. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.pdb +0 -0
  35. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.NETCore.App.deps.json +153 -149
  36. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Diagnostics.dll +0 -0
  37. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Management.dll +0 -0
  38. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Utility.dll +0 -0
  39. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.ConsoleHost.dll +0 -0
  40. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.CoreCLR.Eventing.dll +0 -0
  41. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.MarkdownRender.dll +0 -0
  42. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Security.dll +0 -0
  43. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.WSMan.Management.dll +0 -0
  44. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.WSMan.Runtime.dll +0 -0
  45. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Newtonsoft.Json.dll +0 -0
  46. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.EventLog.Messages.dll +0 -0
  47. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.EventLog.dll +0 -0
  48. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Drawing.Common.dll +0 -0
  49. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Management.Automation.dll +0 -0
  50. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Pkcs.dll +0 -0
  51. data/lib/chef/action_collection.rb +6 -26
  52. data/lib/chef/application.rb +1 -1
  53. data/lib/chef/application/base.rb +16 -1
  54. data/lib/chef/applications.rb +0 -1
  55. data/lib/chef/chef_fs/command_line.rb +5 -2
  56. data/lib/chef/chef_fs/file_pattern.rb +2 -2
  57. data/lib/chef/chef_fs/file_system.rb +9 -10
  58. data/lib/chef/client.rb +8 -2
  59. data/lib/chef/compliance/default_attributes.rb +5 -4
  60. data/lib/chef/compliance/fetcher/automate.rb +0 -7
  61. data/lib/chef/compliance/reporter/automate.rb +17 -7
  62. data/lib/chef/compliance/reporter/chef_server_automate.rb +11 -6
  63. data/lib/chef/compliance/reporter/cli.rb +77 -0
  64. data/lib/chef/compliance/reporter/compliance_enforcer.rb +4 -0
  65. data/lib/chef/compliance/reporter/json_file.rb +8 -1
  66. data/lib/chef/compliance/runner.rb +65 -27
  67. data/lib/chef/cookbook/cookbook_version_loader.rb +3 -3
  68. data/lib/chef/cookbook/gem_installer.rb +5 -1
  69. data/lib/chef/cookbook/synchronizer.rb +3 -5
  70. data/lib/chef/cookbook_loader.rb +2 -4
  71. data/lib/chef/cookbook_uploader.rb +0 -1
  72. data/lib/chef/cookbook_version.rb +26 -4
  73. data/lib/chef/data_bag.rb +2 -1
  74. data/lib/chef/data_bag_item.rb +13 -3
  75. data/lib/chef/data_collector.rb +0 -1
  76. data/lib/chef/data_collector/run_end_message.rb +1 -1
  77. data/lib/chef/delayed_evaluator.rb +4 -0
  78. data/lib/chef/deprecated.rb +8 -0
  79. data/lib/chef/dsl/chef_vault.rb +6 -6
  80. data/lib/chef/dsl/declare_resource.rb +5 -10
  81. data/lib/chef/dsl/reboot_pending.rb +1 -2
  82. data/lib/chef/event_dispatch/base.rb +2 -1
  83. data/lib/chef/exceptions.rb +3 -0
  84. data/lib/chef/formatters/doc.rb +2 -1
  85. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +20 -22
  86. data/lib/chef/group.rb +75 -0
  87. data/lib/chef/handler.rb +46 -8
  88. data/lib/chef/handler/slow_report.rb +66 -0
  89. data/lib/chef/mixin/get_source_from_package.rb +1 -1
  90. data/lib/chef/node.rb +21 -20
  91. data/lib/chef/node/attribute.rb +6 -4
  92. data/lib/chef/node/immutable_collections.rb +13 -0
  93. data/lib/chef/node/mixin/deep_merge_cache.rb +11 -7
  94. data/lib/chef/org.rb +3 -2
  95. data/lib/chef/property.rb +18 -0
  96. data/lib/chef/provider.rb +1 -1
  97. data/lib/chef/provider/cron.rb +1 -1
  98. data/lib/chef/provider/directory.rb +6 -6
  99. data/lib/chef/provider/execute.rb +2 -1
  100. data/lib/chef/provider/file.rb +2 -2
  101. data/lib/chef/provider/git.rb +5 -7
  102. data/lib/chef/provider/group/groupadd.rb +3 -3
  103. data/lib/chef/provider/group/groupmod.rb +3 -3
  104. data/lib/chef/provider/group/pw.rb +3 -3
  105. data/lib/chef/provider/ifconfig.rb +2 -2
  106. data/lib/chef/provider/link.rb +3 -3
  107. data/lib/chef/provider/mount.rb +12 -7
  108. data/lib/chef/provider/mount/aix.rb +3 -3
  109. data/lib/chef/provider/mount/mount.rb +5 -5
  110. data/lib/chef/provider/mount/windows.rb +1 -1
  111. data/lib/chef/provider/package.rb +17 -21
  112. data/lib/chef/provider/package/apt.rb +27 -1
  113. data/lib/chef/provider/package/deb.rb +3 -3
  114. data/lib/chef/provider/package/dnf/dnf_helper.py +12 -11
  115. data/lib/chef/provider/package/dnf/python_helper.rb +9 -8
  116. data/lib/chef/provider/package/portage.rb +2 -2
  117. data/lib/chef/provider/package/rubygems.rb +11 -17
  118. data/lib/chef/provider/package/windows.rb +2 -4
  119. data/lib/chef/provider/package/yum.rb +1 -4
  120. data/lib/chef/provider/package/yum/python_helper.rb +15 -10
  121. data/lib/chef/provider/package/yum/yum_helper.py +47 -63
  122. data/lib/chef/provider/registry_key.rb +1 -1
  123. data/lib/chef/provider/route.rb +2 -2
  124. data/lib/chef/provider/service.rb +6 -6
  125. data/lib/chef/provider/service/aixinit.rb +1 -1
  126. data/lib/chef/provider/service/debian.rb +1 -1
  127. data/lib/chef/provider/service/freebsd.rb +15 -21
  128. data/lib/chef/provider/service/macosx.rb +7 -7
  129. data/lib/chef/provider/service/systemd.rb +43 -14
  130. data/lib/chef/provider/service/upstart.rb +2 -13
  131. data/lib/chef/provider/service/windows.rb +12 -12
  132. data/lib/chef/provider/subversion.rb +10 -12
  133. data/lib/chef/provider/support/zypper_repo.erb +4 -2
  134. data/lib/chef/provider/systemd_unit.rb +36 -10
  135. data/lib/chef/provider/template/content.rb +3 -7
  136. data/lib/chef/provider/user.rb +2 -2
  137. data/lib/chef/provider/user/dscl.rb +1 -1
  138. data/lib/chef/provider/user/mac.rb +17 -20
  139. data/lib/chef/provider/user/pw.rb +1 -1
  140. data/lib/chef/provider/user/windows.rb +1 -1
  141. data/lib/chef/provider/windows_script.rb +1 -1
  142. data/lib/chef/provider/zypper_repository.rb +28 -32
  143. data/lib/chef/providers.rb +0 -1
  144. data/lib/chef/resource.rb +6 -7
  145. data/lib/chef/resource/alternatives.rb +6 -6
  146. data/lib/chef/resource/apt_package.rb +1 -1
  147. data/lib/chef/resource/apt_preference.rb +2 -2
  148. data/lib/chef/resource/apt_repository.rb +6 -6
  149. data/lib/chef/resource/apt_update.rb +5 -4
  150. data/lib/chef/resource/archive_file.rb +2 -3
  151. data/lib/chef/resource/breakpoint.rb +1 -1
  152. data/lib/chef/resource/build_essential.rb +2 -6
  153. data/lib/chef/resource/chef_client_config.rb +3 -3
  154. data/lib/chef/resource/chef_client_cron.rb +4 -4
  155. data/lib/chef/resource/chef_client_launchd.rb +6 -6
  156. data/lib/chef/resource/chef_client_scheduled_task.rb +15 -15
  157. data/lib/chef/resource/chef_client_systemd_timer.rb +4 -4
  158. data/lib/chef/resource/chef_handler.rb +3 -7
  159. data/lib/chef/resource/chef_sleep.rb +1 -1
  160. data/lib/chef/resource/chef_vault_secret.rb +3 -8
  161. data/lib/chef/resource/chocolatey_config.rb +2 -6
  162. data/lib/chef/resource/chocolatey_feature.rb +2 -6
  163. data/lib/chef/resource/chocolatey_source.rb +4 -10
  164. data/lib/chef/resource/cron/_cron_shared.rb +2 -2
  165. data/lib/chef/resource/cron/cron_d.rb +4 -6
  166. data/lib/chef/resource/cron_access.rb +2 -4
  167. data/lib/chef/resource/dmg_package.rb +6 -10
  168. data/lib/chef/resource/dpkg_package.rb +1 -1
  169. data/lib/chef/resource/execute.rb +8 -3
  170. data/lib/chef/resource/file.rb +1 -1
  171. data/lib/chef/resource/group.rb +6 -6
  172. data/lib/chef/resource/homebrew_cask.rb +17 -10
  173. data/lib/chef/resource/homebrew_package.rb +1 -1
  174. data/lib/chef/resource/homebrew_tap.rb +4 -7
  175. data/lib/chef/resource/homebrew_update.rb +2 -2
  176. data/lib/chef/resource/hostname.rb +68 -22
  177. data/lib/chef/resource/http_request.rb +1 -1
  178. data/lib/chef/resource/inspec_waiver_file_entry.rb +156 -0
  179. data/lib/chef/resource/kernel_module.rb +6 -17
  180. data/lib/chef/resource/locale.rb +2 -3
  181. data/lib/chef/resource/lwrp_base.rb +19 -0
  182. data/lib/chef/resource/macos_userdefaults.rb +10 -14
  183. data/lib/chef/resource/mdadm.rb +53 -7
  184. data/lib/chef/resource/mount.rb +2 -1
  185. data/lib/chef/resource/ohai_hint.rb +2 -6
  186. data/lib/chef/resource/openbsd_package.rb +17 -0
  187. data/lib/chef/resource/openssl_dhparam.rb +1 -2
  188. data/lib/chef/resource/openssl_ec_private_key.rb +3 -5
  189. data/lib/chef/resource/openssl_ec_public_key.rb +1 -3
  190. data/lib/chef/resource/openssl_rsa_private_key.rb +2 -4
  191. data/lib/chef/resource/openssl_rsa_public_key.rb +1 -3
  192. data/lib/chef/resource/openssl_x509_certificate.rb +3 -6
  193. data/lib/chef/resource/openssl_x509_crl.rb +1 -3
  194. data/lib/chef/resource/openssl_x509_request.rb +1 -3
  195. data/lib/chef/resource/osx_profile.rb +3 -3
  196. data/lib/chef/resource/plist.rb +8 -8
  197. data/lib/chef/resource/powershell_package_source.rb +2 -4
  198. data/lib/chef/resource/powershell_script.rb +1 -1
  199. data/lib/chef/resource/reboot.rb +38 -9
  200. data/lib/chef/resource/remote_directory.rb +2 -2
  201. data/lib/chef/resource/remote_file.rb +3 -3
  202. data/lib/chef/resource/rhsm_errata.rb +16 -3
  203. data/lib/chef/resource/rhsm_errata_level.rb +11 -6
  204. data/lib/chef/resource/rhsm_register.rb +12 -6
  205. data/lib/chef/resource/rhsm_repo.rb +17 -6
  206. data/lib/chef/resource/rhsm_subscription.rb +2 -6
  207. data/lib/chef/resource/scm/git.rb +1 -1
  208. data/lib/chef/resource/ssh_known_hosts_entry.rb +4 -7
  209. data/lib/chef/resource/sudo.rb +8 -12
  210. data/lib/chef/resource/swap_file.rb +2 -6
  211. data/lib/chef/resource/sysctl.rb +2 -6
  212. data/lib/chef/resource/systemd_unit.rb +2 -2
  213. data/lib/chef/resource/template.rb +1 -1
  214. data/lib/chef/resource/timezone.rb +1 -3
  215. data/lib/chef/resource/user/mac_user.rb +1 -1
  216. data/lib/chef/resource/user_ulimit.rb +2 -2
  217. data/lib/chef/resource/windows_ad_join.rb +2 -6
  218. data/lib/chef/resource/windows_audit_policy.rb +2 -2
  219. data/lib/chef/resource/windows_auto_run.rb +2 -5
  220. data/lib/chef/resource/windows_certificate.rb +207 -73
  221. data/lib/chef/resource/windows_dfs_folder.rb +2 -6
  222. data/lib/chef/resource/windows_dfs_namespace.rb +2 -6
  223. data/lib/chef/resource/windows_dfs_server.rb +1 -3
  224. data/lib/chef/resource/windows_dns_record.rb +2 -6
  225. data/lib/chef/resource/windows_dns_zone.rb +2 -6
  226. data/lib/chef/resource/windows_env.rb +6 -5
  227. data/lib/chef/resource/windows_feature.rb +3 -9
  228. data/lib/chef/resource/windows_feature_dism.rb +3 -9
  229. data/lib/chef/resource/windows_feature_powershell.rb +3 -3
  230. data/lib/chef/resource/windows_firewall_profile.rb +4 -4
  231. data/lib/chef/resource/windows_firewall_rule.rb +20 -9
  232. data/lib/chef/resource/windows_font.rb +3 -5
  233. data/lib/chef/resource/windows_pagefile.rb +104 -69
  234. data/lib/chef/resource/windows_path.rb +4 -4
  235. data/lib/chef/resource/windows_printer.rb +8 -23
  236. data/lib/chef/resource/windows_printer_port.rb +49 -66
  237. data/lib/chef/resource/windows_security_policy.rb +56 -40
  238. data/lib/chef/resource/windows_share.rb +14 -21
  239. data/lib/chef/resource/windows_shortcut.rb +4 -6
  240. data/lib/chef/resource/windows_task.rb +19 -7
  241. data/lib/chef/resource/windows_uac.rb +3 -5
  242. data/lib/chef/resource/windows_user_privilege.rb +4 -4
  243. data/lib/chef/resource/windows_workgroup.rb +3 -4
  244. data/lib/chef/resource/yum_package.rb +10 -10
  245. data/lib/chef/resource/zypper_package.rb +4 -4
  246. data/lib/chef/resource/zypper_repository.rb +28 -8
  247. data/lib/chef/resource_builder.rb +8 -2
  248. data/lib/chef/resource_reporter.rb +0 -1
  249. data/lib/chef/resources.rb +1 -1
  250. data/lib/chef/run_lock.rb +1 -1
  251. data/lib/chef/runner.rb +1 -1
  252. data/lib/chef/shell/ext.rb +3 -3
  253. data/lib/chef/user.rb +0 -1
  254. data/lib/chef/user_v1.rb +3 -4
  255. data/lib/chef/util/dsc/configuration_generator.rb +1 -0
  256. data/lib/chef/util/dsc/local_configuration_manager.rb +1 -1
  257. data/lib/chef/version.rb +1 -1
  258. data/lib/chef/win32/api.rb +9 -2
  259. data/lib/chef/win32/registry.rb +4 -2
  260. data/spec/data/cookbooks/openldap/libraries/openldap.rb +1 -1
  261. data/spec/data/lwrp/resources/bar.rb +2 -0
  262. data/spec/data/lwrp/resources/buck_passer.rb +1 -0
  263. data/spec/data/lwrp/resources/buck_passer_2.rb +1 -0
  264. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +1 -0
  265. data/spec/data/lwrp/resources/foo.rb +2 -0
  266. data/spec/data/lwrp/resources/inline_compiler.rb +1 -0
  267. data/spec/data/lwrp/resources/monkey_name_printer.rb +1 -0
  268. data/spec/data/lwrp/resources/paint_drying_watcher.rb +1 -0
  269. data/spec/data/lwrp/resources/thumb_twiddler.rb +1 -0
  270. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +2 -0
  271. data/spec/data/lwrp_const_scoping/resources/conflict.rb +1 -0
  272. data/spec/data/lwrp_override/resources/foo.rb +1 -0
  273. data/spec/data/rubygems.org/nonexistent_gem-info +1 -0
  274. data/spec/data/rubygems.org/sexp_processor-info +49 -0
  275. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  276. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  277. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  278. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  279. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  280. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +2 -0
  281. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  282. data/spec/data/run_context/cookbooks/test/resources/resource.rb +2 -0
  283. data/spec/functional/dsl/registry_helper_spec.rb +1 -1
  284. data/spec/functional/resource/aixinit_service_spec.rb +7 -7
  285. data/spec/functional/resource/apt_package_spec.rb +1 -1
  286. data/spec/functional/resource/chocolatey_package_spec.rb +13 -0
  287. data/spec/functional/resource/cron_spec.rb +1 -1
  288. data/spec/functional/resource/dnf_package_spec.rb +857 -534
  289. data/spec/functional/resource/group_spec.rb +1 -1
  290. data/spec/functional/resource/link_spec.rb +1 -1
  291. data/spec/functional/resource/registry_spec.rb +8 -8
  292. data/spec/functional/resource/remote_file_spec.rb +1 -1
  293. data/spec/functional/resource/user/mac_user_spec.rb +2 -2
  294. data/spec/functional/resource/windows_certificate_spec.rb +92 -35
  295. data/spec/functional/resource/windows_env_spec.rb +2 -2
  296. data/spec/functional/resource/windows_hostname_spec.rb +91 -0
  297. data/spec/functional/resource/windows_pagefile_spec.rb +98 -0
  298. data/spec/functional/resource/yum_package_spec.rb +495 -428
  299. data/spec/functional/version_spec.rb +1 -1
  300. data/spec/functional/win32/registry_spec.rb +1 -1
  301. data/spec/integration/client/client_spec.rb +5 -22
  302. data/spec/integration/client/exit_code_spec.rb +1 -1
  303. data/spec/integration/client/ipv6_spec.rb +1 -1
  304. data/spec/integration/compliance/compliance_spec.rb +1 -1
  305. data/spec/integration/ohai/ohai_spec.rb +7 -6
  306. data/spec/integration/recipes/accumulator_spec.rb +13 -1
  307. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +5 -1
  308. data/spec/integration/recipes/lwrp_spec.rb +3 -1
  309. data/spec/integration/recipes/notifies_spec.rb +15 -1
  310. data/spec/integration/recipes/notifying_block_spec.rb +2 -1
  311. data/spec/integration/recipes/recipe_dsl_spec.rb +9 -9
  312. data/spec/integration/recipes/unified_mode_spec.rb +71 -1
  313. data/spec/integration/recipes/use_partial_spec.rb +4 -1
  314. data/spec/spec_helper.rb +14 -13
  315. data/spec/support/chef_helpers.rb +1 -17
  316. data/spec/support/lib/chef/resource/with_state.rb +0 -1
  317. data/spec/support/lib/chef/resource/zen_follower.rb +0 -1
  318. data/spec/support/lib/chef/resource/zen_master.rb +0 -1
  319. data/spec/support/matchers/leak.rb +7 -9
  320. data/spec/support/platform_helpers.rb +5 -8
  321. data/spec/support/shared/functional/execute_resource.rb +1 -1
  322. data/spec/support/shared/integration/integration_helper.rb +0 -1
  323. data/spec/support/shared/unit/provider/file.rb +15 -1
  324. data/spec/support/shared/unit/script_resource.rb +2 -2
  325. data/spec/unit/application/solo_spec.rb +2 -2
  326. data/spec/unit/chef_fs/diff_spec.rb +1 -1
  327. data/spec/unit/chef_fs/file_system/repository/directory_spec.rb +1 -1
  328. data/spec/unit/chef_fs/file_system_spec.rb +1 -1
  329. data/spec/unit/compliance/fetcher/automate_spec.rb +0 -16
  330. data/spec/unit/compliance/reporter/automate_spec.rb +26 -2
  331. data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +20 -0
  332. data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +1 -0
  333. data/spec/unit/compliance/runner_spec.rb +31 -5
  334. data/spec/unit/cookbook_version_spec.rb +52 -0
  335. data/spec/unit/data_bag_item_spec.rb +3 -8
  336. data/spec/unit/data_bag_spec.rb +1 -1
  337. data/spec/unit/data_collector_spec.rb +47 -1
  338. data/spec/unit/dsl/reboot_pending_spec.rb +2 -2
  339. data/spec/unit/dsl/registry_helper_spec.rb +1 -1
  340. data/spec/unit/handler_spec.rb +8 -2
  341. data/spec/unit/lwrp_spec.rb +1 -1
  342. data/spec/unit/mixin/params_validate_spec.rb +4 -3
  343. data/spec/unit/node/attribute_spec.rb +1 -1
  344. data/spec/unit/node_spec.rb +78 -0
  345. data/spec/unit/org_group_spec.rb +45 -0
  346. data/spec/unit/property_spec.rb +23 -22
  347. data/spec/unit/provider/cron_spec.rb +1 -1
  348. data/spec/unit/provider/group/gpasswd_spec.rb +2 -2
  349. data/spec/unit/provider/group/groupmod_spec.rb +2 -2
  350. data/spec/unit/provider/group/pw_spec.rb +2 -2
  351. data/spec/unit/provider/group_spec.rb +1 -1
  352. data/spec/unit/provider/link_spec.rb +1 -1
  353. data/spec/unit/provider/mount/mount_spec.rb +51 -0
  354. data/spec/unit/provider/package/apt_spec.rb +84 -18
  355. data/spec/unit/provider/package/deb_spec.rb +3 -3
  356. data/spec/unit/provider/package/dnf/python_helper_spec.rb +1 -0
  357. data/spec/unit/provider/package/rubygems_spec.rb +21 -33
  358. data/spec/unit/provider/package/yum/python_helper_spec.rb +1 -0
  359. data/spec/unit/provider/service/arch_service_spec.rb +1 -0
  360. data/spec/unit/provider/service/debian_service_spec.rb +1 -0
  361. data/spec/unit/provider/service/macosx_spec.rb +5 -5
  362. data/spec/unit/provider/service/systemd_service_spec.rb +138 -23
  363. data/spec/unit/provider/service/upstart_service_spec.rb +0 -29
  364. data/spec/unit/provider/service/windows_spec.rb +2 -2
  365. data/spec/unit/provider/subversion_spec.rb +2 -2
  366. data/spec/unit/provider/systemd_unit_spec.rb +79 -60
  367. data/spec/unit/provider/zypper_repository_spec.rb +5 -12
  368. data/spec/unit/provider_spec.rb +0 -8
  369. data/spec/unit/resource/inspec_waiver_file_entry_spec.rb +80 -0
  370. data/spec/unit/resource/powershell_script_spec.rb +2 -2
  371. data/spec/unit/resource/windows_firewall_rule_spec.rb +12 -7
  372. data/spec/unit/resource/windows_pagefile_spec.rb +4 -9
  373. data/spec/unit/resource/windows_task_spec.rb +1 -1
  374. data/spec/unit/resource/zypper_repository_spec.rb +1 -1
  375. data/spec/unit/user_spec.rb +1 -1
  376. data/spec/unit/user_v1_spec.rb +6 -4
  377. data/tasks/rspec.rb +9 -6
  378. metadata +26 -528
  379. data/bin/knife +0 -24
  380. data/lib/chef/application/knife.rb +0 -234
  381. data/lib/chef/application/windows_service.rb +0 -338
  382. data/lib/chef/application/windows_service_manager.rb +0 -205
  383. data/lib/chef/chef_fs/knife.rb +0 -160
  384. data/lib/chef/chef_fs/parallelizer.rb +0 -102
  385. data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +0 -35
  386. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +0 -278
  387. data/lib/chef/cookbook_site_streaming_uploader.rb +0 -244
  388. data/lib/chef/knife.rb +0 -665
  389. data/lib/chef/knife/acl_add.rb +0 -57
  390. data/lib/chef/knife/acl_base.rb +0 -183
  391. data/lib/chef/knife/acl_bulk_add.rb +0 -78
  392. data/lib/chef/knife/acl_bulk_remove.rb +0 -83
  393. data/lib/chef/knife/acl_remove.rb +0 -62
  394. data/lib/chef/knife/acl_show.rb +0 -56
  395. data/lib/chef/knife/bootstrap.rb +0 -1192
  396. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +0 -162
  397. data/lib/chef/knife/bootstrap/client_builder.rb +0 -212
  398. data/lib/chef/knife/bootstrap/templates/README.md +0 -11
  399. data/lib/chef/knife/bootstrap/templates/chef-full.erb +0 -242
  400. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +0 -278
  401. data/lib/chef/knife/bootstrap/train_connector.rb +0 -336
  402. data/lib/chef/knife/client_bulk_delete.rb +0 -104
  403. data/lib/chef/knife/client_create.rb +0 -101
  404. data/lib/chef/knife/client_delete.rb +0 -62
  405. data/lib/chef/knife/client_edit.rb +0 -52
  406. data/lib/chef/knife/client_key_create.rb +0 -73
  407. data/lib/chef/knife/client_key_delete.rb +0 -80
  408. data/lib/chef/knife/client_key_edit.rb +0 -83
  409. data/lib/chef/knife/client_key_list.rb +0 -73
  410. data/lib/chef/knife/client_key_show.rb +0 -80
  411. data/lib/chef/knife/client_list.rb +0 -41
  412. data/lib/chef/knife/client_reregister.rb +0 -58
  413. data/lib/chef/knife/client_show.rb +0 -48
  414. data/lib/chef/knife/config_get.rb +0 -39
  415. data/lib/chef/knife/config_get_profile.rb +0 -37
  416. data/lib/chef/knife/config_list.rb +0 -139
  417. data/lib/chef/knife/config_list_profiles.rb +0 -37
  418. data/lib/chef/knife/config_show.rb +0 -127
  419. data/lib/chef/knife/config_use.rb +0 -61
  420. data/lib/chef/knife/config_use_profile.rb +0 -47
  421. data/lib/chef/knife/configure.rb +0 -150
  422. data/lib/chef/knife/configure_client.rb +0 -48
  423. data/lib/chef/knife/cookbook_bulk_delete.rb +0 -71
  424. data/lib/chef/knife/cookbook_delete.rb +0 -151
  425. data/lib/chef/knife/cookbook_download.rb +0 -142
  426. data/lib/chef/knife/cookbook_list.rb +0 -47
  427. data/lib/chef/knife/cookbook_metadata.rb +0 -106
  428. data/lib/chef/knife/cookbook_metadata_from_file.rb +0 -49
  429. data/lib/chef/knife/cookbook_show.rb +0 -98
  430. data/lib/chef/knife/cookbook_upload.rb +0 -292
  431. data/lib/chef/knife/core/bootstrap_context.rb +0 -264
  432. data/lib/chef/knife/core/cookbook_scm_repo.rb +0 -159
  433. data/lib/chef/knife/core/formatting_options.rb +0 -49
  434. data/lib/chef/knife/core/gem_glob_loader.rb +0 -138
  435. data/lib/chef/knife/core/generic_presenter.rb +0 -232
  436. data/lib/chef/knife/core/hashed_command_loader.rb +0 -100
  437. data/lib/chef/knife/core/node_editor.rb +0 -130
  438. data/lib/chef/knife/core/node_presenter.rb +0 -133
  439. data/lib/chef/knife/core/object_loader.rb +0 -115
  440. data/lib/chef/knife/core/status_presenter.rb +0 -147
  441. data/lib/chef/knife/core/subcommand_loader.rb +0 -203
  442. data/lib/chef/knife/core/text_formatter.rb +0 -85
  443. data/lib/chef/knife/core/ui.rb +0 -338
  444. data/lib/chef/knife/core/windows_bootstrap_context.rb +0 -406
  445. data/lib/chef/knife/data_bag_create.rb +0 -81
  446. data/lib/chef/knife/data_bag_delete.rb +0 -49
  447. data/lib/chef/knife/data_bag_edit.rb +0 -74
  448. data/lib/chef/knife/data_bag_from_file.rb +0 -113
  449. data/lib/chef/knife/data_bag_list.rb +0 -42
  450. data/lib/chef/knife/data_bag_secret_options.rb +0 -122
  451. data/lib/chef/knife/data_bag_show.rb +0 -69
  452. data/lib/chef/knife/delete.rb +0 -125
  453. data/lib/chef/knife/deps.rb +0 -156
  454. data/lib/chef/knife/diff.rb +0 -83
  455. data/lib/chef/knife/download.rb +0 -84
  456. data/lib/chef/knife/edit.rb +0 -88
  457. data/lib/chef/knife/environment_compare.rb +0 -128
  458. data/lib/chef/knife/environment_create.rb +0 -52
  459. data/lib/chef/knife/environment_delete.rb +0 -44
  460. data/lib/chef/knife/environment_edit.rb +0 -44
  461. data/lib/chef/knife/environment_from_file.rb +0 -84
  462. data/lib/chef/knife/environment_list.rb +0 -41
  463. data/lib/chef/knife/environment_show.rb +0 -47
  464. data/lib/chef/knife/exec.rb +0 -99
  465. data/lib/chef/knife/group_add.rb +0 -55
  466. data/lib/chef/knife/group_create.rb +0 -49
  467. data/lib/chef/knife/group_destroy.rb +0 -53
  468. data/lib/chef/knife/group_list.rb +0 -43
  469. data/lib/chef/knife/group_remove.rb +0 -56
  470. data/lib/chef/knife/group_show.rb +0 -49
  471. data/lib/chef/knife/key_create.rb +0 -112
  472. data/lib/chef/knife/key_create_base.rb +0 -50
  473. data/lib/chef/knife/key_delete.rb +0 -55
  474. data/lib/chef/knife/key_edit.rb +0 -118
  475. data/lib/chef/knife/key_edit_base.rb +0 -55
  476. data/lib/chef/knife/key_list.rb +0 -90
  477. data/lib/chef/knife/key_list_base.rb +0 -45
  478. data/lib/chef/knife/key_show.rb +0 -53
  479. data/lib/chef/knife/list.rb +0 -177
  480. data/lib/chef/knife/node_bulk_delete.rb +0 -75
  481. data/lib/chef/knife/node_create.rb +0 -47
  482. data/lib/chef/knife/node_delete.rb +0 -46
  483. data/lib/chef/knife/node_edit.rb +0 -70
  484. data/lib/chef/knife/node_environment_set.rb +0 -53
  485. data/lib/chef/knife/node_from_file.rb +0 -51
  486. data/lib/chef/knife/node_list.rb +0 -44
  487. data/lib/chef/knife/node_policy_set.rb +0 -79
  488. data/lib/chef/knife/node_run_list_add.rb +0 -104
  489. data/lib/chef/knife/node_run_list_remove.rb +0 -67
  490. data/lib/chef/knife/node_run_list_set.rb +0 -66
  491. data/lib/chef/knife/node_show.rb +0 -63
  492. data/lib/chef/knife/null.rb +0 -12
  493. data/lib/chef/knife/raw.rb +0 -123
  494. data/lib/chef/knife/recipe_list.rb +0 -32
  495. data/lib/chef/knife/rehash.rb +0 -50
  496. data/lib/chef/knife/role_bulk_delete.rb +0 -66
  497. data/lib/chef/knife/role_create.rb +0 -53
  498. data/lib/chef/knife/role_delete.rb +0 -46
  499. data/lib/chef/knife/role_edit.rb +0 -45
  500. data/lib/chef/knife/role_env_run_list_add.rb +0 -87
  501. data/lib/chef/knife/role_env_run_list_clear.rb +0 -55
  502. data/lib/chef/knife/role_env_run_list_remove.rb +0 -57
  503. data/lib/chef/knife/role_env_run_list_replace.rb +0 -60
  504. data/lib/chef/knife/role_env_run_list_set.rb +0 -70
  505. data/lib/chef/knife/role_from_file.rb +0 -51
  506. data/lib/chef/knife/role_list.rb +0 -42
  507. data/lib/chef/knife/role_run_list_add.rb +0 -87
  508. data/lib/chef/knife/role_run_list_clear.rb +0 -55
  509. data/lib/chef/knife/role_run_list_remove.rb +0 -56
  510. data/lib/chef/knife/role_run_list_replace.rb +0 -60
  511. data/lib/chef/knife/role_run_list_set.rb +0 -69
  512. data/lib/chef/knife/role_show.rb +0 -48
  513. data/lib/chef/knife/search.rb +0 -194
  514. data/lib/chef/knife/serve.rb +0 -65
  515. data/lib/chef/knife/show.rb +0 -72
  516. data/lib/chef/knife/ssh.rb +0 -645
  517. data/lib/chef/knife/ssl_check.rb +0 -284
  518. data/lib/chef/knife/ssl_fetch.rb +0 -161
  519. data/lib/chef/knife/status.rb +0 -95
  520. data/lib/chef/knife/supermarket_download.rb +0 -121
  521. data/lib/chef/knife/supermarket_install.rb +0 -192
  522. data/lib/chef/knife/supermarket_list.rb +0 -76
  523. data/lib/chef/knife/supermarket_search.rb +0 -53
  524. data/lib/chef/knife/supermarket_share.rb +0 -166
  525. data/lib/chef/knife/supermarket_show.rb +0 -66
  526. data/lib/chef/knife/supermarket_unshare.rb +0 -61
  527. data/lib/chef/knife/tag_create.rb +0 -52
  528. data/lib/chef/knife/tag_delete.rb +0 -60
  529. data/lib/chef/knife/tag_list.rb +0 -47
  530. data/lib/chef/knife/upload.rb +0 -86
  531. data/lib/chef/knife/user_create.rb +0 -107
  532. data/lib/chef/knife/user_delete.rb +0 -44
  533. data/lib/chef/knife/user_dissociate.rb +0 -42
  534. data/lib/chef/knife/user_edit.rb +0 -52
  535. data/lib/chef/knife/user_invite_add.rb +0 -43
  536. data/lib/chef/knife/user_invite_list.rb +0 -34
  537. data/lib/chef/knife/user_invite_rescind.rb +0 -63
  538. data/lib/chef/knife/user_key_create.rb +0 -73
  539. data/lib/chef/knife/user_key_delete.rb +0 -80
  540. data/lib/chef/knife/user_key_edit.rb +0 -83
  541. data/lib/chef/knife/user_key_list.rb +0 -73
  542. data/lib/chef/knife/user_key_show.rb +0 -80
  543. data/lib/chef/knife/user_list.rb +0 -42
  544. data/lib/chef/knife/user_reregister.rb +0 -59
  545. data/lib/chef/knife/user_show.rb +0 -48
  546. data/lib/chef/knife/xargs.rb +0 -282
  547. data/lib/chef/knife/yaml_convert.rb +0 -91
  548. data/lib/chef/provider/package/yum/simplejson/LICENSE.txt +0 -79
  549. data/lib/chef/provider/package/yum/simplejson/__init__.py +0 -318
  550. data/lib/chef/provider/package/yum/simplejson/__init__.pyc +0 -0
  551. data/lib/chef/provider/package/yum/simplejson/decoder.py +0 -354
  552. data/lib/chef/provider/package/yum/simplejson/decoder.pyc +0 -0
  553. data/lib/chef/provider/package/yum/simplejson/encoder.py +0 -440
  554. data/lib/chef/provider/package/yum/simplejson/encoder.pyc +0 -0
  555. data/lib/chef/provider/package/yum/simplejson/scanner.py +0 -65
  556. data/lib/chef/provider/package/yum/simplejson/scanner.pyc +0 -0
  557. data/lib/chef/provider/package/yum/simplejson/tool.py +0 -37
  558. data/lib/chef/resource/user/dscl_user.rb +0 -35
  559. data/spec/functional/knife/configure_spec.rb +0 -33
  560. data/spec/functional/knife/cookbook_delete_spec.rb +0 -156
  561. data/spec/functional/knife/exec_spec.rb +0 -55
  562. data/spec/functional/knife/rehash_spec.rb +0 -39
  563. data/spec/functional/knife/smoke_test.rb +0 -42
  564. data/spec/functional/knife/ssh_spec.rb +0 -352
  565. data/spec/functional/resource/user/dscl_spec.rb +0 -188
  566. data/spec/functional/resource/windows_service_spec.rb +0 -105
  567. data/spec/functional/win32/service_manager_spec.rb +0 -220
  568. data/spec/integration/knife/chef_fs_data_store_spec.rb +0 -557
  569. data/spec/integration/knife/chef_repo_path_spec.rb +0 -962
  570. data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -200
  571. data/spec/integration/knife/chefignore_spec.rb +0 -301
  572. data/spec/integration/knife/client_bulk_delete_spec.rb +0 -131
  573. data/spec/integration/knife/client_create_spec.rb +0 -70
  574. data/spec/integration/knife/client_delete_spec.rb +0 -64
  575. data/spec/integration/knife/client_key_create_spec.rb +0 -66
  576. data/spec/integration/knife/client_key_delete_spec.rb +0 -43
  577. data/spec/integration/knife/client_key_list_spec.rb +0 -61
  578. data/spec/integration/knife/client_key_show_spec.rb +0 -45
  579. data/spec/integration/knife/client_list_spec.rb +0 -49
  580. data/spec/integration/knife/client_show_spec.rb +0 -37
  581. data/spec/integration/knife/common_options_spec.rb +0 -174
  582. data/spec/integration/knife/config_list_spec.rb +0 -220
  583. data/spec/integration/knife/config_show_spec.rb +0 -192
  584. data/spec/integration/knife/config_use_spec.rb +0 -198
  585. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +0 -113
  586. data/spec/integration/knife/cookbook_bulk_delete_spec.rb +0 -65
  587. data/spec/integration/knife/cookbook_download_spec.rb +0 -72
  588. data/spec/integration/knife/cookbook_list_spec.rb +0 -55
  589. data/spec/integration/knife/cookbook_show_spec.rb +0 -149
  590. data/spec/integration/knife/cookbook_upload_spec.rb +0 -128
  591. data/spec/integration/knife/data_bag_create_spec.rb +0 -125
  592. data/spec/integration/knife/data_bag_delete_spec.rb +0 -59
  593. data/spec/integration/knife/data_bag_edit_spec.rb +0 -105
  594. data/spec/integration/knife/data_bag_from_file_spec.rb +0 -116
  595. data/spec/integration/knife/data_bag_list_spec.rb +0 -44
  596. data/spec/integration/knife/data_bag_show_spec.rb +0 -95
  597. data/spec/integration/knife/delete_spec.rb +0 -1018
  598. data/spec/integration/knife/deps_spec.rb +0 -703
  599. data/spec/integration/knife/diff_spec.rb +0 -605
  600. data/spec/integration/knife/download_spec.rb +0 -1336
  601. data/spec/integration/knife/environment_compare_spec.rb +0 -75
  602. data/spec/integration/knife/environment_create_spec.rb +0 -41
  603. data/spec/integration/knife/environment_delete_spec.rb +0 -37
  604. data/spec/integration/knife/environment_from_file_spec.rb +0 -116
  605. data/spec/integration/knife/environment_list_spec.rb +0 -42
  606. data/spec/integration/knife/environment_show_spec.rb +0 -77
  607. data/spec/integration/knife/list_spec.rb +0 -1060
  608. data/spec/integration/knife/node_bulk_delete_spec.rb +0 -52
  609. data/spec/integration/knife/node_create_spec.rb +0 -47
  610. data/spec/integration/knife/node_delete_spec.rb +0 -48
  611. data/spec/integration/knife/node_environment_set_spec.rb +0 -46
  612. data/spec/integration/knife/node_from_file_spec.rb +0 -59
  613. data/spec/integration/knife/node_list_spec.rb +0 -45
  614. data/spec/integration/knife/node_run_list_add_spec.rb +0 -54
  615. data/spec/integration/knife/node_run_list_remove_spec.rb +0 -36
  616. data/spec/integration/knife/node_run_list_set_spec.rb +0 -41
  617. data/spec/integration/knife/node_show_spec.rb +0 -36
  618. data/spec/integration/knife/raw_spec.rb +0 -297
  619. data/spec/integration/knife/redirection_spec.rb +0 -64
  620. data/spec/integration/knife/role_bulk_delete_spec.rb +0 -52
  621. data/spec/integration/knife/role_create_spec.rb +0 -41
  622. data/spec/integration/knife/role_delete_spec.rb +0 -48
  623. data/spec/integration/knife/role_from_file_spec.rb +0 -96
  624. data/spec/integration/knife/role_list_spec.rb +0 -45
  625. data/spec/integration/knife/role_show_spec.rb +0 -51
  626. data/spec/integration/knife/search_node_spec.rb +0 -40
  627. data/spec/integration/knife/serve_spec.rb +0 -92
  628. data/spec/integration/knife/show_spec.rb +0 -197
  629. data/spec/integration/knife/upload_spec.rb +0 -1617
  630. data/spec/support/shared/functional/win32_service.rb +0 -57
  631. data/spec/unit/application/knife_spec.rb +0 -241
  632. data/spec/unit/chef_fs/parallelizer_spec.rb +0 -479
  633. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -198
  634. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +0 -152
  635. data/spec/unit/knife/bootstrap/client_builder_spec.rb +0 -207
  636. data/spec/unit/knife/bootstrap/train_connector_spec.rb +0 -244
  637. data/spec/unit/knife/bootstrap_spec.rb +0 -2220
  638. data/spec/unit/knife/client_bulk_delete_spec.rb +0 -166
  639. data/spec/unit/knife/client_create_spec.rb +0 -169
  640. data/spec/unit/knife/client_delete_spec.rb +0 -99
  641. data/spec/unit/knife/client_edit_spec.rb +0 -53
  642. data/spec/unit/knife/client_list_spec.rb +0 -34
  643. data/spec/unit/knife/client_reregister_spec.rb +0 -62
  644. data/spec/unit/knife/client_show_spec.rb +0 -52
  645. data/spec/unit/knife/configure_client_spec.rb +0 -81
  646. data/spec/unit/knife/configure_spec.rb +0 -190
  647. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +0 -87
  648. data/spec/unit/knife/cookbook_delete_spec.rb +0 -239
  649. data/spec/unit/knife/cookbook_download_spec.rb +0 -255
  650. data/spec/unit/knife/cookbook_list_spec.rb +0 -88
  651. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +0 -72
  652. data/spec/unit/knife/cookbook_metadata_spec.rb +0 -182
  653. data/spec/unit/knife/cookbook_show_spec.rb +0 -253
  654. data/spec/unit/knife/cookbook_upload_spec.rb +0 -364
  655. data/spec/unit/knife/core/bootstrap_context_spec.rb +0 -287
  656. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +0 -187
  657. data/spec/unit/knife/core/gem_glob_loader_spec.rb +0 -209
  658. data/spec/unit/knife/core/hashed_command_loader_spec.rb +0 -112
  659. data/spec/unit/knife/core/node_editor_spec.rb +0 -211
  660. data/spec/unit/knife/core/object_loader_spec.rb +0 -81
  661. data/spec/unit/knife/core/status_presenter_spec.rb +0 -54
  662. data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -64
  663. data/spec/unit/knife/core/ui_spec.rb +0 -656
  664. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +0 -238
  665. data/spec/unit/knife/data_bag_create_spec.rb +0 -175
  666. data/spec/unit/knife/data_bag_edit_spec.rb +0 -126
  667. data/spec/unit/knife/data_bag_from_file_spec.rb +0 -174
  668. data/spec/unit/knife/data_bag_secret_options_spec.rb +0 -173
  669. data/spec/unit/knife/data_bag_show_spec.rb +0 -139
  670. data/spec/unit/knife/environment_compare_spec.rb +0 -112
  671. data/spec/unit/knife/environment_create_spec.rb +0 -91
  672. data/spec/unit/knife/environment_delete_spec.rb +0 -71
  673. data/spec/unit/knife/environment_edit_spec.rb +0 -79
  674. data/spec/unit/knife/environment_from_file_spec.rb +0 -90
  675. data/spec/unit/knife/environment_list_spec.rb +0 -54
  676. data/spec/unit/knife/environment_show_spec.rb +0 -52
  677. data/spec/unit/knife/key_create_spec.rb +0 -223
  678. data/spec/unit/knife/key_delete_spec.rb +0 -133
  679. data/spec/unit/knife/key_edit_spec.rb +0 -264
  680. data/spec/unit/knife/key_helper.rb +0 -74
  681. data/spec/unit/knife/key_list_spec.rb +0 -216
  682. data/spec/unit/knife/key_show_spec.rb +0 -126
  683. data/spec/unit/knife/node_bulk_delete_spec.rb +0 -94
  684. data/spec/unit/knife/node_delete_spec.rb +0 -77
  685. data/spec/unit/knife/node_edit_spec.rb +0 -116
  686. data/spec/unit/knife/node_environment_set_spec.rb +0 -61
  687. data/spec/unit/knife/node_from_file_spec.rb +0 -59
  688. data/spec/unit/knife/node_list_spec.rb +0 -62
  689. data/spec/unit/knife/node_policy_set_spec.rb +0 -122
  690. data/spec/unit/knife/node_run_list_add_spec.rb +0 -145
  691. data/spec/unit/knife/node_run_list_remove_spec.rb +0 -106
  692. data/spec/unit/knife/node_run_list_set_spec.rb +0 -115
  693. data/spec/unit/knife/node_show_spec.rb +0 -65
  694. data/spec/unit/knife/raw_spec.rb +0 -43
  695. data/spec/unit/knife/role_bulk_delete_spec.rb +0 -80
  696. data/spec/unit/knife/role_create_spec.rb +0 -80
  697. data/spec/unit/knife/role_delete_spec.rb +0 -67
  698. data/spec/unit/knife/role_edit_spec.rb +0 -77
  699. data/spec/unit/knife/role_env_run_list_add_spec.rb +0 -217
  700. data/spec/unit/knife/role_env_run_list_clear_spec.rb +0 -94
  701. data/spec/unit/knife/role_env_run_list_remove_spec.rb +0 -102
  702. data/spec/unit/knife/role_env_run_list_replace_spec.rb +0 -105
  703. data/spec/unit/knife/role_env_run_list_set_spec.rb +0 -99
  704. data/spec/unit/knife/role_from_file_spec.rb +0 -69
  705. data/spec/unit/knife/role_list_spec.rb +0 -54
  706. data/spec/unit/knife/role_run_list_add_spec.rb +0 -179
  707. data/spec/unit/knife/role_run_list_clear_spec.rb +0 -84
  708. data/spec/unit/knife/role_run_list_remove_spec.rb +0 -92
  709. data/spec/unit/knife/role_run_list_replace_spec.rb +0 -98
  710. data/spec/unit/knife/role_run_list_set_spec.rb +0 -89
  711. data/spec/unit/knife/role_show_spec.rb +0 -59
  712. data/spec/unit/knife/ssh_spec.rb +0 -403
  713. data/spec/unit/knife/ssl_check_spec.rb +0 -256
  714. data/spec/unit/knife/ssl_fetch_spec.rb +0 -222
  715. data/spec/unit/knife/status_spec.rb +0 -112
  716. data/spec/unit/knife/supermarket_download_spec.rb +0 -152
  717. data/spec/unit/knife/supermarket_install_spec.rb +0 -202
  718. data/spec/unit/knife/supermarket_list_spec.rb +0 -70
  719. data/spec/unit/knife/supermarket_search_spec.rb +0 -85
  720. data/spec/unit/knife/supermarket_share_spec.rb +0 -208
  721. data/spec/unit/knife/supermarket_unshare_spec.rb +0 -78
  722. data/spec/unit/knife/tag_create_spec.rb +0 -23
  723. data/spec/unit/knife/tag_delete_spec.rb +0 -25
  724. data/spec/unit/knife/tag_list_spec.rb +0 -23
  725. data/spec/unit/knife/user_create_spec.rb +0 -184
  726. data/spec/unit/knife/user_delete_spec.rb +0 -46
  727. data/spec/unit/knife/user_edit_spec.rb +0 -48
  728. data/spec/unit/knife/user_list_spec.rb +0 -36
  729. data/spec/unit/knife/user_reregister_spec.rb +0 -56
  730. data/spec/unit/knife/user_show_spec.rb +0 -46
  731. data/spec/unit/knife_spec.rb +0 -634
  732. data/spec/unit/provider/user/dscl_spec.rb +0 -699
  733. data/spec/unit/windows_service_spec.rb +0 -118
@@ -1,57 +0,0 @@
1
-
2
- require "chef/application/windows_service_manager"
3
-
4
- shared_context "using Win32::Service" do
5
- # Some helper methods.
6
-
7
- def test_service_exists?
8
- ::Win32::Service.exists?("spec-service")
9
- end
10
-
11
- def test_service_state
12
- ::Win32::Service.status("spec-service").current_state
13
- end
14
-
15
- def service_manager
16
- Chef::Application::WindowsServiceManager.new(test_service)
17
- end
18
-
19
- def cleanup
20
- # Uninstall if the test service is installed.
21
- if test_service_exists?
22
-
23
- # We can only uninstall when the service is stopped.
24
- if test_service_state != "stopped"
25
- ::Win32::Service.send("stop", "spec-service")
26
- sleep 1 while test_service_state != "stopped"
27
- end
28
-
29
- ::Win32::Service.delete("spec-service")
30
- end
31
-
32
- # Delete the test_service_file if it exists
33
- if File.exist?(test_service_file)
34
- File.delete(test_service_file)
35
- end
36
- end
37
-
38
- # Definition for the test-service
39
-
40
- let(:test_service) do
41
- {
42
- service_name: "spec-service",
43
- service_display_name: "Spec Test Service",
44
- service_description: "Service for testing Chef::Application::WindowsServiceManager.",
45
- service_file_path: File.expand_path(File.join(__dir__, "../../platforms/win32/spec_service.rb")),
46
- delayed_start: true,
47
- }
48
- end
49
-
50
- # Test service creates a file for us to verify that it is running.
51
- # Since our test service is running as Local System we should look
52
- # for the file it creates under SYSTEM temp directory
53
-
54
- let(:test_service_file) do
55
- "#{ENV["SystemDrive"]}\\windows\\temp\\spec_service_file"
56
- end
57
- end
@@ -1,241 +0,0 @@
1
- #
2
- # Author:: AJ Christensen (<aj@junglist.gen.nz>)
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
- require "spec_helper"
19
- require "#{CHEF_SPEC_DATA}/knife_subcommand/test_yourself"
20
-
21
- describe Chef::Application::Knife do
22
- include SpecHelpers::Knife
23
-
24
- before(:all) do
25
- class NoopKnifeCommand < Chef::Knife
26
- option :opt_with_default,
27
- short: "-D VALUE",
28
- long: "-optwithdefault VALUE",
29
- default: "default-value"
30
-
31
- def run; end
32
- end
33
- end
34
-
35
- after(:each) do
36
- # reset some really nasty global state
37
- NoopKnifeCommand.reset_config_loader!
38
- end
39
-
40
- before(:each) do
41
- # Prevent code from getting loaded on every test invocation.
42
- allow(Chef::Knife).to receive(:load_commands)
43
-
44
- @knife = Chef::Application::Knife.new
45
- allow(@knife).to receive(:puts)
46
- allow(@knife).to receive(:trap)
47
- allow(Chef::Knife).to receive(:list_commands)
48
- end
49
-
50
- it "should exit 1 and print the options if no arguments are given at all" do
51
- with_argv([]) do
52
- expect { @knife.run }.to raise_error(SystemExit) { |e| expect(e.status).to eq(1) }
53
- end
54
- end
55
-
56
- it "should exit 2 if run without a sub command" do
57
- with_argv("--user", "adam") do
58
- expect(Chef::Log).to receive(:error).with(/you need to pass a sub\-command/i)
59
- expect { @knife.run }.to raise_error(SystemExit) { |e| expect(e.status).to eq(2) }
60
- end
61
- end
62
-
63
- it "should run a sub command with the applications command line option prototype" do
64
- with_argv(*%w{noop knife command with some args}) do
65
- knife = double(Chef::Knife)
66
- expect(Chef::Knife).to receive(:run).with(ARGV, @knife.options).and_return(knife)
67
- expect(@knife).to receive(:exit).with(0)
68
- @knife.run
69
- end
70
- end
71
-
72
- it "should set the colored output to true by default on windows and true on all other platforms as well" do
73
- with_argv(*%w{noop knife command}) do
74
- expect(@knife).to receive(:exit).with(0)
75
- @knife.run
76
- end
77
- expect(Chef::Config[:color]).to be_truthy
78
- end
79
-
80
- context "validate --format option" do
81
- it "should set the default format summary" do
82
- with_argv(*%w{noop knife command}) do
83
- expect(@knife).to receive(:exit).with(0)
84
- @knife.run
85
- expect(@knife.default_config[:format]).to eq("summary")
86
- end
87
- end
88
-
89
- it "should raise the error for invalid value" do
90
- with_argv(*%w{noop knife command -F abc}) do
91
- expect(STDOUT).to receive(:puts).at_least(2).times
92
- expect { @knife.run }.to raise_error(SystemExit) { |e| expect(e.status).to eq(2) }
93
- end
94
- end
95
- end
96
-
97
- context "when given fips flags" do
98
- context "when Chef::Config[:fips]=false" do
99
- before do
100
- # This is required because the chef-fips pipeline does
101
- # has a default value of true for fips
102
- Chef::Config[:fips] = false
103
- end
104
-
105
- it "does not initialize fips mode when no flags are passed" do
106
- with_argv(*%w{noop knife command}) do
107
- expect(@knife).to receive(:exit).with(0)
108
- expect(Chef::Config).not_to receive(:enable_fips_mode)
109
- @knife.run
110
- expect(Chef::Config[:fips]).to eq(false)
111
- end
112
- end
113
-
114
- it "overwrites the Chef::Config value when passed --fips" do
115
- with_argv(*%w{noop knife command --fips}) do
116
- expect(@knife).to receive(:exit).with(0)
117
- expect(Chef::Config).to receive(:enable_fips_mode)
118
- @knife.run
119
- expect(Chef::Config[:fips]).to eq(true)
120
- end
121
- end
122
- end
123
-
124
- context "when Chef::Config[:fips]=true" do
125
- before do
126
- Chef::Config[:fips] = true
127
- end
128
-
129
- it "initializes fips mode when passed --fips" do
130
- with_argv(*%w{noop knife command --fips}) do
131
- expect(@knife).to receive(:exit).with(0)
132
- expect(Chef::Config).to receive(:enable_fips_mode)
133
- @knife.run
134
- expect(Chef::Config[:fips]).to eq(true)
135
- end
136
- end
137
-
138
- it "overwrites the Chef::Config value when passed --no-fips" do
139
- with_argv(*%w{noop knife command --no-fips}) do
140
- expect(@knife).to receive(:exit).with(0)
141
- expect(Chef::Config).not_to receive(:enable_fips_mode)
142
- @knife.run
143
- expect(Chef::Config[:fips]).to eq(false)
144
- end
145
- end
146
- end
147
- end
148
-
149
- describe "when given a path to the client key" do
150
- it "expands a relative path relative to the CWD" do
151
- relative_path = ".chef/client.pem"
152
- allow(Dir).to receive(:pwd).and_return(CHEF_SPEC_DATA)
153
- with_argv(*%W{noop knife command -k #{relative_path}}) do
154
- expect(@knife).to receive(:exit).with(0)
155
- @knife.run
156
- end
157
- expect(Chef::Config[:client_key]).to eq(File.join(CHEF_SPEC_DATA, relative_path))
158
- end
159
-
160
- it "expands a ~/home/path to the correct full path" do
161
- home_path = "~/.chef/client.pem"
162
- with_argv(*%W{noop knife command -k #{home_path}}) do
163
- expect(@knife).to receive(:exit).with(0)
164
- @knife.run
165
- end
166
- expect(Chef::Config[:client_key]).to eq(File.join(ENV["HOME"], ".chef/client.pem").gsub((File::ALT_SEPARATOR || '\\'), File::SEPARATOR))
167
- end
168
-
169
- it "does not expand a full path" do
170
- full_path = if windows?
171
- "C:/chef/client.pem"
172
- else
173
- "/etc/chef/client.pem"
174
- end
175
- with_argv(*%W{noop knife command -k #{full_path}}) do
176
- expect(@knife).to receive(:exit).with(0)
177
- @knife.run
178
- end
179
- expect(Chef::Config[:client_key]).to eq(full_path)
180
- end
181
- end
182
-
183
- describe "with environment configuration" do
184
- before do
185
- Chef::Config[:environment] = nil
186
- end
187
-
188
- it "should default to no environment" do
189
- with_argv(*%w{noop knife command}) do
190
- expect(@knife).to receive(:exit).with(0)
191
- @knife.run
192
- end
193
- expect(Chef::Config[:environment]).to eq(nil)
194
- end
195
-
196
- it "should load the environment from the config file" do
197
- config_file = File.join(CHEF_SPEC_DATA, "environment-config.rb")
198
- with_argv(*%W{noop knife command -c #{config_file}}) do
199
- expect(@knife).to receive(:exit).with(0)
200
- @knife.run
201
- end
202
- expect(Chef::Config[:environment]).to eq("production")
203
- end
204
-
205
- it "should load the environment from the CLI options" do
206
- with_argv(*%w{noop knife command -E development}) do
207
- expect(@knife).to receive(:exit).with(0)
208
- @knife.run
209
- end
210
- expect(Chef::Config[:environment]).to eq("development")
211
- end
212
-
213
- it "should override the config file environment with the CLI environment" do
214
- config_file = File.join(CHEF_SPEC_DATA, "environment-config.rb")
215
- with_argv(*%W{noop knife command -c #{config_file} -E override}) do
216
- expect(@knife).to receive(:exit).with(0)
217
- @knife.run
218
- end
219
- expect(Chef::Config[:environment]).to eq("override")
220
- end
221
-
222
- it "should override the config file environment with the CLI environment regardless of order" do
223
- config_file = File.join(CHEF_SPEC_DATA, "environment-config.rb")
224
- with_argv(*%W{noop knife command -E override -c #{config_file}}) do
225
- expect(@knife).to receive(:exit).with(0)
226
- @knife.run
227
- end
228
- expect(Chef::Config[:environment]).to eq("override")
229
- end
230
-
231
- it "should run a sub command with the applications command line option prototype" do
232
- with_argv(*%w{noop knife command with some args}) do
233
- knife = double(Chef::Knife)
234
- expect(Chef::Knife).to receive(:run).with(ARGV, @knife.options).and_return(knife)
235
- expect(@knife).to receive(:exit).with(0)
236
- @knife.run
237
- end
238
- end
239
- end
240
-
241
- end
@@ -1,479 +0,0 @@
1
- require "spec_helper"
2
- require "chef/chef_fs/parallelizer"
3
-
4
- # FIXME: these are disabled on MacOS due to timing issues in our anka build cluster
5
- # these issues should be fixed and the tests should be re-eenabled. If we are getting
6
- # omnibus test phases on mac tests which are reasonable and not ~3 hours long, then the
7
- # condition to avoid this testing on macs can be deleted
8
- describe Chef::ChefFS::Parallelizer, :not_supported_on_macos do
9
- before :each do
10
- @start_time = Time.now
11
- end
12
-
13
- def elapsed_time
14
- Time.now - @start_time
15
- end
16
-
17
- after :each do
18
- parallelizer.kill
19
- end
20
-
21
- context "With a Parallelizer with 5 threads" do
22
- let :parallelizer do
23
- Chef::ChefFS::Parallelizer.new(5)
24
- end
25
-
26
- def parallelize(inputs, options = {}, &block)
27
- parallelizer.parallelize(inputs, { main_thread_processing: false }.merge(options), &block)
28
- end
29
-
30
- it "parallel_do creates unordered output as soon as it is available" do
31
- outputs = []
32
- parallelizer.parallel_do([0.5, 0.3, 0.1]) do |val|
33
- sleep val
34
- outputs << val
35
- end
36
- expect(elapsed_time).to be < 0.6
37
- expect(outputs).to eq([ 0.1, 0.3, 0.5 ])
38
- end
39
-
40
- context "With :ordered => false (unordered output)" do
41
- it "An empty input produces an empty output" do
42
- expect(parallelize([], ordered: false) do
43
- sleep 10
44
- end.to_a).to eql([])
45
- expect(elapsed_time).to be < 0.1
46
- end
47
-
48
- it "10 sleep(0.2)s complete within 0.5 seconds" do
49
- expect(parallelize(1.upto(10), ordered: false) do |i|
50
- sleep 0.2
51
- "x"
52
- end.to_a).to eq(%w{x x x x x x x x x x})
53
- expect(elapsed_time).to be < 0.5
54
- end
55
-
56
- it "The output comes as soon as it is available" do
57
- enum = parallelize([0.5, 0.3, 0.1], ordered: false) do |val|
58
- sleep val
59
- val
60
- end
61
- expect(enum.map do |value|
62
- expect(elapsed_time).to be < value + 0.1
63
- value
64
- end).to eq([ 0.1, 0.3, 0.5 ])
65
- end
66
-
67
- it "An exception in input is passed through but does NOT stop processing" do
68
- input = TestEnumerable.new(0.5, 0.3, 0.1) do
69
- raise "hi"
70
- end
71
- enum = parallelize(input, ordered: false) { |x| sleep(x); x }
72
- results = []
73
- expect { enum.each { |value| results << value } }.to raise_error "hi"
74
- expect(results).to eq([ 0.1, 0.3, 0.5 ])
75
- expect(elapsed_time).to be < 0.6
76
- end
77
-
78
- it "Exceptions in output are raised after all processing is done" do
79
- processed = 0
80
- enum = parallelize([1, 2, "x", 3], ordered: false) do |x|
81
- if x == "x"
82
- sleep 0.1
83
- raise "hi"
84
- end
85
- sleep 0.2
86
- processed += 1
87
- x
88
- end
89
- results = []
90
- expect { enum.each { |value| results << value } }.to raise_error "hi"
91
- expect(results.sort).to eq([ 1, 2, 3 ])
92
- expect(elapsed_time).to be < 0.3
93
- expect(processed).to eq(3)
94
- end
95
-
96
- it "Exceptions with :stop_on_exception are raised after all processing is done" do
97
- processed = 0
98
- parallelized = parallelize([0.3, 0.3, "x", 0.3, 0.3, 0.3, 0.3, 0.3], ordered: false, stop_on_exception: true) do |x|
99
- if x == "x"
100
- sleep(0.1)
101
- raise "hi"
102
- end
103
- sleep(x)
104
- processed += 1
105
- x
106
- end
107
- expect { parallelized.to_a }.to raise_error "hi"
108
- expect(processed).to eq(4)
109
- end
110
- end
111
-
112
- context "With :ordered => true (ordered output)" do
113
- it "An empty input produces an empty output" do
114
- expect(parallelize([]) do
115
- sleep 10
116
- end.to_a).to eql([])
117
- expect(elapsed_time).to be < 0.1
118
- end
119
-
120
- it "10 sleep(0.2)s complete within 0.5 seconds" do
121
- expect(parallelize(1.upto(10), ordered: true) do |i|
122
- sleep 0.2
123
- "x"
124
- end.to_a).to eq(%w{x x x x x x x x x x})
125
- expect(elapsed_time).to be < 0.5
126
- end
127
-
128
- it "Output comes in the order of the input" do
129
- enum = parallelize([0.5, 0.3, 0.1]) do |val|
130
- sleep val
131
- val
132
- end.enum_for(:each_with_index)
133
- expect(enum.next).to eq([ 0.5, 0 ])
134
- expect(enum.next).to eq([ 0.3, 1 ])
135
- expect(enum.next).to eq([ 0.1, 2 ])
136
- expect(elapsed_time).to be < 0.6
137
- end
138
-
139
- it "Exceptions in input are raised in the correct sequence but do NOT stop processing" do
140
- input = TestEnumerable.new(0.5, 0.3, 0.1) do
141
- raise "hi"
142
- end
143
- results = []
144
- enum = parallelize(input) { |x| sleep(x); x }
145
- expect { enum.each { |value| results << value } }.to raise_error "hi"
146
- expect(elapsed_time).to be < 0.6
147
- expect(results).to eq([ 0.5, 0.3, 0.1 ])
148
- end
149
-
150
- it "Exceptions in output are raised in the correct sequence and running processes do NOT stop processing" do
151
- processed = 0
152
- enum = parallelize([1, 2, "x", 3]) do |x|
153
- if x == "x"
154
- sleep(0.1)
155
- raise "hi"
156
- end
157
- sleep(0.2)
158
- processed += 1
159
- x
160
- end
161
- results = []
162
- expect { enum.each { |value| results << value } }.to raise_error "hi"
163
- expect(results).to eq([ 1, 2 ])
164
- expect(elapsed_time).to be < 0.3
165
- expect(processed).to eq(3)
166
- end
167
-
168
- it "Exceptions with :stop_on_exception are raised after all processing is done" do
169
- processed = 0
170
- parallelized = parallelize([0.3, 0.3, "x", 0.3, 0.3, 0.3, 0.3, 0.3], ordered: false, stop_on_exception: true) do |x|
171
- if x == "x"
172
- sleep(0.1)
173
- raise "hi"
174
- end
175
- sleep(x)
176
- processed += 1
177
- x
178
- end
179
- expect { parallelized.to_a }.to raise_error "hi"
180
- expect(processed).to eq(4)
181
- end
182
- end
183
-
184
- it "When the input is slow, output still proceeds" do
185
- input = TestEnumerable.new do |&block|
186
- block.call(1)
187
- sleep 0.1
188
- block.call(2)
189
- sleep 0.1
190
- block.call(3)
191
- sleep 0.1
192
- end
193
- enum = parallelize(input) { |x| x }
194
- expect(enum.map do |value|
195
- expect(elapsed_time).to be < (value + 1) * 0.1
196
- value
197
- end).to eq([ 1, 2, 3 ])
198
- end
199
- end
200
-
201
- context "With a Parallelizer with 1 thread" do
202
- let :parallelizer do
203
- Chef::ChefFS::Parallelizer.new(1)
204
- end
205
-
206
- context "when the thread is occupied with a job" do
207
- before :each do
208
- parallelizer
209
- started = false
210
- @occupying_job_finished = occupying_job_finished = [ false ]
211
- @thread = Thread.new do
212
- parallelizer.parallelize([0], main_thread_processing: false) do |x|
213
- started = true
214
- sleep(0.3)
215
- occupying_job_finished[0] = true
216
- end.wait
217
- end
218
- sleep(0.01) until started
219
- end
220
-
221
- after :each do
222
- Thread.kill(@thread)
223
- end
224
-
225
- it "parallelize with :main_thread_processing = true does not block" do
226
- expect(parallelizer.parallelize([1]) do |x|
227
- sleep(0.1)
228
- x
229
- end.to_a).to eq([ 1 ])
230
- expect(elapsed_time).to be < 0.2
231
- end
232
-
233
- it "parallelize with :main_thread_processing = false waits for the job to finish" do
234
- expect(parallelizer.parallelize([1], main_thread_processing: false) do |x|
235
- sleep(0.1)
236
- x + 1
237
- end.to_a).to eq([ 2 ])
238
- expect(elapsed_time).to be > 0.3
239
- end
240
-
241
- it "resizing the Parallelizer to 0 waits for the job to stop" do
242
- expect(elapsed_time).to be < 0.2
243
- parallelizer.resize(0)
244
- expect(parallelizer.num_threads).to eq(0)
245
- expect(elapsed_time).to be > 0.25
246
- expect(@occupying_job_finished).to eq([ true ])
247
- end
248
-
249
- it "stopping the Parallelizer waits for the job to finish" do
250
- expect(elapsed_time).to be < 0.2
251
- parallelizer.stop
252
- expect(parallelizer.num_threads).to eq(0)
253
- expect(elapsed_time).to be > 0.25
254
- expect(@occupying_job_finished).to eq([ true ])
255
- end
256
-
257
- it "resizing the Parallelizer to 2 does not stop the job" do
258
- expect(elapsed_time).to be < 0.2
259
- parallelizer.resize(2)
260
- expect(parallelizer.num_threads).to eq(2)
261
- expect(elapsed_time).to be < 0.2
262
- sleep(0.3)
263
- expect(@occupying_job_finished).to eq([ true ])
264
- end
265
- end
266
-
267
- context "enumerable methods should run efficiently" do
268
- it ".count does not process anything" do
269
- outputs_processed = 0
270
- input_mapper = TestEnumerable.new(1, 2, 3, 4, 5, 6)
271
- enum = parallelizer.parallelize(input_mapper) do |x|
272
- outputs_processed += 1
273
- sleep(0.05) # Just enough to yield and get other inputs in the queue
274
- x
275
- end
276
- expect(enum.count).to eq(6)
277
- expect(outputs_processed).to eq(0)
278
- expect(input_mapper.num_processed).to eq(6)
279
- end
280
-
281
- it ".count with arguments works normally" do
282
- outputs_processed = 0
283
- input_mapper = TestEnumerable.new(1, 1, 1, 1, 2, 2, 2, 3, 3, 4)
284
- enum = parallelizer.parallelize(input_mapper) do |x|
285
- outputs_processed += 1
286
- x
287
- end
288
- expect(enum.count { |x| x > 1 }).to eq(6)
289
- expect(enum.count(2)).to eq(3)
290
- expect(outputs_processed).to eq(20)
291
- expect(input_mapper.num_processed).to eq(20)
292
- end
293
-
294
- it ".first does not enumerate anything other than the first result(s)" do
295
- outputs_processed = 0
296
- input_mapper = TestEnumerable.new(1, 2, 3, 4, 5, 6)
297
- enum = parallelizer.parallelize(input_mapper) do |x|
298
- outputs_processed += 1
299
- sleep(0.05) # Just enough to yield and get other inputs in the queue
300
- x
301
- end
302
- expect(enum.first).to eq(1)
303
- expect(enum.first(2)).to eq([1, 2])
304
- expect(outputs_processed).to eq(3)
305
- expect(input_mapper.num_processed).to eq(3)
306
- end
307
-
308
- it ".take does not enumerate anything other than the first result(s)" do
309
- outputs_processed = 0
310
- input_mapper = TestEnumerable.new(1, 2, 3, 4, 5, 6)
311
- enum = parallelizer.parallelize(input_mapper) do |x|
312
- outputs_processed += 1
313
- sleep(0.05) # Just enough to yield and get other inputs in the queue
314
- x
315
- end
316
- expect(enum.take(2)).to eq([1, 2])
317
- expect(outputs_processed).to eq(2)
318
- expect(input_mapper.num_processed).to eq(2)
319
- end
320
-
321
- it ".drop does not process anything other than the last result(s)" do
322
- outputs_processed = 0
323
- input_mapper = TestEnumerable.new(1, 2, 3, 4, 5, 6)
324
- enum = parallelizer.parallelize(input_mapper) do |x|
325
- outputs_processed += 1
326
- sleep(0.05) # Just enough to yield and get other inputs in the queue
327
- x
328
- end
329
- expect(enum.drop(2)).to eq([3, 4, 5, 6])
330
- expect(outputs_processed).to eq(4)
331
- expect(input_mapper.num_processed).to eq(6)
332
- end
333
-
334
- if Enumerable.method_defined?(:lazy)
335
- it ".lazy.take does not enumerate anything other than the first result(s)" do
336
- outputs_processed = 0
337
- input_mapper = TestEnumerable.new(1, 2, 3, 4, 5, 6)
338
- enum = parallelizer.parallelize(input_mapper) do |x|
339
- outputs_processed += 1
340
- sleep(0.05) # Just enough to yield and get other inputs in the queue
341
- x
342
- end
343
- expect(enum.lazy.take(2).to_a).to eq([1, 2])
344
- expect(outputs_processed).to eq(2)
345
- expect(input_mapper.num_processed).to eq(2)
346
- end
347
-
348
- it ".drop does not process anything other than the last result(s)" do
349
- outputs_processed = 0
350
- input_mapper = TestEnumerable.new(1, 2, 3, 4, 5, 6)
351
- enum = parallelizer.parallelize(input_mapper) do |x|
352
- outputs_processed += 1
353
- sleep(0.05) # Just enough to yield and get other inputs in the queue
354
- x
355
- end
356
- expect(enum.lazy.drop(2).to_a).to eq([3, 4, 5, 6])
357
- expect(outputs_processed).to eq(4)
358
- expect(input_mapper.num_processed).to eq(6)
359
- end
360
-
361
- it "lazy enumerable is actually lazy" do
362
- outputs_processed = 0
363
- input_mapper = TestEnumerable.new(1, 2, 3, 4, 5, 6)
364
- enum = parallelizer.parallelize(input_mapper) do |x|
365
- outputs_processed += 1
366
- sleep(0.05) # Just enough to yield and get other inputs in the queue
367
- x
368
- end
369
- enum.lazy.take(2)
370
- enum.lazy.drop(2)
371
- sleep(0.1)
372
- expect(outputs_processed).to eq(0)
373
- expect(input_mapper.num_processed).to eq(0)
374
- end
375
- end
376
- end
377
-
378
- context "running enumerable multiple times should function correctly" do
379
- it ".map twice on the same parallel enumerable returns the correct results and re-processes the input" do
380
- outputs_processed = 0
381
- input_mapper = TestEnumerable.new(1, 2, 3)
382
- enum = parallelizer.parallelize(input_mapper) do |x|
383
- outputs_processed += 1
384
- x
385
- end
386
- expect(enum.map { |x| x }).to eq([1, 2, 3])
387
- expect(enum.map { |x| x }).to eq([1, 2, 3])
388
- expect(outputs_processed).to eq(6)
389
- expect(input_mapper.num_processed).to eq(6)
390
- end
391
-
392
- it ".first and then .map on the same parallel enumerable returns the correct results and re-processes the input" do
393
- outputs_processed = 0
394
- input_mapper = TestEnumerable.new(1, 2, 3)
395
- enum = parallelizer.parallelize(input_mapper) do |x|
396
- outputs_processed += 1
397
- x
398
- end
399
- expect(enum.first).to eq(1)
400
- expect(enum.map { |x| x }).to eq([1, 2, 3])
401
- expect(outputs_processed).to be >= 4
402
- expect(input_mapper.num_processed).to be >= 4
403
- end
404
-
405
- it "two simultaneous enumerations throws an exception" do
406
- enum = parallelizer.parallelize([1, 2, 3]) { |x| x }
407
- a = enum.enum_for(:each)
408
- a.next
409
- expect do
410
- b = enum.enum_for(:each)
411
- b.next
412
- end.to raise_error(RuntimeError, "each() called on parallel enumerable twice simultaneously! Bad mojo")
413
- end
414
- end
415
- end
416
-
417
- context "With a Parallelizer with 0 threads" do
418
- let :parallelizer do
419
- Chef::ChefFS::Parallelizer.new(0)
420
- end
421
-
422
- context "And main_thread_processing on" do
423
- it "succeeds in running" do
424
- expect(parallelizer.parallelize([0.5]) { |x| x * 2 }.to_a).to eq([1])
425
- end
426
- end
427
- end
428
-
429
- context "With a Parallelizer with 10 threads" do
430
- let :parallelizer do
431
- Chef::ChefFS::Parallelizer.new(10)
432
- end
433
-
434
- it "does not have contention issues with large numbers of inputs" do
435
- expect(parallelizer.parallelize(1.upto(500)) { |x| x + 1 }.to_a).to eq(2.upto(501).to_a)
436
- end
437
-
438
- it "does not have contention issues with large numbers of inputs with ordering off" do
439
- expect(parallelizer.parallelize(1.upto(500), ordered: false) { |x| x + 1 }.to_a.sort).to eq(2.upto(501).to_a)
440
- end
441
-
442
- it "does not have contention issues with large numbers of jobs and inputs with ordering off" do
443
- parallelizers = 0.upto(99).map do
444
- parallelizer.parallelize(1.upto(500)) { |x| x + 1 }
445
- end
446
- outputs = []
447
- threads = 0.upto(99).map do |i|
448
- Thread.new { outputs[i] = parallelizers[i].to_a }
449
- end
450
- threads.each(&:join)
451
- outputs.each { |output| expect(output.sort).to eq(2.upto(501).to_a) }
452
- end
453
- end
454
-
455
- class TestEnumerable
456
- include Enumerable
457
-
458
- def initialize(*values, &block)
459
- @values = values
460
- @block = block
461
- @num_processed = 0
462
- end
463
-
464
- attr_reader :num_processed
465
-
466
- def each
467
- @values.each do |value|
468
- @num_processed += 1
469
- yield(value)
470
- end
471
- if @block
472
- @block.call do |value|
473
- @num_processed += 1
474
- yield(value)
475
- end
476
- end
477
- end
478
- end
479
- end