chef 13.12.14-universal-mingw32 → 14.0.190-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 (747) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +151 -0
  3. data/Gemfile +12 -9
  4. data/README.md +34 -32
  5. data/Rakefile +22 -18
  6. data/VERSION +1 -0
  7. data/acceptance/.shared/kitchen_acceptance/.kitchen.digitalocean.yml +33 -0
  8. data/acceptance/.shared/kitchen_acceptance/.kitchen.ec2.yml +272 -0
  9. data/acceptance/.shared/kitchen_acceptance/.kitchen.vagrant.yml +57 -0
  10. data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +68 -0
  11. data/acceptance/.shared/kitchen_acceptance/metadata.rb +1 -0
  12. data/acceptance/Gemfile +19 -0
  13. data/acceptance/Gemfile.lock +266 -0
  14. data/acceptance/README.md +137 -0
  15. data/acceptance/basics/.acceptance/acceptance-cookbook/.gitignore +2 -0
  16. data/acceptance/basics/.acceptance/acceptance-cookbook/metadata.rb +3 -0
  17. data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -0
  18. data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -0
  19. data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -0
  20. data/acceptance/basics/.kitchen.yml +4 -0
  21. data/acceptance/basics/test/integration/chef-current-install/serverspec/chef_client_spec.rb +19 -0
  22. data/acceptance/basics/test/integration/chef-current-install/serverspec/spec_helper.rb +6 -0
  23. data/acceptance/basics/test/integration/helpers/serverspec/Gemfile +8 -0
  24. data/acceptance/data-collector/.acceptance/acceptance-cookbook/.gitignore +2 -0
  25. data/acceptance/data-collector/.acceptance/acceptance-cookbook/metadata.rb +3 -0
  26. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/destroy.rb +2 -0
  27. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/provision.rb +2 -0
  28. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/verify.rb +2 -0
  29. data/acceptance/data-collector/.acceptance/data-collector-test/.gitignore +16 -0
  30. data/acceptance/data-collector/.acceptance/data-collector-test/Berksfile +3 -0
  31. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb +101 -0
  32. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/apigemfile +3 -0
  33. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-both-mode.rb +4 -0
  34. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-client-mode.rb +4 -0
  35. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-no-endpoint.rb +2 -0
  36. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-solo-mode.rb +4 -0
  37. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/config.ru +2 -0
  38. data/acceptance/data-collector/.acceptance/data-collector-test/metadata.rb +7 -0
  39. data/acceptance/data-collector/.acceptance/data-collector-test/recipes/default.rb +44 -0
  40. data/acceptance/data-collector/.kitchen.yml +9 -0
  41. data/acceptance/data-collector/Berksfile +3 -0
  42. data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +208 -0
  43. data/acceptance/data-collector/test/integration/helpers/serverspec/Gemfile +8 -0
  44. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/.gitignore +2 -0
  45. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/metadata.rb +1 -0
  46. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -0
  47. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -0
  48. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/verify.rb +61 -0
  49. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/.gitignore +2 -0
  50. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/cookbook_kitchen.rb +43 -0
  51. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/top_cookbooks.rb +41 -0
  52. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/metadata.rb +3 -0
  53. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -0
  54. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -0
  55. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -0
  56. data/acceptance/top-cookbooks/.gitignore +1 -0
  57. data/acceptance/top-cookbooks/.kitchen.chocolatey.yml +6 -0
  58. data/acceptance/top-cookbooks/.kitchen.iis.yml +4 -0
  59. data/acceptance/top-cookbooks/.kitchen.learn-the-basics-rhel.yml +7 -0
  60. data/acceptance/top-cookbooks/.kitchen.learn-the-basics-ubuntu.yml +7 -0
  61. data/acceptance/top-cookbooks/.kitchen.learn-the-basics-windows.yml +7 -0
  62. data/acceptance/top-cookbooks/.kitchen.powershell.yml +4 -0
  63. data/acceptance/top-cookbooks/.kitchen.sql_server.yml +5 -0
  64. data/acceptance/top-cookbooks/.kitchen.winbox.yml +8 -0
  65. data/acceptance/top-cookbooks/.kitchen.windows.yml +38 -0
  66. data/acceptance/trivial/.acceptance/acceptance-cookbook/.gitignore +2 -0
  67. data/acceptance/trivial/.acceptance/acceptance-cookbook/metadata.rb +2 -0
  68. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -0
  69. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -0
  70. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -0
  71. data/acceptance/trivial/.kitchen.yml +7 -0
  72. data/acceptance/trivial/test/integration/chef-current-install/inspec/chef_client_spec.rb +5 -0
  73. data/acceptance/windows-service/.acceptance/acceptance-cookbook/.gitignore +2 -0
  74. data/acceptance/windows-service/.acceptance/acceptance-cookbook/metadata.rb +2 -0
  75. data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -0
  76. data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -0
  77. data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -0
  78. data/acceptance/windows-service/.kitchen.yml +7 -0
  79. data/acceptance/windows-service/test/integration/chef-windows-service/inspec/chef_windows_service_spec.rb +58 -0
  80. data/chef-universal-mingw32.gemspec +2 -2
  81. data/chef.gemspec +10 -10
  82. data/distro/powershell/chef/Chef.PowerShell.dll +0 -0
  83. data/distro/powershell/chef/Newtonsoft.Json.dll +0 -0
  84. data/lib/chef/api_client.rb +1 -1
  85. data/lib/chef/api_client/registration.rb +10 -2
  86. data/lib/chef/api_client_v1.rb +7 -6
  87. data/lib/chef/application.rb +75 -46
  88. data/lib/chef/application/client.rb +17 -19
  89. data/lib/chef/application/solo.rb +13 -16
  90. data/lib/chef/application/windows_service.rb +5 -5
  91. data/lib/chef/audit/audit_event_proxy.rb +1 -1
  92. data/lib/chef/audit/audit_reporter.rb +12 -12
  93. data/lib/chef/audit/runner.rb +2 -2
  94. data/lib/chef/chef_fs/chef_fs_data_store.rb +17 -31
  95. data/lib/chef/chef_fs/command_line.rb +9 -9
  96. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +1 -1
  97. data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +1 -1
  98. data/lib/chef/chef_fs/data_handler/policy_group_data_handler.rb +1 -1
  99. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +2 -2
  100. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +2 -2
  101. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +1 -1
  102. data/lib/chef/chef_fs/file_system/repository/base_file.rb +2 -2
  103. data/lib/chef/chef_fs/file_system_cache.rb +1 -1
  104. data/lib/chef/chef_fs/path_utils.rb +2 -2
  105. data/lib/chef/client.rb +61 -41
  106. data/lib/chef/config.rb +1 -2
  107. data/lib/chef/config_fetcher.rb +1 -1
  108. data/lib/chef/cookbook/chefignore.rb +2 -2
  109. data/lib/chef/cookbook/cookbook_collection.rb +2 -2
  110. data/lib/chef/cookbook/cookbook_version_loader.rb +0 -1
  111. data/lib/chef/cookbook/gem_installer.rb +4 -4
  112. data/lib/chef/cookbook/manifest_v2.rb +1 -1
  113. data/lib/chef/cookbook/metadata.rb +2 -3
  114. data/lib/chef/cookbook/remote_file_vendor.rb +4 -4
  115. data/lib/chef/cookbook/synchronizer.rb +2 -2
  116. data/lib/chef/cookbook/syntax_check.rb +4 -4
  117. data/lib/chef/cookbook_loader.rb +10 -2
  118. data/lib/chef/cookbook_site_streaming_uploader.rb +4 -4
  119. data/lib/chef/cookbook_uploader.rb +2 -3
  120. data/lib/chef/cookbook_version.rb +5 -11
  121. data/lib/chef/data_bag.rb +1 -3
  122. data/lib/chef/data_bag_item.rb +1 -7
  123. data/lib/chef/data_collector.rb +111 -35
  124. data/lib/chef/data_collector/messages.rb +2 -2
  125. data/lib/chef/data_collector/messages/helpers.rb +2 -4
  126. data/lib/chef/deprecated.rb +0 -4
  127. data/lib/chef/dsl/data_query.rb +1 -5
  128. data/lib/chef/dsl/include_attribute.rb +3 -7
  129. data/lib/chef/dsl/include_recipe.rb +1 -5
  130. data/lib/chef/dsl/platform_introspection.rb +9 -13
  131. data/lib/chef/dsl/reboot_pending.rb +1 -8
  132. data/lib/chef/dsl/recipe.rb +2 -12
  133. data/lib/chef/dsl/universal.rb +3 -3
  134. data/lib/chef/environment.rb +2 -4
  135. data/lib/chef/event_dispatch/dsl.rb +2 -2
  136. data/lib/chef/exceptions.rb +1 -1
  137. data/lib/chef/file_access_control/unix.rb +14 -14
  138. data/lib/chef/file_content_management/content_base.rb +3 -1
  139. data/lib/chef/file_content_management/deploy/cp.rb +2 -2
  140. data/lib/chef/file_content_management/deploy/mv_unix.rb +4 -4
  141. data/lib/chef/file_content_management/deploy/mv_windows.rb +1 -1
  142. data/lib/chef/file_content_management/tempfile.rb +1 -1
  143. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +3 -3
  144. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +3 -1
  145. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +2 -2
  146. data/lib/chef/handler.rb +1 -3
  147. data/lib/chef/handler/json_file.rb +1 -2
  148. data/lib/chef/http.rb +23 -11
  149. data/lib/chef/http/auth_credentials.rb +1 -1
  150. data/lib/chef/http/basic_client.rb +16 -17
  151. data/lib/chef/http/decompressor.rb +6 -6
  152. data/lib/chef/http/http_request.rb +5 -5
  153. data/lib/chef/http/json_output.rb +2 -2
  154. data/lib/chef/http/socketless_chef_zero_client.rb +2 -2
  155. data/lib/chef/http/validate_content_length.rb +5 -5
  156. data/lib/chef/knife.rb +1 -1
  157. data/lib/chef/knife/bootstrap.rb +12 -37
  158. data/lib/chef/knife/bootstrap/templates/chef-full.erb +7 -1
  159. data/lib/chef/knife/client_reregister.rb +1 -1
  160. data/lib/chef/knife/configure.rb +1 -3
  161. data/lib/chef/knife/cookbook_download.rb +2 -2
  162. data/lib/chef/knife/cookbook_metadata.rb +3 -3
  163. data/lib/chef/knife/cookbook_site_install.rb +2 -2
  164. data/lib/chef/knife/cookbook_site_share.rb +5 -5
  165. data/lib/chef/knife/cookbook_test.rb +2 -2
  166. data/lib/chef/knife/cookbook_upload.rb +2 -2
  167. data/lib/chef/knife/core/status_presenter.rb +22 -17
  168. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  169. data/lib/chef/knife/deps.rb +1 -1
  170. data/lib/chef/knife/environment_compare.rb +4 -4
  171. data/lib/chef/knife/exec.rb +3 -3
  172. data/lib/chef/knife/list.rb +1 -1
  173. data/lib/chef/knife/node_policy_set.rb +79 -0
  174. data/lib/chef/knife/osc_user_reregister.rb +1 -1
  175. data/lib/chef/knife/ssh.rb +35 -22
  176. data/lib/chef/knife/ssl_check.rb +3 -3
  177. data/lib/chef/knife/ssl_fetch.rb +1 -1
  178. data/lib/chef/knife/user_reregister.rb +1 -1
  179. data/lib/chef/knife/xargs.rb +1 -1
  180. data/lib/chef/mixin/api_version_request_handling.rb +2 -4
  181. data/lib/chef/mixin/create_path.rb +1 -1
  182. data/lib/chef/mixin/deprecation.rb +14 -14
  183. data/lib/chef/mixin/from_file.rb +5 -0
  184. data/lib/chef/mixin/get_source_from_package.rb +2 -2
  185. data/lib/chef/mixin/homebrew_user.rb +13 -2
  186. data/lib/chef/mixin/openssl_helper.rb +119 -0
  187. data/lib/chef/mixin/params_validate.rb +2 -8
  188. data/lib/chef/mixin/powershell_exec.rb +105 -0
  189. data/lib/chef/mixin/provides.rb +3 -2
  190. data/lib/chef/mixin/securable.rb +1 -5
  191. data/lib/chef/mixin/shell_out.rb +2 -2
  192. data/lib/chef/mixin/template.rb +1 -3
  193. data/lib/chef/mixin/user_context.rb +6 -3
  194. data/lib/chef/mixin/why_run.rb +6 -11
  195. data/lib/chef/monkey_patches/net_http.rb +7 -7
  196. data/lib/chef/monologger.rb +2 -86
  197. data/lib/chef/node.rb +30 -20
  198. data/lib/chef/node/attribute.rb +1 -6
  199. data/lib/chef/node/attribute_collections.rb +2 -2
  200. data/lib/chef/node/immutable_collections.rb +1 -1
  201. data/lib/chef/node/mixin/immutablize_array.rb +110 -3
  202. data/lib/chef/node/mixin/immutablize_hash.rb +111 -5
  203. data/lib/chef/node_map.rb +5 -23
  204. data/lib/chef/platform/query_helpers.rb +0 -12
  205. data/lib/chef/policy_builder/dynamic.rb +1 -1
  206. data/lib/chef/policy_builder/expand_node_object.rb +1 -1
  207. data/lib/chef/policy_builder/policyfile.rb +17 -1
  208. data/lib/chef/powershell.rb +55 -0
  209. data/lib/chef/property.rb +12 -34
  210. data/lib/chef/provider.rb +16 -39
  211. data/lib/chef/provider/apt_preference.rb +3 -3
  212. data/lib/chef/provider/apt_repository.rb +116 -34
  213. data/lib/chef/provider/batch.rb +1 -1
  214. data/lib/chef/provider/cookbook_file/content.rb +1 -1
  215. data/lib/chef/provider/cron.rb +10 -10
  216. data/lib/chef/provider/cron/unix.rb +3 -3
  217. data/lib/chef/provider/directory.rb +3 -3
  218. data/lib/chef/provider/dsc_resource.rb +4 -4
  219. data/lib/chef/provider/dsc_script.rb +4 -4
  220. data/lib/chef/provider/execute.rb +9 -5
  221. data/lib/chef/provider/file.rb +12 -12
  222. data/lib/chef/provider/git.rb +14 -14
  223. data/lib/chef/provider/group.rb +6 -6
  224. data/lib/chef/provider/group/aix.rb +1 -1
  225. data/lib/chef/provider/group/dscl.rb +4 -4
  226. data/lib/chef/provider/group/groupadd.rb +4 -4
  227. data/lib/chef/provider/group/groupmod.rb +3 -3
  228. data/lib/chef/provider/group/pw.rb +4 -4
  229. data/lib/chef/provider/group/windows.rb +2 -2
  230. data/lib/chef/provider/http_request.rb +12 -12
  231. data/lib/chef/provider/ifconfig.rb +6 -6
  232. data/lib/chef/provider/ifconfig/aix.rb +1 -1
  233. data/lib/chef/provider/ifconfig/debian.rb +3 -5
  234. data/lib/chef/provider/launchd.rb +1 -1
  235. data/lib/chef/provider/link.rb +6 -6
  236. data/lib/chef/provider/log.rb +1 -1
  237. data/lib/chef/provider/lwrp_base.rb +2 -2
  238. data/lib/chef/provider/mdadm.rb +10 -10
  239. data/lib/chef/provider/mount.rb +12 -12
  240. data/lib/chef/provider/mount/aix.rb +20 -21
  241. data/lib/chef/provider/mount/mount.rb +20 -15
  242. data/lib/chef/provider/mount/solaris.rb +6 -6
  243. data/lib/chef/provider/mount/windows.rb +7 -7
  244. data/lib/chef/provider/noop.rb +1 -1
  245. data/lib/chef/provider/ohai.rb +1 -1
  246. data/lib/chef/provider/osx_profile.rb +8 -8
  247. data/lib/chef/provider/package.rb +56 -42
  248. data/lib/chef/provider/package/apt.rb +24 -14
  249. data/lib/chef/provider/package/{aix.rb → bff.rb} +12 -12
  250. data/lib/chef/provider/package/cab.rb +3 -3
  251. data/lib/chef/provider/package/chocolatey.rb +1 -9
  252. data/lib/chef/provider/package/dnf/python_helper.rb +6 -6
  253. data/lib/chef/provider/package/dpkg.rb +9 -9
  254. data/lib/chef/provider/package/freebsd/base.rb +2 -2
  255. data/lib/chef/provider/package/freebsd/pkg.rb +2 -2
  256. data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
  257. data/lib/chef/provider/package/homebrew.rb +3 -3
  258. data/lib/chef/provider/package/ips.rb +2 -2
  259. data/lib/chef/provider/package/macports.rb +3 -3
  260. data/lib/chef/provider/package/msu.rb +2 -2
  261. data/lib/chef/provider/package/openbsd.rb +3 -3
  262. data/lib/chef/provider/package/pacman.rb +3 -3
  263. data/lib/chef/provider/package/paludis.rb +2 -2
  264. data/lib/chef/provider/package/portage.rb +27 -33
  265. data/lib/chef/provider/package/powershell.rb +24 -9
  266. data/lib/chef/provider/package/rpm.rb +5 -6
  267. data/lib/chef/provider/package/rubygems.rb +32 -28
  268. data/lib/chef/provider/package/smartos.rb +6 -6
  269. data/lib/chef/provider/package/solaris.rb +10 -10
  270. data/lib/chef/provider/package/windows.rb +6 -15
  271. data/lib/chef/provider/package/windows/exe.rb +6 -4
  272. data/lib/chef/provider/package/windows/msi.rb +8 -6
  273. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +12 -6
  274. data/lib/chef/provider/package/yum.rb +167 -398
  275. data/lib/chef/provider/package/yum/python_helper.rb +221 -0
  276. data/lib/chef/provider/package/yum/rpm_utils.rb +10 -1
  277. data/lib/chef/provider/package/yum/simplejson/LICENSE.txt +79 -0
  278. data/lib/chef/provider/package/yum/simplejson/__init__.py +318 -0
  279. data/lib/chef/provider/package/yum/simplejson/__init__.pyc +0 -0
  280. data/lib/chef/provider/package/yum/simplejson/decoder.py +354 -0
  281. data/lib/chef/provider/package/yum/simplejson/decoder.pyc +0 -0
  282. data/lib/chef/provider/package/yum/simplejson/encoder.py +440 -0
  283. data/lib/chef/provider/package/yum/simplejson/encoder.pyc +0 -0
  284. data/lib/chef/provider/package/yum/simplejson/scanner.py +65 -0
  285. data/lib/chef/provider/package/yum/simplejson/scanner.pyc +0 -0
  286. data/lib/chef/provider/package/yum/simplejson/tool.py +37 -0
  287. data/lib/chef/provider/package/yum/version.rb +56 -0
  288. data/lib/chef/provider/package/yum/yum_cache.rb +33 -316
  289. data/lib/chef/provider/package/yum/yum_helper.py +198 -0
  290. data/lib/chef/provider/package/zypper.rb +9 -13
  291. data/lib/chef/provider/powershell_script.rb +3 -3
  292. data/lib/chef/provider/reboot.rb +3 -3
  293. data/lib/chef/provider/registry_key.rb +16 -4
  294. data/lib/chef/provider/remote_directory.rb +1 -3
  295. data/lib/chef/provider/remote_file/cache_control_data.rb +1 -1
  296. data/lib/chef/provider/remote_file/content.rb +4 -4
  297. data/lib/chef/provider/remote_file/http.rb +5 -3
  298. data/lib/chef/provider/remote_file/local_file.rb +1 -1
  299. data/lib/chef/provider/remote_file/network_file.rb +2 -2
  300. data/lib/chef/provider/route.rb +12 -11
  301. data/lib/chef/provider/ruby_block.rb +1 -1
  302. data/lib/chef/provider/script.rb +2 -2
  303. data/lib/chef/provider/service.rb +14 -14
  304. data/lib/chef/provider/service/aix.rb +3 -3
  305. data/lib/chef/provider/service/aixinit.rb +2 -2
  306. data/lib/chef/provider/service/debian.rb +5 -5
  307. data/lib/chef/provider/service/freebsd.rb +3 -3
  308. data/lib/chef/provider/service/gentoo.rb +2 -2
  309. data/lib/chef/provider/service/macosx.rb +8 -8
  310. data/lib/chef/provider/service/openbsd.rb +1 -1
  311. data/lib/chef/provider/service/simple.rb +7 -7
  312. data/lib/chef/provider/service/systemd.rb +4 -4
  313. data/lib/chef/provider/service/upstart.rb +10 -9
  314. data/lib/chef/provider/service/windows.rb +245 -70
  315. data/lib/chef/provider/subversion.rb +8 -8
  316. data/lib/chef/provider/systemd_unit.rb +25 -6
  317. data/lib/chef/provider/user.rb +10 -10
  318. data/lib/chef/provider/user/aix.rb +3 -3
  319. data/lib/chef/provider/user/dscl.rb +2 -2
  320. data/lib/chef/provider/user/pw.rb +4 -4
  321. data/lib/chef/provider/user/solaris.rb +1 -1
  322. data/lib/chef/provider/user/useradd.rb +3 -3
  323. data/lib/chef/provider/user/windows.rb +4 -4
  324. data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
  325. data/lib/chef/provider/{env.rb → windows_env.rb} +55 -19
  326. data/lib/chef/provider/windows_task.rb +27 -27
  327. data/lib/chef/provider/zypper_repository.rb +7 -7
  328. data/lib/chef/provider_resolver.rb +4 -4
  329. data/lib/chef/providers.rb +2 -9
  330. data/lib/chef/resource.rb +19 -13
  331. data/lib/chef/resource/action_class.rb +2 -2
  332. data/lib/chef/resource/apt_package.rb +10 -4
  333. data/lib/chef/resource/apt_preference.rb +20 -7
  334. data/lib/chef/resource/apt_repository.rb +21 -12
  335. data/lib/chef/resource/apt_update.rb +3 -3
  336. data/lib/chef/resource/bash.rb +6 -4
  337. data/lib/chef/resource/batch.rb +8 -6
  338. data/lib/chef/resource/bff_package.rb +8 -5
  339. data/lib/chef/resource/breakpoint.rb +9 -6
  340. data/lib/chef/resource/build_essential.rb +139 -0
  341. data/lib/chef/resource/cab_package.rb +5 -4
  342. data/lib/chef/resource/chef_gem.rb +1 -1
  343. data/lib/chef/resource/chef_handler.rb +130 -0
  344. data/lib/chef/resource/chocolatey_package.rb +6 -6
  345. data/lib/chef/resource/cookbook_file.rb +12 -9
  346. data/lib/chef/resource/cron.rb +14 -75
  347. data/lib/chef/resource/csh.rb +6 -4
  348. data/lib/chef/resource/directory.rb +7 -4
  349. data/lib/chef/resource/dmg_package.rb +161 -0
  350. data/lib/chef/resource/dnf_package.rb +10 -7
  351. data/lib/chef/resource/dpkg_package.rb +5 -3
  352. data/lib/chef/resource/dsc_resource.rb +11 -28
  353. data/lib/chef/resource/dsc_script.rb +14 -37
  354. data/lib/chef/resource/execute.rb +15 -78
  355. data/lib/chef/resource/file.rb +6 -5
  356. data/lib/chef/resource/file/verification.rb +5 -1
  357. data/lib/chef/resource/freebsd_package.rb +2 -1
  358. data/lib/chef/resource/gem_package.rb +6 -3
  359. data/lib/chef/resource/git.rb +4 -15
  360. data/lib/chef/resource/group.rb +7 -46
  361. data/lib/chef/resource/homebrew_cask.rb +98 -0
  362. data/lib/chef/resource/homebrew_package.rb +3 -3
  363. data/lib/chef/resource/homebrew_tap.rb +86 -0
  364. data/lib/chef/resource/hostname.rb +249 -0
  365. data/lib/chef/resource/http_request.rb +8 -22
  366. data/lib/chef/resource/ifconfig.rb +3 -2
  367. data/lib/chef/resource/ips_package.rb +4 -3
  368. data/lib/chef/resource/ksh.rb +7 -6
  369. data/lib/chef/resource/launchd.rb +4 -4
  370. data/lib/chef/resource/link.rb +18 -56
  371. data/lib/chef/resource/log.rb +6 -8
  372. data/lib/chef/resource/lwrp_base.rb +4 -5
  373. data/lib/chef/resource/macos_userdefaults.rb +133 -0
  374. data/lib/chef/resource/macosx_service.rb +7 -23
  375. data/lib/chef/resource/macports_package.rb +2 -1
  376. data/lib/chef/resource/mdadm.rb +13 -84
  377. data/lib/chef/resource/mount.rb +21 -127
  378. data/lib/chef/resource/msu_package.rb +4 -4
  379. data/lib/chef/resource/ohai.rb +5 -3
  380. data/lib/chef/resource/ohai_hint.rb +93 -0
  381. data/lib/chef/resource/openbsd_package.rb +3 -3
  382. data/lib/chef/resource/openssl_dhparam.rb +80 -0
  383. data/lib/chef/resource/openssl_rsa_private_key.rb +93 -0
  384. data/lib/chef/resource/openssl_rsa_public_key.rb +73 -0
  385. data/lib/chef/resource/osx_profile.rb +9 -10
  386. data/lib/chef/resource/package.rb +8 -6
  387. data/lib/chef/resource/pacman_package.rb +3 -2
  388. data/lib/chef/resource/paludis_package.rb +4 -4
  389. data/lib/chef/resource/perl.rb +6 -4
  390. data/lib/chef/resource/portage_package.rb +3 -6
  391. data/lib/chef/resource/powershell_package.rb +9 -13
  392. data/lib/chef/resource/powershell_script.rb +9 -8
  393. data/lib/chef/resource/python.rb +5 -4
  394. data/lib/chef/resource/reboot.rb +8 -9
  395. data/lib/chef/resource/registry_key.rb +9 -19
  396. data/lib/chef/resource/remote_directory.rb +5 -3
  397. data/lib/chef/resource/remote_file.rb +11 -50
  398. data/lib/chef/resource/resource_notification.rb +2 -2
  399. data/lib/chef/resource/rhsm_errata.rb +44 -0
  400. data/lib/chef/resource/rhsm_errata_level.rb +51 -0
  401. data/lib/chef/resource/rhsm_register.rb +162 -0
  402. data/lib/chef/resource/rhsm_repo.rb +62 -0
  403. data/lib/chef/resource/rhsm_subscription.rb +95 -0
  404. data/lib/chef/resource/route.rb +3 -1
  405. data/lib/chef/resource/rpm_package.rb +3 -3
  406. data/lib/chef/resource/ruby.rb +6 -4
  407. data/lib/chef/resource/ruby_block.rb +6 -17
  408. data/lib/chef/resource/scm.rb +14 -146
  409. data/lib/chef/resource/script.rb +7 -5
  410. data/lib/chef/resource/service.rb +2 -1
  411. data/lib/chef/resource/smartos_package.rb +4 -3
  412. data/lib/chef/resource/solaris_package.rb +3 -2
  413. data/lib/chef/resource/subversion.rb +20 -4
  414. data/lib/chef/resource/sudo.rb +231 -0
  415. data/lib/chef/resource/support/sudoer.erb +18 -0
  416. data/lib/chef/resource/swap_file.rb +209 -0
  417. data/lib/chef/resource/sysctl.rb +111 -0
  418. data/lib/chef/resource/systemd_unit.rb +6 -5
  419. data/lib/chef/resource/template.rb +6 -27
  420. data/lib/chef/resource/windows_ad_join.rb +92 -0
  421. data/lib/chef/resource/windows_auto_run.rb +87 -0
  422. data/lib/chef/resource/{env.rb → windows_env.rb} +11 -5
  423. data/lib/chef/resource/windows_feature.rb +95 -0
  424. data/lib/chef/resource/windows_feature_dism.rb +226 -0
  425. data/lib/chef/resource/windows_feature_powershell.rb +256 -0
  426. data/lib/chef/resource/windows_font.rb +127 -0
  427. data/lib/chef/resource/windows_package.rb +5 -3
  428. data/lib/chef/resource/windows_pagefile.rb +206 -0
  429. data/lib/chef/resource/windows_path.rb +3 -3
  430. data/lib/chef/resource/windows_printer.rb +148 -0
  431. data/lib/chef/resource/windows_printer_port.rb +136 -0
  432. data/lib/chef/resource/windows_service.rb +79 -38
  433. data/lib/chef/resource/windows_shortcut.rb +79 -0
  434. data/lib/chef/resource/windows_task.rb +5 -5
  435. data/lib/chef/resource/yum_package.rb +8 -2
  436. data/lib/chef/resource/yum_repository.rb +12 -5
  437. data/lib/chef/resource/zypper_package.rb +5 -3
  438. data/lib/chef/resource/zypper_repository.rb +17 -12
  439. data/lib/chef/resource_inspector.rb +89 -0
  440. data/lib/chef/resource_reporter.rb +5 -6
  441. data/lib/chef/resource_resolver.rb +4 -4
  442. data/lib/chef/resources.rb +31 -6
  443. data/lib/chef/role.rb +1 -3
  444. data/lib/chef/run_context.rb +21 -12
  445. data/lib/chef/run_context/cookbook_compiler.rb +18 -9
  446. data/lib/chef/search/query.rb +1 -2
  447. data/lib/chef/shell.rb +0 -1
  448. data/lib/chef/shell/model_wrapper.rb +1 -1
  449. data/lib/chef/shell/shell_session.rb +4 -3
  450. data/lib/chef/util/diff.rb +2 -2
  451. data/lib/chef/util/dsc/configuration_generator.rb +1 -1
  452. data/lib/chef/util/dsc/lcm_output_parser.rb +1 -1
  453. data/lib/chef/util/dsc/local_configuration_manager.rb +4 -4
  454. data/lib/chef/util/selinux.rb +1 -1
  455. data/lib/chef/util/windows/logon_session.rb +5 -2
  456. data/lib/chef/util/windows/net_user.rb +2 -2
  457. data/lib/chef/util/windows/volume.rb +0 -4
  458. data/lib/chef/version.rb +1 -1
  459. data/lib/chef/win32/api/error.rb +2 -2
  460. data/lib/chef/win32/api/net.rb +1 -1
  461. data/lib/chef/win32/api/security.rb +11 -0
  462. data/lib/chef/win32/eventlog.rb +2 -2
  463. data/lib/chef/win32/mutex.rb +1 -1
  464. data/lib/chef/win32/registry.rb +17 -17
  465. data/lib/chef/win32/security.rb +34 -12
  466. data/lib/chef/win32/security/sid.rb +1 -2
  467. data/lib/chef/win32/version.rb +2 -15
  468. data/lib/chef/win32_service_constants.rb +143 -0
  469. data/spec/data/mixin/invalid_data.rb +3 -0
  470. data/spec/data/mixin/real_data.rb +2 -0
  471. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.aarch64.rpm +0 -0
  472. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.i686.rpm +0 -0
  473. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.ppc64.rpm +0 -0
  474. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.ppc64le.rpm +0 -0
  475. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.s390x.rpm +0 -0
  476. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.src.rpm +0 -0
  477. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.x86_64.rpm +0 -0
  478. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.aarch64.rpm +0 -0
  479. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.i686.rpm +0 -0
  480. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.ppc64.rpm +0 -0
  481. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.ppc64le.rpm +0 -0
  482. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.s390x.rpm +0 -0
  483. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.src.rpm +0 -0
  484. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.x86_64.rpm +0 -0
  485. data/spec/functional/assets/yumrepo/repodata/4632d67cb92636e7575d911c24f0e04d3505a944e97c483abe0c3e73a7c62d33-filelists.sqlite.bz2 +0 -0
  486. data/spec/functional/assets/yumrepo/repodata/74599b793e54d877323837d2d81a1c3c594c44e4335f9528234bb490f7b9b439-other.xml.gz +0 -0
  487. data/spec/functional/assets/yumrepo/repodata/a845d418f919d2115ab95a56b2c76f6825ad0d0bede49181a55c04f58995d057-primary.sqlite.bz2 +0 -0
  488. data/spec/functional/assets/yumrepo/repodata/af9b7cf9ef23bd7b43068d74a460f3b5d06753d638e58e4a0c9edc35bfb9cdc4-other.sqlite.bz2 +0 -0
  489. data/spec/functional/assets/yumrepo/repodata/bdb4f5f1492a3b9532f22c43110a81500dd744f23da0aec5c33b2a41317c737d-filelists.xml.gz +0 -0
  490. data/spec/functional/assets/yumrepo/repodata/c10d1d34ce99e02f12ec96ef68360543ab1bb7c3cb81a4a2bf78df7d8597e9df-primary.xml.gz +0 -0
  491. data/spec/functional/assets/yumrepo/repodata/filelists.xml.gz +0 -0
  492. data/spec/functional/assets/yumrepo/repodata/other.xml.gz +0 -0
  493. data/spec/functional/assets/yumrepo/repodata/primary.xml.gz +0 -0
  494. data/spec/functional/assets/yumrepo/repodata/repomd.xml +19 -53
  495. data/spec/functional/event_loggers/windows_eventlog_spec.rb +2 -2
  496. data/spec/functional/http/simple_spec.rb +6 -6
  497. data/spec/functional/mixin/from_file_spec.rb +82 -0
  498. data/spec/functional/notifications_spec.rb +1 -1
  499. data/spec/functional/resource/{package_spec.rb → apt_package_spec.rb} +4 -4
  500. data/spec/functional/resource/dnf_package_spec.rb +115 -115
  501. data/spec/functional/resource/ifconfig_spec.rb +1 -2
  502. data/spec/functional/resource/link_spec.rb +9 -13
  503. data/spec/functional/resource/powershell_script_spec.rb +0 -2
  504. data/spec/functional/resource/registry_spec.rb +3 -3
  505. data/spec/functional/resource/remote_file_spec.rb +4 -4
  506. data/spec/functional/resource/user/windows_spec.rb +3 -1
  507. data/spec/functional/resource/windows_env_spec.rb +285 -0
  508. data/spec/functional/resource/windows_task_spec.rb +303 -2
  509. data/spec/functional/resource/yum_package_spec.rb +949 -0
  510. data/spec/functional/root_alias_spec.rb +1 -1
  511. data/spec/functional/win32/security_spec.rb +60 -7
  512. data/spec/functional/win32/versions_spec.rb +7 -9
  513. data/spec/integration/client/client_spec.rb +99 -7
  514. data/spec/integration/knife/chef_fs_data_store_spec.rb +23 -4
  515. data/spec/integration/recipes/recipe_dsl_spec.rb +26 -26
  516. data/spec/integration/recipes/resource_action_spec.rb +25 -120
  517. data/spec/spec_helper.rb +10 -2
  518. data/spec/support/lib/chef/resource/one_two_three_four.rb +0 -2
  519. data/spec/support/lib/chef/resource/zen_master.rb +1 -3
  520. data/spec/support/mock/constant.rb +1 -1
  521. data/spec/support/platform_helpers.rb +24 -7
  522. data/spec/support/shared/context/client.rb +13 -10
  523. data/spec/support/shared/examples/client.rb +50 -0
  524. data/spec/support/shared/functional/file_resource.rb +1 -1
  525. data/spec/support/shared/functional/securable_resource.rb +2 -2
  526. data/spec/support/shared/integration/knife_support.rb +5 -0
  527. data/spec/unit/application/client_spec.rb +39 -13
  528. data/spec/unit/application/solo_spec.rb +1 -8
  529. data/spec/unit/application_spec.rb +66 -2
  530. data/spec/unit/audit/audit_event_proxy_spec.rb +1 -1
  531. data/spec/unit/audit/audit_reporter_spec.rb +16 -16
  532. data/spec/unit/chef_fs/file_system_spec.rb +1 -1
  533. data/spec/unit/client_spec.rb +3 -4
  534. data/spec/unit/cookbook/metadata_spec.rb +1 -1
  535. data/spec/unit/cookbook_loader_spec.rb +6 -6
  536. data/spec/unit/cookbook_manifest_spec.rb +2 -2
  537. data/spec/unit/cookbook_version_file_specificity_spec.rb +5 -25
  538. data/spec/unit/data_collector/messages/helpers_spec.rb +9 -0
  539. data/spec/unit/data_collector/resource_report_spec.rb +3 -3
  540. data/spec/unit/data_collector_spec.rb +135 -1
  541. data/spec/unit/dsl/reboot_pending_spec.rb +0 -13
  542. data/spec/unit/dsl/recipe_spec.rb +0 -13
  543. data/spec/unit/environment_spec.rb +2 -2
  544. data/spec/unit/exceptions_spec.rb +1 -1
  545. data/spec/unit/http/validate_content_length_spec.rb +5 -5
  546. data/spec/unit/knife/bootstrap_spec.rb +11 -15
  547. data/spec/unit/knife/configure_spec.rb +1 -2
  548. data/spec/unit/knife/cookbook_test_spec.rb +2 -2
  549. data/spec/unit/knife/core/gem_glob_loader_spec.rb +2 -2
  550. data/spec/unit/knife/core/node_editor_spec.rb +6 -6
  551. data/spec/unit/knife/environment_compare_spec.rb +3 -3
  552. data/spec/unit/knife/node_edit_spec.rb +3 -1
  553. data/spec/unit/knife/node_policy_set_spec.rb +122 -0
  554. data/spec/unit/knife/osc_user_reregister_spec.rb +1 -1
  555. data/spec/unit/knife/osc_user_show_spec.rb +1 -1
  556. data/spec/unit/knife/ssh_spec.rb +18 -0
  557. data/spec/unit/log/syslog_spec.rb +2 -4
  558. data/spec/unit/log/winevt_spec.rb +2 -3
  559. data/spec/unit/lwrp_spec.rb +4 -4
  560. data/spec/unit/mixin/homebrew_user_spec.rb +1 -5
  561. data/spec/unit/mixin/openssl_helper_spec.rb +252 -0
  562. data/spec/unit/mixin/powershell_exec_spec.rb +43 -0
  563. data/spec/unit/node/attribute_spec.rb +3 -3
  564. data/spec/unit/node/immutable_collections_spec.rb +11 -1
  565. data/spec/unit/node_map_spec.rb +2 -2
  566. data/spec/unit/node_spec.rb +11 -16
  567. data/spec/unit/platform/query_helpers_spec.rb +0 -13
  568. data/spec/unit/policy_builder/policyfile_spec.rb +79 -2
  569. data/spec/unit/property/validation_spec.rb +51 -4
  570. data/spec/unit/provider/apt_repository_spec.rb +97 -32
  571. data/spec/unit/provider/cookbook_file_spec.rb +2 -1
  572. data/spec/unit/provider/cron/unix_spec.rb +8 -3
  573. data/spec/unit/provider/cron_spec.rb +27 -32
  574. data/spec/unit/provider/file_spec.rb +2 -1
  575. data/spec/unit/provider/group/dscl_spec.rb +7 -8
  576. data/spec/unit/provider/group/gpasswd_spec.rb +5 -2
  577. data/spec/unit/provider/group/groupmod_spec.rb +6 -3
  578. data/spec/unit/provider/group/pw_spec.rb +5 -2
  579. data/spec/unit/provider/link_spec.rb +6 -4
  580. data/spec/unit/provider/log_spec.rb +18 -13
  581. data/spec/unit/provider/mount/aix_spec.rb +1 -9
  582. data/spec/unit/provider/mount/mount_spec.rb +22 -0
  583. data/spec/unit/provider/osx_profile_spec.rb +3 -3
  584. data/spec/unit/provider/package/apt_spec.rb +431 -411
  585. data/spec/unit/provider/package/{aix_spec.rb → bff_spec.rb} +7 -5
  586. data/spec/unit/provider/package/chocolatey_spec.rb +0 -13
  587. data/spec/unit/provider/package/homebrew_spec.rb +2 -1
  588. data/spec/unit/provider/package/portage_spec.rb +11 -147
  589. data/spec/unit/provider/package/powershell_spec.rb +208 -57
  590. data/spec/unit/provider/package/rubygems_spec.rb +11 -2
  591. data/spec/unit/provider/package/windows_spec.rb +0 -19
  592. data/spec/unit/provider/package/yum/python_helper_spec.rb +29 -0
  593. data/spec/unit/provider/package/yum/yum_cache_spec.rb +86 -4
  594. data/spec/unit/provider/package/zypper_spec.rb +8 -0
  595. data/spec/unit/provider/package_spec.rb +47 -20
  596. data/spec/unit/provider/registry_key_spec.rb +7 -1
  597. data/spec/unit/provider/remote_directory_spec.rb +1 -1
  598. data/spec/unit/provider/remote_file_spec.rb +2 -1
  599. data/spec/unit/provider/service/macosx_spec.rb +4 -2
  600. data/spec/unit/provider/service/systemd_service_spec.rb +2 -10
  601. data/spec/unit/provider/service/windows_spec.rb +447 -30
  602. data/spec/unit/provider/systemd_unit_spec.rb +50 -13
  603. data/spec/unit/provider/template_spec.rb +2 -4
  604. data/spec/unit/provider/user/windows_spec.rb +3 -0
  605. data/spec/unit/provider/{env_spec.rb → windows_env_spec.rb} +102 -12
  606. data/spec/unit/provider/zypper_repository_spec.rb +4 -2
  607. data/spec/unit/provider_resolver_spec.rb +23 -38
  608. data/spec/unit/recipe_spec.rb +4 -4
  609. data/spec/unit/resource/apt_package_spec.rb +4 -0
  610. data/spec/unit/resource/apt_preference_spec.rb +0 -5
  611. data/spec/unit/resource/apt_repository_spec.rb +35 -10
  612. data/spec/unit/resource/apt_update_spec.rb +0 -5
  613. data/spec/unit/resource/bash_spec.rb +2 -3
  614. data/spec/unit/resource/batch_spec.rb +1 -4
  615. data/spec/unit/resource/{timestamped_deploy_spec.rb → build_essential_spec.rb} +10 -11
  616. data/spec/unit/resource/cab_package_spec.rb +1 -3
  617. data/{lib/chef/mixin/language_include_attribute.rb → spec/unit/resource/chef_handler_spec.rb} +13 -12
  618. data/spec/unit/resource/chocolatey_package_spec.rb +1 -3
  619. data/spec/unit/resource/cron_spec.rb +0 -5
  620. data/spec/unit/resource/csh_spec.rb +2 -3
  621. data/spec/unit/resource/directory_spec.rb +1 -6
  622. data/{lib/chef/resource/deploy_revision.rb → spec/unit/resource/dmg_package_spec.rb} +14 -10
  623. data/spec/unit/resource/dnf_package_spec.rb +20 -26
  624. data/spec/unit/resource/file_spec.rb +1 -1
  625. data/spec/unit/resource/freebsd_package_spec.rb +22 -23
  626. data/spec/unit/resource/gem_package_spec.rb +3 -5
  627. data/spec/unit/resource/git_spec.rb +1 -2
  628. data/spec/unit/resource/group_spec.rb +0 -5
  629. data/spec/unit/resource/homebrew_cask_spec.rb +35 -0
  630. data/spec/unit/resource/homebrew_package_spec.rb +4 -0
  631. data/spec/unit/resource/homebrew_tap_spec.rb +39 -0
  632. data/spec/unit/resource/hostname_spec.rb +43 -0
  633. data/spec/unit/resource/http_request_spec.rb +0 -5
  634. data/spec/unit/resource/ips_package_spec.rb +4 -0
  635. data/spec/unit/resource/ksh_spec.rb +2 -3
  636. data/spec/unit/resource/launchd_spec.rb +0 -5
  637. data/spec/unit/resource/link_spec.rb +1 -6
  638. data/spec/unit/resource/log_spec.rb +0 -5
  639. data/spec/unit/resource/macos_user_defaults_spec.rb +45 -0
  640. data/spec/unit/resource/mdadm_spec.rb +0 -5
  641. data/spec/unit/resource/mount_spec.rb +1 -6
  642. data/spec/unit/resource/msu_package_spec.rb +1 -3
  643. data/spec/unit/resource/ohai_hint_spec.rb +43 -0
  644. data/spec/unit/resource/ohai_spec.rb +0 -5
  645. data/spec/unit/resource/openbsd_package_spec.rb +8 -12
  646. data/spec/unit/resource/openssl_dhparam.rb +51 -0
  647. data/spec/unit/resource/openssl_rsa_private_key_spec.rb +59 -0
  648. data/spec/unit/resource/openssl_rsa_public_key_spec.rb +39 -0
  649. data/spec/unit/resource/osx_profile_spec.rb +0 -5
  650. data/spec/unit/resource/package_spec.rb +0 -5
  651. data/spec/unit/resource/perl_spec.rb +2 -3
  652. data/spec/unit/resource/portage_package_spec.rb +3 -7
  653. data/spec/unit/resource/powershell_package_spec.rb +11 -4
  654. data/spec/unit/resource/python_spec.rb +0 -5
  655. data/spec/unit/resource/reboot_spec.rb +0 -5
  656. data/spec/unit/resource/registry_key_spec.rb +5 -6
  657. data/spec/unit/resource/remote_directory_spec.rb +0 -5
  658. data/spec/unit/resource/remote_file_spec.rb +1 -5
  659. data/spec/unit/resource/rhsm_errata_level_spec.rb +46 -0
  660. data/{lib/chef/mixin/language_include_recipe.rb → spec/unit/resource/rhsm_errata_spec.rb} +14 -10
  661. data/spec/unit/resource/rhsm_register_spec.rb +199 -0
  662. data/spec/unit/resource/rhsm_repo_spec.rb +59 -0
  663. data/spec/unit/resource/rhsm_subscription_spec.rb +93 -0
  664. data/spec/unit/resource/route_spec.rb +1 -6
  665. data/spec/unit/resource/rpm_package_spec.rb +4 -0
  666. data/spec/unit/resource/ruby_block_spec.rb +0 -5
  667. data/spec/unit/resource/ruby_spec.rb +0 -5
  668. data/spec/unit/resource/scm_spec.rb +0 -15
  669. data/spec/unit/resource/service_spec.rb +0 -5
  670. data/spec/unit/resource/subversion_spec.rb +12 -0
  671. data/spec/unit/resource/sudo_spec.rb +92 -0
  672. data/spec/unit/resource/swap_file_spec.rb +40 -0
  673. data/spec/unit/resource/sysctl_spec.rb +56 -0
  674. data/spec/unit/resource/systemd_unit_spec.rb +5 -7
  675. data/spec/unit/resource/template_spec.rb +1 -3
  676. data/spec/unit/resource/user_spec.rb +0 -5
  677. data/spec/unit/resource/windows_ad_join.rb +45 -0
  678. data/spec/unit/resource/windows_auto_run_spec.rb +50 -0
  679. data/spec/unit/resource/{env_spec.rb → windows_env_spec.rb} +19 -21
  680. data/spec/unit/resource/windows_feature.rb +41 -0
  681. data/spec/unit/resource/windows_feature_dism.rb +51 -0
  682. data/spec/unit/resource/windows_feature_powershell.rb +51 -0
  683. data/spec/unit/resource/windows_font_spec.rb +44 -0
  684. data/spec/unit/resource/windows_package_spec.rb +2 -2
  685. data/spec/unit/resource/windows_pagefile_spec.rb +45 -0
  686. data/spec/unit/resource/windows_printer_port_spec.rb +45 -0
  687. data/spec/unit/resource/windows_printer_spec.rb +45 -0
  688. data/spec/unit/resource/windows_service_spec.rb +25 -4
  689. data/spec/unit/resource/windows_shortcut_spec.rb +39 -0
  690. data/spec/unit/resource/windows_task_spec.rb +0 -5
  691. data/spec/unit/resource/yum_repository_spec.rb +4 -0
  692. data/spec/unit/resource/zypper_repository_spec.rb +4 -0
  693. data/spec/unit/resource_inspector_spec.rb +60 -0
  694. data/spec/unit/resource_reporter_spec.rb +2 -2
  695. data/spec/unit/resource_spec.rb +0 -5
  696. data/spec/unit/shell/shell_session_spec.rb +0 -1
  697. data/spec/unit/user_spec.rb +1 -1
  698. data/spec/unit/util/windows/logon_session_spec.rb +2 -1
  699. data/spec/unit/win32/security_spec.rb +44 -1
  700. data/spec/unit/windows_service_spec.rb +4 -2
  701. data/tasks/announce.rb +1 -1
  702. data/tasks/cbgb.rb +84 -0
  703. data/tasks/dependencies.rb +38 -2
  704. data/tasks/maintainers.rb +7 -7
  705. data/tasks/rspec.rb +2 -2
  706. data/tasks/templates/prerelease.md.erb +2 -11
  707. data/tasks/templates/release.md.erb +1 -9
  708. metadata +225 -96
  709. data/lib/chef/knife/help.rb +0 -101
  710. data/lib/chef/knife/help_topics.rb +0 -4
  711. data/lib/chef/knife/index_rebuild.rb +0 -133
  712. data/lib/chef/mixin/language.rb +0 -48
  713. data/lib/chef/mixin/recipe_definition_dsl_core.rb +0 -35
  714. data/lib/chef/provider/deploy.rb +0 -470
  715. data/lib/chef/provider/deploy/revision.rb +0 -107
  716. data/lib/chef/provider/deploy/timestamped.rb +0 -34
  717. data/lib/chef/provider/env/windows.rb +0 -76
  718. data/lib/chef/provider/erl_call.rb +0 -76
  719. data/lib/chef/provider/package/yum/yum-dump.py +0 -307
  720. data/lib/chef/resource/deploy.rb +0 -449
  721. data/lib/chef/resource/erl_call.rb +0 -90
  722. data/lib/chef/resource/timestamped_deploy.rb +0 -26
  723. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.i686.rpm +0 -0
  724. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.src.rpm +0 -0
  725. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.x86_64.rpm +0 -0
  726. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.i686.rpm +0 -0
  727. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.src.rpm +0 -0
  728. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm +0 -0
  729. data/spec/functional/assets/yumrepo/repodata/313329137b55fd333b2dc66394a6661a2befa6cc535d8460d92a4a78a9c581f0-primary.sqlite.bz2 +0 -0
  730. data/spec/functional/assets/yumrepo/repodata/31ac4db5d5ac593728fcc26aef82b7b93c4cc4dbec843786b1845b939b658553-other.xml.gz +0 -0
  731. data/spec/functional/assets/yumrepo/repodata/4ac40fa3c6728c1401318e2e20a997436624e83dcf7a5f952b851ef422637773-filelists.sqlite.bz2 +0 -0
  732. data/spec/functional/assets/yumrepo/repodata/66391e53f0510b98b3f0b79f40ba1048026d9a1ef20905d9c40ba6f5411f3243-primary.xml.gz +0 -0
  733. data/spec/functional/assets/yumrepo/repodata/8b34697595fcc87928e12d24644dda9462c3857bd932861e28bc77ae1f31be16-filelists.xml.gz +0 -0
  734. data/spec/functional/assets/yumrepo/repodata/b97cca3fe14bcf06c52be4449b6108f7731239ff221111dcce8aada5467f60dc-other.sqlite.bz2 +0 -0
  735. data/spec/functional/resource/deploy_revision_spec.rb +0 -881
  736. data/spec/functional/resource/env_spec.rb +0 -192
  737. data/spec/unit/knife/index_rebuild_spec.rb +0 -125
  738. data/spec/unit/knife/knife_help.rb +0 -92
  739. data/spec/unit/provider/deploy/revision_spec.rb +0 -110
  740. data/spec/unit/provider/deploy/timestamped_spec.rb +0 -40
  741. data/spec/unit/provider/deploy_spec.rb +0 -641
  742. data/spec/unit/provider/env/windows_spec.rb +0 -103
  743. data/spec/unit/provider/erl_call_spec.rb +0 -77
  744. data/spec/unit/provider/package/yum_spec.rb +0 -2294
  745. data/spec/unit/resource/deploy_revision_spec.rb +0 -42
  746. data/spec/unit/resource/deploy_spec.rb +0 -283
  747. data/spec/unit/resource/erl_call_spec.rb +0 -81
@@ -1,103 +0,0 @@
1
- #
2
- # Author:: Sander van Harmelen <svanharmelen@schubergphilis.com>
3
- # Copyright:: Copyright 2014-2016, Chef Software, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require "spec_helper"
20
-
21
- describe Chef::Provider::Env::Windows, :windows_only do
22
- let(:node) { Chef::Node.new }
23
- let(:events) { Chef::EventDispatch::Dispatcher.new }
24
- let(:run_context) { Chef::RunContext.new(node, {}, events) }
25
-
26
- context "when environment variable is not PATH" do
27
- let(:new_resource) do
28
- new_resource = Chef::Resource::Env.new("CHEF_WINDOWS_ENV_TEST")
29
- new_resource.value("foo")
30
- new_resource
31
- end
32
- let(:provider) do
33
- provider = Chef::Provider::Env::Windows.new(new_resource, run_context)
34
- allow(provider).to receive(:env_obj).and_return(double("null object").as_null_object)
35
- provider
36
- end
37
-
38
- describe "action_create" do
39
- before do
40
- ENV.delete("CHEF_WINDOWS_ENV_TEST")
41
- provider.key_exists = false
42
- end
43
-
44
- it "should update the ruby ENV object when it creates the key" do
45
- provider.action_create
46
- expect(ENV["CHEF_WINDOWS_ENV_TEST"]).to eql("foo")
47
- end
48
- end
49
-
50
- describe "action_modify" do
51
- before do
52
- ENV["CHEF_WINDOWS_ENV_TEST"] = "foo"
53
- end
54
-
55
- it "should update the ruby ENV object when it updates the value" do
56
- expect(provider).to receive(:requires_modify_or_create?).and_return(true)
57
- new_resource.value("foobar")
58
- provider.action_modify
59
- expect(ENV["CHEF_WINDOWS_ENV_TEST"]).to eql("foobar")
60
- end
61
-
62
- describe "action_delete" do
63
- before do
64
- ENV["CHEF_WINDOWS_ENV_TEST"] = "foo"
65
- end
66
-
67
- it "should update the ruby ENV object when it deletes the key" do
68
- provider.action_delete
69
- expect(ENV["CHEF_WINDOWS_ENV_TEST"]).to eql(nil)
70
- end
71
- end
72
- end
73
- end
74
-
75
- context "when environment is PATH" do
76
- describe "for PATH" do
77
- let(:system_root) { "%SystemRoot%" }
78
- let(:system_root_value) { 'D:\Windows' }
79
- let(:new_resource) do
80
- new_resource = Chef::Resource::Env.new("PATH")
81
- new_resource.value(system_root)
82
- new_resource
83
- end
84
- let(:provider) do
85
- provider = Chef::Provider::Env::Windows.new(new_resource, run_context)
86
- allow(provider).to receive(:env_obj).and_return(double("null object").as_null_object)
87
- provider
88
- end
89
-
90
- before do
91
- stub_const("ENV", { "PATH" => "" })
92
- end
93
-
94
- it "replaces Windows system variables" do
95
- expect(provider).to receive(:requires_modify_or_create?).and_return(true)
96
- expect(provider).to receive(:expand_path).with(system_root).and_return(system_root_value)
97
- provider.action_modify
98
- expect(ENV["PATH"]).to eql(system_root_value)
99
- end
100
- end
101
-
102
- end
103
- end
@@ -1,77 +0,0 @@
1
- #
2
- # Author:: Joe Williams (<joe@joetify.com>)
3
- # Copyright:: Copyright 2009-2016, Joe Williams
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require "spec_helper"
20
-
21
- describe Chef::Provider::ErlCall do
22
- before(:each) do
23
- @node = Chef::Node.new
24
- @events = Chef::EventDispatch::Dispatcher.new
25
- @run_context = Chef::RunContext.new(@node, {}, @events)
26
-
27
- @new_resource = Chef::Resource::ErlCall.new("test", @node)
28
- @new_resource.code("io:format(\"burritos\", []).")
29
- @new_resource.node_name("chef@localhost")
30
- @new_resource.name("test")
31
-
32
- @provider = Chef::Provider::ErlCall.new(@new_resource, @run_context)
33
-
34
- @status = double("Status", stdout: "{ok, woohoo}", stderr: "")
35
- allow(@provider).to receive(:shell_out!).and_return(@status)
36
- end
37
-
38
- it "should return a Chef::Provider::ErlCall object" do
39
- provider = Chef::Provider::ErlCall.new(@new_resource, @run_context)
40
- expect(provider).to be_a_kind_of(Chef::Provider::ErlCall)
41
- end
42
-
43
- it "should return true" do
44
- expect(@provider.load_current_resource).to eql(true)
45
- end
46
-
47
- describe "when running a distributed erl call resource" do
48
- before do
49
- @new_resource.cookie("nomnomnom")
50
- @new_resource.distributed(true)
51
- @new_resource.name_type("sname")
52
- end
53
-
54
- it "should write to stdin of the erl_call command" do
55
- expected_cmd = "erl_call -e -s -sname chef@localhost -c nomnomnom"
56
- expect(@provider).to receive(:shell_out!).with(expected_cmd, input: @new_resource.code).and_return(@status)
57
-
58
- @provider.action_run
59
- end
60
- end
61
-
62
- describe "when running a local erl call resource" do
63
- before do
64
- @new_resource.cookie(nil)
65
- @new_resource.distributed(false)
66
- @new_resource.name_type("name")
67
- end
68
-
69
- it "should write to stdin of the erl_call command" do
70
- expected_cmd = "erl_call -e -name chef@localhost "
71
- expect(@provider).to receive(:shell_out!).with(expected_cmd, input: @new_resource.code).and_return(@status)
72
-
73
- @provider.action_run
74
- end
75
- end
76
-
77
- end
@@ -1,2294 +0,0 @@
1
- #
2
- # Author:: Adam Jacob (<adam@chef.io>)
3
- # Copyright:: Copyright 2008-2017, Chef Software Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require "spec_helper"
20
- require "securerandom"
21
-
22
- describe Chef::Provider::Package::Yum do
23
- before(:each) do
24
- @node = Chef::Node.new
25
- @events = Chef::EventDispatch::Dispatcher.new
26
- @run_context = Chef::RunContext.new(@node, {}, @events)
27
- @new_resource = Chef::Resource::YumPackage.new("cups")
28
- @status = double("Status", :exitstatus => 0)
29
- @yum_cache = double(
30
- "Chef::Provider::Yum::YumCache",
31
- :reload_installed => true,
32
- :reset => true,
33
- :installed_version => "1.2.4-11.18.el5",
34
- :candidate_version => "1.2.4-11.18.el5_2.3",
35
- :package_available? => true,
36
- :version_available? => true,
37
- :allow_multi_install => [ "kernel" ],
38
- :package_repository => "base",
39
- :disable_extra_repo_control => true
40
- )
41
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
42
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
43
- allow(::File).to receive(:exist?).with("/usr/bin/yum-deprecated").and_return(false)
44
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
45
- @pid = double("PID")
46
- end
47
-
48
- describe "when loading the current system state" do
49
- it "should create a current resource with the name of the new_resource" do
50
- @provider.load_current_resource
51
- expect(@provider.current_resource.name).to eq("cups")
52
- end
53
-
54
- it "should set the current resources package name to the new resources package name" do
55
- @provider.load_current_resource
56
- expect(@provider.current_resource.package_name).to eq("cups")
57
- end
58
-
59
- it "should set the installed version to nil on the current resource if no installed package" do
60
- allow(@yum_cache).to receive(:installed_version).and_return(nil)
61
- @provider.load_current_resource
62
- expect(@provider.current_resource.version).to be_nil
63
- end
64
-
65
- it "should set the installed version if yum has one" do
66
- @provider.load_current_resource
67
- expect(@provider.current_resource.version).to eq("1.2.4-11.18.el5")
68
- end
69
-
70
- it "should set the candidate version if yum info has one" do
71
- @provider.load_current_resource
72
- expect(@provider.candidate_version).to eql("1.2.4-11.18.el5_2.3")
73
- end
74
-
75
- it "should return the current resouce" do
76
- expect(@provider.load_current_resource).to eql(@provider.current_resource)
77
- end
78
-
79
- describe "when source is provided" do
80
- it "should set the candidate version" do
81
- @new_resource = Chef::Resource::YumPackage.new("testing.source")
82
- @new_resource.source "chef-server-core-12.0.5-1.rpm"
83
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
84
- allow(File).to receive(:exist?).with(@new_resource.source).and_return(true)
85
- allow(@yum_cache).to receive(:installed_version).and_return(nil)
86
- shellout_double = double(:stdout => "chef-server-core 12.0.5-1 i386")
87
- allow(@provider).to receive(:shell_out!).and_return(shellout_double)
88
- @provider.load_current_resource
89
- expect(@provider.candidate_version).to eql("12.0.5-1")
90
- expect(@provider.new_resource.arch).to eql("i386")
91
- end
92
- end
93
-
94
- describe "yum_binary accessor" do
95
- it "when yum-deprecated exists" do
96
- expect(File).to receive(:exist?).with("/usr/bin/yum-deprecated").and_return(true)
97
- expect(@yum_cache).to receive(:yum_binary=).with("yum-deprecated")
98
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
99
- expect(@provider.send(:yum_binary)).to eql("yum-deprecated")
100
- end
101
-
102
- it "when yum-deprecated does not exist" do
103
- expect(File).to receive(:exist?).with("/usr/bin/yum-deprecated").and_return(false)
104
- expect(@yum_cache).to receive(:yum_binary=).with("yum")
105
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
106
- expect(@provider.send(:yum_binary)).to eql("yum")
107
- end
108
-
109
- it "when the yum_binary is set on the resource" do
110
- @new_resource.yum_binary "/usr/bin/yum-something"
111
- expect(File).not_to receive(:exist?)
112
- expect(@yum_cache).to receive(:yum_binary=).with("/usr/bin/yum-something")
113
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
114
- expect(@provider.send(:yum_binary)).to eql("/usr/bin/yum-something")
115
- end
116
-
117
- it "when the new_resource is a vanilla package class and yum-deprecated exists" do
118
- @new_resource = Chef::Resource::YumPackage.new("cups")
119
- expect(File).to receive(:exist?).with("/usr/bin/yum-deprecated").and_return(true)
120
- expect(@yum_cache).to receive(:yum_binary=).with("yum-deprecated")
121
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
122
- expect(@provider.send(:yum_binary)).to eql("yum-deprecated")
123
- end
124
-
125
- it "when the new_resource is a vanilla package class and yum-deprecated does not exist" do
126
- @new_resource = Chef::Resource::YumPackage.new("cups")
127
- expect(File).to receive(:exist?).with("/usr/bin/yum-deprecated").and_return(false)
128
- expect(@yum_cache).to receive(:yum_binary=).with("yum")
129
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
130
- expect(@provider.send(:yum_binary)).to eql("yum")
131
- end
132
- end
133
-
134
- describe "when arch in package_name" do
135
- it "should set the arch if no existing package_name is found and new_package_name+new_arch is available" do
136
- @new_resource = Chef::Resource::YumPackage.new("testing.noarch")
137
- @yum_cache = double(
138
- "Chef::Provider::Yum::YumCache"
139
- )
140
- allow(@yum_cache).to receive(:installed_version) do |package_name, arch|
141
- # nothing installed for package_name/new_package_name
142
- nil
143
- end
144
- allow(@yum_cache).to receive(:candidate_version) do |package_name, arch|
145
- if package_name == "testing.noarch" || package_name == "testing.more.noarch"
146
- nil
147
- # candidate for new_package_name
148
- elsif package_name == "testing" || package_name == "testing.more"
149
- "1.1"
150
- end
151
- end
152
- allow(@yum_cache).to receive(:package_available?).and_return(true)
153
- allow(@yum_cache).to receive(:disable_extra_repo_control).and_return(true)
154
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
155
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
156
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
157
- @provider.load_current_resource
158
- expect(@provider.new_resource.package_name).to eq("testing")
159
- expect(@provider.new_resource.arch).to eq("noarch")
160
-
161
- @new_resource = Chef::Resource::YumPackage.new("testing.more.noarch")
162
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
163
- @provider.load_current_resource
164
- expect(@provider.new_resource.package_name).to eq("testing.more")
165
- expect(@provider.new_resource.arch).to eq("noarch")
166
- end
167
-
168
- describe "when version constraint in package_name" do
169
- it "should set package_version if no existing package_name is found and new_package_name is available" do
170
- @new_resource = Chef::Resource::YumPackage.new("cups = 1.2.4-11.18.el5_2.3")
171
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
172
- allow(@yum_cache).to receive(:package_available?) { |pkg| pkg == "cups" ? true : false }
173
- allow(@yum_cache).to receive(:packages_from_require) do |pkg|
174
- [Chef::Provider::Package::Yum::RPMDbPackage.new("cups", "1.2.4-11.18.el5_2.3", "noarch", [], false, true, "base"),
175
- Chef::Provider::Package::Yum::RPMDbPackage.new("cups", "1.2.4-11.18.el5_2.2", "noarch", [], false, true, "base")]
176
- end
177
- expect(Chef::Log).to receive(:debug).exactly(1).times.with(%r{checking yum info})
178
- expect(Chef::Log).to receive(:debug).exactly(1).times.with(%r{installed version})
179
- expect(Chef::Log).to receive(:debug).exactly(1).times.with(%r{matched 2 packages,})
180
- @provider.load_current_resource
181
- expect(@provider.new_resource.package_name).to eq("cups")
182
- expect(@provider.new_resource.version).to eq("1.2.4-11.18.el5_2.3")
183
- expect(@provider.send(:new_version_array)).to eq(["1.2.4-11.18.el5_2.3"])
184
- expect(@provider.send(:package_name_array)).to eq(["cups"])
185
- end
186
- end
187
-
188
- it "should not set the arch when an existing package_name is found" do
189
- @new_resource = Chef::Resource::YumPackage.new("testing.beta3")
190
- @yum_cache = double(
191
- "Chef::Provider::Yum::YumCache"
192
- )
193
- allow(@yum_cache).to receive(:installed_version) do |package_name, arch|
194
- # installed for package_name
195
- if package_name == "testing.beta3" || package_name == "testing.beta3.more"
196
- "1.1"
197
- elsif package_name == "testing" || package_name == "testing.beta3"
198
- nil
199
- end
200
- end
201
- allow(@yum_cache).to receive(:candidate_version) do |package_name, arch|
202
- # no candidate for package_name/new_package_name
203
- nil
204
- end
205
- allow(@yum_cache).to receive(:package_available?).and_return(true)
206
- allow(@yum_cache).to receive(:disable_extra_repo_control).and_return(true)
207
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
208
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
209
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
210
- # annoying side effect of the fun stub'ing above
211
- @provider.load_current_resource
212
- expect(@provider.new_resource.package_name).to eq("testing.beta3")
213
- expect(@provider.new_resource.arch).to eq(nil)
214
-
215
- @new_resource = Chef::Resource::YumPackage.new("testing.beta3.more")
216
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
217
- @provider.load_current_resource
218
- expect(@provider.new_resource.package_name).to eq("testing.beta3.more")
219
- expect(@provider.new_resource.arch).to eq(nil)
220
- end
221
-
222
- it "should not set the arch when no existing package_name or new_package_name+new_arch is found" do
223
- @new_resource = Chef::Resource::YumPackage.new("testing.beta3")
224
- @yum_cache = double(
225
- "Chef::Provider::Yum::YumCache"
226
- )
227
- allow(@yum_cache).to receive(:installed_version) do |package_name, arch|
228
- # nothing installed for package_name/new_package_name
229
- nil
230
- end
231
- allow(@yum_cache).to receive(:candidate_version) do |package_name, arch|
232
- # no candidate for package_name/new_package_name
233
- nil
234
- end
235
- allow(@yum_cache).to receive(:package_available?).and_return(true)
236
- allow(@yum_cache).to receive(:disable_extra_repo_control).and_return(true)
237
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
238
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
239
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
240
- @provider.load_current_resource
241
- expect(@provider.new_resource.package_name).to eq("testing.beta3")
242
- expect(@provider.new_resource.arch).to eq(nil)
243
-
244
- @new_resource = Chef::Resource::YumPackage.new("testing.beta3.more")
245
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
246
- @provider.load_current_resource
247
- expect(@provider.new_resource.package_name).to eq("testing.beta3.more")
248
- expect(@provider.new_resource.arch).to eq(nil)
249
- end
250
-
251
- it "should ensure it doesn't clobber an existing arch if passed" do
252
- @new_resource = Chef::Resource::YumPackage.new("testing.i386")
253
- @new_resource.arch("x86_64")
254
- @yum_cache = double(
255
- "Chef::Provider::Yum::YumCache"
256
- )
257
- allow(@yum_cache).to receive(:installed_version) do |package_name, arch|
258
- # nothing installed for package_name/new_package_name
259
- nil
260
- end
261
- allow(@yum_cache).to receive(:candidate_version) do |package_name, arch|
262
- if package_name == "testing.noarch"
263
- nil
264
- # candidate for new_package_name
265
- elsif package_name == "testing"
266
- "1.1"
267
- end
268
- end.and_return("something")
269
- allow(@yum_cache).to receive(:package_available?).and_return(true)
270
- allow(@yum_cache).to receive(:disable_extra_repo_control).and_return(true)
271
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
272
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
273
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
274
- @provider.load_current_resource
275
- expect(@provider.new_resource.package_name).to eq("testing.i386")
276
- expect(@provider.new_resource.arch).to eq("x86_64")
277
- end
278
- end
279
-
280
- it "should flush the cache if :before is true" do
281
- @new_resource.flush_cache({ :after => false, :before => true })
282
- expect(@yum_cache).to receive(:reload).once
283
- @provider.load_current_resource
284
- end
285
-
286
- it "should flush the cache if :before is false" do
287
- @new_resource.flush_cache({ :after => false, :before => false })
288
- expect(@yum_cache).not_to receive(:reload)
289
- @provider.load_current_resource
290
- end
291
-
292
- it "should detect --enablerepo or --disablerepo when passed among options, collect them preserving order and notify the yum cache" do
293
- @new_resource.options("--stuff --enablerepo=foo --otherthings --disablerepo=a,b,c --enablerepo=bar")
294
- expect(@yum_cache).to receive(:enable_extra_repo_control).with("--enablerepo=foo --disablerepo=a,b,c --enablerepo=bar")
295
- @provider.load_current_resource
296
- end
297
-
298
- it "should let the yum cache know extra repos are disabled if --enablerepo or --disablerepo aren't among options" do
299
- @new_resource.options("--stuff --otherthings")
300
- expect(@yum_cache).to receive(:disable_extra_repo_control)
301
- @provider.load_current_resource
302
- end
303
-
304
- it "should let the yum cache know extra repos are disabled if options aren't set" do
305
- @new_resource.options(nil)
306
- expect(@yum_cache).to receive(:disable_extra_repo_control)
307
- @provider.load_current_resource
308
- end
309
-
310
- context "when the package name isn't found" do
311
- let(:yum_cache) do
312
- double(
313
- "Chef::Provider::Yum::YumCache",
314
- :reload_installed => true,
315
- :reset => true,
316
- :installed_version => "1.0.1.el5",
317
- :candidate_version => "2.0.1.el5",
318
- :package_available? => false,
319
- :version_available? => true,
320
- :disable_extra_repo_control => true
321
- )
322
- end
323
-
324
- before do
325
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(yum_cache)
326
- allow(yum_cache).to receive(:yum_binary=).with("yum")
327
- @pkg = Chef::Provider::Package::Yum::RPMPackage.new("test-package", "2.0.1.el5", "x86_64", [])
328
- expect(yum_cache).to receive(:packages_from_require).and_return([@pkg])
329
- end
330
-
331
- it "should search provides then set package_name to match" do
332
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
333
- @provider.load_current_resource
334
- expect(@new_resource.package_name).to eq("test-package")
335
- expect(@new_resource.version).to eq(nil)
336
- end
337
-
338
- it "should search provides then set version to match if a requirement was passed in the package name" do
339
- @new_resource = Chef::Resource::YumPackage.new("test-package = 2.0.1.el5")
340
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
341
- @provider.load_current_resource
342
- expect(@new_resource.package_name).to eq("test-package")
343
- expect(@new_resource.version).to eq("2.0.1.el5")
344
- end
345
-
346
- it "should search provides then set version to match if a requirement was passed in the version" do
347
- @new_resource = Chef::Resource::YumPackage.new("test-package")
348
- @new_resource.version("= 2.0.1.el5")
349
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
350
- @provider.load_current_resource
351
- expect(@new_resource.package_name).to eq("test-package")
352
- expect(@new_resource.version).to eq("2.0.1.el5")
353
- end
354
-
355
- it "should search provides and not set the version to match if a specific version was requested" do
356
- @new_resource = Chef::Resource::YumPackage.new("test-package")
357
- @new_resource.version("3.0.1.el5")
358
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
359
- @provider.load_current_resource
360
- expect(@new_resource.package_name).to eq("test-package")
361
- expect(@new_resource.version).to eq("3.0.1.el5")
362
- end
363
-
364
- it "should search provides then set versions to match if requirements were passed in the package name as an array" do
365
- @new_resource = Chef::Resource::YumPackage.new(["test-package = 2.0.1.el5"])
366
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
367
- @provider.load_current_resource
368
- expect(@new_resource.package_name).to eq(["test-package"])
369
- expect(@new_resource.version).to eq(["2.0.1.el5"])
370
- end
371
-
372
- it "should search provides and not set the versions to match if specific versions were requested in an array" do
373
- @new_resource = Chef::Resource::YumPackage.new(["test-package"])
374
- @new_resource.version(["3.0.1.el5"])
375
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
376
- @provider.load_current_resource
377
- expect(@new_resource.package_name).to eq(["test-package"])
378
- expect(@new_resource.version).to eq(["3.0.1.el5"])
379
- end
380
-
381
- end
382
-
383
- it "should not return an error if no version number is specified in the resource" do
384
- @new_resource = Chef::Resource::YumPackage.new("test-package")
385
- @yum_cache = double(
386
- "Chef::Provider::Yum::YumCache",
387
- :reload_installed => true,
388
- :reset => true,
389
- :installed_version => "1.0.1.el5",
390
- :candidate_version => "2.0.1.el5",
391
- :package_available? => false,
392
- :version_available? => true,
393
- :disable_extra_repo_control => true
394
- )
395
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
396
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
397
- pkg = Chef::Provider::Package::Yum::RPMPackage.new("test-package", "2.0.1.el5", "x86_64", [])
398
- expect(@yum_cache).to receive(:packages_from_require).and_return([pkg])
399
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
400
- @provider.load_current_resource
401
- expect(@new_resource.package_name).to eq("test-package")
402
- expect(@new_resource.version).to eq(nil)
403
- end
404
-
405
- it "should give precedence to the version attribute when both a requirement in the resource name and a version attribute are specified" do
406
- @new_resource = Chef::Resource::YumPackage.new("test-package")
407
- @yum_cache = double(
408
- "Chef::Provider::Yum::YumCache",
409
- :reload_installed => true,
410
- :reset => true,
411
- :installed_version => "1.2.4-11.18.el5",
412
- :candidate_version => "1.2.4-11.18.el5",
413
- :package_available? => false,
414
- :version_available? => true,
415
- :disable_extra_repo_control => true
416
- )
417
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
418
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
419
- pkg = Chef::Provider::Package::Yum::RPMPackage.new("test-package", "2.0.1.el5", "x86_64", [])
420
- expect(@yum_cache).to receive(:packages_from_require).and_return([pkg])
421
- @new_resource = Chef::Resource::YumPackage.new("test-package = 2.0.1.el5")
422
- @new_resource.version("3.0.1.el5")
423
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
424
- @provider.load_current_resource
425
- expect(@new_resource.package_name).to eq("test-package")
426
- expect(@new_resource.version).to eq("3.0.1.el5")
427
- end
428
-
429
- it "should correctly detect the installed states of an array of package names and version numbers" do
430
- @yum_cache = double(
431
- "Chef::Provider::Yum::YumCache",
432
- :reload_installed => true,
433
- :reset => true,
434
- :installed_version => "1.0.1.el5",
435
- :candidate_version => "2.0.1.el5",
436
- :package_available? => false,
437
- :version_available? => true,
438
- :disable_extra_repo_control => true
439
- )
440
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
441
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
442
-
443
- expect(@yum_cache).to receive(:packages_from_require).exactly(4).times.and_return([])
444
- expect(@yum_cache).to receive(:reload_provides).twice
445
-
446
- @new_resource = Chef::Resource::YumPackage.new(["test-package", "test-package2"])
447
- @new_resource.version(["2.0.1.el5", "3.0.1.el5"])
448
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
449
- @provider.load_current_resource
450
- expect(@new_resource.package_name).to eq(["test-package", "test-package2"])
451
- expect(@new_resource.version).to eq(["2.0.1.el5", "3.0.1.el5"])
452
- end
453
-
454
- it "should search provides if no package is available - if no match in installed provides then load the complete set" do
455
- @yum_cache = double(
456
- "Chef::Provider::Yum::YumCache",
457
- :reload_installed => true,
458
- :reset => true,
459
- :installed_version => "1.2.4-11.18.el5",
460
- :candidate_version => "1.2.4-11.18.el5",
461
- :package_available? => false,
462
- :version_available? => true,
463
- :disable_extra_repo_control => true
464
- )
465
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
466
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
467
- expect(@yum_cache).to receive(:packages_from_require).twice.and_return([])
468
- expect(@yum_cache).to receive(:reload_provides)
469
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
470
- @provider.load_current_resource
471
- expect(@new_resource.version).to eq(nil)
472
- end
473
-
474
- it "should search provides if no package is available and not load the complete set if action is :remove or :purge" do
475
- @yum_cache = double(
476
- "Chef::Provider::Yum::YumCache",
477
- :reload_installed => true,
478
- :reset => true,
479
- :installed_version => "1.2.4-11.18.el5",
480
- :candidate_version => "1.2.4-11.18.el5",
481
- :package_available? => false,
482
- :version_available? => true,
483
- :disable_extra_repo_control => true
484
- )
485
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
486
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
487
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
488
- expect(@yum_cache).to receive(:packages_from_require).once.and_return([])
489
- expect(@yum_cache).not_to receive(:reload_provides)
490
- @new_resource.action(:remove)
491
- @provider.load_current_resource
492
- expect(@yum_cache).to receive(:packages_from_require).once.and_return([])
493
- expect(@yum_cache).not_to receive(:reload_provides)
494
- @new_resource.action(:purge)
495
- @provider.load_current_resource
496
- end
497
-
498
- it "should search provides if no package is available - if no match in provides leave the name intact" do
499
- @yum_cache = double(
500
- "Chef::Provider::Yum::YumCache",
501
- :reload_provides => true,
502
- :reload_installed => true,
503
- :reset => true,
504
- :installed_version => "1.2.4-11.18.el5",
505
- :candidate_version => "1.2.4-11.18.el5",
506
- :package_available? => false,
507
- :version_available? => true,
508
- :disable_extra_repo_control => true
509
- )
510
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
511
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
512
- expect(@yum_cache).to receive(:packages_from_require).twice.and_return([])
513
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
514
- @provider.load_current_resource
515
- expect(@new_resource.package_name).to eq("cups")
516
- end
517
- end
518
-
519
- describe "when installing a package" do
520
- it "should run yum install with the package name and version" do
521
- @provider.load_current_resource
522
- allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
523
- expect(@provider).to receive(:yum_command).with(
524
- "-d0 -e0 -y install cups-1.2.4-11.19.el5"
525
- )
526
- @provider.install_package("cups", "1.2.4-11.19.el5")
527
- end
528
-
529
- it "should run yum localinstall if given a path to an rpm" do
530
- @new_resource.source("/tmp/emacs-21.4-20.el5.i386.rpm")
531
- expect(@provider).to receive(:yum_command).with(
532
- "-d0 -e0 -y localinstall /tmp/emacs-21.4-20.el5.i386.rpm"
533
- )
534
- @provider.install_package("emacs", "21.4-20.el5")
535
- end
536
-
537
- it "should run yum localinstall if given a path to an rpm as the package" do
538
- @new_resource = Chef::Resource::YumPackage.new("/tmp/emacs-21.4-20.el5.i386.rpm")
539
- allow(::File).to receive(:exist?).with("/tmp/emacs-21.4-20.el5.i386.rpm").and_return(true)
540
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
541
- expect(@new_resource.source).to eq("/tmp/emacs-21.4-20.el5.i386.rpm")
542
- expect(@provider).to receive(:yum_command).with(
543
- "-d0 -e0 -y localinstall /tmp/emacs-21.4-20.el5.i386.rpm"
544
- )
545
- @provider.install_package("/tmp/emacs-21.4-20.el5.i386.rpm", "21.4-20.el5")
546
- end
547
-
548
- it "should run yum install with the package name, version and arch" do
549
- @new_resource.arch("i386")
550
- allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
551
- @provider.load_current_resource
552
- expect(@provider).to receive(:yum_command).with(
553
- "-d0 -e0 -y install cups-1.2.4-11.19.el5.i386"
554
- )
555
- @provider.install_package("cups", "1.2.4-11.19.el5")
556
- end
557
-
558
- it "installs the package with the options given in the resource" do
559
- @provider.load_current_resource
560
- allow(@provider).to receive(:candidate_version).and_return("11")
561
- @new_resource.options("--disablerepo epmd")
562
- allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
563
- expect(@provider).to receive(:yum_command).with(
564
- "-d0 -e0 -y --disablerepo epmd install cups-11"
565
- )
566
- @provider.install_package(@new_resource.name, @provider.candidate_version)
567
- end
568
-
569
- it "should raise an exception if the package is not available" do
570
- @yum_cache = double(
571
- "Chef::Provider::Yum::YumCache",
572
- :reload_from_cache => true,
573
- :reset => true,
574
- :installed_version => "1.2.4-11.18.el5",
575
- :candidate_version => "1.2.4-11.18.el5_2.3",
576
- :package_available? => true,
577
- :version_available? => nil,
578
- :disable_extra_repo_control => true
579
- )
580
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
581
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
582
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
583
- expect { @provider.install_package("lolcats", "0.99") }.to raise_error(Chef::Exceptions::Package, %r{Version .* not found})
584
- end
585
-
586
- it "should raise an exception if candidate version is older than the installed version and allow_downgrade is false" do
587
- @new_resource.allow_downgrade(false)
588
- @yum_cache = double(
589
- "Chef::Provider::Yum::YumCache",
590
- :reload_installed => true,
591
- :reset => true,
592
- :installed_version => "1.2.4-11.18.el5",
593
- :candidate_version => "1.2.4-11.15.el5",
594
- :package_available? => true,
595
- :version_available? => true,
596
- :allow_multi_install => [ "kernel" ],
597
- :disable_extra_repo_control => true
598
- )
599
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
600
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
601
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
602
- @provider.load_current_resource
603
- expect { @provider.install_package("cups", "1.2.4-11.15.el5") }.to raise_error(Chef::Exceptions::Package, %r{is newer than candidate package})
604
- end
605
-
606
- it "should not raise an exception if candidate version is older than the installed version and the package is list in yum's installonlypkg option" do
607
- @yum_cache = double(
608
- "Chef::Provider::Yum::YumCache",
609
- :reload_installed => true,
610
- :reset => true,
611
- :installed_version => "1.2.4-11.18.el5",
612
- :candidate_version => "1.2.4-11.15.el5",
613
- :package_available? => true,
614
- :version_available? => true,
615
- :allow_multi_install => [ "cups" ],
616
- :package_repository => "base",
617
- :disable_extra_repo_control => true
618
- )
619
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
620
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
621
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
622
- @provider.load_current_resource
623
- expect(@provider).to receive(:yum_command).with(
624
- "-d0 -e0 -y install cups-1.2.4-11.15.el5"
625
- )
626
- @provider.install_package("cups", "1.2.4-11.15.el5")
627
- end
628
-
629
- it "should run yum downgrade if candidate version is older than the installed version and allow_downgrade is true" do
630
- @new_resource.allow_downgrade(true)
631
- @yum_cache = double(
632
- "Chef::Provider::Yum::YumCache",
633
- :reload_installed => true,
634
- :reset => true,
635
- :installed_version => "1.2.4-11.18.el5",
636
- :candidate_version => "1.2.4-11.15.el5",
637
- :package_available? => true,
638
- :version_available? => true,
639
- :allow_multi_install => [],
640
- :package_repository => "base",
641
- :disable_extra_repo_control => true
642
- )
643
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
644
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
645
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
646
- @provider.load_current_resource
647
- expect(@provider).to receive(:yum_command).with(
648
- "-d0 -e0 -y downgrade cups-1.2.4-11.15.el5"
649
- )
650
- @provider.install_package("cups", "1.2.4-11.15.el5")
651
- end
652
-
653
- it "should run yum install then flush the cache if :after is true" do
654
- @new_resource.flush_cache({ :after => true, :before => false })
655
- @provider.load_current_resource
656
- allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
657
- expect(@provider).to receive(:yum_command).with(
658
- "-d0 -e0 -y install cups-1.2.4-11.15.el5"
659
- )
660
- expect(@yum_cache).to receive(:reload).once
661
- @provider.install_package("cups", "1.2.4-11.15.el5")
662
- end
663
-
664
- it "should run yum install then not flush the cache if :after is false" do
665
- @new_resource.flush_cache({ :after => false, :before => false })
666
- @provider.load_current_resource
667
- allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
668
- expect(@provider).to receive(:yum_command).with(
669
- "-d0 -e0 -y install cups-1.2.4-11.15.el5"
670
- )
671
- expect(@yum_cache).not_to receive(:reload)
672
- @provider.install_package("cups", "1.2.4-11.15.el5")
673
- end
674
- end
675
-
676
- describe "when upgrading a package" do
677
- it "should run yum install if the package is installed and a version is given" do
678
- @provider.load_current_resource
679
- allow(@provider).to receive(:candidate_version).and_return("11")
680
- allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
681
- expect(@provider).to receive(:yum_command).with(
682
- "-d0 -e0 -y install cups-11"
683
- )
684
- @provider.upgrade_package(@new_resource.name, @provider.candidate_version)
685
- end
686
-
687
- it "should run yum install if the package is not installed" do
688
- @provider.load_current_resource
689
- @current_resource = Chef::Resource::YumPackage.new("cups")
690
- allow(@provider).to receive(:candidate_version).and_return("11")
691
- allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
692
- expect(@provider).to receive(:yum_command).with(
693
- "-d0 -e0 -y install cups-11"
694
- )
695
- @provider.upgrade_package(@new_resource.name, @provider.candidate_version)
696
- end
697
-
698
- it "should raise an exception if candidate version is older than the installed version" do
699
- @yum_cache = double(
700
- "Chef::Provider::Yum::YumCache",
701
- :reload_installed => true,
702
- :reset => true,
703
- :installed_version => "1.2.4-11.18.el5",
704
- :candidate_version => "1.2.4-11.15.el5",
705
- :package_available? => true,
706
- :version_available? => true,
707
- :allow_multi_install => [ "kernel" ],
708
- :disable_extra_repo_control => true
709
- )
710
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
711
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
712
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
713
- @provider.load_current_resource
714
- expect { @provider.upgrade_package("cups", "1.2.4-11.15.el5") }.to raise_error(Chef::Exceptions::Package, %r{is newer than candidate package})
715
- end
716
-
717
- # Test our little workaround, some crossover into Chef::Provider::Package territory
718
- it "should call action_upgrade in the parent if the current resource version is nil" do
719
- allow(@yum_cache).to receive(:installed_version).and_return(nil)
720
- @current_resource = Chef::Resource::YumPackage.new("cups")
721
- allow(@provider).to receive(:candidate_version).and_return("11")
722
- expect(@provider).to receive(:upgrade_package).with(["cups"], ["11"])
723
- @provider.run_action(:upgrade)
724
- end
725
-
726
- it "should call action_upgrade in the parent if the candidate version is nil" do
727
- @provider.load_current_resource
728
- @current_resource = Chef::Resource::YumPackage.new("cups")
729
- allow(@provider).to receive(:candidate_version).and_return(nil)
730
- expect(@provider).not_to receive(:upgrade_package)
731
- @provider.run_action(:upgrade)
732
- end
733
-
734
- it "should call action_upgrade in the parent if the candidate is newer" do
735
- @provider.load_current_resource
736
- @current_resource = Chef::Resource::YumPackage.new("cups")
737
- allow(@provider).to receive(:candidate_version).and_return("11")
738
- expect(@provider).to receive(:upgrade_package).with(["cups"], ["11"])
739
- @provider.run_action(:upgrade)
740
- end
741
-
742
- it "should not call action_upgrade in the parent if the candidate is older" do
743
- allow(@yum_cache).to receive(:installed_version).and_return("12")
744
- @provider.load_current_resource
745
- @current_resource = Chef::Resource::YumPackage.new("cups")
746
- allow(@provider).to receive(:candidate_version).and_return("11")
747
- expect(@provider).not_to receive(:upgrade_package)
748
- @provider.run_action(:upgrade)
749
- end
750
- end
751
-
752
- describe "when removing a package" do
753
- it "should run yum remove with the package name" do
754
- expect(@provider).to receive(:yum_command).with(
755
- "-d0 -e0 -y remove emacs-1.0"
756
- )
757
- @provider.remove_package("emacs", "1.0")
758
- end
759
-
760
- it "should run yum remove with the package name and arch" do
761
- @new_resource.arch("x86_64")
762
- expect(@provider).to receive(:yum_command).with(
763
- "-d0 -e0 -y remove emacs-1.0.x86_64"
764
- )
765
- @provider.remove_package("emacs", "1.0")
766
- end
767
- end
768
-
769
- describe "when purging a package" do
770
- it "should run yum remove with the package name" do
771
- expect(@provider).to receive(:yum_command).with(
772
- "-d0 -e0 -y remove emacs-1.0"
773
- )
774
- @provider.purge_package("emacs", "1.0")
775
- end
776
- end
777
-
778
- describe "when locking a package" do
779
- it "should run yum versionlock add with the package name" do
780
- expect(@provider).to receive(:yum_command).with(
781
- "-d0 -e0 -y versionlock add emacs"
782
- )
783
- @provider.lock_package("emacs", nil)
784
- end
785
- end
786
-
787
- describe "when unlocking a package" do
788
- it "should run yum versionlock delete with the package name" do
789
- expect(@provider).to receive(:yum_command).with(
790
- "-d0 -e0 -y versionlock delete emacs"
791
- )
792
- @provider.unlock_package("emacs", nil)
793
- end
794
- end
795
-
796
- describe "when running yum" do
797
- it "should run yum once if it exits with a return code of 0" do
798
- @status = double("Status", :exitstatus => 0, :stdout => "", :stderr => "")
799
- allow(@provider).to receive(:shell_out).and_return(@status)
800
- expect(@provider).to receive(:shell_out).once.with(
801
- "yum -d0 -e0 -y install emacs-1.0",
802
- { :timeout => Chef::Config[:yum_timeout] }
803
- )
804
- @provider.send(:yum_command, "-d0 -e0 -y install emacs-1.0")
805
- end
806
-
807
- it "should run yum once if it exits with a return code > 0 and no scriptlet failures" do
808
- @status = double("Status", :exitstatus => 2, :stdout => "failure failure", :stderr => "problem problem")
809
- allow(@provider).to receive(:shell_out).and_return(@status)
810
- expect(@provider).to receive(:shell_out).once.with(
811
- "yum -d0 -e0 -y install emacs-1.0",
812
- { :timeout => Chef::Config[:yum_timeout] }
813
- )
814
- expect { @provider.send(:yum_command, "-d0 -e0 -y install emacs-1.0") }.to raise_error(Chef::Exceptions::Exec)
815
- end
816
-
817
- it "should run yum once if it exits with a return code of 1 and %pre scriptlet failures" do
818
- @status = double("Status", :exitstatus => 1, :stdout => "error: %pre(demo-1-1.el5.centos.x86_64) scriptlet failed, exit status 2",
819
- :stderr => "")
820
- allow(@provider).to receive(:shell_out).and_return(@status)
821
- expect(@provider).to receive(:shell_out).once.with(
822
- "yum -d0 -e0 -y install emacs-1.0",
823
- { :timeout => Chef::Config[:yum_timeout] }
824
- )
825
- # will still raise an exception, can't stub out the subsequent call
826
- expect { @provider.send(:yum_command, "-d0 -e0 -y install emacs-1.0") }.to raise_error(Chef::Exceptions::Exec)
827
- end
828
-
829
- it "should run yum twice if it exits with a return code of 1 and %post scriptlet failures" do
830
- @status = double("Status", :exitstatus => 1, :stdout => "error: %post(demo-1-1.el5.centos.x86_64) scriptlet failed, exit status 2",
831
- :stderr => "")
832
- allow(@provider).to receive(:shell_out).and_return(@status)
833
- expect(@provider).to receive(:shell_out).twice.with(
834
- "yum -d0 -e0 -y install emacs-1.0",
835
- { :timeout => Chef::Config[:yum_timeout] }
836
- )
837
- # will still raise an exception, can't stub out the subsequent call
838
- expect { @provider.send(:yum_command, "-d0 -e0 -y install emacs-1.0") }.to raise_error(Chef::Exceptions::Exec)
839
- end
840
-
841
- it "should pass the yum_binary to the command if its specified" do
842
- @new_resource.yum_binary "yum-deprecated"
843
- expect(@yum_cache).to receive(:yum_binary=).with("yum-deprecated")
844
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
845
- @status = double("Status", :exitstatus => 0, :stdout => "", :stderr => "")
846
- allow(@provider).to receive(:shell_out).and_return(@status)
847
- expect(@provider).to receive(:shell_out).once.with(
848
- "yum-deprecated -d0 -e0 -y install emacs-1.0",
849
- { :timeout => Chef::Config[:yum_timeout] }
850
- )
851
- @provider.send(:yum_command, "-d0 -e0 -y install emacs-1.0")
852
- end
853
- end
854
- end
855
-
856
- describe Chef::Provider::Package::Yum::RPMUtils do
857
- describe "version_parse" do
858
- before do
859
- @rpmutils = Chef::Provider::Package::Yum::RPMUtils
860
- end
861
-
862
- it "parses known good epoch strings" do
863
- [
864
- [ "0:3.3", [ 0, "3.3", nil ] ],
865
- [ "9:1.7.3", [ 9, "1.7.3", nil ] ],
866
- [ "15:20020927", [ 15, "20020927", nil ] ],
867
- ].each do |x, y|
868
- expect(@rpmutils.version_parse(x)).to eq(y)
869
- end
870
- end
871
-
872
- it "parses strange epoch strings" do
873
- [
874
- [ ":3.3", [ 0, "3.3", nil ] ],
875
- [ "-1:1.7.3", [ nil, nil, "1:1.7.3" ] ],
876
- [ "-:20020927", [ nil, nil, ":20020927" ] ],
877
- ].each do |x, y|
878
- expect(@rpmutils.version_parse(x)).to eq(y)
879
- end
880
- end
881
-
882
- it "parses known good version strings" do
883
- [
884
- [ "3.3", [ nil, "3.3", nil ] ],
885
- [ "1.7.3", [ nil, "1.7.3", nil ] ],
886
- [ "20020927", [ nil, "20020927", nil ] ],
887
- ].each do |x, y|
888
- expect(@rpmutils.version_parse(x)).to eq(y)
889
- end
890
- end
891
-
892
- it "parses strange version strings" do
893
- [
894
- [ "3..3", [ nil, "3..3", nil ] ],
895
- [ "0001.7.3", [ nil, "0001.7.3", nil ] ],
896
- [ "20020927,3", [ nil, "20020927,3", nil ] ],
897
- ].each do |x, y|
898
- expect(@rpmutils.version_parse(x)).to eq(y)
899
- end
900
- end
901
-
902
- it "parses known good version release strings" do
903
- [
904
- [ "3.3-0.pre3.1.60.el5_5.1", [ nil, "3.3", "0.pre3.1.60.el5_5.1" ] ],
905
- [ "1.7.3-1jpp.2.el5", [ nil, "1.7.3", "1jpp.2.el5" ] ],
906
- [ "20020927-46.el5", [ nil, "20020927", "46.el5" ] ],
907
- ].each do |x, y|
908
- expect(@rpmutils.version_parse(x)).to eq(y)
909
- end
910
- end
911
-
912
- it "parses strange version release strings" do
913
- [
914
- [ "3.3-", [ nil, "3.3", nil ] ],
915
- [ "-1jpp.2.el5", [ nil, nil, "1jpp.2.el5" ] ],
916
- [ "-0020020927-46.el5", [ nil, "-0020020927", "46.el5" ] ],
917
- ].each do |x, y|
918
- expect(@rpmutils.version_parse(x)).to eq(y)
919
- end
920
- end
921
- end
922
-
923
- describe "rpmvercmp" do
924
- before do
925
- @rpmutils = Chef::Provider::Package::Yum::RPMUtils
926
- end
927
-
928
- it "should validate version compare logic for standard examples" do
929
- [
930
- # numeric
931
- [ "0.0.2", "0.0.1", 1 ],
932
- [ "0.2.0", "0.1.0", 1 ],
933
- [ "2.0.0", "1.0.0", 1 ],
934
- [ "0.0.1", "0.0.1", 0 ],
935
- [ "0.0.1", "0.0.2", -1 ],
936
- [ "0.1.0", "0.2.0", -1 ],
937
- [ "1.0.0", "2.0.0", -1 ],
938
- # alpha
939
- [ "bb", "aa", 1 ],
940
- [ "ab", "aa", 1 ],
941
- [ "aa", "aa", 0 ],
942
- [ "aa", "bb", -1 ],
943
- [ "aa", "ab", -1 ],
944
- [ "BB", "AA", 1 ],
945
- [ "AA", "AA", 0 ],
946
- [ "AA", "BB", -1 ],
947
- [ "aa", "AA", 1 ],
948
- [ "AA", "aa", -1 ],
949
- # alphanumeric
950
- [ "0.0.1b", "0.0.1a", 1 ],
951
- [ "0.1b.0", "0.1a.0", 1 ],
952
- [ "1b.0.0", "1a.0.0", 1 ],
953
- [ "0.0.1a", "0.0.1a", 0 ],
954
- [ "0.0.1a", "0.0.1b", -1 ],
955
- [ "0.1a.0", "0.1b.0", -1 ],
956
- [ "1a.0.0", "1b.0.0", -1 ],
957
- # alphanumeric against alphanumeric
958
- [ "0.0.1", "0.0.a", 1 ],
959
- [ "0.1.0", "0.a.0", 1 ],
960
- [ "1.0.0", "a.0.0", 1 ],
961
- [ "0.0.a", "0.0.a", 0 ],
962
- [ "0.0.a", "0.0.1", -1 ],
963
- [ "0.a.0", "0.1.0", -1 ],
964
- [ "a.0.0", "1.0.0", -1 ],
965
- # alphanumeric against numeric
966
- [ "0.0.2", "0.0.1a", 1 ],
967
- [ "0.0.2a", "0.0.1", 1 ],
968
- [ "0.0.1", "0.0.2a", -1 ],
969
- [ "0.0.1a", "0.0.2", -1 ],
970
- # length
971
- [ "0.0.1aa", "0.0.1a", 1 ],
972
- [ "0.0.1aa", "0.0.1aa", 0 ],
973
- [ "0.0.1a", "0.0.1aa", -1 ],
974
- ].each do |x, y, result|
975
- expect(@rpmutils.rpmvercmp(x, y)).to eq(result)
976
- end
977
- end
978
-
979
- it "should validate version compare logic for strange examples" do
980
- [
981
- [ "2,0,0", "1.0.0", 1 ],
982
- [ "0.0.1", "0,0.1", 0 ],
983
- [ "1.0.0", "2,0,0", -1 ],
984
- [ "002.0.0", "001.0.0", 1 ],
985
- [ "001..0.1", "001..0.0", 1 ],
986
- [ "-001..1", "-001..0", 1 ],
987
- [ "1.0.1", nil, 1 ],
988
- [ nil, nil, 0 ],
989
- [ nil, "1.0.1", -1 ],
990
- [ "1.0.1", "", 1 ],
991
- [ "", "", 0 ],
992
- [ "", "1.0.1", -1 ],
993
- ].each do |x, y, result|
994
- expect(@rpmutils.rpmvercmp(x, y)).to eq(result)
995
- end
996
- end
997
-
998
- it "tests isalnum good input" do
999
- %w{a z A Z 0 9}.each do |t|
1000
- expect(@rpmutils.isalnum(t)).to eq(true)
1001
- end
1002
- end
1003
-
1004
- it "tests isalnum bad input" do
1005
- [ "-", ".", "!", "^", ":", "_" ].each do |t|
1006
- expect(@rpmutils.isalnum(t)).to eq(false)
1007
- end
1008
- end
1009
-
1010
- it "tests isalpha good input" do
1011
- %w{a z A Z}.each do |t|
1012
- expect(@rpmutils.isalpha(t)).to eq(true)
1013
- end
1014
- end
1015
-
1016
- it "tests isalpha bad input" do
1017
- [ "0", "9", "-", ".", "!", "^", ":", "_" ].each do |t|
1018
- expect(@rpmutils.isalpha(t)).to eq(false)
1019
- end
1020
- end
1021
-
1022
- it "tests isdigit good input" do
1023
- %w{0 9}.each do |t|
1024
- expect(@rpmutils.isdigit(t)).to eq(true)
1025
- end
1026
- end
1027
-
1028
- it "tests isdigit bad input" do
1029
- [ "A", "z", "-", ".", "!", "^", ":", "_" ].each do |t|
1030
- expect(@rpmutils.isdigit(t)).to eq(false)
1031
- end
1032
- end
1033
- end
1034
-
1035
- end
1036
-
1037
- describe Chef::Provider::Package::Yum::RPMVersion do
1038
- describe "new - with parsing" do
1039
- before do
1040
- @rpmv = Chef::Provider::Package::Yum::RPMVersion.new("1:1.6.5-9.36.el5")
1041
- end
1042
-
1043
- it "should expose evr (name-version-release) available" do
1044
- expect(@rpmv.e).to eq(1)
1045
- expect(@rpmv.v).to eq("1.6.5")
1046
- expect(@rpmv.r).to eq("9.36.el5")
1047
-
1048
- expect(@rpmv.evr).to eq("1:1.6.5-9.36.el5")
1049
- end
1050
-
1051
- it "should output a version-release string" do
1052
- expect(@rpmv.to_s).to eq("1.6.5-9.36.el5")
1053
- end
1054
- end
1055
-
1056
- describe "new - no parsing" do
1057
- before do
1058
- @rpmv = Chef::Provider::Package::Yum::RPMVersion.new("1", "1.6.5", "9.36.el5")
1059
- end
1060
-
1061
- it "should expose evr (name-version-release) available" do
1062
- expect(@rpmv.e).to eq(1)
1063
- expect(@rpmv.v).to eq("1.6.5")
1064
- expect(@rpmv.r).to eq("9.36.el5")
1065
-
1066
- expect(@rpmv.evr).to eq("1:1.6.5-9.36.el5")
1067
- end
1068
-
1069
- it "should output a version-release string" do
1070
- expect(@rpmv.to_s).to eq("1.6.5-9.36.el5")
1071
- end
1072
- end
1073
-
1074
- it "should raise an error unless passed 1 or 3 args" do
1075
- expect do
1076
- Chef::Provider::Package::Yum::RPMVersion.new()
1077
- end.to raise_error(ArgumentError)
1078
- expect do
1079
- Chef::Provider::Package::Yum::RPMVersion.new("1:1.6.5-9.36.el5")
1080
- end.not_to raise_error
1081
- expect do
1082
- Chef::Provider::Package::Yum::RPMVersion.new("1:1.6.5-9.36.el5", "extra")
1083
- end.to raise_error(ArgumentError)
1084
- expect do
1085
- Chef::Provider::Package::Yum::RPMVersion.new("1", "1.6.5", "9.36.el5")
1086
- end.not_to raise_error
1087
- expect do
1088
- Chef::Provider::Package::Yum::RPMVersion.new("1", "1.6.5", "9.36.el5", "extra")
1089
- end.to raise_error(ArgumentError)
1090
- end
1091
-
1092
- # thanks version_class_spec.rb!
1093
- describe "compare" do
1094
- it "should sort based on complete epoch-version-release data" do
1095
- [
1096
- # smaller, larger
1097
- [ "0:1.6.5-9.36.el5",
1098
- "1:1.6.5-9.36.el5" ],
1099
- [ "0:2.3-15.el5",
1100
- "0:3.3-15.el5" ],
1101
- [ "0:alpha9.8-27.2",
1102
- "0:beta9.8-27.2" ],
1103
- [ "0:0.09-14jpp.3",
1104
- "0:0.09-15jpp.3" ],
1105
- [ "0:0.9.0-0.6.20110211.el5",
1106
- "0:0.9.0-0.6.20120211.el5" ],
1107
- [ "0:1.9.1-4.el5",
1108
- "0:1.9.1-5.el5" ],
1109
- [ "0:1.4.10-7.20090624svn.el5",
1110
- "0:1.4.10-7.20090625svn.el5" ],
1111
- [ "0:2.3.4-2.el5",
1112
- "0:2.3.4-2.el6" ],
1113
- ].each do |smaller, larger|
1114
- sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
1115
- lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
1116
- expect(sm).to be < lg
1117
- expect(lg).to be > sm
1118
- expect(sm).not_to eq(lg)
1119
- end
1120
- end
1121
-
1122
- it "should sort based on partial epoch-version-release data" do
1123
- [
1124
- # smaller, larger
1125
- [ ":1.6.5-9.36.el5",
1126
- "1:1.6.5-9.36.el5" ],
1127
- [ "2.3-15.el5",
1128
- "3.3-15.el5" ],
1129
- [ "alpha9.8",
1130
- "beta9.8" ],
1131
- %w{14jpp
1132
- 15jpp},
1133
- [ "0.9.0-0.6",
1134
- "0.9.0-0.7" ],
1135
- [ "0:1.9",
1136
- "3:1.9" ],
1137
- [ "2.3-2.el5",
1138
- "2.3-2.el6" ],
1139
- ].each do |smaller, larger|
1140
- sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
1141
- lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
1142
- expect(sm).to be < lg
1143
- expect(lg).to be > sm
1144
- expect(sm).not_to eq(lg)
1145
- end
1146
- end
1147
-
1148
- it "should verify equality of complete epoch-version-release data" do
1149
- [
1150
- [ "0:1.6.5-9.36.el5",
1151
- "0:1.6.5-9.36.el5" ],
1152
- [ "0:2.3-15.el5",
1153
- "0:2.3-15.el5" ],
1154
- [ "0:alpha9.8-27.2",
1155
- "0:alpha9.8-27.2" ],
1156
- ].each do |smaller, larger|
1157
- sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
1158
- lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
1159
- expect(sm).to eq(lg)
1160
- end
1161
- end
1162
-
1163
- it "should verify equality of partial epoch-version-release data" do
1164
- [
1165
- [ ":1.6.5-9.36.el5",
1166
- "0:1.6.5-9.36.el5" ],
1167
- [ "2.3-15.el5",
1168
- "2.3-15.el5" ],
1169
- [ "alpha9.8-3",
1170
- "alpha9.8-3" ],
1171
- ].each do |smaller, larger|
1172
- sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
1173
- lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
1174
- expect(sm).to eq(lg)
1175
- end
1176
- end
1177
- end
1178
-
1179
- describe "partial compare" do
1180
- it "should compare based on partial epoch-version-release data" do
1181
- [
1182
- # smaller, larger
1183
- [ "0:1.1.1-1",
1184
- "1:" ],
1185
- [ "0:1.1.1-1",
1186
- "0:1.1.2" ],
1187
- [ "0:1.1.1-1",
1188
- "0:1.1.2-1" ],
1189
- [ "0:",
1190
- "1:1.1.1-1" ],
1191
- [ "0:1.1.1",
1192
- "0:1.1.2-1" ],
1193
- [ "0:1.1.1-1",
1194
- "0:1.1.2-1" ],
1195
- ].each do |smaller, larger|
1196
- sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
1197
- lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
1198
- expect(sm.partial_compare(lg)).to eq(-1)
1199
- expect(lg.partial_compare(sm)).to eq(1)
1200
- expect(sm.partial_compare(lg)).not_to eq(0)
1201
- end
1202
- end
1203
-
1204
- it "should verify equality based on partial epoch-version-release data" do
1205
- [
1206
- [ "0:",
1207
- "0:1.1.1-1" ],
1208
- [ "0:1.1.1",
1209
- "0:1.1.1-1" ],
1210
- [ "0:1.1.1-1",
1211
- "0:1.1.1-1" ],
1212
- ].each do |smaller, larger|
1213
- sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
1214
- lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
1215
- expect(sm.partial_compare(lg)).to eq(0)
1216
- end
1217
- end
1218
- end
1219
-
1220
- end
1221
-
1222
- describe Chef::Provider::Package::Yum::RPMPackage do
1223
- describe "new - with parsing" do
1224
- before do
1225
- @rpm = Chef::Provider::Package::Yum::RPMPackage.new("testing", "1:1.6.5-9.36.el5", "x86_64", [])
1226
- end
1227
-
1228
- it "should expose nevra (name-epoch-version-release-arch) available" do
1229
- expect(@rpm.name).to eq("testing")
1230
- expect(@rpm.version.e).to eq(1)
1231
- expect(@rpm.version.v).to eq("1.6.5")
1232
- expect(@rpm.version.r).to eq("9.36.el5")
1233
- expect(@rpm.arch).to eq("x86_64")
1234
-
1235
- expect(@rpm.nevra).to eq("testing-1:1.6.5-9.36.el5.x86_64")
1236
- expect(@rpm.to_s).to eq(@rpm.nevra)
1237
- end
1238
-
1239
- it "should always have at least one provide, itself" do
1240
- expect(@rpm.provides.size).to eq(1)
1241
- expect(@rpm.provides[0].name).to eql("testing")
1242
- expect(@rpm.provides[0].version.evr).to eql("1:1.6.5-9.36.el5")
1243
- expect(@rpm.provides[0].flag).to eql(:==)
1244
- end
1245
- end
1246
-
1247
- describe "new - no parsing" do
1248
- before do
1249
- @rpm = Chef::Provider::Package::Yum::RPMPackage.new("testing", "1", "1.6.5", "9.36.el5", "x86_64", [])
1250
- end
1251
-
1252
- it "should expose nevra (name-epoch-version-release-arch) available" do
1253
- expect(@rpm.name).to eq("testing")
1254
- expect(@rpm.version.e).to eq(1)
1255
- expect(@rpm.version.v).to eq("1.6.5")
1256
- expect(@rpm.version.r).to eq("9.36.el5")
1257
- expect(@rpm.arch).to eq("x86_64")
1258
-
1259
- expect(@rpm.nevra).to eq("testing-1:1.6.5-9.36.el5.x86_64")
1260
- expect(@rpm.to_s).to eq(@rpm.nevra)
1261
- end
1262
-
1263
- it "should always have at least one provide, itself" do
1264
- expect(@rpm.provides.size).to eq(1)
1265
- expect(@rpm.provides[0].name).to eql("testing")
1266
- expect(@rpm.provides[0].version.evr).to eql("1:1.6.5-9.36.el5")
1267
- expect(@rpm.provides[0].flag).to eql(:==)
1268
- end
1269
- end
1270
-
1271
- it "should raise an error unless passed 4 or 6 args" do
1272
- expect do
1273
- Chef::Provider::Package::Yum::RPMPackage.new()
1274
- end.to raise_error(ArgumentError)
1275
- expect do
1276
- Chef::Provider::Package::Yum::RPMPackage.new("testing")
1277
- end.to raise_error(ArgumentError)
1278
- expect do
1279
- Chef::Provider::Package::Yum::RPMPackage.new("testing", "1:1.6.5-9.36.el5")
1280
- end.to raise_error(ArgumentError)
1281
- expect do
1282
- Chef::Provider::Package::Yum::RPMPackage.new("testing", "1:1.6.5-9.36.el5", "x86_64")
1283
- end.to raise_error(ArgumentError)
1284
- expect do
1285
- Chef::Provider::Package::Yum::RPMPackage.new("testing", "1:1.6.5-9.36.el5", "x86_64", [])
1286
- end.not_to raise_error
1287
- expect do
1288
- Chef::Provider::Package::Yum::RPMPackage.new("testing", "1", "1.6.5", "9.36.el5", "x86_64")
1289
- end.to raise_error(ArgumentError)
1290
- expect do
1291
- Chef::Provider::Package::Yum::RPMPackage.new("testing", "1", "1.6.5", "9.36.el5", "x86_64", [])
1292
- end.not_to raise_error
1293
- expect do
1294
- Chef::Provider::Package::Yum::RPMPackage.new("testing", "1", "1.6.5", "9.36.el5", "x86_64", [], "extra")
1295
- end.to raise_error(ArgumentError)
1296
- end
1297
-
1298
- describe "<=>" do
1299
- it "should sort alphabetically based on package name" do
1300
- [
1301
- [ "a-test",
1302
- "b-test" ],
1303
- [ "B-test",
1304
- "a-test" ],
1305
- [ "A-test",
1306
- "B-test" ],
1307
- [ "Aa-test",
1308
- "aA-test" ],
1309
- %w{1test
1310
- 2test},
1311
- ].each do |smaller, larger|
1312
- sm = Chef::Provider::Package::Yum::RPMPackage.new(smaller, "0:0.0.1-1", "x86_64", [])
1313
- lg = Chef::Provider::Package::Yum::RPMPackage.new(larger, "0:0.0.1-1", "x86_64", [])
1314
- expect(sm).to be < lg
1315
- expect(lg).to be > sm
1316
- expect(sm).not_to eq(lg)
1317
- end
1318
- end
1319
-
1320
- it "should sort alphabetically based on package arch" do
1321
- [
1322
- %w{i386
1323
- x86_64},
1324
- %w{i386
1325
- noarch},
1326
- %w{noarch
1327
- x86_64},
1328
- ].each do |smaller, larger|
1329
- sm = Chef::Provider::Package::Yum::RPMPackage.new("test-package", "0:0.0.1-1", smaller, [])
1330
- lg = Chef::Provider::Package::Yum::RPMPackage.new("test-package", "0:0.0.1-1", larger, [])
1331
- expect(sm).to be < lg
1332
- expect(lg).to be > sm
1333
- expect(sm).not_to eq(lg)
1334
- end
1335
- end
1336
- end
1337
-
1338
- end
1339
-
1340
- describe Chef::Provider::Package::Yum::RPMDbPackage do
1341
- before(:each) do
1342
- # name, version, arch, installed, available, repoid
1343
- @rpm_x = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "0:1.6.5-9.36.el5", "noarch", [], false, true, "base")
1344
- @rpm_y = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "0:1.6.5-9.36.el5", "noarch", [], true, true, "extras")
1345
- @rpm_z = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "0:1.6.5-9.36.el5", "noarch", [], true, false, "other")
1346
- end
1347
-
1348
- describe "initialize" do
1349
- it "should return a Chef::Provider::Package::Yum::RPMDbPackage object" do
1350
- expect(@rpm_x).to be_kind_of(Chef::Provider::Package::Yum::RPMDbPackage)
1351
- end
1352
- end
1353
-
1354
- describe "available" do
1355
- it "should return true" do
1356
- expect(@rpm_x.available).to eq(true)
1357
- expect(@rpm_y.available).to eq(true)
1358
- expect(@rpm_z.available).to eq(false)
1359
- end
1360
- end
1361
-
1362
- describe "installed" do
1363
- it "should return true" do
1364
- expect(@rpm_x.installed).to eq(false)
1365
- expect(@rpm_y.installed).to eq(true)
1366
- expect(@rpm_z.installed).to eq(true)
1367
- end
1368
- end
1369
-
1370
- describe "repoid" do
1371
- it "should return the source repository repoid" do
1372
- expect(@rpm_x.repoid).to eq("base")
1373
- expect(@rpm_y.repoid).to eq("extras")
1374
- expect(@rpm_z.repoid).to eq("other")
1375
- end
1376
- end
1377
- end
1378
-
1379
- describe Chef::Provider::Package::Yum::RPMDependency do
1380
- describe "new - with parsing" do
1381
- before do
1382
- @rpmdep = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :==)
1383
- end
1384
-
1385
- it "should expose name, version, flag available" do
1386
- expect(@rpmdep.name).to eq("testing")
1387
- expect(@rpmdep.version.e).to eq(1)
1388
- expect(@rpmdep.version.v).to eq("1.6.5")
1389
- expect(@rpmdep.version.r).to eq("9.36.el5")
1390
- expect(@rpmdep.flag).to eq(:==)
1391
- end
1392
- end
1393
-
1394
- describe "new - no parsing" do
1395
- before do
1396
- @rpmdep = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1", "1.6.5", "9.36.el5", :==)
1397
- end
1398
-
1399
- it "should expose name, version, flag available" do
1400
- expect(@rpmdep.name).to eq("testing")
1401
- expect(@rpmdep.version.e).to eq(1)
1402
- expect(@rpmdep.version.v).to eq("1.6.5")
1403
- expect(@rpmdep.version.r).to eq("9.36.el5")
1404
- expect(@rpmdep.flag).to eq(:==)
1405
- end
1406
- end
1407
-
1408
- it "should raise an error unless passed 3 or 5 args" do
1409
- expect do
1410
- Chef::Provider::Package::Yum::RPMDependency.new()
1411
- end.to raise_error(ArgumentError)
1412
- expect do
1413
- Chef::Provider::Package::Yum::RPMDependency.new("testing")
1414
- end.to raise_error(ArgumentError)
1415
- expect do
1416
- Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5")
1417
- end.to raise_error(ArgumentError)
1418
- expect do
1419
- Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :==)
1420
- end.not_to raise_error
1421
- expect do
1422
- Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :==, "extra")
1423
- end.to raise_error(ArgumentError)
1424
- expect do
1425
- Chef::Provider::Package::Yum::RPMDependency.new("testing", "1", "1.6.5", "9.36.el5", :==)
1426
- end.not_to raise_error
1427
- expect do
1428
- Chef::Provider::Package::Yum::RPMDependency.new("testing", "1", "1.6.5", "9.36.el5", :==, "extra")
1429
- end.to raise_error(ArgumentError)
1430
- end
1431
-
1432
- describe "parse" do
1433
- it "should parse a name, flag, version string into a valid RPMDependency object" do
1434
- @rpmdep = Chef::Provider::Package::Yum::RPMDependency.parse("testing >= 1:1.6.5-9.36.el5")
1435
-
1436
- expect(@rpmdep.name).to eq("testing")
1437
- expect(@rpmdep.version.e).to eq(1)
1438
- expect(@rpmdep.version.v).to eq("1.6.5")
1439
- expect(@rpmdep.version.r).to eq("9.36.el5")
1440
- expect(@rpmdep.flag).to eq(:>=)
1441
- end
1442
-
1443
- it "should parse a name into a valid RPMDependency object" do
1444
- @rpmdep = Chef::Provider::Package::Yum::RPMDependency.parse("testing")
1445
-
1446
- expect(@rpmdep.name).to eq("testing")
1447
- expect(@rpmdep.version.e).to eq(nil)
1448
- expect(@rpmdep.version.v).to eq(nil)
1449
- expect(@rpmdep.version.r).to eq(nil)
1450
- expect(@rpmdep.flag).to eq(:==)
1451
- end
1452
-
1453
- it "should parse an invalid string into the name of a RPMDependency object" do
1454
- @rpmdep = Chef::Provider::Package::Yum::RPMDependency.parse("testing blah >")
1455
-
1456
- expect(@rpmdep.name).to eq("testing blah >")
1457
- expect(@rpmdep.version.e).to eq(nil)
1458
- expect(@rpmdep.version.v).to eq(nil)
1459
- expect(@rpmdep.version.r).to eq(nil)
1460
- expect(@rpmdep.flag).to eq(:==)
1461
- end
1462
-
1463
- it "should parse various valid flags" do
1464
- [
1465
- [ ">", :> ],
1466
- [ ">=", :>= ],
1467
- [ "=", :== ],
1468
- [ "==", :== ],
1469
- [ "<=", :<= ],
1470
- [ "<", :< ],
1471
- ].each do |before, after|
1472
- @rpmdep = Chef::Provider::Package::Yum::RPMDependency.parse("testing #{before} 1:1.1-1")
1473
- expect(@rpmdep.flag).to eq(after)
1474
- end
1475
- end
1476
-
1477
- it "should parse various invalid flags and treat them as names" do
1478
- [
1479
- [ "<>", :== ],
1480
- [ "!=", :== ],
1481
- [ ">>", :== ],
1482
- [ "<<", :== ],
1483
- [ "!", :== ],
1484
- [ "~", :== ],
1485
- ].each do |before, after|
1486
- @rpmdep = Chef::Provider::Package::Yum::RPMDependency.parse("testing #{before} 1:1.1-1")
1487
- expect(@rpmdep.name).to eq("testing #{before} 1:1.1-1")
1488
- expect(@rpmdep.flag).to eq(after)
1489
- end
1490
- end
1491
- end
1492
-
1493
- describe "satisfy?" do
1494
- it "should raise an error unless a RPMDependency is passed" do
1495
- @rpmprovide = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :==)
1496
- @rpmrequire = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :>=)
1497
- expect do
1498
- @rpmprovide.satisfy?("hi")
1499
- end.to raise_error(ArgumentError)
1500
- expect do
1501
- @rpmprovide.satisfy?(@rpmrequire)
1502
- end.not_to raise_error
1503
- end
1504
-
1505
- it "should validate dependency satisfaction logic for standard examples" do
1506
- [
1507
- # names
1508
- [ "test", "test", true ],
1509
- [ "test", "foo", false ],
1510
- # full: epoch:version-relese
1511
- [ "testing = 1:1.1-1", "testing > 1:1.1-0", true ],
1512
- [ "testing = 1:1.1-1", "testing >= 1:1.1-0", true ],
1513
- [ "testing = 1:1.1-1", "testing >= 1:1.1-1", true ],
1514
- [ "testing = 1:1.1-1", "testing = 1:1.1-1", true ],
1515
- [ "testing = 1:1.1-1", "testing == 1:1.1-1", true ],
1516
- [ "testing = 1:1.1-1", "testing <= 1:1.1-1", true ],
1517
- [ "testing = 1:1.1-1", "testing <= 1:1.1-0", false ],
1518
- [ "testing = 1:1.1-1", "testing < 1:1.1-0", false ],
1519
- # partial: epoch:version
1520
- [ "testing = 1:1.1", "testing > 1:1.0", true ],
1521
- [ "testing = 1:1.1", "testing >= 1:1.0", true ],
1522
- [ "testing = 1:1.1", "testing >= 1:1.1", true ],
1523
- [ "testing = 1:1.1", "testing = 1:1.1", true ],
1524
- [ "testing = 1:1.1", "testing == 1:1.1", true ],
1525
- [ "testing = 1:1.1", "testing <= 1:1.1", true ],
1526
- [ "testing = 1:1.1", "testing <= 1:1.0", false ],
1527
- [ "testing = 1:1.1", "testing < 1:1.0", false ],
1528
- # partial: epoch
1529
- [ "testing = 1:", "testing > 0:", true ],
1530
- [ "testing = 1:", "testing >= 0:", true ],
1531
- [ "testing = 1:", "testing >= 1:", true ],
1532
- [ "testing = 1:", "testing = 1:", true ],
1533
- [ "testing = 1:", "testing == 1:", true ],
1534
- [ "testing = 1:", "testing <= 1:", true ],
1535
- [ "testing = 1:", "testing <= 0:", false ],
1536
- [ "testing = 1:", "testing < 0:", false ],
1537
- # mix and match!
1538
- [ "testing = 1:1.1-1", "testing == 1:1.1", true ],
1539
- [ "testing = 1:1.1-1", "testing == 1:", true ],
1540
- ].each do |prov, req, result|
1541
- @rpmprovide = Chef::Provider::Package::Yum::RPMDependency.parse(prov)
1542
- @rpmrequire = Chef::Provider::Package::Yum::RPMDependency.parse(req)
1543
-
1544
- expect(@rpmprovide.satisfy?(@rpmrequire)).to eq(result)
1545
- expect(@rpmrequire.satisfy?(@rpmprovide)).to eq(result)
1546
- end
1547
- end
1548
- end
1549
-
1550
- end
1551
-
1552
- # thanks resource_collection_spec.rb!
1553
- describe Chef::Provider::Package::Yum::RPMDb do
1554
- before(:each) do
1555
- @rpmdb = Chef::Provider::Package::Yum::RPMDb.new
1556
- # name, version, arch, installed, available
1557
- deps_v = [
1558
- Chef::Provider::Package::Yum::RPMDependency.parse("libz.so.1()(64bit)"),
1559
- Chef::Provider::Package::Yum::RPMDependency.parse("test-package-a = 0:1.6.5-9.36.el5"),
1560
- ]
1561
- deps_z = [
1562
- Chef::Provider::Package::Yum::RPMDependency.parse("libz.so.1()(64bit)"),
1563
- Chef::Provider::Package::Yum::RPMDependency.parse("config(test) = 0:1.6.5-9.36.el5"),
1564
- Chef::Provider::Package::Yum::RPMDependency.parse("test-package-c = 0:1.6.5-9.36.el5"),
1565
- ]
1566
- @rpm_v = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-a", "0:1.6.5-9.36.el5", "i386", deps_v, true, false, "base")
1567
- @rpm_w = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "0:1.6.5-9.36.el5", "i386", [], true, true, "extras")
1568
- @rpm_x = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "0:1.6.5-9.36.el5", "x86_64", [], false, true, "extras")
1569
- @rpm_y = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "1:1.6.5-9.36.el5", "x86_64", [], true, true, "extras")
1570
- @rpm_z = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-c", "0:1.6.5-9.36.el5", "noarch", deps_z, true, true, "base")
1571
- @rpm_z_mirror = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-c", "0:1.6.5-9.36.el5", "noarch", deps_z, true, true, "base")
1572
- end
1573
-
1574
- describe "initialize" do
1575
- it "should return a Chef::Provider::Package::Yum::RPMDb object" do
1576
- expect(@rpmdb).to be_kind_of(Chef::Provider::Package::Yum::RPMDb)
1577
- end
1578
- end
1579
-
1580
- describe "push" do
1581
- it "should accept an RPMDbPackage object through pushing" do
1582
- expect { @rpmdb.push(@rpm_w) }.not_to raise_error
1583
- end
1584
-
1585
- it "should accept multiple RPMDbPackage object through pushing" do
1586
- expect { @rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z) }.not_to raise_error
1587
- end
1588
-
1589
- it "should only accept an RPMDbPackage object" do
1590
- expect { @rpmdb.push("string") }.to raise_error(ArgumentError)
1591
- end
1592
-
1593
- it "should add the package to the package db" do
1594
- @rpmdb.push(@rpm_w)
1595
- expect(@rpmdb["test-package-b"]).not_to eq(nil)
1596
- end
1597
-
1598
- it "should add conditionally add the package to the available list" do
1599
- expect(@rpmdb.available_size).to eq(0)
1600
- @rpmdb.push(@rpm_v, @rpm_w)
1601
- expect(@rpmdb.available_size).to eq(1)
1602
- end
1603
-
1604
- it "should add conditionally add the package to the installed list" do
1605
- expect(@rpmdb.installed_size).to eq(0)
1606
- @rpmdb.push(@rpm_w, @rpm_x)
1607
- expect(@rpmdb.installed_size).to eq(1)
1608
- end
1609
-
1610
- it "should have a total of 2 packages in the RPMDb" do
1611
- expect(@rpmdb.size).to eq(0)
1612
- @rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
1613
- expect(@rpmdb.size).to eq(2)
1614
- end
1615
-
1616
- it "should keep the Array unique when a duplicate is pushed" do
1617
- @rpmdb.push(@rpm_z, @rpm_z_mirror)
1618
- expect(@rpmdb["test-package-c"].size).to eq(1)
1619
- end
1620
-
1621
- it "should register the package provides in the provides index" do
1622
- @rpmdb.push(@rpm_v, @rpm_w, @rpm_z)
1623
- expect(@rpmdb.lookup_provides("test-package-a")[0]).to eq(@rpm_v)
1624
- expect(@rpmdb.lookup_provides("config(test)")[0]).to eq(@rpm_z)
1625
- expect(@rpmdb.lookup_provides("libz.so.1()(64bit)")[0]).to eq(@rpm_v)
1626
- expect(@rpmdb.lookup_provides("libz.so.1()(64bit)")[1]).to eq(@rpm_z)
1627
- end
1628
- end
1629
-
1630
- describe "<<" do
1631
- it "should accept an RPMPackage object through the << operator" do
1632
- expect { @rpmdb << @rpm_w }.not_to raise_error
1633
- end
1634
- end
1635
-
1636
- describe "lookup" do
1637
- it "should return an Array of RPMPackage objects by index" do
1638
- @rpmdb << @rpm_w
1639
- expect(@rpmdb.lookup("test-package-b")).to be_kind_of(Array)
1640
- end
1641
- end
1642
-
1643
- describe "[]" do
1644
- it "should return an Array of RPMPackage objects though the [index] operator" do
1645
- @rpmdb << @rpm_w
1646
- expect(@rpmdb["test-package-b"]).to be_kind_of(Array)
1647
- end
1648
-
1649
- it "should return an Array of 3 RPMPackage objects" do
1650
- @rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
1651
- expect(@rpmdb["test-package-b"].size).to eq(3)
1652
- end
1653
-
1654
- it "should return an Array of RPMPackage objects sorted from newest to oldest" do
1655
- @rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
1656
- expect(@rpmdb["test-package-b"][0]).to eq(@rpm_y)
1657
- expect(@rpmdb["test-package-b"][1]).to eq(@rpm_x)
1658
- expect(@rpmdb["test-package-b"][2]).to eq(@rpm_w)
1659
- end
1660
- end
1661
-
1662
- describe "lookup_provides" do
1663
- it "should return an Array of RPMPackage objects by index" do
1664
- @rpmdb << @rpm_z
1665
- x = @rpmdb.lookup_provides("config(test)")
1666
- expect(x).to be_kind_of(Array)
1667
- expect(x[0]).to eq(@rpm_z)
1668
- end
1669
- end
1670
-
1671
- describe "clear" do
1672
- it "should clear the RPMDb" do
1673
- expect(@rpmdb).to receive(:clear_available).once
1674
- expect(@rpmdb).to receive(:clear_installed).once
1675
- @rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
1676
- expect(@rpmdb.size).not_to eq(0)
1677
- expect(@rpmdb.lookup_provides("config(test)")).to be_kind_of(Array)
1678
- @rpmdb.clear
1679
- expect(@rpmdb.lookup_provides("config(test)")).to eq(nil)
1680
- expect(@rpmdb.size).to eq(0)
1681
- end
1682
- end
1683
-
1684
- describe "clear_available" do
1685
- it "should clear the available list" do
1686
- @rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
1687
- expect(@rpmdb.available_size).not_to eq(0)
1688
- @rpmdb.clear_available
1689
- expect(@rpmdb.available_size).to eq(0)
1690
- end
1691
- end
1692
-
1693
- describe "available?" do
1694
- it "should return true if a package is available" do
1695
- expect(@rpmdb.available?(@rpm_w)).to eq(false)
1696
- @rpmdb.push(@rpm_v, @rpm_w)
1697
- expect(@rpmdb.available?(@rpm_v)).to eq(false)
1698
- expect(@rpmdb.available?(@rpm_w)).to eq(true)
1699
- end
1700
- end
1701
-
1702
- describe "clear_installed" do
1703
- it "should clear the installed list" do
1704
- @rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
1705
- expect(@rpmdb.installed_size).not_to eq(0)
1706
- @rpmdb.clear_installed
1707
- expect(@rpmdb.installed_size).to eq(0)
1708
- end
1709
- end
1710
-
1711
- describe "installed?" do
1712
- it "should return true if a package is installed" do
1713
- expect(@rpmdb.installed?(@rpm_w)).to eq(false)
1714
- @rpmdb.push(@rpm_w, @rpm_x)
1715
- expect(@rpmdb.installed?(@rpm_w)).to eq(true)
1716
- expect(@rpmdb.installed?(@rpm_x)).to eq(false)
1717
- end
1718
- end
1719
-
1720
- describe "whatprovides" do
1721
- it "should raise an error unless a RPMDependency is passed" do
1722
- @rpmprovide = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :==)
1723
- @rpmrequire = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :>=)
1724
- expect do
1725
- @rpmdb.whatprovides("hi")
1726
- end.to raise_error(ArgumentError)
1727
- expect do
1728
- @rpmdb.whatprovides(@rpmrequire)
1729
- end.not_to raise_error
1730
- end
1731
-
1732
- it "should return an Array of packages statisfying a RPMDependency" do
1733
- @rpmdb.push(@rpm_v, @rpm_w, @rpm_z)
1734
-
1735
- @rpmrequire = Chef::Provider::Package::Yum::RPMDependency.parse("test-package-a >= 1.6.5")
1736
- x = @rpmdb.whatprovides(@rpmrequire)
1737
- expect(x).to be_kind_of(Array)
1738
- expect(x[0]).to eq(@rpm_v)
1739
-
1740
- @rpmrequire = Chef::Provider::Package::Yum::RPMDependency.parse("libz.so.1()(64bit)")
1741
- x = @rpmdb.whatprovides(@rpmrequire)
1742
- expect(x).to be_kind_of(Array)
1743
- expect(x[0]).to eq(@rpm_v)
1744
- expect(x[1]).to eq(@rpm_z)
1745
- end
1746
- end
1747
-
1748
- end
1749
-
1750
- describe Chef::Provider::Package::Yum::YumCache do
1751
- # allow for the reset of a Singleton
1752
- # thanks to Ian White (http://blog.ardes.com/2006/12/11/testing-singletons-with-ruby)
1753
- class << Chef::Provider::Package::Yum::YumCache
1754
- def reset_instance
1755
- Singleton.send :__init__, self
1756
- self
1757
- end
1758
- end
1759
-
1760
- let(:yum_exe) do
1761
- StringIO.new("#!/usr/bin/python\n\naldsjfa\ldsajflkdsjf\lajsdfj")
1762
- end
1763
-
1764
- let(:bin_exe) do
1765
- StringIO.new(SecureRandom.random_bytes)
1766
- end
1767
-
1768
- before(:each) do
1769
- @stdin = double("STDIN", :nil_object => true)
1770
- @stdout = double("STDOUT", :nil_object => true)
1771
-
1772
- @stdout_good = <<EOF
1773
- [option installonlypkgs] kernel kernel-bigmem kernel-enterprise
1774
- erlang-mochiweb 0 1.4.1 5.el5 x86_64 ['erlang-mochiweb = 1.4.1-5.el5', 'mochiweb = 1.4.1-5.el5'] i installed
1775
- zip 0 2.31 2.el5 x86_64 ['zip = 2.31-2.el5'] r base
1776
- zisofs-tools 0 1.0.6 3.2.2 x86_64 [] a extras
1777
- zlib 0 1.2.3 3 x86_64 ['zlib = 1.2.3-3', 'libz.so.1()(64bit)'] r base
1778
- zlib 0 1.2.3 3 i386 ['zlib = 1.2.3-3', 'libz.so.1'] r base
1779
- zlib-devel 0 1.2.3 3 i386 [] a extras
1780
- zlib-devel 0 1.2.3 3 x86_64 ['zlib-devel = 1.2.3-3'] r base
1781
- znc 0 0.098 1.el5 x86_64 [] a base
1782
- znc-devel 0 0.098 1.el5 i386 [] a extras
1783
- znc-devel 0 0.098 1.el5 x86_64 [] a base
1784
- znc-extra 0 0.098 1.el5 x86_64 [] a base
1785
- znc-modtcl 0 0.098 1.el5 x86_64 [] a base
1786
- znc-test.beta1 0 0.098 1.el5 x86_64 [] a extras
1787
- znc-test.test.beta1 0 0.098 1.el5 x86_64 [] a base
1788
- EOF
1789
- @stdout_bad_type = <<EOF
1790
- zip 0 2.31 2.el5 x86_64 ['zip = 2.31-2.el5'] r base
1791
- zlib 0 1.2.3 3 x86_64 ['zlib = 1.2.3-3', 'libz.so.1()(64bit)'] c base
1792
- zlib-devel 0 1.2.3 3 i386 [] a extras
1793
- zlib-devel 0 1.2.3 3 x86_64 ['zlib-devel = 1.2.3-3'] bad installed
1794
- znc-modtcl 0 0.098 1.el5 x86_64 [] a base
1795
- EOF
1796
-
1797
- @stdout_bad_separators = <<EOF
1798
- zip 0 2.31 2.el5 x86_64 ['zip = 2.31-2.el5'] r base
1799
- zlib 0 1.2.3 3 x86_64 ['zlib = 1.2.3-3', 'libz.so.1()(64bit)'] i base bad
1800
- zlib-devel 0 1.2.3 3 i386 [] a extras
1801
- bad zlib-devel 0 1.2.3 3 x86_64 ['zlib-devel = 1.2.3-3'] i installed
1802
- znc-modtcl 0 0.098 1.el5 x86_64 [] a base bad
1803
- EOF
1804
-
1805
- @stdout_no_output = ""
1806
-
1807
- @stderr = <<EOF
1808
- yum-dump Config Error: File contains no section headers.
1809
- file: file://///etc/yum.repos.d/CentOS-Base.repo, line: 12
1810
- 'qeqwewe\n'
1811
- EOF
1812
- @status = double("Status", :exitstatus => 0, :stdin => @stdin, :stdout => @stdout_good, :stderr => @stderr)
1813
- # new singleton each time
1814
- Chef::Provider::Package::Yum::YumCache.reset_instance
1815
- @yc = Chef::Provider::Package::Yum::YumCache.instance
1816
- # load valid data
1817
- @yc.yum_binary = "yum"
1818
- allow(@yc).to receive(:shell_out!).and_return(@status)
1819
- allow_any_instance_of(described_class).to receive(:which).with("yum").and_return("/usr/bin/yum")
1820
- allow(::File).to receive(:open).with("/usr/bin/yum", "r") do |&block|
1821
- res = block.call(yum_exe)
1822
- # a bit of a hack. rewind this since it seem that no matter what
1823
- # I do, we get the same StringIO objects on multiple calls to
1824
- # ::File.open
1825
- yum_exe.rewind; res
1826
- end
1827
- end
1828
-
1829
- describe "initialize" do
1830
- it "should return a Chef::Provider::Package::Yum::YumCache object" do
1831
- expect(@yc).to be_kind_of(Chef::Provider::Package::Yum::YumCache)
1832
- end
1833
-
1834
- it "should register reload for start of Chef::Client runs" do
1835
- Chef::Provider::Package::Yum::YumCache.reset_instance
1836
- expect(Chef::Client).to receive(:when_run_starts) do |&b|
1837
- expect(b).not_to be_nil
1838
- end
1839
- @yc = Chef::Provider::Package::Yum::YumCache.instance
1840
- end
1841
- end
1842
-
1843
- describe "python_bin" do
1844
- it "should return the default python if an error occurs" do
1845
- allow(::File).to receive(:open).with("/usr/bin/yum", "r").and_raise(StandardError)
1846
- expect(@yc.python_bin).to eq("/usr/bin/python")
1847
- end
1848
-
1849
- it "should return the default python if the yum-executable doesn't start with #!" do
1850
- allow(::File).to receive(:open).with("/usr/bin/yum", "r") { |&b| r = b.call(bin_exe); bin_exe.rewind; r }
1851
- expect(@yc.python_bin).to eq("/usr/bin/python")
1852
- end
1853
-
1854
- it "should return /usr/bin/python if the interpreter is /bin/bash" do
1855
- other = StringIO.new("#!/bin/bash\n# The yum executable redirecting to dnf from dnf-yum compatible package.")
1856
- allow(::File).to receive(:open).with("/usr/bin/yum", "r") { |&b| r = b.call(other); other.rewind; r }
1857
- expect(@yc.python_bin).to eq("/usr/bin/python")
1858
- end
1859
-
1860
- it "should return the interpreter for yum" do
1861
- other = StringIO.new("#!/usr/bin/super_python\n\nlasjdfdsaljf\nlasdjfs")
1862
- allow(::File).to receive(:open).with("/usr/bin/yum", "r") { |&b| r = b.call(other); other.rewind; r }
1863
- expect(@yc.python_bin).to eq("/usr/bin/super_python")
1864
- end
1865
- end
1866
-
1867
- describe "refresh" do
1868
- it "should implicitly call yum-dump.py only once by default after being instantiated" do
1869
- expect(@yc).to receive(:shell_out!).once
1870
- @yc.installed_version("zlib")
1871
- @yc.reset
1872
- @yc.installed_version("zlib")
1873
- end
1874
-
1875
- it "should run yum-dump.py using the system python when next_refresh is for :all" do
1876
- @yc.reload
1877
- expect(@yc).to receive(:shell_out!).with(%r{^/usr/bin/python .*/yum-dump.py --options --installed-provides --yum-lock-timeout 30$}, :timeout => Chef::Config[:yum_timeout])
1878
- @yc.refresh
1879
- end
1880
-
1881
- it "should run yum-dump.py with the installed flag when next_refresh is for :installed" do
1882
- @yc.reload_installed
1883
- expect(@yc).to receive(:shell_out!).with(%r{^/usr/bin/python .*/yum-dump.py --installed --yum-lock-timeout 30$}, :timeout => Chef::Config[:yum_timeout])
1884
- @yc.refresh
1885
- end
1886
-
1887
- it "should run yum-dump.py with the all-provides flag when next_refresh is for :provides" do
1888
- @yc.reload_provides
1889
- expect(@yc).to receive(:shell_out!).with(%r{^/usr/bin/python .*/yum-dump.py --options --all-provides --yum-lock-timeout 30$}, :timeout => Chef::Config[:yum_timeout])
1890
- @yc.refresh
1891
- end
1892
-
1893
- it "should pass extra_repo_control args to yum-dump.py" do
1894
- @yc.enable_extra_repo_control("--enablerepo=foo --disablerepo=bar")
1895
- expect(@yc).to receive(:shell_out!).with(%r{^/usr/bin/python .*/yum-dump.py --options --installed-provides --enablerepo=foo --disablerepo=bar --yum-lock-timeout 30$}, :timeout => Chef::Config[:yum_timeout])
1896
- @yc.refresh
1897
- end
1898
-
1899
- it "should pass extra_repo_control args and configured yum lock timeout to yum-dump.py" do
1900
- Chef::Config[:yum_lock_timeout] = 999
1901
- @yc.enable_extra_repo_control("--enablerepo=foo --disablerepo=bar")
1902
- expect(@yc).to receive(:shell_out!).with(%r{^/usr/bin/python .*/yum-dump.py --options --installed-provides --enablerepo=foo --disablerepo=bar --yum-lock-timeout 999$}, :timeout => Chef::Config[:yum_timeout])
1903
- @yc.refresh
1904
- end
1905
-
1906
- it "should warn about invalid data with too many separators" do
1907
- @status = double("Status", :exitstatus => 0, :stdin => @stdin, :stdout => @stdout_bad_separators, :stderr => @stderr)
1908
- allow(@yc).to receive(:shell_out!).and_return(@status)
1909
- expect(Chef::Log).to receive(:warn).exactly(3).times.with(%r{Problem parsing})
1910
- @yc.refresh
1911
- end
1912
-
1913
- it "should warn about invalid data with an incorrect type" do
1914
- @status = double("Status", :exitstatus => 0, :stdin => @stdin, :stdout => @stdout_bad_type, :stderr => @stderr)
1915
- allow(@yc).to receive(:shell_out!).and_return(@status)
1916
- expect(Chef::Log).to receive(:warn).exactly(2).times.with(%r{Problem parsing})
1917
- @yc.refresh
1918
- end
1919
-
1920
- it "should warn about no output from yum-dump.py" do
1921
- @status = double("Status", :exitstatus => 0, :stdin => @stdin, :stdout => @stdout_no_output, :stderr => @stderr)
1922
- allow(@yc).to receive(:shell_out!).and_return(@status)
1923
- expect(Chef::Log).to receive(:warn).exactly(1).times.with(%r{no output from yum-dump.py})
1924
- @yc.refresh
1925
- end
1926
-
1927
- it "should raise exception yum-dump.py exits with a non zero status" do
1928
- @status = double("Status", :exitstatus => 1, :stdin => @stdin, :stdout => @stdout_no_output, :stderr => @stderr)
1929
- allow(@yc).to receive(:shell_out!).and_return(@status)
1930
- expect { @yc.refresh }.to raise_error(Chef::Exceptions::Package, %r{CentOS-Base.repo, line: 12})
1931
- end
1932
-
1933
- it "should parse type 'i' into an installed state for a package" do
1934
- expect(@yc.available_version("erlang-mochiweb")).to eq(nil)
1935
- expect(@yc.installed_version("erlang-mochiweb")).not_to eq(nil)
1936
- end
1937
-
1938
- it "should parse type 'a' into an available state for a package" do
1939
- expect(@yc.available_version("znc")).not_to eq(nil)
1940
- expect(@yc.installed_version("znc")).to eq(nil)
1941
- end
1942
-
1943
- it "should parse type 'r' into an installed and available states for a package" do
1944
- expect(@yc.available_version("zip")).not_to eq(nil)
1945
- expect(@yc.installed_version("zip")).not_to eq(nil)
1946
- end
1947
-
1948
- it "should parse installonlypkgs from yum-dump.py options output" do
1949
- expect(@yc.allow_multi_install).to eq(%w{kernel kernel-bigmem kernel-enterprise})
1950
- end
1951
- end
1952
-
1953
- describe "installed_version" do
1954
- it "should take one or two arguments" do
1955
- expect { @yc.installed_version("zip") }.not_to raise_error
1956
- expect { @yc.installed_version("zip", "i386") }.not_to raise_error
1957
- expect { @yc.installed_version("zip", "i386", "extra") }.to raise_error(ArgumentError)
1958
- end
1959
-
1960
- it "should return version-release for matching package regardless of arch" do
1961
- expect(@yc.installed_version("zip", "x86_64")).to eq("2.31-2.el5")
1962
- expect(@yc.installed_version("zip", nil)).to eq("2.31-2.el5")
1963
- end
1964
-
1965
- it "should return version-release for matching package and arch" do
1966
- expect(@yc.installed_version("zip", "x86_64")).to eq("2.31-2.el5")
1967
- expect(@yc.installed_version("zisofs-tools", "i386")).to eq(nil)
1968
- end
1969
-
1970
- it "should return nil for an unmatched package" do
1971
- expect(@yc.installed_version(nil, nil)).to eq(nil)
1972
- expect(@yc.installed_version("test1", nil)).to eq(nil)
1973
- expect(@yc.installed_version("test2", "x86_64")).to eq(nil)
1974
- end
1975
- end
1976
-
1977
- describe "available_version" do
1978
- it "should take one or two arguments" do
1979
- expect { @yc.available_version("zisofs-tools") }.not_to raise_error
1980
- expect { @yc.available_version("zisofs-tools", "i386") }.not_to raise_error
1981
- expect { @yc.available_version("zisofs-tools", "i386", "extra") }.to raise_error(ArgumentError)
1982
- end
1983
-
1984
- it "should return version-release for matching package regardless of arch" do
1985
- expect(@yc.available_version("zip", "x86_64")).to eq("2.31-2.el5")
1986
- expect(@yc.available_version("zip", nil)).to eq("2.31-2.el5")
1987
- end
1988
-
1989
- it "should return version-release for matching package and arch" do
1990
- expect(@yc.available_version("zip", "x86_64")).to eq("2.31-2.el5")
1991
- expect(@yc.available_version("zisofs-tools", "i386")).to eq(nil)
1992
- end
1993
-
1994
- it "should return nil for an unmatched package" do
1995
- expect(@yc.available_version(nil, nil)).to eq(nil)
1996
- expect(@yc.available_version("test1", nil)).to eq(nil)
1997
- expect(@yc.available_version("test2", "x86_64")).to eq(nil)
1998
- end
1999
- end
2000
-
2001
- describe "version_available?" do
2002
- it "should take two or three arguments" do
2003
- expect { @yc.version_available?("zisofs-tools") }.to raise_error(ArgumentError)
2004
- expect { @yc.version_available?("zisofs-tools", "1.0.6-3.2.2") }.not_to raise_error
2005
- expect { @yc.version_available?("zisofs-tools", "1.0.6-3.2.2", "x86_64") }.not_to raise_error
2006
- end
2007
-
2008
- it "should return true if our package-version-arch is available" do
2009
- expect(@yc.version_available?("zisofs-tools", "1.0.6-3.2.2", "x86_64")).to eq(true)
2010
- end
2011
-
2012
- it "should return true if our package-version, no arch, is available" do
2013
- expect(@yc.version_available?("zisofs-tools", "1.0.6-3.2.2", nil)).to eq(true)
2014
- expect(@yc.version_available?("zisofs-tools", "1.0.6-3.2.2")).to eq(true)
2015
- end
2016
-
2017
- it "should return false if our package-version-arch isn't available" do
2018
- expect(@yc.version_available?("zisofs-tools", "1.0.6-3.2.2", "pretend")).to eq(false)
2019
- expect(@yc.version_available?("zisofs-tools", "pretend", "x86_64")).to eq(false)
2020
- expect(@yc.version_available?("pretend", "1.0.6-3.2.2", "x86_64")).to eq(false)
2021
- end
2022
-
2023
- it "should return false if our package-version, no arch, isn't available" do
2024
- expect(@yc.version_available?("zisofs-tools", "pretend", nil)).to eq(false)
2025
- expect(@yc.version_available?("zisofs-tools", "pretend")).to eq(false)
2026
- expect(@yc.version_available?("pretend", "1.0.6-3.2.2")).to eq(false)
2027
- end
2028
- end
2029
-
2030
- describe "package_repository" do
2031
- it "should take two or three arguments" do
2032
- expect { @yc.package_repository("zisofs-tools") }.to raise_error(ArgumentError)
2033
- expect { @yc.package_repository("zisofs-tools", "1.0.6-3.2.2") }.not_to raise_error
2034
- expect { @yc.package_repository("zisofs-tools", "1.0.6-3.2.2", "x86_64") }.not_to raise_error
2035
- end
2036
-
2037
- it "should return repoid for package-version-arch" do
2038
- expect(@yc.package_repository("zlib-devel", "1.2.3-3", "i386")).to eq("extras")
2039
- expect(@yc.package_repository("zlib-devel", "1.2.3-3", "x86_64")).to eq("base")
2040
- end
2041
-
2042
- it "should return repoid for package-version, no arch" do
2043
- expect(@yc.package_repository("zisofs-tools", "1.0.6-3.2.2", nil)).to eq("extras")
2044
- expect(@yc.package_repository("zisofs-tools", "1.0.6-3.2.2")).to eq("extras")
2045
- end
2046
-
2047
- it "should return nil when no match for package-version-arch" do
2048
- expect(@yc.package_repository("zisofs-tools", "1.0.6-3.2.2", "pretend")).to eq(nil)
2049
- expect(@yc.package_repository("zisofs-tools", "pretend", "x86_64")).to eq(nil)
2050
- expect(@yc.package_repository("pretend", "1.0.6-3.2.2", "x86_64")).to eq(nil)
2051
- end
2052
-
2053
- it "should return nil when no match for package-version, no arch" do
2054
- expect(@yc.package_repository("zisofs-tools", "pretend", nil)).to eq(nil)
2055
- expect(@yc.package_repository("zisofs-tools", "pretend")).to eq(nil)
2056
- expect(@yc.package_repository("pretend", "1.0.6-3.2.2")).to eq(nil)
2057
- end
2058
- end
2059
-
2060
- describe "reset" do
2061
- it "should empty the installed and available packages RPMDb" do
2062
- expect(@yc.available_version("zip", "x86_64")).to eq("2.31-2.el5")
2063
- expect(@yc.installed_version("zip", "x86_64")).to eq("2.31-2.el5")
2064
- @yc.reset
2065
- expect(@yc.available_version("zip", "x86_64")).to eq(nil)
2066
- expect(@yc.installed_version("zip", "x86_64")).to eq(nil)
2067
- end
2068
- end
2069
-
2070
- describe "package_available?" do
2071
- it "should return true a package name is available" do
2072
- expect(@yc.package_available?("zisofs-tools")).to eq(true)
2073
- expect(@yc.package_available?("moo")).to eq(false)
2074
- expect(@yc.package_available?(nil)).to eq(false)
2075
- end
2076
-
2077
- it "should return true a package name + arch is available" do
2078
- expect(@yc.package_available?("zlib-devel.i386")).to eq(true)
2079
- expect(@yc.package_available?("zisofs-tools.x86_64")).to eq(true)
2080
- expect(@yc.package_available?("znc-test.beta1.x86_64")).to eq(true)
2081
- expect(@yc.package_available?("znc-test.beta1")).to eq(true)
2082
- expect(@yc.package_available?("znc-test.test.beta1")).to eq(true)
2083
- expect(@yc.package_available?("moo.i386")).to eq(false)
2084
- expect(@yc.package_available?("zisofs-tools.beta")).to eq(false)
2085
- expect(@yc.package_available?("znc-test.test")).to eq(false)
2086
- end
2087
- end
2088
-
2089
- describe "enable_extra_repo_control" do
2090
- it "should set @extra_repo_control to arg" do
2091
- @yc.enable_extra_repo_control("--enablerepo=test")
2092
- expect(@yc.extra_repo_control).to eq("--enablerepo=test")
2093
- end
2094
-
2095
- it "should call reload once when set to flag cache for update" do
2096
- expect(@yc).to receive(:reload).once
2097
- @yc.enable_extra_repo_control("--enablerepo=test")
2098
- @yc.enable_extra_repo_control("--enablerepo=test")
2099
- end
2100
- end
2101
-
2102
- describe "disable_extra_repo_control" do
2103
- it "should set @extra_repo_control to nil" do
2104
- @yc.enable_extra_repo_control("--enablerepo=test")
2105
- @yc.disable_extra_repo_control
2106
- expect(@yc.extra_repo_control).to eq(nil)
2107
- end
2108
-
2109
- it "should call reload once when cleared to flag cache for update" do
2110
- expect(@yc).to receive(:reload).once
2111
- @yc.enable_extra_repo_control("--enablerepo=test")
2112
- expect(@yc).to receive(:reload).once
2113
- @yc.disable_extra_repo_control
2114
- @yc.disable_extra_repo_control
2115
- end
2116
- end
2117
-
2118
- end
2119
-
2120
- describe "Chef::Provider::Package::Yum - Multi" do
2121
- before(:each) do
2122
- @node = Chef::Node.new
2123
- @events = Chef::EventDispatch::Dispatcher.new
2124
- @run_context = Chef::RunContext.new(@node, {}, @events)
2125
- @new_resource = Chef::Resource::YumPackage.new(%w{cups vim})
2126
- @status = double("Status", :exitstatus => 0)
2127
- @yum_cache = double(
2128
- "Chef::Provider::Yum::YumCache",
2129
- :reload_installed => true,
2130
- :reset => true,
2131
- :installed_version => "XXXX",
2132
- :candidate_version => "YYYY",
2133
- :package_available? => true,
2134
- :version_available? => true,
2135
- :allow_multi_install => [ "kernel" ],
2136
- :package_repository => "base",
2137
- :disable_extra_repo_control => true
2138
- )
2139
- allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
2140
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
2141
- allow(@yum_cache).to receive(:yum_binary=).with("yum")
2142
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
2143
- @pid = double("PID")
2144
- end
2145
-
2146
- describe "when evaluating the correctness of the resource" do
2147
- it "raises an error if the array lengths of package name, arch, and version do not match up" do
2148
- @new_resource.version(["1.1"])
2149
- @new_resource.arch(%w{x86_64 i386 i686})
2150
- expect { @provider.check_resource_semantics! }.to raise_error(Chef::Exceptions::InvalidResourceSpecification)
2151
- end
2152
- end
2153
-
2154
- describe "when loading the current system state" do
2155
- it "should create a current resource with the name of the new_resource" do
2156
- @provider.load_current_resource
2157
- expect(@provider.current_resource.name).to eq("cups, vim")
2158
- end
2159
-
2160
- it "should set the current resources package name to the new resources package name" do
2161
- @provider.load_current_resource
2162
- expect(@provider.current_resource.package_name).to eq(%w{cups vim})
2163
- end
2164
-
2165
- it "should set the installed version to nil on the current resource if no installed package" do
2166
- allow(@yum_cache).to receive(:installed_version).and_return(nil)
2167
- @provider.load_current_resource
2168
- expect(@provider.current_resource.version).to eq([nil, nil])
2169
- end
2170
-
2171
- it "should set the installed version if yum has one" do
2172
- allow(@yum_cache).to receive(:installed_version).with("cups", nil).and_return("1.2.4-11.18.el5")
2173
- allow(@yum_cache).to receive(:installed_version).with("vim", nil).and_return("1.0")
2174
- allow(@yum_cache).to receive(:candidate_version).with("cups", nil).and_return("1.2.4-11.18.el5_2.3")
2175
- allow(@yum_cache).to receive(:candidate_version).with("vim", nil).and_return("1.5")
2176
- @provider.load_current_resource
2177
- expect(@provider.current_resource.version).to eq(["1.2.4-11.18.el5", "1.0"])
2178
- end
2179
-
2180
- it "should set the candidate version if yum info has one" do
2181
- allow(@yum_cache).to receive(:installed_version).with("cups", nil).and_return("1.2.4-11.18.el5")
2182
- allow(@yum_cache).to receive(:installed_version).with("vim", nil).and_return("1.0")
2183
- allow(@yum_cache).to receive(:candidate_version).with("cups", nil).and_return("1.2.4-11.18.el5_2.3")
2184
- allow(@yum_cache).to receive(:candidate_version).with("vim", nil).and_return("1.5")
2185
- @provider.load_current_resource
2186
- expect(@provider.candidate_version).to eql(["1.2.4-11.18.el5_2.3", "1.5"])
2187
- end
2188
-
2189
- it "should return the current resouce" do
2190
- expect(@provider.load_current_resource).to eql(@provider.current_resource)
2191
- end
2192
-
2193
- describe "when version constraint in package_name" do
2194
- it "should set package_version if no existing package_name is found and new_package_name is available" do
2195
- @new_resource = Chef::Resource::YumPackage.new(["cups = 1.2.4-11.18.el5_2.3", "emacs = 24.4"])
2196
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
2197
- allow(@yum_cache).to receive(:package_available?) { |pkg| %w{cups emacs}.include?(pkg) ? true : false }
2198
- allow(@yum_cache).to receive(:candidate_version) do |pkg|
2199
- if pkg == "cups"
2200
- "1.2.4-11.18.el5_2.3"
2201
- elsif pkg == "emacs"
2202
- "24.4"
2203
- end
2204
- end
2205
- allow(@yum_cache).to receive(:packages_from_require) do |pkg|
2206
- if pkg.name == "cups"
2207
- [Chef::Provider::Package::Yum::RPMDbPackage.new("cups", "1.2.4-11.18.el5_2.3", "noarch", [], false, true, "base")]
2208
- elsif pkg.name == "emacs"
2209
- [Chef::Provider::Package::Yum::RPMDbPackage.new("emacs", "24.4", "noarch", [], false, true, "base")]
2210
- end
2211
- end
2212
- expect(Chef::Log).to receive(:debug).exactly(2).times.with(%r{matched 1 package,})
2213
- expect(Chef::Log).to receive(:debug).exactly(1).times.with(%r{candidate version: 1.2.4-11.18.el5_2.3})
2214
- expect(Chef::Log).to receive(:debug).exactly(1).times.with(%r{candidate version: 24.4})
2215
- expect(Chef::Log).to receive(:debug).at_least(2).times.with(%r{checking yum info})
2216
- @provider.load_current_resource
2217
- expect(@provider.new_resource.package_name).to eq(%w{cups emacs})
2218
- expect(@provider.new_resource.version).to eq(["1.2.4-11.18.el5_2.3", "24.4"])
2219
- expect(@provider.send(:package_name_array)).to eq(%w{cups emacs})
2220
- expect(@provider.send(:new_version_array)).to eq(["1.2.4-11.18.el5_2.3", "24.4"])
2221
- end
2222
- end
2223
- end
2224
-
2225
- describe "when installing a package" do
2226
- it "should run yum install with the package name and version" do
2227
- @provider.load_current_resource
2228
- allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
2229
- allow(@yum_cache).to receive(:installed_version).with("cups", nil).and_return("1.2.4-11.18.el5")
2230
- allow(@yum_cache).to receive(:installed_version).with("vim", nil).and_return("0.9")
2231
- expect(@provider).to receive(:yum_command).with(
2232
- "-d0 -e0 -y install cups-1.2.4-11.19.el5 vim-1.0"
2233
- )
2234
- @provider.install_package(%w{cups vim}, ["1.2.4-11.19.el5", "1.0"])
2235
- end
2236
-
2237
- it "should not run yum install with nil package name" do
2238
- @provider.load_current_resource
2239
- allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
2240
- expect(@provider).to receive(:yum_command).with(
2241
- "-d0 -e0 -y install cups-1.2.4-11.19.el5"
2242
- )
2243
- @provider.install_package(["cups", nil], ["1.2.4-11.19.el5", nil])
2244
- end
2245
-
2246
- it "should run yum install with the package name, version and arch" do
2247
- @provider.load_current_resource
2248
- @new_resource.arch(%w{i386 i386})
2249
- allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
2250
- expect(@provider).to receive(:yum_command).with(
2251
- "-d0 -e0 -y install cups-1.2.4-11.19.el5.i386 vim-1.0.i386"
2252
- )
2253
- @provider.install_package(%w{cups vim}, ["1.2.4-11.19.el5", "1.0"])
2254
- end
2255
-
2256
- it "installs the package with the options given in the resource" do
2257
- @provider.load_current_resource
2258
- allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
2259
- allow(@yum_cache).to receive(:installed_version).with("cups", nil).and_return("1.2.4-11.18.el5")
2260
- allow(@yum_cache).to receive(:installed_version).with("vim", nil).and_return("0.9")
2261
- expect(@provider).to receive(:yum_command).with(
2262
- "-d0 -e0 -y --disablerepo epmd install cups-1.2.4-11.19.el5 vim-1.0"
2263
- )
2264
- @new_resource.options("--disablerepo epmd")
2265
- @provider.install_package(%w{cups vim}, ["1.2.4-11.19.el5", "1.0"])
2266
- end
2267
-
2268
- it "should run yum install with the package name and version when name has arch" do
2269
- @new_resource = Chef::Resource::YumPackage.new(["cups.x86_64", "vim"])
2270
- @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
2271
- allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
2272
-
2273
- # Inside of load_current_resource() we'll call parse_arch for cups,
2274
- # and we need to craft the right response. The default mock setup above
2275
- # will just return valid versions all the time which won't work for this
2276
- # test.
2277
- allow(@yum_cache).to receive(:installed_version).with("cups", "x86_64").and_return("XXXX")
2278
- allow(@yum_cache).to receive(:candidate_version).with("cups", "x86_64").and_return("1.2.4-11.18.el5")
2279
- allow(@yum_cache).to receive(:installed_version).with("cups.x86_64").and_return(nil)
2280
- allow(@yum_cache).to receive(:candidate_version).with("cups.x86_64").and_return(nil)
2281
-
2282
- # Normal mock's for the idempotency check
2283
- allow(@yum_cache).to receive(:installed_version).with("cups", nil).and_return("1.2.4-11.18.el5")
2284
- allow(@yum_cache).to receive(:installed_version).with("vim", nil).and_return("0.9")
2285
-
2286
- @provider.load_current_resource
2287
- expect(@provider).to receive(:yum_command).with(
2288
- "-d0 -e0 -y install cups-1.2.4-11.19.el5.x86_64 vim-1.0"
2289
- )
2290
- @provider.install_package(%w{cups vim}, ["1.2.4-11.19.el5", "1.0"])
2291
- end
2292
-
2293
- end
2294
- end