chef 12.0.3 → 12.1.0.rc.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (655) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +4 -1
  3. data/README.md +42 -18
  4. data/distro/common/html/_sources/ctl_chef_client.txt +1 -1
  5. data/distro/common/html/_sources/ctl_chef_server.txt +53 -35
  6. data/distro/common/html/_sources/ctl_chef_solo.txt +1 -1
  7. data/distro/common/html/_sources/knife_bootstrap.txt +1 -1
  8. data/distro/common/html/_sources/knife_cookbook_site.txt +1 -1
  9. data/distro/common/html/_sources/knife_data_bag.txt +4 -4
  10. data/distro/common/html/_sources/knife_status.txt +1 -1
  11. data/distro/common/html/_static/searchtools.js +1 -1
  12. data/distro/common/html/ctl_chef_client.html +55 -7
  13. data/distro/common/html/ctl_chef_server.html +84 -41
  14. data/distro/common/html/ctl_chef_shell.html +45 -1
  15. data/distro/common/html/ctl_chef_solo.html +51 -5
  16. data/distro/common/html/index.html +2 -2
  17. data/distro/common/html/knife.html +1 -1
  18. data/distro/common/html/knife_bootstrap.html +30 -10
  19. data/distro/common/html/knife_cookbook_site.html +2 -0
  20. data/distro/common/html/knife_data_bag.html +4 -4
  21. data/distro/common/html/knife_node.html +2 -2
  22. data/distro/common/html/knife_raw.html +1 -1
  23. data/distro/common/html/knife_role.html +1 -1
  24. data/distro/common/html/knife_search.html +3 -3
  25. data/distro/common/html/knife_status.html +4 -0
  26. data/distro/common/html/searchindex.js +1 -1
  27. data/distro/common/man/man1/chef-shell.1 +72 -1
  28. data/distro/common/man/man1/knife-bootstrap.1 +71 -63
  29. data/distro/common/man/man1/knife-client.1 +1 -1
  30. data/distro/common/man/man1/knife-configure.1 +1 -1
  31. data/distro/common/man/man1/knife-cookbook-site.1 +4 -1
  32. data/distro/common/man/man1/knife-cookbook.1 +1 -1
  33. data/distro/common/man/man1/knife-data-bag.1 +5 -5
  34. data/distro/common/man/man1/knife-delete.1 +1 -1
  35. data/distro/common/man/man1/knife-deps.1 +1 -1
  36. data/distro/common/man/man1/knife-diff.1 +1 -1
  37. data/distro/common/man/man1/knife-download.1 +1 -1
  38. data/distro/common/man/man1/knife-edit.1 +1 -1
  39. data/distro/common/man/man1/knife-environment.1 +1 -1
  40. data/distro/common/man/man1/knife-exec.1 +1 -1
  41. data/distro/common/man/man1/knife-index-rebuild.1 +1 -1
  42. data/distro/common/man/man1/knife-list.1 +1 -1
  43. data/distro/common/man/man1/knife-node.1 +3 -3
  44. data/distro/common/man/man1/knife-raw.1 +2 -2
  45. data/distro/common/man/man1/knife-recipe-list.1 +1 -1
  46. data/distro/common/man/man1/knife-role.1 +2 -2
  47. data/distro/common/man/man1/knife-search.1 +4 -4
  48. data/distro/common/man/man1/knife-serve.1 +1 -1
  49. data/distro/common/man/man1/knife-show.1 +1 -1
  50. data/distro/common/man/man1/knife-ssh.1 +1 -1
  51. data/distro/common/man/man1/knife-ssl-check.1 +1 -1
  52. data/distro/common/man/man1/knife-ssl-fetch.1 +1 -1
  53. data/distro/common/man/man1/knife-status.1 +1 -1
  54. data/distro/common/man/man1/knife-tag.1 +1 -1
  55. data/distro/common/man/man1/knife-upload.1 +1 -1
  56. data/distro/common/man/man1/knife-user.1 +1 -1
  57. data/distro/common/man/man1/knife-xargs.1 +1 -1
  58. data/distro/common/man/man1/knife.1 +1 -1
  59. data/distro/common/man/man8/chef-apply.8 +86 -0
  60. data/distro/common/man/man8/chef-client.8 +76 -5
  61. data/distro/common/man/man8/chef-solo.8 +79 -6
  62. data/distro/common/markdown/man1/knife-bootstrap.mkd +1 -1
  63. data/distro/common/markdown/man1/knife-cookbook-site.mkd +1 -1
  64. data/distro/common/markdown/man1/knife-data-bag.mkd +1 -1
  65. data/distro/common/markdown/man1/knife-environment.mkd +1 -1
  66. data/distro/common/markdown/man1/knife.mkd +1 -1
  67. data/lib/chef.rb +0 -7
  68. data/lib/chef/api_client.rb +10 -2
  69. data/lib/chef/api_client/registration.rb +7 -9
  70. data/lib/chef/application.rb +28 -12
  71. data/lib/chef/application/apply.rb +17 -1
  72. data/lib/chef/application/client.rb +74 -6
  73. data/lib/chef/application/knife.rb +1 -2
  74. data/lib/chef/application/solo.rb +30 -0
  75. data/lib/chef/application/windows_service.rb +1 -0
  76. data/lib/chef/application/windows_service_manager.rb +8 -2
  77. data/lib/chef/applications.rb +0 -1
  78. data/lib/chef/audit/audit_event_proxy.rb +93 -0
  79. data/lib/chef/audit/audit_reporter.rb +169 -0
  80. data/lib/chef/audit/control_group_data.rb +140 -0
  81. data/lib/chef/audit/rspec_formatter.rb +37 -0
  82. data/lib/chef/audit/runner.rb +178 -0
  83. data/lib/chef/chef_fs/chef_fs_data_store.rb +11 -2
  84. data/lib/chef/chef_fs/config.rb +25 -4
  85. data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +15 -0
  86. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -0
  87. data/lib/chef/chef_fs/file_system.rb +1 -1
  88. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +5 -0
  89. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +3 -2
  90. data/lib/chef/{shef/ext.rb → chef_fs/file_system/chef_repository_file_system_policies_dir.rb} +22 -3
  91. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +4 -0
  92. data/lib/chef/client.rb +81 -52
  93. data/lib/chef/config.rb +35 -3
  94. data/lib/chef/cookbook/metadata.rb +3 -3
  95. data/lib/chef/cookbook_manifest.rb +275 -0
  96. data/lib/chef/cookbook_site_streaming_uploader.rb +24 -23
  97. data/lib/chef/cookbook_uploader.rb +11 -2
  98. data/lib/chef/cookbook_version.rb +71 -194
  99. data/lib/chef/data_bag.rb +5 -2
  100. data/lib/chef/data_bag_item.rb +6 -3
  101. data/lib/chef/deprecation/warnings.rb +5 -4
  102. data/lib/chef/dsl/audit.rb +51 -0
  103. data/lib/chef/dsl/include_recipe.rb +2 -3
  104. data/lib/chef/dsl/reboot_pending.rb +1 -1
  105. data/lib/chef/dsl/recipe.rb +49 -31
  106. data/lib/chef/encrypted_data_bag_item/assertions.rb +0 -3
  107. data/lib/chef/environment.rb +5 -2
  108. data/lib/chef/event_dispatch/base.rb +36 -1
  109. data/lib/chef/event_dispatch/dispatcher.rb +3 -5
  110. data/lib/chef/exceptions.rb +61 -2
  111. data/lib/chef/file_access_control/unix.rb +12 -0
  112. data/lib/chef/file_access_control/windows.rb +14 -0
  113. data/lib/chef/formatters/doc.rb +47 -1
  114. data/{spec/unit/monkey_patches/string_spec.rb → lib/chef/guard_interpreter.rb} +11 -16
  115. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +3 -2
  116. data/lib/chef/http.rb +1 -2
  117. data/lib/chef/knife.rb +5 -3
  118. data/lib/chef/knife/bootstrap.rb +84 -15
  119. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +165 -0
  120. data/lib/chef/knife/bootstrap/client_builder.rb +190 -0
  121. data/lib/chef/knife/bootstrap/{README.md → templates/README.md} +0 -0
  122. data/lib/chef/knife/bootstrap/{archlinux-gems.erb → templates/archlinux-gems.erb} +9 -0
  123. data/lib/chef/knife/bootstrap/{chef-aix.erb → templates/chef-aix.erb} +9 -0
  124. data/lib/chef/knife/bootstrap/{chef-full.erb → templates/chef-full.erb} +10 -1
  125. data/lib/chef/knife/client_create.rb +8 -7
  126. data/lib/chef/knife/cookbook_site_download.rb +1 -1
  127. data/lib/chef/knife/cookbook_site_install.rb +1 -1
  128. data/lib/chef/knife/cookbook_site_list.rb +1 -1
  129. data/lib/chef/knife/cookbook_site_search.rb +1 -1
  130. data/lib/chef/knife/cookbook_site_share.rb +39 -28
  131. data/lib/chef/knife/cookbook_site_show.rb +3 -3
  132. data/lib/chef/knife/cookbook_site_unshare.rb +1 -1
  133. data/lib/chef/knife/cookbook_test.rb +1 -0
  134. data/lib/chef/knife/cookbook_upload.rb +13 -8
  135. data/lib/chef/knife/core/bootstrap_context.rb +14 -3
  136. data/lib/chef/knife/core/generic_presenter.rb +5 -2
  137. data/lib/chef/knife/core/object_loader.rb +1 -1
  138. data/lib/chef/knife/core/subcommand_loader.rb +24 -0
  139. data/lib/chef/knife/core/ui.rb +9 -1
  140. data/lib/chef/knife/node_run_list_remove.rb +11 -3
  141. data/lib/chef/knife/raw.rb +14 -3
  142. data/lib/chef/knife/role_env_run_list_add.rb +86 -0
  143. data/lib/chef/knife/role_env_run_list_clear.rb +55 -0
  144. data/lib/chef/knife/role_env_run_list_remove.rb +57 -0
  145. data/lib/chef/knife/role_env_run_list_replace.rb +59 -0
  146. data/lib/chef/knife/role_env_run_list_set.rb +70 -0
  147. data/lib/chef/knife/role_run_list_add.rb +86 -0
  148. data/lib/chef/knife/role_run_list_clear.rb +55 -0
  149. data/lib/chef/knife/role_run_list_remove.rb +57 -0
  150. data/lib/chef/knife/role_run_list_replace.rb +59 -0
  151. data/lib/chef/knife/role_run_list_set.rb +70 -0
  152. data/lib/chef/knife/search.rb +4 -4
  153. data/lib/chef/knife/serve.rb +3 -0
  154. data/lib/chef/knife/ssh.rb +1 -1
  155. data/lib/chef/knife/ssl_check.rb +2 -2
  156. data/lib/chef/knife/ssl_fetch.rb +14 -1
  157. data/lib/chef/log.rb +10 -1
  158. data/lib/chef/mixin/command.rb +1 -1
  159. data/lib/chef/mixin/command/windows.rb +1 -5
  160. data/lib/chef/mixin/get_source_from_package.rb +1 -0
  161. data/lib/chef/mixin/params_validate.rb +2 -2
  162. data/lib/chef/mixin/securable.rb +1 -7
  163. data/lib/chef/mixin/shell_out.rb +7 -1
  164. data/lib/chef/mixin/template.rb +2 -14
  165. data/lib/chef/mixin/why_run.rb +1 -1
  166. data/lib/chef/monkey_patches/net_http.rb +4 -0
  167. data/lib/chef/monologger.rb +0 -2
  168. data/lib/chef/node.rb +5 -2
  169. data/lib/chef/node/attribute.rb +11 -9
  170. data/lib/chef/node/attribute_collections.rb +8 -12
  171. data/lib/chef/node/immutable_collections.rb +4 -10
  172. data/lib/chef/org.rb +148 -0
  173. data/lib/chef/platform/provider_mapping.rb +3 -2
  174. data/lib/chef/platform/provider_priority_map.rb +2 -0
  175. data/lib/chef/platform/query_helpers.rb +0 -3
  176. data/lib/chef/policy_builder/policyfile.rb +51 -8
  177. data/lib/chef/provider/deploy.rb +1 -2
  178. data/lib/chef/provider/directory.rb +3 -3
  179. data/lib/chef/provider/dsc_script.rb +13 -7
  180. data/lib/chef/provider/env.rb +8 -8
  181. data/lib/chef/provider/execute.rb +55 -36
  182. data/lib/chef/provider/file.rb +8 -0
  183. data/lib/chef/provider/group.rb +2 -0
  184. data/lib/chef/provider/group/dscl.rb +3 -4
  185. data/lib/chef/provider/ifconfig.rb +25 -25
  186. data/lib/chef/provider/ifconfig/aix.rb +25 -27
  187. data/lib/chef/provider/lwrp_base.rb +1 -1
  188. data/lib/chef/provider/mount.rb +2 -2
  189. data/lib/chef/provider/mount/mount.rb +3 -4
  190. data/lib/chef/provider/mount/solaris.rb +1 -1
  191. data/lib/chef/provider/package.rb +297 -48
  192. data/lib/chef/provider/package/aix.rb +25 -30
  193. data/lib/chef/provider/package/apt.rb +63 -19
  194. data/lib/chef/provider/package/dpkg.rb +15 -16
  195. data/lib/chef/provider/package/macports.rb +7 -7
  196. data/lib/chef/provider/package/openbsd.rb +107 -0
  197. data/lib/chef/provider/package/pacman.rb +13 -15
  198. data/lib/chef/provider/package/portage.rb +3 -4
  199. data/lib/chef/provider/package/rpm.rb +28 -17
  200. data/lib/chef/provider/package/rubygems.rb +9 -9
  201. data/lib/chef/provider/package/solaris.rb +17 -21
  202. data/lib/chef/provider/package/windows/msi.rb +1 -1
  203. data/lib/chef/provider/package/yum-dump.py +2 -2
  204. data/lib/chef/provider/package/yum.rb +117 -51
  205. data/lib/chef/provider/package/zypper.rb +17 -18
  206. data/lib/chef/provider/powershell_script.rb +4 -4
  207. data/lib/chef/provider/registry_key.rb +2 -2
  208. data/lib/chef/provider/remote_directory.rb +1 -1
  209. data/lib/chef/provider/script.rb +25 -16
  210. data/lib/chef/provider/service.rb +1 -1
  211. data/lib/chef/provider/service/freebsd.rb +1 -1
  212. data/lib/chef/provider/service/openbsd.rb +216 -0
  213. data/lib/chef/provider/service/upstart.rb +1 -1
  214. data/lib/chef/provider/service/windows.rb +99 -1
  215. data/lib/chef/provider/user.rb +1 -1
  216. data/lib/chef/provider/user/dscl.rb +19 -4
  217. data/lib/chef/providers.rb +2 -0
  218. data/lib/chef/recipe.rb +11 -5
  219. data/lib/chef/request_id.rb +1 -1
  220. data/lib/chef/resource.rb +839 -444
  221. data/lib/chef/resource/chef_gem.rb +20 -3
  222. data/lib/chef/resource/conditional.rb +3 -14
  223. data/lib/chef/resource/dsc_script.rb +14 -0
  224. data/lib/chef/resource/execute.rb +14 -7
  225. data/lib/chef/resource/file.rb +14 -0
  226. data/lib/chef/resource/file/verification.rb +122 -0
  227. data/lib/chef/resource/ips_package.rb +1 -1
  228. data/lib/chef/resource/lwrp_base.rb +2 -11
  229. data/lib/chef/resource/macports_package.rb +2 -1
  230. data/lib/chef/resource/openbsd_package.rb +51 -0
  231. data/lib/chef/resource/package.rb +2 -2
  232. data/lib/chef/resource/paludis_package.rb +1 -1
  233. data/lib/chef/resource/reboot.rb +1 -1
  234. data/lib/chef/resource/remote_file.rb +1 -0
  235. data/lib/chef/resource/rpm_package.rb +9 -0
  236. data/lib/chef/resource/script.rb +11 -0
  237. data/lib/chef/resource/template.rb +2 -3
  238. data/lib/chef/resource/windows_package.rb +1 -1
  239. data/lib/chef/resource/windows_service.rb +18 -0
  240. data/lib/chef/resource_builder.rb +137 -0
  241. data/lib/chef/resource_definition.rb +1 -1
  242. data/lib/chef/resource_reporter.rb +1 -1
  243. data/lib/chef/resources.rb +1 -0
  244. data/lib/chef/role.rb +17 -4
  245. data/lib/chef/run_context.rb +10 -6
  246. data/lib/chef/search/query.rb +66 -87
  247. data/lib/chef/shell/ext.rb +2 -2
  248. data/lib/chef/util/diff.rb +1 -4
  249. data/lib/chef/util/dsc/configuration_generator.rb +30 -6
  250. data/lib/chef/util/dsc/lcm_output_parser.rb +7 -3
  251. data/lib/chef/util/dsc/local_configuration_manager.rb +8 -8
  252. data/lib/chef/util/file_edit.rb +2 -2
  253. data/lib/chef/util/path_helper.rb +1 -4
  254. data/lib/chef/util/windows/net_use.rb +3 -3
  255. data/lib/chef/version.rb +1 -1
  256. data/lib/chef/win32/api.rb +1 -0
  257. data/lib/chef/win32/api/security.rb +26 -0
  258. data/lib/chef/win32/file.rb +21 -0
  259. data/lib/chef/win32/security.rb +46 -0
  260. data/lib/chef/win32/security/token.rb +8 -0
  261. data/lib/chef/win32/version.rb +0 -4
  262. data/spec/data/recipes.tgz +0 -0
  263. data/spec/functional/application_spec.rb +1 -1
  264. data/spec/functional/audit/rspec_formatter_spec.rb +54 -0
  265. data/spec/functional/audit/runner_spec.rb +137 -0
  266. data/spec/functional/dsl/reboot_pending_spec.rb +10 -10
  267. data/spec/functional/dsl/registry_helper_spec.rb +6 -6
  268. data/spec/functional/event_loggers/windows_eventlog_spec.rb +5 -5
  269. data/spec/functional/file_content_management/deploy_strategies_spec.rb +12 -21
  270. data/spec/functional/http/simple_spec.rb +1 -1
  271. data/spec/functional/knife/cookbook_delete_spec.rb +24 -24
  272. data/spec/functional/knife/exec_spec.rb +2 -4
  273. data/spec/functional/knife/smoke_test.rb +1 -1
  274. data/spec/functional/knife/ssh_spec.rb +23 -23
  275. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +8 -8
  276. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +2 -2
  277. data/spec/functional/rebooter_spec.rb +1 -1
  278. data/spec/functional/resource/aix_service_spec.rb +3 -0
  279. data/spec/functional/resource/aixinit_service_spec.rb +3 -3
  280. data/spec/functional/resource/bash_spec.rb +88 -0
  281. data/spec/functional/resource/deploy_revision_spec.rb +99 -100
  282. data/spec/functional/resource/env_spec.rb +3 -3
  283. data/spec/functional/resource/execute_spec.rb +97 -63
  284. data/spec/functional/resource/file_spec.rb +7 -7
  285. data/spec/functional/resource/git_spec.rb +13 -13
  286. data/spec/functional/resource/group_spec.rb +28 -25
  287. data/spec/functional/resource/ifconfig_spec.rb +2 -2
  288. data/spec/functional/resource/link_spec.rb +77 -78
  289. data/spec/functional/resource/mount_spec.rb +5 -5
  290. data/spec/functional/resource/ohai_spec.rb +1 -1
  291. data/spec/functional/resource/package_spec.rb +22 -22
  292. data/spec/functional/resource/powershell_spec.rb +57 -42
  293. data/spec/functional/resource/reboot_spec.rb +2 -2
  294. data/spec/functional/resource/registry_spec.rb +91 -91
  295. data/spec/functional/resource/remote_directory_spec.rb +19 -19
  296. data/spec/functional/resource/remote_file_spec.rb +18 -18
  297. data/spec/functional/resource/template_spec.rb +4 -4
  298. data/spec/functional/resource/user/dscl_spec.rb +4 -4
  299. data/spec/functional/resource/user/useradd_spec.rb +64 -51
  300. data/spec/functional/resource/windows_service_spec.rb +98 -0
  301. data/spec/functional/run_lock_spec.rb +9 -9
  302. data/spec/functional/shell_spec.rb +3 -3
  303. data/spec/functional/tiny_server_spec.rb +12 -12
  304. data/spec/functional/util/path_helper_spec.rb +1 -1
  305. data/spec/functional/version_spec.rb +1 -1
  306. data/spec/functional/win32/registry_helper_spec.rb +125 -125
  307. data/spec/functional/win32/security_spec.rb +65 -2
  308. data/spec/functional/win32/service_manager_spec.rb +30 -84
  309. data/spec/functional/win32/versions_spec.rb +6 -6
  310. data/spec/integration/client/client_spec.rb +102 -9
  311. data/spec/integration/knife/chef_fs_data_store_spec.rb +12 -8
  312. data/spec/integration/knife/common_options_spec.rb +3 -3
  313. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +2 -2
  314. data/spec/integration/knife/deps_spec.rb +4 -4
  315. data/spec/integration/knife/diff_spec.rb +6 -6
  316. data/spec/integration/knife/download_spec.rb +6 -6
  317. data/spec/integration/knife/list_spec.rb +2 -2
  318. data/spec/integration/knife/raw_spec.rb +5 -5
  319. data/spec/integration/knife/serve_spec.rb +3 -3
  320. data/spec/integration/knife/show_spec.rb +3 -3
  321. data/spec/integration/knife/upload_spec.rb +18 -18
  322. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
  323. data/spec/integration/solo/solo_spec.rb +11 -12
  324. data/spec/spec_helper.rb +27 -15
  325. data/spec/stress/win32/file_spec.rb +4 -4
  326. data/spec/stress/win32/security_spec.rb +4 -4
  327. data/spec/support/chef_helpers.rb +3 -3
  328. data/spec/support/matchers/leak.rb +2 -2
  329. data/spec/support/mock/platform.rb +1 -1
  330. data/spec/support/pedant/Gemfile +3 -0
  331. data/spec/support/pedant/pedant_config.rb +9 -2
  332. data/spec/support/pedant/run_pedant.rb +15 -16
  333. data/spec/support/platform_helpers.rb +8 -12
  334. data/spec/support/shared/functional/directory_resource.rb +13 -13
  335. data/spec/support/shared/functional/file_resource.rb +83 -83
  336. data/spec/support/shared/functional/http.rb +1 -1
  337. data/spec/support/shared/functional/securable_resource.rb +64 -64
  338. data/spec/support/shared/functional/securable_resource_with_reporting.rb +43 -41
  339. data/spec/support/shared/functional/win32_service.rb +60 -0
  340. data/spec/support/shared/functional/windows_script.rb +8 -8
  341. data/spec/support/shared/integration/knife_support.rb +8 -5
  342. data/spec/support/shared/matchers/exit_with_code.rb +6 -2
  343. data/spec/support/shared/unit/api_error_inspector.rb +8 -8
  344. data/spec/support/shared/unit/execute_resource.rb +24 -20
  345. data/spec/support/shared/unit/file_system_support.rb +2 -2
  346. data/spec/support/shared/unit/platform_introspector.rb +21 -21
  347. data/spec/support/shared/unit/provider/file.rb +239 -210
  348. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +69 -69
  349. data/spec/support/shared/unit/script_resource.rb +40 -32
  350. data/spec/support/shared/unit/windows_script_resource.rb +8 -8
  351. data/spec/unit/api_client/registration_spec.rb +47 -47
  352. data/spec/unit/api_client_spec.rb +107 -69
  353. data/spec/unit/application/apply_spec.rb +31 -15
  354. data/spec/unit/application/client_spec.rb +146 -45
  355. data/spec/unit/application/knife_spec.rb +31 -31
  356. data/spec/unit/application/solo_spec.rb +59 -43
  357. data/spec/unit/application_spec.rb +109 -74
  358. data/spec/unit/audit/audit_event_proxy_spec.rb +311 -0
  359. data/spec/unit/audit/audit_reporter_spec.rb +393 -0
  360. data/spec/unit/audit/control_group_data_spec.rb +478 -0
  361. data/{lib/chef/monkey_patches/file.rb → spec/unit/audit/rspec_formatter_spec.rb} +11 -8
  362. data/spec/unit/audit/runner_spec.rb +135 -0
  363. data/spec/unit/chef_fs/config_spec.rb +52 -0
  364. data/spec/unit/chef_fs/diff_spec.rb +12 -12
  365. data/spec/unit/chef_fs/file_pattern_spec.rb +276 -277
  366. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +6 -6
  367. data/spec/unit/chef_fs/file_system_spec.rb +26 -13
  368. data/spec/unit/chef_fs/parallelizer.rb +87 -87
  369. data/spec/unit/chef_spec.rb +1 -1
  370. data/spec/unit/client_spec.rb +263 -97
  371. data/spec/unit/config_fetcher_spec.rb +13 -13
  372. data/spec/unit/config_spec.rb +105 -66
  373. data/spec/unit/cookbook/chefignore_spec.rb +6 -6
  374. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +3 -3
  375. data/spec/unit/cookbook/metadata_spec.rb +149 -149
  376. data/spec/unit/cookbook/syntax_check_spec.rb +36 -31
  377. data/spec/unit/cookbook_loader_spec.rb +62 -58
  378. data/spec/unit/cookbook_manifest_spec.rb +141 -468
  379. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +27 -27
  380. data/spec/unit/cookbook_spec.rb +15 -15
  381. data/spec/unit/cookbook_uploader_spec.rb +37 -3
  382. data/spec/unit/cookbook_version_file_specificity_spec.rb +554 -0
  383. data/spec/unit/cookbook_version_spec.rb +98 -240
  384. data/spec/unit/daemon_spec.rb +31 -31
  385. data/spec/unit/data_bag_item_spec.rb +121 -89
  386. data/spec/unit/data_bag_spec.rb +35 -35
  387. data/spec/unit/deprecation_spec.rb +27 -14
  388. data/spec/unit/digester_spec.rb +3 -3
  389. data/spec/unit/dsl/audit_spec.rb +43 -0
  390. data/spec/unit/dsl/data_query_spec.rb +1 -1
  391. data/spec/unit/dsl/platform_introspection_spec.rb +14 -14
  392. data/spec/unit/dsl/reboot_pending_spec.rb +18 -18
  393. data/spec/unit/dsl/regsitry_helper_spec.rb +6 -6
  394. data/spec/unit/encrypted_data_bag_item_spec.rb +58 -82
  395. data/spec/unit/environment_spec.rb +105 -105
  396. data/spec/unit/exceptions_spec.rb +47 -1
  397. data/spec/unit/file_access_control_spec.rb +62 -56
  398. data/spec/unit/file_cache_spec.rb +11 -11
  399. data/spec/unit/file_content_management/deploy/cp_spec.rb +2 -2
  400. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +10 -10
  401. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +23 -23
  402. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +14 -14
  403. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +12 -12
  404. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +1 -1
  405. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +16 -16
  406. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +4 -4
  407. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +103 -13
  408. data/spec/unit/guard_interpreter_spec.rb +41 -0
  409. data/spec/unit/handler/json_file_spec.rb +10 -10
  410. data/spec/unit/handler_spec.rb +39 -39
  411. data/spec/unit/http/basic_client_spec.rb +3 -3
  412. data/spec/unit/http/http_request_spec.rb +10 -10
  413. data/spec/unit/http/simple_spec.rb +3 -3
  414. data/spec/unit/http/ssl_policies_spec.rb +15 -15
  415. data/spec/unit/http/validate_content_length_spec.rb +18 -13
  416. data/spec/unit/http_spec.rb +16 -9
  417. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +153 -0
  418. data/spec/unit/knife/bootstrap/client_builder_spec.rb +178 -0
  419. data/spec/unit/knife/bootstrap_spec.rb +144 -91
  420. data/spec/unit/knife/client_bulk_delete_spec.rb +24 -24
  421. data/spec/unit/knife/client_create_spec.rb +57 -43
  422. data/spec/unit/knife/client_delete_spec.rb +15 -15
  423. data/spec/unit/knife/client_edit_spec.rb +4 -4
  424. data/spec/unit/knife/client_list_spec.rb +2 -2
  425. data/spec/unit/knife/client_reregister_spec.rb +9 -9
  426. data/spec/unit/knife/configure_client_spec.rb +20 -20
  427. data/spec/unit/knife/configure_spec.rb +85 -85
  428. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +15 -15
  429. data/spec/unit/knife/cookbook_create_spec.rb +59 -59
  430. data/spec/unit/knife/cookbook_delete_spec.rb +49 -49
  431. data/spec/unit/knife/cookbook_download_spec.rb +56 -56
  432. data/spec/unit/knife/cookbook_list_spec.rb +9 -9
  433. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +8 -8
  434. data/spec/unit/knife/cookbook_metadata_spec.rb +44 -44
  435. data/spec/unit/knife/cookbook_show_spec.rb +29 -29
  436. data/spec/unit/knife/cookbook_site_download_spec.rb +26 -26
  437. data/spec/unit/knife/cookbook_site_install_spec.rb +5 -1
  438. data/spec/unit/knife/cookbook_site_share_spec.rb +68 -59
  439. data/spec/unit/knife/cookbook_site_unshare_spec.rb +15 -15
  440. data/spec/unit/knife/cookbook_test_spec.rb +16 -16
  441. data/spec/unit/knife/cookbook_upload_spec.rb +105 -71
  442. data/spec/unit/knife/core/bootstrap_context_spec.rb +37 -22
  443. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +36 -36
  444. data/spec/unit/knife/core/object_loader_spec.rb +3 -3
  445. data/spec/unit/knife/core/subcommand_loader_spec.rb +107 -33
  446. data/spec/unit/knife/core/ui_spec.rb +84 -72
  447. data/spec/unit/knife/data_bag_from_file_spec.rb +1 -1
  448. data/spec/unit/knife/environment_compare_spec.rb +12 -12
  449. data/spec/unit/knife/environment_create_spec.rb +16 -16
  450. data/spec/unit/knife/environment_delete_spec.rb +14 -14
  451. data/spec/unit/knife/environment_edit_spec.rb +15 -15
  452. data/spec/unit/knife/environment_from_file_spec.rb +17 -17
  453. data/spec/unit/knife/environment_list_spec.rb +7 -7
  454. data/spec/unit/knife/environment_show_spec.rb +10 -10
  455. data/spec/unit/knife/index_rebuild_spec.rb +17 -17
  456. data/spec/unit/knife/knife_help.rb +24 -24
  457. data/spec/unit/knife/node_bulk_delete_spec.rb +14 -14
  458. data/spec/unit/knife/node_delete_spec.rb +11 -11
  459. data/spec/unit/knife/node_edit_spec.rb +17 -17
  460. data/spec/unit/knife/node_environment_set_spec.rb +12 -12
  461. data/spec/unit/knife/node_from_file_spec.rb +8 -8
  462. data/spec/unit/knife/node_list_spec.rb +9 -9
  463. data/spec/unit/knife/node_run_list_add_spec.rb +29 -29
  464. data/spec/unit/knife/node_run_list_remove_spec.rb +28 -13
  465. data/spec/unit/knife/node_run_list_set_spec.rb +27 -27
  466. data/spec/unit/knife/raw_spec.rb +43 -0
  467. data/spec/unit/knife/role_bulk_delete_spec.rb +12 -12
  468. data/spec/unit/knife/role_create_spec.rb +12 -12
  469. data/spec/unit/knife/role_delete_spec.rb +10 -10
  470. data/spec/unit/knife/role_edit_spec.rb +13 -13
  471. data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -0
  472. data/spec/unit/knife/role_env_run_list_clear_spec.rb +100 -0
  473. data/spec/unit/knife/role_env_run_list_remove_spec.rb +108 -0
  474. data/spec/unit/knife/role_env_run_list_replace_spec.rb +108 -0
  475. data/spec/unit/knife/role_env_run_list_set_spec.rb +102 -0
  476. data/spec/unit/knife/role_from_file_spec.rb +10 -10
  477. data/spec/unit/knife/role_list_spec.rb +7 -7
  478. data/spec/unit/knife/role_run_list_add_spec.rb +179 -0
  479. data/spec/unit/knife/role_run_list_clear_spec.rb +90 -0
  480. data/spec/unit/knife/role_run_list_remove_spec.rb +98 -0
  481. data/spec/unit/knife/role_run_list_replace_spec.rb +101 -0
  482. data/spec/unit/knife/role_run_list_set_spec.rb +92 -0
  483. data/spec/unit/knife/ssh_spec.rb +66 -66
  484. data/spec/unit/knife/ssl_check_spec.rb +27 -27
  485. data/spec/unit/knife/ssl_fetch_spec.rb +45 -12
  486. data/spec/unit/knife/status_spec.rb +5 -5
  487. data/spec/unit/knife/tag_create_spec.rb +5 -5
  488. data/spec/unit/knife/tag_delete_spec.rb +6 -6
  489. data/spec/unit/knife/tag_list_spec.rb +4 -4
  490. data/spec/unit/knife/user_create_spec.rb +18 -18
  491. data/spec/unit/knife/user_delete_spec.rb +4 -4
  492. data/spec/unit/knife/user_edit_spec.rb +7 -7
  493. data/spec/unit/knife/user_list_spec.rb +2 -2
  494. data/spec/unit/knife/user_reregister_spec.rb +10 -10
  495. data/spec/unit/knife/user_show_spec.rb +5 -5
  496. data/spec/unit/knife_spec.rb +36 -36
  497. data/spec/unit/lwrp_spec.rb +63 -39
  498. data/spec/unit/mash_spec.rb +6 -6
  499. data/spec/unit/mixin/checksum_spec.rb +2 -2
  500. data/spec/unit/mixin/command_spec.rb +13 -13
  501. data/spec/unit/mixin/convert_to_class_name_spec.rb +6 -6
  502. data/spec/unit/mixin/deep_merge_spec.rb +49 -49
  503. data/spec/unit/mixin/deprecation_spec.rb +5 -5
  504. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +14 -14
  505. data/spec/unit/mixin/homebrew_user_spec.rb +3 -3
  506. data/spec/unit/mixin/params_validate_spec.rb +71 -71
  507. data/spec/unit/mixin/path_sanity_spec.rb +14 -14
  508. data/spec/unit/mixin/securable_spec.rb +177 -177
  509. data/spec/unit/mixin/shell_out_spec.rb +56 -27
  510. data/spec/unit/mixin/template_spec.rb +31 -31
  511. data/spec/unit/mixin/windows_architecture_helper_spec.rb +5 -5
  512. data/spec/unit/mixin/xml_escape_spec.rb +7 -7
  513. data/spec/unit/monkey_patches/uri_spec.rb +1 -1
  514. data/spec/unit/monologger_spec.rb +3 -3
  515. data/spec/unit/node/attribute_spec.rb +185 -136
  516. data/spec/unit/node/immutable_collections_spec.rb +22 -22
  517. data/spec/unit/node_spec.rb +210 -179
  518. data/spec/unit/org_spec.rb +196 -0
  519. data/spec/unit/platform/query_helpers_spec.rb +5 -5
  520. data/spec/unit/platform_spec.rb +46 -46
  521. data/spec/unit/policy_builder/expand_node_object_spec.rb +17 -18
  522. data/spec/unit/policy_builder/policyfile_spec.rb +159 -71
  523. data/spec/unit/provider/directory_spec.rb +5 -5
  524. data/spec/unit/provider/dsc_script_spec.rb +6 -6
  525. data/spec/unit/provider/env_spec.rb +27 -14
  526. data/spec/unit/provider/execute_spec.rb +139 -68
  527. data/spec/unit/provider/file/content_spec.rb +8 -8
  528. data/spec/unit/provider/git_spec.rb +10 -5
  529. data/spec/unit/provider/group/dscl_spec.rb +8 -11
  530. data/spec/unit/provider/group_spec.rb +13 -13
  531. data/spec/unit/provider/ifconfig/aix_spec.rb +3 -2
  532. data/spec/unit/provider/ifconfig/debian_spec.rb +19 -19
  533. data/spec/unit/provider/ifconfig_spec.rb +2 -2
  534. data/spec/unit/provider/mdadm_spec.rb +2 -2
  535. data/spec/unit/provider/mount/aix_spec.rb +5 -5
  536. data/spec/unit/provider/mount/mount_spec.rb +22 -22
  537. data/spec/unit/provider/mount/solaris_spec.rb +20 -20
  538. data/spec/unit/provider/package/aix_spec.rb +23 -22
  539. data/spec/unit/provider/package/apt_spec.rb +23 -4
  540. data/spec/unit/provider/package/dpkg_spec.rb +14 -15
  541. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +1 -1
  542. data/spec/unit/provider/package/freebsd/port_spec.rb +1 -1
  543. data/spec/unit/provider/package/ips_spec.rb +1 -2
  544. data/spec/unit/provider/package/macports_spec.rb +14 -14
  545. data/spec/unit/provider/package/openbsd_spec.rb +66 -0
  546. data/spec/unit/provider/package/pacman_spec.rb +15 -14
  547. data/spec/unit/provider/package/portage_spec.rb +11 -11
  548. data/spec/unit/provider/package/rpm_spec.rb +132 -84
  549. data/spec/unit/provider/package/rubygems_spec.rb +54 -25
  550. data/spec/unit/provider/package/solaris_spec.rb +22 -25
  551. data/spec/unit/provider/package/yum_spec.rb +237 -36
  552. data/spec/unit/provider/package/zypper_spec.rb +9 -12
  553. data/spec/unit/provider/package_spec.rb +276 -2
  554. data/spec/unit/provider/package_spec.rbe +0 -0
  555. data/spec/unit/provider/remote_directory_spec.rb +25 -25
  556. data/spec/unit/provider/remote_file/ftp_spec.rb +3 -3
  557. data/spec/unit/provider/route_spec.rb +3 -3
  558. data/spec/unit/provider/script_spec.rb +61 -43
  559. data/spec/unit/provider/service/aix_service_spec.rb +5 -5
  560. data/spec/unit/provider/service/arch_service_spec.rb +5 -5
  561. data/spec/unit/provider/service/debian_service_spec.rb +8 -8
  562. data/spec/unit/provider/service/freebsd_service_spec.rb +16 -2
  563. data/spec/unit/provider/service/gentoo_service_spec.rb +8 -8
  564. data/spec/unit/provider/service/init_service_spec.rb +5 -5
  565. data/spec/unit/provider/service/insserv_service_spec.rb +2 -2
  566. data/spec/unit/provider/service/invokercd_service_spec.rb +5 -5
  567. data/spec/unit/provider/service/macosx_spec.rb +7 -7
  568. data/spec/unit/provider/service/openbsd_service_spec.rb +543 -0
  569. data/spec/unit/provider/service/redhat_spec.rb +4 -4
  570. data/spec/unit/provider/service/simple_service_spec.rb +2 -2
  571. data/spec/unit/provider/service/solaris_smf_service_spec.rb +14 -14
  572. data/spec/unit/provider/service/systemd_service_spec.rb +15 -7
  573. data/spec/unit/provider/service/upstart_service_spec.rb +4 -4
  574. data/spec/unit/provider/service/windows_spec.rb +119 -25
  575. data/spec/unit/provider/service_spec.rb +1 -1
  576. data/spec/unit/provider/user/dscl_spec.rb +38 -30
  577. data/spec/unit/provider/user_spec.rb +1 -1
  578. data/spec/unit/provider_resolver_spec.rb +7 -7
  579. data/spec/unit/provider_spec.rb +23 -23
  580. data/spec/unit/recipe_spec.rb +194 -83
  581. data/spec/unit/registry_helper_spec.rb +143 -143
  582. data/spec/unit/resource/chef_gem_spec.rb +117 -3
  583. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +2 -2
  584. data/spec/unit/resource/conditional_spec.rb +56 -15
  585. data/spec/unit/resource/deploy_spec.rb +2 -2
  586. data/spec/unit/resource/dsc_script_spec.rb +32 -0
  587. data/spec/unit/resource/execute_spec.rb +4 -0
  588. data/spec/unit/resource/file/verification_spec.rb +111 -0
  589. data/spec/unit/resource/file_spec.rb +14 -0
  590. data/spec/unit/resource/openbsd_package_spec.rb +49 -0
  591. data/spec/unit/resource/remote_file_spec.rb +12 -12
  592. data/spec/unit/resource/resource_notification_spec.rb +18 -18
  593. data/spec/unit/resource/rpm_package_spec.rb +12 -0
  594. data/spec/unit/resource/scm_spec.rb +4 -4
  595. data/spec/unit/resource/script_spec.rb +3 -5
  596. data/spec/unit/resource/subversion_spec.rb +1 -1
  597. data/spec/unit/resource_builder_spec.rb +1 -0
  598. data/spec/unit/resource_collection/resource_list_spec.rb +2 -2
  599. data/spec/unit/resource_collection/resource_set_spec.rb +3 -3
  600. data/spec/unit/resource_collection/stepable_iterator_spec.rb +24 -24
  601. data/spec/unit/resource_collection_spec.rb +52 -52
  602. data/spec/unit/resource_definition_spec.rb +1 -1
  603. data/spec/unit/resource_reporter_spec.rb +118 -118
  604. data/spec/unit/resource_spec.rb +131 -125
  605. data/spec/unit/rest/auth_credentials_spec.rb +73 -73
  606. data/spec/unit/rest_spec.rb +12 -12
  607. data/spec/unit/role_spec.rb +85 -84
  608. data/spec/unit/run_context/cookbook_compiler_spec.rb +18 -18
  609. data/spec/unit/run_context_spec.rb +39 -68
  610. data/spec/unit/run_list/run_list_expansion_spec.rb +21 -21
  611. data/spec/unit/run_list/run_list_item_spec.rb +28 -28
  612. data/spec/unit/run_list/versioned_recipe_list_spec.rb +14 -14
  613. data/spec/unit/run_list_spec.rb +55 -55
  614. data/spec/unit/run_lock_spec.rb +14 -14
  615. data/spec/unit/run_status_spec.rb +24 -24
  616. data/spec/unit/scan_access_control_spec.rb +23 -23
  617. data/spec/unit/search/query_spec.rb +54 -66
  618. data/spec/unit/shell/model_wrapper_spec.rb +13 -13
  619. data/spec/unit/shell/shell_ext_spec.rb +32 -32
  620. data/spec/unit/shell/shell_session_spec.rb +24 -24
  621. data/spec/unit/shell_out_spec.rb +4 -4
  622. data/spec/unit/shell_spec.rb +27 -27
  623. data/spec/unit/user_spec.rb +50 -50
  624. data/spec/unit/util/backup_spec.rb +32 -32
  625. data/spec/unit/util/diff_spec.rb +31 -31
  626. data/spec/unit/util/dsc/configuration_generator_spec.rb +38 -16
  627. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +21 -26
  628. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +10 -10
  629. data/spec/unit/util/editor_spec.rb +10 -10
  630. data/spec/unit/util/file_edit_spec.rb +10 -10
  631. data/spec/unit/util/path_helper_spec.rb +38 -46
  632. data/spec/unit/util/powershell/cmdlet_spec.rb +9 -9
  633. data/spec/unit/util/selinux_spec.rb +30 -30
  634. data/spec/unit/util/threaded_job_queue_spec.rb +6 -6
  635. data/spec/unit/version/platform_spec.rb +5 -5
  636. data/spec/unit/version_class_spec.rb +15 -15
  637. data/spec/unit/version_constraint/platform_spec.rb +7 -7
  638. data/spec/unit/version_constraint_spec.rb +43 -43
  639. data/spec/unit/windows_service_spec.rb +15 -15
  640. data/spec/unit/workstation_config_loader_spec.rb +2 -2
  641. data/tasks/rspec.rb +16 -18
  642. metadata +126 -53
  643. data/bin/chef-service-manager +0 -37
  644. data/bin/chef-windows-service +0 -35
  645. data/bin/shef +0 -35
  646. data/lib/chef/application/agent.rb +0 -18
  647. data/lib/chef/monkey_patches/fileutils.rb +0 -65
  648. data/lib/chef/monkey_patches/numeric.rb +0 -15
  649. data/lib/chef/monkey_patches/object.rb +0 -9
  650. data/lib/chef/monkey_patches/pathname.rb +0 -32
  651. data/lib/chef/monkey_patches/regexp.rb +0 -34
  652. data/lib/chef/monkey_patches/securerandom.rb +0 -44
  653. data/lib/chef/monkey_patches/string.rb +0 -49
  654. data/lib/chef/monkey_patches/tempfile.rb +0 -64
  655. data/lib/chef/monkey_patches/uri.rb +0 -70
@@ -90,7 +90,7 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
90
90
  dep = Gem::Dependency.new('rspec', '>= 0')
91
91
  dep_installer = Gem::DependencyInstaller.new
92
92
  allow(@gem_env).to receive(:dependency_installer).and_return(dep_installer)
93
- latest = [[gemspec("rspec", Gem::Version.new("1.3.0")), "http://rubygems.org/"]]
93
+ latest = [[gemspec("rspec", Gem::Version.new("1.3.0")), "https://rubygems.org/"]]
94
94
  expect(dep_installer).to receive(:find_gems_with_sources).with(dep).and_return(latest)
95
95
  expect(@gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>= 0'))).to eq(Gem::Version.new('1.3.0'))
96
96
  end
@@ -121,6 +121,7 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
121
121
  Gem.const_set(:Format, Object.new)
122
122
  @remove_gem_format = true
123
123
  end
124
+ allow(Gem::Package).to receive(:respond_to?).and_call_original
124
125
  allow(Gem::Package).to receive(:respond_to?).with(:open).and_return(false)
125
126
  end
126
127
 
@@ -155,7 +156,7 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
155
156
 
156
157
  it "finds a matching gem from a specific gemserver when explicit sources are given" do
157
158
  dep = Gem::Dependency.new('rspec', '>= 0')
158
- latest = [[gemspec("rspec", Gem::Version.new("1.3.0")), "http://rubygems.org/"]]
159
+ latest = [[gemspec("rspec", Gem::Version.new("1.3.0")), "https://rubygems.org/"]]
159
160
 
160
161
  expect(@gem_env).to receive(:with_gem_sources).with('http://gems.example.com').and_yield
161
162
  dep_installer = Gem::DependencyInstaller.new
@@ -290,9 +291,9 @@ RubyGems Environment:
290
291
  - "install" => "--env-shebang"
291
292
  - "update" => "--env-shebang"
292
293
  - "gem" => "--no-rdoc --no-ri"
293
- - :sources => ["http://rubygems.org/", "http://gems.github.com/"]
294
+ - :sources => ["https://rubygems.org/", "http://gems.github.com/"]
294
295
  - REMOTE SOURCES:
295
- - http://rubygems.org/
296
+ - https://rubygems.org/
296
297
  - http://gems.github.com/
297
298
  JRUBY_GEM_ENV
298
299
  expect(@gem_env).to receive(:shell_out!).with('/usr/weird/bin/gem env').and_return(double('jruby_gem_env', :stdout => gem_env_out))
@@ -331,10 +332,10 @@ RubyGems Environment:
331
332
  - :benchmark => false
332
333
  - :backtrace => false
333
334
  - :bulk_threshold => 1000
334
- - :sources => ["http://rubygems.org/", "http://gems.github.com/"]
335
+ - :sources => ["https://rubygems.org/", "http://gems.github.com/"]
335
336
  - "gem" => "--no-rdoc --no-ri"
336
337
  - REMOTE SOURCES:
337
- - http://rubygems.org/
338
+ - https://rubygems.org/
338
339
  - http://gems.github.com/
339
340
  RBX_GEM_ENV
340
341
  expect(@gem_env).to receive(:shell_out!).with('/usr/weird/bin/gem env').and_return(double('rbx_gem_env', :stdout => gem_env_out))
@@ -370,6 +371,8 @@ describe Chef::Provider::Package::Rubygems do
370
371
 
371
372
  # We choose detect omnibus via RbConfig::CONFIG['bindir'] in Chef::Provider::Package::Rubygems.new
372
373
  allow(RbConfig::CONFIG).to receive(:[]).with('bindir').and_return("/usr/bin/ruby")
374
+ # Rubygems uses this interally
375
+ allow(RbConfig::CONFIG).to receive(:[]).with('arch').and_call_original
373
376
  @provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
374
377
  end
375
378
 
@@ -378,7 +381,7 @@ describe Chef::Provider::Package::Rubygems do
378
381
 
379
382
  it "target_version_already_installed? should return false so that we can search for candidates" do
380
383
  @provider.load_current_resource
381
- expect(@provider.target_version_already_installed?).to be_false
384
+ expect(@provider.target_version_already_installed?(@provider.current_resource.version, @new_resource.version)).to be_falsey
382
385
  end
383
386
  end
384
387
 
@@ -468,6 +471,8 @@ describe Chef::Provider::Package::Rubygems do
468
471
 
469
472
  it "determines the candidate version by querying the remote gem servers" do
470
473
  @new_resource.source('http://mygems.example.com')
474
+ @provider.load_current_resource
475
+ @provider.current_resource.version('0.0.1')
471
476
  version = Gem::Version.new(@spec_version)
472
477
  expect(@provider.gem_env).to receive(:candidate_version_from_remote).
473
478
  with(Gem::Dependency.new('rspec-core', @spec_version), "http://mygems.example.com").
@@ -477,8 +482,9 @@ describe Chef::Provider::Package::Rubygems do
477
482
 
478
483
  it "parses the gem's specification if the requested source is a file" do
479
484
  @new_resource.package_name('chef-integration-test')
480
- @new_resource.version('>= 0')
481
485
  @new_resource.source(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
486
+ @new_resource.version('>= 0')
487
+ @provider.load_current_resource
482
488
  expect(@provider.candidate_version).to eq('0.1.0')
483
489
  end
484
490
 
@@ -495,20 +501,23 @@ describe Chef::Provider::Package::Rubygems do
495
501
  describe "in the current gem environment" do
496
502
  it "installs the gem via the gems api when no explicit options are used" do
497
503
  expect(@provider.gem_env).to receive(:install).with(@gem_dep, :sources => nil)
498
- expect(@provider.action_install).to be_true
504
+ @provider.run_action(:install)
505
+ expect(@new_resource).to be_updated_by_last_action
499
506
  end
500
507
 
501
508
  it "installs the gem via the gems api when a remote source is provided" do
502
509
  @new_resource.source('http://gems.example.org')
503
510
  sources = ['http://gems.example.org']
504
511
  expect(@provider.gem_env).to receive(:install).with(@gem_dep, :sources => sources)
505
- expect(@provider.action_install).to be_true
512
+ @provider.run_action(:install)
513
+ expect(@new_resource).to be_updated_by_last_action
506
514
  end
507
515
 
508
516
  it "installs the gem from file via the gems api when no explicit options are used" do
509
517
  @new_resource.source(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
510
518
  expect(@provider.gem_env).to receive(:install).with(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
511
- expect(@provider.action_install).to be_true
519
+ @provider.run_action(:install)
520
+ expect(@new_resource).to be_updated_by_last_action
512
521
  end
513
522
 
514
523
  it "installs the gem from file via the gems api when the package is a path and the source is nil" do
@@ -517,7 +526,8 @@ describe Chef::Provider::Package::Rubygems do
517
526
  @provider.current_resource = @current_resource
518
527
  expect(@new_resource.source).to eq(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
519
528
  expect(@provider.gem_env).to receive(:install).with(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
520
- expect(@provider.action_install).to be_true
529
+ @provider.run_action(:install)
530
+ expect(@new_resource).to be_updated_by_last_action
521
531
  end
522
532
 
523
533
  # this catches 'gem_package "foo"' when "./foo" is a file in the cwd, and instead of installing './foo' it fetches the remote gem
@@ -525,20 +535,35 @@ describe Chef::Provider::Package::Rubygems do
525
535
  allow(::File).to receive(:exists?).and_return(true)
526
536
  @new_resource.package_name('rspec-core')
527
537
  expect(@provider.gem_env).to receive(:install).with(@gem_dep, :sources => nil)
528
- expect(@provider.action_install).to be_true
538
+ @provider.run_action(:install)
539
+ expect(@new_resource).to be_updated_by_last_action
529
540
  end
530
541
 
531
542
  it "installs the gem by shelling out when options are provided as a String" do
532
543
  @new_resource.options('-i /alt/install/location')
533
544
  expected ="gem install rspec-core -q --no-rdoc --no-ri -v \"#{@spec_version}\" -i /alt/install/location"
534
545
  expect(@provider).to receive(:shell_out!).with(expected, :env => nil)
535
- expect(@provider.action_install).to be_true
546
+ @provider.run_action(:install)
547
+ expect(@new_resource).to be_updated_by_last_action
548
+ end
549
+
550
+ context "when no version is given" do
551
+ let(:target_version) { nil }
552
+
553
+ it "installs the gem by shelling out when options are provided but no version is given" do
554
+ @new_resource.options('-i /alt/install/location')
555
+ expected ="gem install rspec-core -q --no-rdoc --no-ri -v \"#{@provider.candidate_version}\" -i /alt/install/location"
556
+ expect(@provider).to receive(:shell_out!).with(expected, :env => nil)
557
+ @provider.run_action(:install)
558
+ expect(@new_resource).to be_updated_by_last_action
559
+ end
536
560
  end
537
561
 
538
562
  it "installs the gem via the gems api when options are given as a Hash" do
539
563
  @new_resource.options(:install_dir => '/alt/install/location')
540
564
  expect(@provider.gem_env).to receive(:install).with(@gem_dep, :sources => nil, :install_dir => '/alt/install/location')
541
- expect(@provider.action_install).to be_true
565
+ @provider.run_action(:install)
566
+ expect(@new_resource).to be_updated_by_last_action
542
567
  end
543
568
 
544
569
  describe "at a specific version" do
@@ -548,24 +573,25 @@ describe Chef::Provider::Package::Rubygems do
548
573
 
549
574
  it "installs the gem via the gems api" do
550
575
  expect(@provider.gem_env).to receive(:install).with(@gem_dep, :sources => nil)
551
- expect(@provider.action_install).to be_true
576
+ @provider.run_action(:install)
577
+ expect(@new_resource).to be_updated_by_last_action
552
578
  end
553
579
  end
554
580
  describe "at version specified with comparison operator" do
555
581
  it "skips install if current version satisifies requested version" do
556
- allow(@current_resource).to receive(:version).and_return("2.3.3")
557
- allow(@new_resource).to receive(:version).and_return(">=2.3.0")
582
+ @current_resource.version("2.3.3")
583
+ @new_resource.version(">=2.3.0")
558
584
 
559
585
  expect(@provider.gem_env).not_to receive(:install)
560
- @provider.action_install
586
+ @provider.run_action(:install)
561
587
  end
562
588
 
563
589
  it "allows user to specify gem version with fuzzy operator" do
564
- allow(@current_resource).to receive(:version).and_return("2.3.3")
565
- allow(@new_resource).to receive(:version).and_return("~>2.3.0")
590
+ @current_resource.version("2.3.3")
591
+ @new_resource.version("~>2.3.0")
566
592
 
567
593
  expect(@provider.gem_env).not_to receive(:install)
568
- @provider.action_install
594
+ @provider.run_action(:install)
569
595
  end
570
596
  end
571
597
  end
@@ -574,7 +600,8 @@ describe Chef::Provider::Package::Rubygems do
574
600
  it "installs the gem by shelling out to gem install" do
575
601
  @new_resource.gem_binary('/usr/weird/bin/gem')
576
602
  expect(@provider).to receive(:shell_out!).with("/usr/weird/bin/gem install rspec-core -q --no-rdoc --no-ri -v \"#{@spec_version}\"", :env=>nil)
577
- expect(@provider.action_install).to be_true
603
+ @provider.run_action(:install)
604
+ expect(@new_resource).to be_updated_by_last_action
578
605
  end
579
606
 
580
607
  it "installs the gem from file by shelling out to gem install" do
@@ -582,7 +609,8 @@ describe Chef::Provider::Package::Rubygems do
582
609
  @new_resource.source(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
583
610
  @new_resource.version('>= 0')
584
611
  expect(@provider).to receive(:shell_out!).with("/usr/weird/bin/gem install #{CHEF_SPEC_DATA}/gems/chef-integration-test-0.1.0.gem -q --no-rdoc --no-ri -v \">= 0\"", :env=>nil)
585
- expect(@provider.action_install).to be_true
612
+ @provider.run_action(:install)
613
+ expect(@new_resource).to be_updated_by_last_action
586
614
  end
587
615
 
588
616
  it "installs the gem from file by shelling out to gem install when the package is a path and the source is nil" do
@@ -593,7 +621,8 @@ describe Chef::Provider::Package::Rubygems do
593
621
  @new_resource.version('>= 0')
594
622
  expect(@new_resource.source).to eq(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
595
623
  expect(@provider).to receive(:shell_out!).with("/usr/weird/bin/gem install #{CHEF_SPEC_DATA}/gems/chef-integration-test-0.1.0.gem -q --no-rdoc --no-ri -v \">= 0\"", :env=>nil)
596
- expect(@provider.action_install).to be_true
624
+ @provider.run_action(:install)
625
+ expect(@new_resource).to be_updated_by_last_action
597
626
  end
598
627
  end
599
628
 
@@ -46,34 +46,33 @@ INSTDATE: Nov 04 2009 01:02
46
46
  HOTLINE: Please contact your local service provider
47
47
  PKGINFO
48
48
 
49
- @status = double("Status", :exitstatus => 0)
49
+ @status = double("Status",:stdout => "", :exitstatus => 0)
50
50
  end
51
51
 
52
52
  it "should create a current resource with the name of new_resource" do
53
- allow(@provider).to receive(:popen4).and_return(@status)
53
+ allow(@provider).to receive(:shell_out).and_return(@status)
54
54
  @provider.load_current_resource
55
55
  expect(@provider.current_resource.name).to eq("SUNWbash")
56
56
  end
57
57
 
58
58
  it "should set the current reource package name to the new resource package name" do
59
- allow(@provider).to receive(:popen4).and_return(@status)
59
+ allow(@provider).to receive(:shell_out).and_return(@status)
60
60
  @provider.load_current_resource
61
61
  expect(@provider.current_resource.package_name).to eq("SUNWbash")
62
62
  end
63
63
 
64
64
  it "should raise an exception if a source is supplied but not found" do
65
- allow(@provider).to receive(:popen4).and_return(@status)
65
+ allow(@provider).to receive(:shell_out).and_return(@status)
66
66
  allow(::File).to receive(:exists?).and_return(false)
67
- @provider.define_resource_requirements
68
67
  @provider.load_current_resource
68
+ @provider.define_resource_requirements
69
69
  expect { @provider.process_resource_requirements }.to raise_error(Chef::Exceptions::Package)
70
70
  end
71
71
 
72
72
  it "should get the source package version from pkginfo if provided" do
73
- @stdout = StringIO.new(@pkginfo)
74
- @stdin, @stderr = StringIO.new, StringIO.new
75
- expect(@provider).to receive(:popen4).with("pkginfo -l -d /tmp/bash.pkg SUNWbash").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
76
- expect(@provider).to receive(:popen4).with("pkginfo -l SUNWbash").and_return(@status)
73
+ status = double(:stdout => @pkginfo, :exitstatus => 0)
74
+ expect(@provider).to receive(:shell_out).with("pkginfo -l -d /tmp/bash.pkg SUNWbash").and_return(status)
75
+ expect(@provider).to receive(:shell_out).with("pkginfo -l SUNWbash").and_return(@status)
77
76
  @provider.load_current_resource
78
77
 
79
78
  expect(@provider.current_resource.package_name).to eq("SUNWbash")
@@ -81,10 +80,9 @@ PKGINFO
81
80
  end
82
81
 
83
82
  it "should return the current version installed if found by pkginfo" do
84
- @stdout = StringIO.new(@pkginfo)
85
- @stdin, @stderr = StringIO.new, StringIO.new
86
- expect(@provider).to receive(:popen4).with("pkginfo -l -d /tmp/bash.pkg SUNWbash").and_return(@status)
87
- expect(@provider).to receive(:popen4).with("pkginfo -l SUNWbash").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
83
+ status = double(:stdout => @pkginfo, :exitstatus => 0)
84
+ expect(@provider).to receive(:shell_out).with("pkginfo -l -d /tmp/bash.pkg SUNWbash").and_return(@status)
85
+ expect(@provider).to receive(:shell_out).with("pkginfo -l SUNWbash").and_return(status)
88
86
  @provider.load_current_resource
89
87
  expect(@provider.current_resource.version).to eq("11.10.0,REV=2005.01.08.05.16")
90
88
  end
@@ -92,20 +90,19 @@ PKGINFO
92
90
  it "should raise an exception if the source is not set but we are installing" do
93
91
  @new_resource = Chef::Resource::Package.new("SUNWbash")
94
92
  @provider = Chef::Provider::Package::Solaris.new(@new_resource, @run_context)
95
- allow(@provider).to receive(:popen4).and_return(@status)
93
+ allow(@provider).to receive(:shell_out).and_return(@status)
96
94
  expect { @provider.run_action(:install) }.to raise_error(Chef::Exceptions::Package)
97
95
  end
98
96
 
99
97
  it "should raise an exception if pkginfo fails to run" do
100
- @status = double("Status", :exitstatus => -1)
101
- allow(@provider).to receive(:popen4).and_return(@status)
98
+ status = double(:stdout => "", :exitstatus => -1)
99
+ allow(@provider).to receive(:shell_out).and_return(status)
102
100
  expect { @provider.load_current_resource }.to raise_error(Chef::Exceptions::Package)
103
101
  end
104
102
 
105
103
  it "should return a current resource with a nil version if the package is not found" do
106
- @stdout = StringIO.new
107
- expect(@provider).to receive(:popen4).with("pkginfo -l -d /tmp/bash.pkg SUNWbash").and_return(@status)
108
- expect(@provider).to receive(:popen4).with("pkginfo -l SUNWbash").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
104
+ expect(@provider).to receive(:shell_out).with("pkginfo -l -d /tmp/bash.pkg SUNWbash").and_return(@status)
105
+ expect(@provider).to receive(:shell_out).with("pkginfo -l SUNWbash").and_return(@status)
109
106
  @provider.load_current_resource
110
107
  expect(@provider.current_resource.version).to be_nil
111
108
  end
@@ -114,20 +111,20 @@ PKGINFO
114
111
  describe "candidate_version" do
115
112
  it "should return the candidate_version variable if already setup" do
116
113
  @provider.candidate_version = "11.10.0,REV=2005.01.08.05.16"
117
- expect(@provider).not_to receive(:popen4)
114
+ expect(@provider).not_to receive(:shell_out)
118
115
  @provider.candidate_version
119
116
  end
120
117
 
121
118
  it "should lookup the candidate_version if the variable is not already set" do
122
- @status = double("Status", :exitstatus => 0)
123
- allow(@provider).to receive(:popen4).and_return(@status)
124
- expect(@provider).to receive(:popen4)
119
+ status = double(:stdout => "", :exitstatus => 0)
120
+ allow(@provider).to receive(:shell_out).and_return(status)
121
+ expect(@provider).to receive(:shell_out)
125
122
  @provider.candidate_version
126
123
  end
127
124
 
128
125
  it "should throw and exception if the exitstatus is not 0" do
129
- @status = double("Status", :exitstatus => 1)
130
- allow(@provider).to receive(:popen4).and_return(@status)
126
+ status = double(:stdout => "", :exitstatus => 1)
127
+ allow(@provider).to receive(:shell_out).and_return(status)
131
128
  expect { @provider.candidate_version }.to raise_error(Chef::Exceptions::Package)
132
129
  end
133
130
 
@@ -231,26 +231,102 @@ describe Chef::Provider::Package::Yum do
231
231
  @provider.load_current_resource
232
232
  end
233
233
 
234
- it "should search provides if package name can't be found then set package_name to match" do
234
+ context "when the package name isn't found" do
235
+ let(:yum_cache) { double(
236
+ 'Chef::Provider::Yum::YumCache',
237
+ :reload_installed => true,
238
+ :reset => true,
239
+ :installed_version => "1.0.1.el5",
240
+ :candidate_version => "2.0.1.el5",
241
+ :package_available? => false,
242
+ :version_available? => true,
243
+ :disable_extra_repo_control => true
244
+ )
245
+ }
246
+
247
+ before do
248
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(yum_cache)
249
+ @pkg = Chef::Provider::Package::Yum::RPMPackage.new("test-package", "2.0.1.el5", "x86_64", [])
250
+ expect(yum_cache).to receive(:packages_from_require).and_return([@pkg])
251
+ end
252
+
253
+ it "should search provides then set package_name to match" do
254
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
255
+ @provider.load_current_resource
256
+ expect(@new_resource.package_name).to eq('test-package')
257
+ expect(@new_resource.version).to eq(nil)
258
+ end
259
+
260
+ it "should search provides then set version to match if a requirement was passed in the package name" do
261
+ @new_resource = Chef::Resource::YumPackage.new('test-package = 2.0.1.el5')
262
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
263
+ @provider.load_current_resource
264
+ expect(@new_resource.package_name).to eq('test-package')
265
+ expect(@new_resource.version).to eq('2.0.1.el5')
266
+ end
267
+
268
+
269
+ it "should search provides then set version to match if a requirement was passed in the version" do
270
+ @new_resource = Chef::Resource::YumPackage.new('test-package')
271
+ @new_resource.version('= 2.0.1.el5')
272
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
273
+ @provider.load_current_resource
274
+ expect(@new_resource.package_name).to eq('test-package')
275
+ expect(@new_resource.version).to eq('2.0.1.el5')
276
+ end
277
+
278
+
279
+ it "should search provides and not set the version to match if a specific version was requested" do
280
+ @new_resource = Chef::Resource::YumPackage.new('test-package')
281
+ @new_resource.version('3.0.1.el5')
282
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
283
+ @provider.load_current_resource
284
+ expect(@new_resource.package_name).to eq('test-package')
285
+ expect(@new_resource.version).to eq('3.0.1.el5')
286
+ end
287
+
288
+ it "should search provides then set versions to match if requirements were passed in the package name as an array" do
289
+ @new_resource = Chef::Resource::YumPackage.new(['test-package = 2.0.1.el5'])
290
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
291
+ @provider.load_current_resource
292
+ expect(@new_resource.package_name).to eq(['test-package'])
293
+ expect(@new_resource.version).to eq(['2.0.1.el5'])
294
+ end
295
+
296
+ it "should search provides and not set the versions to match if specific versions were requested in an array" do
297
+ @new_resource = Chef::Resource::YumPackage.new(['test-package'])
298
+ @new_resource.version(['3.0.1.el5'])
299
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
300
+ @provider.load_current_resource
301
+ expect(@new_resource.package_name).to eq(['test-package'])
302
+ expect(@new_resource.version).to eq(['3.0.1.el5'])
303
+ end
304
+
305
+ end
306
+
307
+ it "should not return an error if no version number is specified in the resource" do
308
+ @new_resource = Chef::Resource::YumPackage.new('test-package')
235
309
  @yum_cache = double(
236
- 'Chef::Provider::Yum::YumCache',
237
- :reload_installed => true,
238
- :reset => true,
239
- :installed_version => "1.2.4-11.18.el5",
240
- :candidate_version => "1.2.4-11.18.el5",
241
- :package_available? => false,
242
- :version_available? => true,
243
- :disable_extra_repo_control => true
310
+ 'Chef::Provider::Yum::YumCache',
311
+ :reload_installed => true,
312
+ :reset => true,
313
+ :installed_version => "1.0.1.el5",
314
+ :candidate_version => "2.0.1.el5",
315
+ :package_available? => false,
316
+ :version_available? => true,
317
+ :disable_extra_repo_control => true
244
318
  )
245
319
  allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
246
- pkg = Chef::Provider::Package::Yum::RPMPackage.new("test-package", "1.2.4-11.18.el5", "x86_64", [])
320
+ pkg = Chef::Provider::Package::Yum::RPMPackage.new("test-package", "2.0.1.el5", "x86_64", [])
247
321
  expect(@yum_cache).to receive(:packages_from_require).and_return([pkg])
248
322
  @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
249
323
  @provider.load_current_resource
250
324
  expect(@new_resource.package_name).to eq("test-package")
325
+ expect(@new_resource.version).to eq(nil)
251
326
  end
252
327
 
253
- it "should search provides if package name can't be found, warn about multiple matches, but use the first one" do
328
+ it "should give precedence to the version attribute when both a requirement in the resource name and a version attribute are specified" do
329
+ @new_resource = Chef::Resource::YumPackage.new('test-package')
254
330
  @yum_cache = double(
255
331
  'Chef::Provider::Yum::YumCache',
256
332
  :reload_installed => true,
@@ -262,13 +338,38 @@ describe Chef::Provider::Package::Yum do
262
338
  :disable_extra_repo_control => true
263
339
  )
264
340
  allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
265
- pkg_x = Chef::Provider::Package::Yum::RPMPackage.new("test-package-x", "1.2.4-11.18.el5", "x86_64", [])
266
- pkg_y = Chef::Provider::Package::Yum::RPMPackage.new("test-package-y", "1.2.6-11.3.el5", "i386", [])
267
- expect(@yum_cache).to receive(:packages_from_require).and_return([pkg_x, pkg_y])
268
- expect(Chef::Log).to receive(:warn).exactly(1).times.with(%r{matched multiple Provides})
341
+ pkg = Chef::Provider::Package::Yum::RPMPackage.new("test-package", "2.0.1.el5", "x86_64", [])
342
+ expect(@yum_cache).to receive(:packages_from_require).and_return([pkg])
343
+ @new_resource = Chef::Resource::YumPackage.new('test-package = 2.0.1.el5')
344
+ @new_resource.version('3.0.1.el5')
269
345
  @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
270
346
  @provider.load_current_resource
271
- expect(@new_resource.package_name).to eq("test-package-x")
347
+ expect(@new_resource.package_name).to eq('test-package')
348
+ expect(@new_resource.version).to eq('3.0.1.el5')
349
+ end
350
+
351
+ it "should correctly detect the installed states of an array of package names and version numbers" do
352
+ @yum_cache = double(
353
+ 'Chef::Provider::Yum::YumCache',
354
+ :reload_installed => true,
355
+ :reset => true,
356
+ :installed_version => "1.0.1.el5",
357
+ :candidate_version => "2.0.1.el5",
358
+ :package_available? => false,
359
+ :version_available? => true,
360
+ :disable_extra_repo_control => true
361
+ )
362
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
363
+
364
+ expect(@yum_cache).to receive(:packages_from_require).exactly(4).times.and_return([])
365
+ expect(@yum_cache).to receive(:reload_provides).twice
366
+
367
+ @new_resource = Chef::Resource::YumPackage.new(['test-package','test-package2'])
368
+ @new_resource.version(['2.0.1.el5','3.0.1.el5'])
369
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
370
+ @provider.load_current_resource
371
+ expect(@new_resource.package_name).to eq(['test-package','test-package2'])
372
+ expect(@new_resource.version).to eq(['2.0.1.el5','3.0.1.el5'])
272
373
  end
273
374
 
274
375
  it "should search provides if no package is available - if no match in installed provides then load the complete set" do
@@ -287,6 +388,7 @@ describe Chef::Provider::Package::Yum do
287
388
  expect(@yum_cache).to receive(:reload_provides)
288
389
  @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
289
390
  @provider.load_current_resource
391
+ expect(@new_resource.version).to eq(nil)
290
392
  end
291
393
 
292
394
  it "should search provides if no package is available and not load the complete set if action is :remove or :purge" do
@@ -337,9 +439,9 @@ describe Chef::Provider::Package::Yum do
337
439
  @provider.load_current_resource
338
440
  allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
339
441
  expect(@provider).to receive(:yum_command).with(
340
- "yum -d0 -e0 -y install emacs-1.0"
442
+ "yum -d0 -e0 -y install cups-1.2.4-11.19.el5"
341
443
  )
342
- @provider.install_package("emacs", "1.0")
444
+ @provider.install_package("cups", "1.2.4-11.19.el5")
343
445
  end
344
446
 
345
447
  it "should run yum localinstall if given a path to an rpm" do
@@ -366,14 +468,14 @@ describe Chef::Provider::Package::Yum do
366
468
  allow(@new_resource).to receive(:arch).and_return("i386")
367
469
  allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
368
470
  expect(@provider).to receive(:yum_command).with(
369
- "yum -d0 -e0 -y install emacs-21.4-20.el5.i386"
471
+ "yum -d0 -e0 -y install cups-1.2.4-11.19.el5.i386"
370
472
  )
371
- @provider.install_package("emacs", "21.4-20.el5")
473
+ @provider.install_package("cups", "1.2.4-11.19.el5")
372
474
  end
373
475
 
374
476
  it "installs the package with the options given in the resource" do
375
477
  @provider.load_current_resource
376
- @provider.candidate_version = '11'
478
+ allow(@provider).to receive(:candidate_version).and_return('11')
377
479
  allow(@new_resource).to receive(:options).and_return("--disablerepo epmd")
378
480
  allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
379
481
  expect(@provider).to receive(:yum_command).with(
@@ -467,10 +569,10 @@ describe Chef::Provider::Package::Yum do
467
569
  @provider.load_current_resource
468
570
  allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
469
571
  expect(@provider).to receive(:yum_command).with(
470
- "yum -d0 -e0 -y install emacs-1.0"
572
+ "yum -d0 -e0 -y install cups-1.2.4-11.15.el5"
471
573
  )
472
574
  expect(@yum_cache).to receive(:reload).once
473
- @provider.install_package("emacs", "1.0")
575
+ @provider.install_package("cups", "1.2.4-11.15.el5")
474
576
  end
475
577
 
476
578
  it "should run yum install then not flush the cache if :after is false" do
@@ -478,17 +580,17 @@ describe Chef::Provider::Package::Yum do
478
580
  @provider.load_current_resource
479
581
  allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
480
582
  expect(@provider).to receive(:yum_command).with(
481
- "yum -d0 -e0 -y install emacs-1.0"
583
+ "yum -d0 -e0 -y install cups-1.2.4-11.15.el5"
482
584
  )
483
585
  expect(@yum_cache).not_to receive(:reload)
484
- @provider.install_package("emacs", "1.0")
586
+ @provider.install_package("cups", "1.2.4-11.15.el5")
485
587
  end
486
588
  end
487
589
 
488
590
  describe "when upgrading a package" do
489
591
  it "should run yum install if the package is installed and a version is given" do
490
592
  @provider.load_current_resource
491
- @provider.candidate_version = '11'
593
+ allow(@provider).to receive(:candidate_version).and_return('11')
492
594
  allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
493
595
  expect(@provider).to receive(:yum_command).with(
494
596
  "yum -d0 -e0 -y install cups-11"
@@ -499,7 +601,7 @@ describe Chef::Provider::Package::Yum do
499
601
  it "should run yum install if the package is not installed" do
500
602
  @provider.load_current_resource
501
603
  @current_resource = Chef::Resource::Package.new('cups')
502
- @provider.candidate_version = '11'
604
+ allow(@provider).to receive(:candidate_version).and_return('11')
503
605
  allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
504
606
  expect(@provider).to receive(:yum_command).with(
505
607
  "yum -d0 -e0 -y install cups-11"
@@ -528,42 +630,41 @@ describe Chef::Provider::Package::Yum do
528
630
  # Test our little workaround, some crossover into Chef::Provider::Package territory
529
631
  it "should call action_upgrade in the parent if the current resource version is nil" do
530
632
  allow(@yum_cache).to receive(:installed_version).and_return(nil)
531
- @provider.load_current_resource
532
633
  @current_resource = Chef::Resource::Package.new('cups')
533
- @provider.candidate_version = '11'
634
+ allow(@provider).to receive(:candidate_version).and_return('11')
534
635
  expect(@provider).to receive(:upgrade_package).with(
535
636
  "cups",
536
637
  "11"
537
638
  )
538
- @provider.action_upgrade
639
+ @provider.run_action(:upgrade)
539
640
  end
540
641
 
541
642
  it "should call action_upgrade in the parent if the candidate version is nil" do
542
643
  @provider.load_current_resource
543
644
  @current_resource = Chef::Resource::Package.new('cups')
544
- @provider.candidate_version = nil
645
+ allow(@provider).to receive(:candidate_version).and_return(nil)
545
646
  expect(@provider).not_to receive(:upgrade_package)
546
- @provider.action_upgrade
647
+ @provider.run_action(:upgrade)
547
648
  end
548
649
 
549
650
  it "should call action_upgrade in the parent if the candidate is newer" do
550
651
  @provider.load_current_resource
551
652
  @current_resource = Chef::Resource::Package.new('cups')
552
- @provider.candidate_version = '11'
653
+ allow(@provider).to receive(:candidate_version).and_return('11')
553
654
  expect(@provider).to receive(:upgrade_package).with(
554
655
  "cups",
555
656
  "11"
556
657
  )
557
- @provider.action_upgrade
658
+ @provider.run_action(:upgrade)
558
659
  end
559
660
 
560
661
  it "should not call action_upgrade in the parent if the candidate is older" do
561
662
  allow(@yum_cache).to receive(:installed_version).and_return("12")
562
663
  @provider.load_current_resource
563
664
  @current_resource = Chef::Resource::Package.new('cups')
564
- @provider.candidate_version = '11'
665
+ allow(@provider).to receive(:candidate_version).and_return('11')
565
666
  expect(@provider).not_to receive(:upgrade_package)
566
- @provider.action_upgrade
667
+ @provider.run_action(:upgrade)
567
668
  end
568
669
  end
569
670
 
@@ -1861,3 +1962,103 @@ EOF
1861
1962
  end
1862
1963
 
1863
1964
  end
1965
+
1966
+ describe "Chef::Provider::Package::Yum - Multi" do
1967
+ before(:each) do
1968
+ @node = Chef::Node.new
1969
+ @events = Chef::EventDispatch::Dispatcher.new
1970
+ @run_context = Chef::RunContext.new(@node, {}, @events)
1971
+ @new_resource = Chef::Resource::Package.new(['cups', 'vim'])
1972
+ @status = double("Status", :exitstatus => 0)
1973
+ @yum_cache = double(
1974
+ 'Chef::Provider::Yum::YumCache',
1975
+ :reload_installed => true,
1976
+ :reset => true,
1977
+ :installed_version => 'XXXX',
1978
+ :candidate_version => 'YYYY',
1979
+ :package_available? => true,
1980
+ :version_available? => true,
1981
+ :allow_multi_install => [ 'kernel' ],
1982
+ :package_repository => 'base',
1983
+ :disable_extra_repo_control => true
1984
+ )
1985
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
1986
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
1987
+ @pid = double("PID")
1988
+ end
1989
+
1990
+ describe "when loading the current system state" do
1991
+ it "should create a current resource with the name of the new_resource" do
1992
+ @provider.load_current_resource
1993
+ expect(@provider.current_resource.name).to eq('cups, vim')
1994
+ end
1995
+
1996
+ it "should set the current resources package name to the new resources package name" do
1997
+ @provider.load_current_resource
1998
+ expect(@provider.current_resource.package_name).to eq(['cups', 'vim'])
1999
+ end
2000
+
2001
+ it "should set the installed version to nil on the current resource if no installed package" do
2002
+ allow(@yum_cache).to receive(:installed_version).and_return(nil)
2003
+ @provider.load_current_resource
2004
+ expect(@provider.current_resource.version).to eq([nil, nil])
2005
+ end
2006
+
2007
+ it "should set the installed version if yum has one" do
2008
+ allow(@yum_cache).to receive(:installed_version).with('cups', nil).and_return('1.2.4-11.18.el5')
2009
+ allow(@yum_cache).to receive(:installed_version).with('vim', nil).and_return('1.0')
2010
+ allow(@yum_cache).to receive(:candidate_version).with('cups', nil).and_return('1.2.4-11.18.el5_2.3')
2011
+ allow(@yum_cache).to receive(:candidate_version).with('vim', nil).and_return('1.5')
2012
+ @provider.load_current_resource
2013
+ expect(@provider.current_resource.version).to eq(['1.2.4-11.18.el5', '1.0'])
2014
+ end
2015
+
2016
+ it "should set the candidate version if yum info has one" do
2017
+ allow(@yum_cache).to receive(:installed_version).with('cups', nil).and_return('1.2.4-11.18.el5')
2018
+ allow(@yum_cache).to receive(:installed_version).with('vim', nil).and_return('1.0')
2019
+ allow(@yum_cache).to receive(:candidate_version).with('cups', nil).and_return('1.2.4-11.18.el5_2.3')
2020
+ allow(@yum_cache).to receive(:candidate_version).with('vim', nil).and_return('1.5')
2021
+ @provider.load_current_resource
2022
+ expect(@provider.candidate_version).to eql(['1.2.4-11.18.el5_2.3', '1.5'])
2023
+ end
2024
+
2025
+ it "should return the current resouce" do
2026
+ expect(@provider.load_current_resource).to eql(@provider.current_resource)
2027
+ end
2028
+ end
2029
+
2030
+ describe "when installing a package" do
2031
+ it "should run yum install with the package name and version" do
2032
+ @provider.load_current_resource
2033
+ allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
2034
+ allow(@yum_cache).to receive(:installed_version).with('cups', nil).and_return('1.2.4-11.18.el5')
2035
+ allow(@yum_cache).to receive(:installed_version).with('vim', nil).and_return('0.9')
2036
+ expect(@provider).to receive(:yum_command).with(
2037
+ "yum -d0 -e0 -y install cups-1.2.4-11.19.el5 vim-1.0"
2038
+ )
2039
+ @provider.install_package(["cups", "vim"], ["1.2.4-11.19.el5", '1.0'])
2040
+ end
2041
+
2042
+ it "should run yum install with the package name, version and arch" do
2043
+ @provider.load_current_resource
2044
+ allow(@new_resource).to receive(:arch).and_return("i386")
2045
+ allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
2046
+ expect(@provider).to receive(:yum_command).with(
2047
+ "yum -d0 -e0 -y install cups-1.2.4-11.19.el5.i386 vim-1.0.i386"
2048
+ )
2049
+ @provider.install_package(["cups", "vim"], ["1.2.4-11.19.el5", "1.0"])
2050
+ end
2051
+
2052
+ it "installs the package with the options given in the resource" do
2053
+ @provider.load_current_resource
2054
+ allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
2055
+ allow(@yum_cache).to receive(:installed_version).with('cups', nil).and_return('1.2.4-11.18.el5')
2056
+ allow(@yum_cache).to receive(:installed_version).with('vim', nil).and_return('0.9')
2057
+ expect(@provider).to receive(:yum_command).with(
2058
+ "yum -d0 -e0 -y --disablerepo epmd install cups-1.2.4-11.19.el5 vim-1.0"
2059
+ )
2060
+ allow(@new_resource).to receive(:options).and_return("--disablerepo epmd")
2061
+ @provider.install_package(["cups", "vim"], ["1.2.4-11.19.el5", '1.0'])
2062
+ end
2063
+ end
2064
+ end