chef 12.4.0.rc.0-universal-mingw32 → 12.4.0.rc.2-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 (298) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +12 -1
  3. data/lib/chef/api_client.rb +130 -26
  4. data/lib/chef/application.rb +0 -1
  5. data/lib/chef/application/client.rb +8 -19
  6. data/lib/chef/audit/audit_reporter.rb +12 -7
  7. data/lib/chef/audit/logger.rb +36 -0
  8. data/lib/chef/audit/runner.rb +4 -2
  9. data/lib/chef/chef_class.rb +62 -11
  10. data/lib/chef/client.rb +587 -207
  11. data/lib/chef/config.rb +0 -1
  12. data/lib/chef/dsl/recipe.rb +45 -56
  13. data/lib/chef/dsl/resources.rb +3 -2
  14. data/lib/chef/event_dispatch/base.rb +7 -2
  15. data/lib/chef/exceptions.rb +4 -1
  16. data/lib/chef/file_content_management/deploy/mv_windows.rb +16 -6
  17. data/lib/chef/formatters/doc.rb +15 -7
  18. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +10 -7
  19. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +2 -0
  20. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +4 -1
  21. data/lib/chef/http/authenticator.rb +7 -2
  22. data/lib/chef/knife.rb +16 -4
  23. data/lib/chef/knife/client_create.rb +55 -31
  24. data/lib/chef/knife/core/generic_presenter.rb +1 -1
  25. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  26. data/lib/chef/knife/osc_user_create.rb +97 -0
  27. data/lib/chef/knife/osc_user_delete.rb +51 -0
  28. data/lib/chef/knife/osc_user_edit.rb +58 -0
  29. data/lib/chef/knife/osc_user_list.rb +47 -0
  30. data/lib/chef/knife/osc_user_reregister.rb +64 -0
  31. data/lib/chef/knife/osc_user_show.rb +54 -0
  32. data/lib/chef/knife/user_create.rb +95 -36
  33. data/lib/chef/knife/user_delete.rb +52 -2
  34. data/lib/chef/knife/user_edit.rb +37 -7
  35. data/lib/chef/knife/user_list.rb +3 -0
  36. data/lib/chef/knife/user_reregister.rb +39 -8
  37. data/lib/chef/knife/user_show.rb +30 -1
  38. data/lib/chef/mixin/api_version_request_handling.rb +66 -0
  39. data/lib/chef/mixin/convert_to_class_name.rb +10 -4
  40. data/lib/chef/mixin/deprecation.rb +24 -0
  41. data/lib/chef/mixin/powershell_out.rb +98 -0
  42. data/lib/chef/mixin/provides.rb +5 -18
  43. data/lib/chef/mixin/uris.rb +11 -0
  44. data/lib/chef/mixin/windows_architecture_helper.rb +5 -2
  45. data/lib/chef/mixin/windows_env_helper.rb +11 -2
  46. data/lib/chef/node_map.rb +130 -75
  47. data/lib/chef/osc_user.rb +194 -0
  48. data/lib/chef/platform/provider_mapping.rb +2 -269
  49. data/lib/chef/platform/provider_priority_map.rb +6 -69
  50. data/lib/chef/platform/query_helpers.rb +5 -0
  51. data/lib/chef/platform/resource_priority_map.rb +12 -15
  52. data/lib/chef/policy_builder/policyfile.rb +1 -0
  53. data/lib/chef/provider.rb +19 -0
  54. data/lib/chef/provider/directory.rb +3 -0
  55. data/lib/chef/provider/dsc_resource.rb +8 -1
  56. data/lib/chef/provider/file.rb +1 -0
  57. data/lib/chef/provider/group/aix.rb +1 -0
  58. data/lib/chef/provider/group/dscl.rb +1 -1
  59. data/lib/chef/provider/group/gpasswd.rb +1 -0
  60. data/lib/chef/provider/group/groupmod.rb +1 -1
  61. data/lib/chef/provider/group/pw.rb +1 -0
  62. data/lib/chef/provider/group/suse.rb +2 -0
  63. data/lib/chef/provider/group/usermod.rb +2 -1
  64. data/lib/chef/provider/group/windows.rb +1 -1
  65. data/lib/chef/provider/ifconfig.rb +2 -0
  66. data/lib/chef/provider/ifconfig/aix.rb +1 -0
  67. data/lib/chef/provider/ifconfig/debian.rb +2 -0
  68. data/lib/chef/provider/ifconfig/redhat.rb +1 -0
  69. data/lib/chef/provider/lwrp_base.rb +4 -0
  70. data/lib/chef/provider/mount.rb +0 -1
  71. data/lib/chef/provider/mount/aix.rb +1 -0
  72. data/lib/chef/provider/mount/mount.rb +2 -0
  73. data/lib/chef/provider/mount/solaris.rb +2 -0
  74. data/lib/chef/provider/package.rb +55 -0
  75. data/lib/chef/provider/package/aix.rb +7 -7
  76. data/lib/chef/provider/package/apt.rb +3 -3
  77. data/lib/chef/provider/package/dpkg.rb +4 -4
  78. data/lib/chef/provider/package/easy_install.rb +5 -5
  79. data/lib/chef/provider/package/freebsd/base.rb +2 -2
  80. data/lib/chef/provider/package/freebsd/pkg.rb +6 -6
  81. data/lib/chef/provider/package/freebsd/pkgng.rb +5 -5
  82. data/lib/chef/provider/package/freebsd/port.rb +4 -4
  83. data/lib/chef/provider/package/homebrew.rb +2 -2
  84. data/lib/chef/provider/package/ips.rb +4 -4
  85. data/lib/chef/provider/package/macports.rb +5 -6
  86. data/lib/chef/provider/package/openbsd.rb +4 -5
  87. data/lib/chef/provider/package/pacman.rb +4 -4
  88. data/lib/chef/provider/package/portage.rb +2 -0
  89. data/lib/chef/provider/package/rpm.rb +7 -8
  90. data/lib/chef/provider/package/rubygems.rb +5 -12
  91. data/lib/chef/provider/package/smartos.rb +4 -4
  92. data/lib/chef/provider/package/solaris.rb +7 -7
  93. data/lib/chef/provider/package/windows/msi.rb +1 -1
  94. data/lib/chef/provider/package/yum.rb +4 -6
  95. data/lib/chef/provider/package/zypper.rb +16 -14
  96. data/lib/chef/provider/powershell_script.rb +129 -47
  97. data/lib/chef/provider/remote_file/content.rb +4 -1
  98. data/lib/chef/provider/remote_file/local_file.rb +10 -4
  99. data/lib/chef/provider/service.rb +44 -0
  100. data/lib/chef/provider/service/freebsd.rb +1 -1
  101. data/lib/chef/provider/service/init.rb +1 -0
  102. data/lib/chef/provider/service/macosx.rb +1 -1
  103. data/lib/chef/provider/service/windows.rb +0 -1
  104. data/lib/chef/provider/user.rb +1 -1
  105. data/lib/chef/provider/user/aix.rb +3 -2
  106. data/lib/chef/provider/user/pw.rb +1 -0
  107. data/lib/chef/provider/user/solaris.rb +2 -0
  108. data/lib/chef/provider/user/useradd.rb +1 -0
  109. data/lib/chef/provider_resolver.rb +87 -134
  110. data/lib/chef/resource.rb +274 -68
  111. data/lib/chef/resource/apt_package.rb +0 -2
  112. data/lib/chef/resource/bash.rb +0 -2
  113. data/lib/chef/resource/batch.rb +1 -1
  114. data/lib/chef/resource/bff_package.rb +0 -7
  115. data/lib/chef/resource/breakpoint.rb +3 -6
  116. data/lib/chef/resource/chef_gem.rb +0 -3
  117. data/lib/chef/resource/cookbook_file.rb +1 -3
  118. data/lib/chef/resource/cron.rb +2 -4
  119. data/lib/chef/resource/csh.rb +0 -2
  120. data/lib/chef/resource/deploy.rb +9 -6
  121. data/lib/chef/resource/deploy_revision.rb +0 -14
  122. data/lib/chef/resource/directory.rb +2 -4
  123. data/lib/chef/resource/dpkg_package.rb +0 -5
  124. data/lib/chef/resource/dsc_resource.rb +2 -3
  125. data/lib/chef/resource/dsc_script.rb +2 -3
  126. data/lib/chef/resource/easy_install_package.rb +0 -7
  127. data/lib/chef/resource/env.rb +3 -3
  128. data/lib/chef/resource/erl_call.rb +2 -5
  129. data/lib/chef/resource/execute.rb +2 -4
  130. data/lib/chef/resource/file.rb +2 -4
  131. data/lib/chef/resource/freebsd_package.rb +0 -5
  132. data/lib/chef/resource/gem_package.rb +0 -3
  133. data/lib/chef/resource/git.rb +0 -3
  134. data/lib/chef/resource/group.rb +2 -4
  135. data/lib/chef/resource/homebrew_package.rb +0 -2
  136. data/lib/chef/resource/http_request.rb +3 -4
  137. data/lib/chef/resource/ifconfig.rb +3 -4
  138. data/lib/chef/resource/ips_package.rb +2 -2
  139. data/lib/chef/resource/link.rb +3 -5
  140. data/lib/chef/resource/log.rb +2 -4
  141. data/lib/chef/resource/lwrp_base.rb +10 -61
  142. data/lib/chef/resource/macosx_service.rb +1 -2
  143. data/lib/chef/resource/macports_package.rb +0 -7
  144. data/lib/chef/resource/mdadm.rb +2 -5
  145. data/lib/chef/resource/mount.rb +2 -4
  146. data/lib/chef/resource/ohai.rb +2 -4
  147. data/lib/chef/resource/openbsd_package.rb +0 -6
  148. data/lib/chef/resource/package.rb +9 -6
  149. data/lib/chef/resource/pacman_package.rb +0 -7
  150. data/lib/chef/resource/paludis_package.rb +2 -3
  151. data/lib/chef/resource/perl.rb +0 -3
  152. data/lib/chef/resource/portage_package.rb +0 -3
  153. data/lib/chef/resource/powershell_script.rb +1 -2
  154. data/lib/chef/resource/python.rb +0 -3
  155. data/lib/chef/resource/reboot.rb +1 -3
  156. data/lib/chef/resource/registry_key.rb +3 -5
  157. data/lib/chef/resource/remote_directory.rb +3 -5
  158. data/lib/chef/resource/remote_file.rb +4 -5
  159. data/lib/chef/resource/route.rb +3 -5
  160. data/lib/chef/resource/rpm_package.rb +0 -2
  161. data/lib/chef/resource/ruby.rb +0 -4
  162. data/lib/chef/resource/ruby_block.rb +2 -4
  163. data/lib/chef/resource/scm.rb +3 -5
  164. data/lib/chef/resource/script.rb +0 -3
  165. data/lib/chef/resource/service.rb +3 -5
  166. data/lib/chef/resource/smartos_package.rb +0 -9
  167. data/lib/chef/resource/solaris_package.rb +0 -10
  168. data/lib/chef/resource/subversion.rb +1 -3
  169. data/lib/chef/resource/template.rb +0 -4
  170. data/lib/chef/resource/timestamped_deploy.rb +0 -4
  171. data/lib/chef/resource/user.rb +2 -5
  172. data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -7
  173. data/lib/chef/resource/windows_package.rb +3 -3
  174. data/lib/chef/resource/windows_script.rb +2 -2
  175. data/lib/chef/resource/windows_service.rb +3 -3
  176. data/lib/chef/resource/yum_package.rb +0 -3
  177. data/lib/chef/resource/zypper_package.rb +27 -0
  178. data/lib/chef/resource_builder.rb +7 -0
  179. data/lib/chef/resource_reporter.rb +1 -1
  180. data/lib/chef/resource_resolver.rb +108 -62
  181. data/lib/chef/resources.rb +1 -0
  182. data/lib/chef/rest.rb +1 -0
  183. data/lib/chef/server_api.rb +2 -0
  184. data/lib/chef/user.rb +193 -42
  185. data/lib/chef/util/backup.rb +9 -1
  186. data/lib/chef/util/path_helper.rb +0 -1
  187. data/lib/chef/version.rb +1 -1
  188. data/spec/functional/audit/runner_spec.rb +22 -42
  189. data/spec/functional/mixin/powershell_out_spec.rb +43 -0
  190. data/spec/functional/resource/execute_spec.rb +9 -2
  191. data/spec/functional/resource/file_spec.rb +25 -0
  192. data/spec/functional/resource/group_spec.rb +5 -0
  193. data/spec/functional/resource/link_spec.rb +5 -11
  194. data/spec/functional/resource/powershell_spec.rb +40 -5
  195. data/spec/functional/resource/user/useradd_spec.rb +10 -18
  196. data/spec/integration/recipes/lwrp_spec.rb +57 -0
  197. data/spec/integration/recipes/provider_choice.rb +2 -7
  198. data/spec/integration/recipes/recipe_dsl_spec.rb +517 -19
  199. data/spec/spec_helper.rb +1 -1
  200. data/spec/support/lib/chef/provider/openldap_includer.rb +29 -0
  201. data/spec/support/lib/chef/resource/cat.rb +0 -2
  202. data/spec/support/lib/chef/resource/one_two_three_four.rb +0 -6
  203. data/spec/support/lib/chef/resource/openldap_includer.rb +27 -0
  204. data/spec/support/lib/chef/resource/with_state.rb +0 -9
  205. data/spec/support/lib/chef/resource/zen_follower.rb +0 -6
  206. data/spec/support/lib/chef/resource/zen_master.rb +1 -6
  207. data/spec/support/shared/context/client.rb +277 -0
  208. data/spec/support/shared/examples/client.rb +53 -0
  209. data/spec/support/shared/functional/file_resource.rb +0 -4
  210. data/spec/support/shared/functional/securable_resource.rb +0 -24
  211. data/spec/support/shared/functional/securable_resource_with_reporting.rb +4 -4
  212. data/spec/support/shared/functional/windows_script.rb +1 -1
  213. data/spec/support/shared/unit/api_versioning.rb +77 -0
  214. data/spec/support/shared/unit/knife_shared.rb +40 -0
  215. data/spec/support/shared/unit/user_and_client_shared.rb +115 -0
  216. data/spec/unit/api_client_spec.rb +189 -14
  217. data/spec/unit/application/client_spec.rb +0 -5
  218. data/spec/unit/audit/audit_reporter_spec.rb +58 -14
  219. data/spec/unit/audit/logger_spec.rb +42 -0
  220. data/spec/unit/audit/runner_spec.rb +2 -2
  221. data/spec/unit/chef_fs/file_pattern_spec.rb +3 -15
  222. data/spec/unit/client_spec.rb +58 -374
  223. data/spec/unit/cookbook_spec.rb +0 -9
  224. data/spec/unit/cookbook_version_spec.rb +0 -20
  225. data/spec/unit/deprecation_spec.rb +55 -0
  226. data/spec/unit/dsl/resources_spec.rb +85 -0
  227. data/spec/unit/exceptions_spec.rb +2 -2
  228. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +60 -0
  229. data/spec/unit/formatters/doc_spec.rb +46 -0
  230. data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +12 -10
  231. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +8 -0
  232. data/spec/unit/http/authenticator_spec.rb +11 -2
  233. data/spec/unit/knife/client_create_spec.rb +122 -51
  234. data/spec/unit/knife/core/subcommand_loader_spec.rb +19 -3
  235. data/spec/unit/knife/core/ui_spec.rb +14 -0
  236. data/spec/unit/knife/osc_user_create_spec.rb +93 -0
  237. data/spec/unit/knife/osc_user_delete_spec.rb +44 -0
  238. data/spec/unit/knife/osc_user_edit_spec.rb +52 -0
  239. data/spec/unit/knife/osc_user_list_spec.rb +37 -0
  240. data/spec/unit/knife/osc_user_reregister_spec.rb +58 -0
  241. data/spec/unit/knife/osc_user_show_spec.rb +46 -0
  242. data/spec/unit/knife/user_create_spec.rb +177 -51
  243. data/spec/unit/knife/user_delete_spec.rb +34 -8
  244. data/spec/unit/knife/user_edit_spec.rb +31 -12
  245. data/spec/unit/knife/user_list_spec.rb +7 -3
  246. data/spec/unit/knife/user_reregister_spec.rb +38 -17
  247. data/spec/unit/knife/user_show_spec.rb +35 -11
  248. data/spec/unit/knife_spec.rb +10 -4
  249. data/spec/unit/lwrp_spec.rb +228 -54
  250. data/spec/unit/mixin/api_version_request_handling_spec.rb +127 -0
  251. data/spec/unit/mixin/command_spec.rb +1 -2
  252. data/spec/unit/mixin/powershell_out_spec.rb +70 -0
  253. data/spec/unit/mixin/uris_spec.rb +23 -11
  254. data/spec/unit/node_map_spec.rb +4 -1
  255. data/spec/unit/osc_user_spec.rb +276 -0
  256. data/spec/unit/platform_spec.rb +0 -60
  257. data/spec/unit/provider/deploy_spec.rb +1 -1
  258. data/spec/unit/provider/directory_spec.rb +199 -135
  259. data/spec/unit/provider/ifconfig/debian_spec.rb +0 -10
  260. data/spec/unit/provider/package/aix_spec.rb +16 -16
  261. data/spec/unit/provider/package/dpkg_spec.rb +2 -2
  262. data/spec/unit/provider/package/freebsd/pkg_spec.rb +13 -13
  263. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
  264. data/spec/unit/provider/package/freebsd/port_spec.rb +7 -7
  265. data/spec/unit/provider/package/ips_spec.rb +22 -22
  266. data/spec/unit/provider/package/macports_spec.rb +10 -10
  267. data/spec/unit/provider/package/openbsd_spec.rb +4 -26
  268. data/spec/unit/provider/package/pacman_spec.rb +5 -5
  269. data/spec/unit/provider/package/rpm_spec.rb +14 -14
  270. data/spec/unit/provider/package/rubygems_spec.rb +10 -44
  271. data/spec/unit/provider/package/smartos_spec.rb +4 -4
  272. data/spec/unit/provider/package/solaris_spec.rb +11 -11
  273. data/spec/unit/provider/package/zypper_spec.rb +125 -90
  274. data/spec/unit/provider/package_spec.rb +34 -0
  275. data/spec/unit/provider/powershell_spec.rb +53 -11
  276. data/spec/unit/provider/remote_directory_spec.rb +2 -2
  277. data/spec/unit/provider/remote_file/local_file_spec.rb +25 -6
  278. data/spec/unit/provider/service/freebsd_service_spec.rb +0 -12
  279. data/spec/unit/provider/user_spec.rb +3 -3
  280. data/spec/unit/provider_resolver_spec.rb +463 -327
  281. data/spec/unit/recipe_spec.rb +42 -15
  282. data/spec/unit/resource/breakpoint_spec.rb +1 -1
  283. data/spec/unit/resource/erl_call_spec.rb +1 -1
  284. data/spec/unit/resource/file_spec.rb +1 -1
  285. data/spec/unit/resource/ifconfig_spec.rb +10 -6
  286. data/spec/unit/resource/remote_file_spec.rb +5 -0
  287. data/spec/unit/resource/route_spec.rb +1 -1
  288. data/spec/unit/resource/ruby_block_spec.rb +2 -2
  289. data/spec/unit/resource/template_spec.rb +1 -1
  290. data/spec/unit/resource/timestamped_deploy_spec.rb +1 -2
  291. data/spec/unit/resource/windows_service_spec.rb +1 -1
  292. data/spec/unit/resource_spec.rb +99 -13
  293. data/spec/unit/rest_spec.rb +5 -5
  294. data/spec/unit/run_context_spec.rb +41 -0
  295. data/spec/unit/runner_spec.rb +2 -2
  296. data/spec/unit/user_spec.rb +406 -93
  297. data/tasks/maintainers.rb +69 -0
  298. metadata +37 -4
@@ -25,26 +25,45 @@ describe Chef::Provider::RemoteFile::LocalFile do
25
25
  let(:new_resource) { Chef::Resource::RemoteFile.new("local file backend test (new_resource)") }
26
26
  let(:current_resource) { Chef::Resource::RemoteFile.new("local file backend test (current_resource)") }
27
27
  subject(:fetcher) { Chef::Provider::RemoteFile::LocalFile.new(uri, new_resource, current_resource) }
28
-
29
- context "when parsing source path" do
28
+
29
+ context "when parsing source path on windows" do
30
+
31
+ before do
32
+ allow(Chef::Platform).to receive(:windows?).and_return(true)
33
+ end
34
+
30
35
  describe "when given local unix path" do
31
36
  let(:uri) { URI.parse("file:///nyan_cat.png") }
32
37
  it "returns a correct unix path" do
33
- expect(fetcher.fix_windows_path(uri.path)).to eq("/nyan_cat.png")
38
+ expect(fetcher.source_path).to eq("/nyan_cat.png")
34
39
  end
35
40
  end
36
41
 
37
42
  describe "when given local windows path" do
38
43
  let(:uri) { URI.parse("file:///z:/windows/path/file.txt") }
39
44
  it "returns a valid windows local path" do
40
- expect(fetcher.fix_windows_path(uri.path)).to eq("z:/windows/path/file.txt")
45
+ expect(fetcher.source_path).to eq("z:/windows/path/file.txt")
46
+ end
47
+ end
48
+
49
+ describe "when given local windows path with spaces" do
50
+ let(:uri) { URI.parse(URI.escape("file:///z:/windows/path/foo & bar.txt")) }
51
+ it "returns a valid windows local path" do
52
+ expect(fetcher.source_path).to eq("z:/windows/path/foo & bar.txt")
41
53
  end
42
54
  end
43
55
 
44
56
  describe "when given unc windows path" do
45
57
  let(:uri) { URI.parse("file:////server/share/windows/path/file.txt") }
46
58
  it "returns a valid windows unc path" do
47
- expect(fetcher.fix_windows_path(uri.path)).to eq("//server/share/windows/path/file.txt")
59
+ expect(fetcher.source_path).to eq("//server/share/windows/path/file.txt")
60
+ end
61
+ end
62
+
63
+ describe "when given unc windows path with spaces" do
64
+ let(:uri) { URI.parse(URI.escape("file:////server/share/windows/path/foo & bar.txt")) }
65
+ it "returns a valid windows unc path" do
66
+ expect(fetcher.source_path).to eq("//server/share/windows/path/foo & bar.txt")
48
67
  end
49
68
  end
50
69
  end
@@ -73,7 +92,7 @@ describe Chef::Provider::RemoteFile::LocalFile do
73
92
  it "stages the local file to a temporary file" do
74
93
  expect(Chef::FileContentManagement::Tempfile).to receive(:new).with(new_resource).and_return(chef_tempfile)
75
94
  expect(::FileUtils).to receive(:cp).with(uri.path, tempfile.path)
76
- expect(tempfile).to receive(:close)
95
+ expect(tempfile).to receive(:close)
77
96
 
78
97
  result = fetcher.fetch
79
98
  expect(result).to eq(tempfile)
@@ -189,18 +189,6 @@ PS_SAMPLE
189
189
  expect(provider.status_load_success).to be_nil
190
190
  end
191
191
 
192
- context "when ps command is nil" do
193
- before do
194
- node.automatic_attrs[:command] = {:ps => nil}
195
- end
196
-
197
- it "should set running to nil" do
198
- pending "superclass raises no conversion of nil to string which seems broken"
199
- provider.determine_current_status!
200
- expect(current_resource.running).to be_nil
201
- end
202
- end
203
-
204
192
  context "when ps is empty string" do
205
193
  before do
206
194
  node.automatic_attrs[:command] = {:ps => ""}
@@ -143,8 +143,8 @@ describe Chef::Provider::User do
143
143
  begin
144
144
  require 'rubygems'
145
145
  require 'shadow'
146
- rescue LoadError => e
147
- pending "ruby-shadow gem not installed for dynamic load test"
146
+ rescue LoadError
147
+ skip "ruby-shadow gem not installed for dynamic load test"
148
148
  true
149
149
  else
150
150
  false
@@ -161,7 +161,7 @@ describe Chef::Provider::User do
161
161
 
162
162
  unless shadow_lib_unavail?
163
163
  context "and we have the ruby-shadow gem" do
164
- pending "and we are not root (rerun this again as root)", :requires_unprivileged_user => true
164
+ skip "and we are not root (rerun this again as root)", :requires_unprivileged_user => true
165
165
 
166
166
  context "and we are root", :requires_root => true do
167
167
  it "should pass assertions when ruby-shadow can be loaded" do
@@ -19,9 +19,13 @@
19
19
  require 'spec_helper'
20
20
  require 'chef/mixin/convert_to_class_name'
21
21
  require 'chef/provider_resolver'
22
+ require 'chef/platform/service_helpers'
22
23
 
23
24
  include Chef::Mixin::ConvertToClassName
24
25
 
26
+ # Open up Provider so we can write things down easier in here
27
+ #module Chef::Provider
28
+
25
29
  describe Chef::ProviderResolver do
26
30
 
27
31
  let(:node) do
@@ -50,6 +54,51 @@ describe Chef::ProviderResolver do
50
54
  allow(resource).to receive(:is_a?).with(Chef::Resource).and_return(true)
51
55
  end
52
56
 
57
+ def self.on_platform(platform, *tags,
58
+ platform_version: '11.0.1',
59
+ platform_family: nil,
60
+ os: nil,
61
+ &block)
62
+ Array(platform).each do |platform|
63
+ Array(platform_version).each do |platform_version|
64
+ on_one_platform(platform, platform_version, platform_family || platform, os || platform_family || platform, *tags, &block)
65
+ end
66
+ end
67
+ end
68
+
69
+ def self.on_one_platform(platform, platform_version, platform_family, os, *tags, &block)
70
+ describe "on #{platform} #{platform_version}, platform_family: #{platform_family}, os: #{os}", *tags do
71
+ let(:os) { os }
72
+ let(:platform) { platform }
73
+ let(:platform_family) { platform_family }
74
+ let(:platform_version) { platform_version }
75
+
76
+ define_singleton_method(:os) { os }
77
+ define_singleton_method(:platform) { platform }
78
+ define_singleton_method(:platform_family) { platform_family }
79
+ define_singleton_method(:platform_version) { platform_version }
80
+
81
+ instance_eval(&block)
82
+ end
83
+ end
84
+
85
+ def self.expect_providers(**providers)
86
+ providers.each do |name, provider|
87
+ describe name.to_s do
88
+ let(:resource_name) { name }
89
+ if provider
90
+ it "resolves to a #{provider}" do
91
+ expect(resolved_provider).to eql(provider)
92
+ end
93
+ else
94
+ it "Fails to resolve (since #{name.inspect} is unsupported on #{platform} #{platform_version})" do
95
+ expect { resolved_provider }.to raise_error /Cannot find a provider/
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+
53
102
  describe "resolving service resource" do
54
103
  def stub_service_providers(*services)
55
104
  services ||= []
@@ -64,7 +113,6 @@ describe Chef::ProviderResolver do
64
113
  end
65
114
 
66
115
  before do
67
- expect(provider_resolver).not_to receive(:maybe_chef_platform_lookup)
68
116
  allow(resource).to receive(:service_name).and_return("ntp")
69
117
  end
70
118
 
@@ -301,389 +349,477 @@ describe Chef::ProviderResolver do
301
349
  end
302
350
  end
303
351
 
304
- describe "on Ubuntu 14.10" do
305
- let(:os) { "linux" }
306
- let(:platform) { "ubuntu" }
307
- let(:platform_family) { "debian" }
308
- let(:platform_version) { "14.04" }
309
-
352
+ on_platform "ubuntu", platform_version: "14.10", platform_family: "debian", os: "linux" do
310
353
  it_behaves_like "an ubuntu platform with upstart, update-rc.d and systemd"
311
354
  end
312
355
 
313
- describe "on Ubuntu 14.04" do
314
- let(:os) { "linux" }
315
- let(:platform) { "ubuntu" }
316
- let(:platform_family) { "debian" }
317
- let(:platform_version) { "14.04" }
318
-
356
+ on_platform "ubuntu", platform_version: "14.04", platform_family: "debian", os: "linux" do
319
357
  it_behaves_like "an ubuntu platform with upstart and update-rc.d"
320
358
  end
321
359
 
322
- describe "on Ubuntu 10.04" do
323
- let(:os) { "linux" }
324
- let(:platform) { "ubuntu" }
325
- let(:platform_family) { "debian" }
326
- let(:platform_version) { "10.04" }
327
-
360
+ on_platform "ubuntu", platform_version: "10.04", platform_family: "debian", os: "linux" do
328
361
  it_behaves_like "an ubuntu platform with upstart and update-rc.d"
329
362
  end
330
363
 
331
364
  # old debian uses the Debian provider (does not have insserv or upstart, or update-rc.d???)
332
- describe "on Debian 4.0" do
333
- let(:os) { "linux" }
334
- let(:platform) { "debian" }
335
- let(:platform_family) { "debian" }
336
- let(:platform_version) { "4.0" }
337
-
365
+ on_platform "debian", platform_version: "4.0", os: "linux" do
338
366
  #it_behaves_like "a debian platform using the debian provider"
339
367
  end
340
368
 
341
369
  # Debian replaced the debian provider with insserv in the FIXME:VERSION distro
342
- describe "on Debian 7.0" do
343
- let(:os) { "linux" }
344
- let(:platform) { "debian" }
345
- let(:platform_family) { "debian" }
346
- let(:platform_version) { "7.0" }
347
-
370
+ on_platform "debian", platform_version: "7.0", os: "linux" do
348
371
  it_behaves_like "a debian platform using the insserv provider"
349
372
  end
350
373
 
351
- %w{solaris2 openindiana opensolaris nexentacore omnios smartos}.each do |platform|
352
- describe "on #{platform}" do
353
- let(:os) { "solaris2" }
354
- let(:platform) { platform }
355
- let(:platform_family) { platform }
356
- let(:platform_version) { "5.11" }
357
-
358
- it "returns a Solaris provider" do
359
- stub_service_providers
360
- stub_service_configs
361
- expect(resolved_provider).to eql(Chef::Provider::Service::Solaris)
362
- end
374
+ on_platform %w{solaris2 openindiana opensolaris nexentacore omnios smartos}, os: "solaris2", platform_version: "5.11" do
375
+ it "returns a Solaris provider" do
376
+ stub_service_providers
377
+ stub_service_configs
378
+ expect(resolved_provider).to eql(Chef::Provider::Service::Solaris)
379
+ end
363
380
 
364
- it "always returns a Solaris provider" do
365
- # no matter what we stub on the next two lines we should get a Solaris provider
366
- stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
367
- stub_service_configs(:initd, :upstart, :xinetd, :user_local_etc_rcd, :systemd)
368
- expect(resolved_provider).to eql(Chef::Provider::Service::Solaris)
369
- end
381
+ it "always returns a Solaris provider" do
382
+ # no matter what we stub on the next two lines we should get a Solaris provider
383
+ stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
384
+ stub_service_configs(:initd, :upstart, :xinetd, :user_local_etc_rcd, :systemd)
385
+ expect(resolved_provider).to eql(Chef::Provider::Service::Solaris)
370
386
  end
371
387
  end
372
388
 
373
- %w{mswin mingw32 windows}.each do |platform|
374
- describe "on #{platform}" do
375
- let(:os) { "windows" }
376
- let(:platform) { platform }
377
- let(:platform_family) { "windows" }
378
- let(:platform_version) { "5.11" }
379
-
380
- it "returns a Windows provider" do
381
- stub_service_providers
382
- stub_service_configs
383
- expect(resolved_provider).to eql(Chef::Provider::Service::Windows)
384
- end
389
+ on_platform %w{mswin mingw32 windows}, platform_family: "windows", platform_version: "5.11" do
390
+ it "returns a Windows provider" do
391
+ stub_service_providers
392
+ stub_service_configs
393
+ expect(resolved_provider).to eql(Chef::Provider::Service::Windows)
394
+ end
385
395
 
386
- it "always returns a Windows provider" do
387
- # no matter what we stub on the next two lines we should get a Windows provider
388
- stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
389
- stub_service_configs(:initd, :upstart, :xinetd, :user_local_etc_rcd, :systemd)
390
- expect(resolved_provider).to eql(Chef::Provider::Service::Windows)
391
- end
396
+ it "always returns a Windows provider" do
397
+ # no matter what we stub on the next two lines we should get a Windows provider
398
+ stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
399
+ stub_service_configs(:initd, :upstart, :xinetd, :user_local_etc_rcd, :systemd)
400
+ expect(resolved_provider).to eql(Chef::Provider::Service::Windows)
392
401
  end
393
402
  end
394
403
 
395
- %w{mac_os_x mac_os_x_server}.each do |platform|
396
- describe "on #{platform}" do
397
- let(:os) { "darwin" }
398
- let(:platform) { platform }
399
- let(:platform_family) { "mac_os_x" }
400
- let(:platform_version) { "10.9.2" }
401
-
402
- it "returns a Macosx provider" do
403
- stub_service_providers
404
- stub_service_configs
405
- expect(resolved_provider).to eql(Chef::Provider::Service::Macosx)
406
- end
404
+ on_platform %w{mac_os_x mac_os_x_server}, os: "darwin", platform_family: "mac_os_x", platform_version: "10.9.2" do
405
+ it "returns a Macosx provider" do
406
+ stub_service_providers
407
+ stub_service_configs
408
+ expect(resolved_provider).to eql(Chef::Provider::Service::Macosx)
409
+ end
407
410
 
408
- it "always returns a Macosx provider" do
409
- # no matter what we stub on the next two lines we should get a Macosx provider
410
- stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
411
- stub_service_configs(:initd, :upstart, :xinetd, :user_local_etc_rcd, :systemd)
412
- expect(resolved_provider).to eql(Chef::Provider::Service::Macosx)
413
- end
411
+ it "always returns a Macosx provider" do
412
+ # no matter what we stub on the next two lines we should get a Macosx provider
413
+ stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
414
+ stub_service_configs(:initd, :upstart, :xinetd, :user_local_etc_rcd, :systemd)
415
+ expect(resolved_provider).to eql(Chef::Provider::Service::Macosx)
414
416
  end
415
417
  end
416
418
 
417
- %w{freebsd netbsd}.each do |platform|
418
- describe "on #{platform}" do
419
- let(:os) { platform }
420
- let(:platform) { platform }
421
- let(:platform_family) { platform }
422
- let(:platform_version) { "10.0-RELEASE" }
423
-
424
- it "returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do
425
- stub_service_providers
426
- stub_service_configs(:usr_local_etc_rcd)
427
- expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
428
- end
419
+ on_platform %w(freebsd netbsd), platform_version: '3.1.4' do
420
+ it "returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do
421
+ stub_service_providers
422
+ stub_service_configs(:usr_local_etc_rcd)
423
+ expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
424
+ end
429
425
 
430
- it "returns a Freebsd provider if it finds the /etc/rc.d initscript" do
431
- stub_service_providers
432
- stub_service_configs(:etc_rcd)
433
- expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
434
- end
426
+ it "returns a Freebsd provider if it finds the /etc/rc.d initscript" do
427
+ stub_service_providers
428
+ stub_service_configs(:etc_rcd)
429
+ expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
430
+ end
435
431
 
436
- it "always returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do
437
- # should only care about :usr_local_etc_rcd stub in the service configs
438
- stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
439
- stub_service_configs(:usr_local_etc_rcd, :initd, :upstart, :xinetd, :systemd)
440
- expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
441
- end
432
+ it "always returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do
433
+ # should only care about :usr_local_etc_rcd stub in the service configs
434
+ stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
435
+ stub_service_configs(:usr_local_etc_rcd, :initd, :upstart, :xinetd, :systemd)
436
+ expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
437
+ end
442
438
 
443
- it "always returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do
444
- # should only care about :etc_rcd stub in the service configs
445
- stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
446
- stub_service_configs(:etc_rcd, :initd, :upstart, :xinetd, :systemd)
447
- expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
448
- end
439
+ it "always returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do
440
+ # should only care about :etc_rcd stub in the service configs
441
+ stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
442
+ stub_service_configs(:etc_rcd, :initd, :upstart, :xinetd, :systemd)
443
+ expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
444
+ end
449
445
 
450
- it "foo" do
451
- stub_service_providers
452
- stub_service_configs
453
- expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
454
- end
446
+ it "foo" do
447
+ stub_service_providers
448
+ stub_service_configs
449
+ expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
455
450
  end
456
451
  end
457
452
 
458
453
  end
459
454
 
460
- describe "for the package provider" do
461
- let(:resource_name) { :package }
462
-
463
- before do
464
- expect(provider_resolver).not_to receive(:maybe_chef_platform_lookup)
465
- end
466
-
467
- %w{mac_os_x mac_os_x_server}.each do |platform|
468
- describe "on #{platform}" do
469
- let(:os) { "darwin" }
470
- let(:platform) { platform }
471
- let(:platform_family) { "mac_os_x" }
472
- let(:platform_version) { "10.9.2" }
473
-
474
-
475
- it "returns a Chef::Provider::Package::Homebrew provider" do
476
- expect(resolved_provider).to eql(Chef::Provider::Package::Homebrew)
477
- end
478
- end
479
- end
480
- end
455
+ PROVIDERS =
456
+ {
457
+ bash: Chef::Provider::Script,
458
+ breakpoint: Chef::Provider::Breakpoint,
459
+ chef_gem: Chef::Provider::Package::Rubygems,
460
+ cookbook_file: Chef::Provider::CookbookFile,
461
+ csh: Chef::Provider::Script,
462
+ deploy: Chef::Provider::Deploy::Timestamped,
463
+ deploy_revision: Chef::Provider::Deploy::Revision,
464
+ directory: Chef::Provider::Directory,
465
+ easy_install_package: Chef::Provider::Package::EasyInstall,
466
+ erl_call: Chef::Provider::ErlCall,
467
+ execute: Chef::Provider::Execute,
468
+ file: Chef::Provider::File,
469
+ gem_package: Chef::Provider::Package::Rubygems,
470
+ git: Chef::Provider::Git,
471
+ group: Chef::Provider::Group::Gpasswd,
472
+ homebrew_package: Chef::Provider::Package::Homebrew,
473
+ http_request: Chef::Provider::HttpRequest,
474
+ ifconfig: Chef::Provider::Ifconfig,
475
+ link: Chef::Provider::Link,
476
+ log: Chef::Provider::Log::ChefLog,
477
+ macports_package: Chef::Provider::Package::Macports,
478
+ mdadm: Chef::Provider::Mdadm,
479
+ mount: Chef::Provider::Mount::Mount,
480
+ perl: Chef::Provider::Script,
481
+ portage_package: Chef::Provider::Package::Portage,
482
+ python: Chef::Provider::Script,
483
+ remote_directory: Chef::Provider::RemoteDirectory,
484
+ route: Chef::Provider::Route,
485
+ rpm_package: Chef::Provider::Package::Rpm,
486
+ ruby: Chef::Provider::Script,
487
+ ruby_block: Chef::Provider::RubyBlock,
488
+ script: Chef::Provider::Script,
489
+ subversion: Chef::Provider::Subversion,
490
+ template: Chef::Provider::Template,
491
+ timestamped_deploy: Chef::Provider::Deploy::Timestamped,
492
+ user: Chef::Provider::User::Useradd,
493
+ whyrun_safe_ruby_block: Chef::Provider::WhyrunSafeRubyBlock,
494
+
495
+ # We want to check that these are unsupported:
496
+ apt_package: nil,
497
+ bff_package: nil,
498
+ dsc_script: nil,
499
+ dpkg_package: nil,
500
+ ips_package: nil,
501
+ pacman_package: nil,
502
+ paludis_package: nil,
503
+ rpm_package: nil,
504
+ smartos_package: nil,
505
+ solaris_package: nil,
506
+ yum_package: nil,
507
+ windows_package: nil,
508
+ windows_service: nil,
509
+
510
+ "linux" => {
511
+ apt_package: Chef::Provider::Package::Apt,
512
+ dpkg_package: Chef::Provider::Package::Dpkg,
513
+ pacman_package: Chef::Provider::Package::Pacman,
514
+ paludis_package: Chef::Provider::Package::Paludis,
515
+ rpm_package: Chef::Provider::Package::Rpm,
516
+ yum_package: Chef::Provider::Package::Yum,
517
+
518
+ "debian" => {
519
+ ifconfig: Chef::Provider::Ifconfig::Debian,
520
+ package: Chef::Provider::Package::Apt,
521
+ # service: Chef::Provider::Service::Debian,
522
+
523
+ "debian" => {
524
+ "7.0" => {
525
+ },
526
+ "6.0" => {
527
+ ifconfig: Chef::Provider::Ifconfig,
528
+ # service: Chef::Provider::Service::Insserv,
529
+ },
530
+ "5.0" => {
531
+ ifconfig: Chef::Provider::Ifconfig,
532
+ },
533
+ },
534
+ "gcel" => {
535
+ "3.1.4" => {
536
+ ifconfig: Chef::Provider::Ifconfig,
537
+ },
538
+ },
539
+ "linaro" => {
540
+ "3.1.4" => {
541
+ ifconfig: Chef::Provider::Ifconfig,
542
+ },
543
+ },
544
+ "linuxmint" => {
545
+ "3.1.4" => {
546
+ ifconfig: Chef::Provider::Ifconfig,
547
+ # service: Chef::Provider::Service::Upstart,
548
+ },
549
+ },
550
+ "raspbian" => {
551
+ "3.1.4" => {
552
+ ifconfig: Chef::Provider::Ifconfig,
553
+ },
554
+ },
555
+ "ubuntu" => {
556
+ "11.10" => {
557
+ },
558
+ "10.04" => {
559
+ ifconfig: Chef::Provider::Ifconfig,
560
+ },
561
+ },
562
+ },
563
+
564
+ "arch" => {
565
+ package: Chef::Provider::Package::Pacman,
566
+
567
+ "arch" => {
568
+ "3.1.4" => {
569
+ }
570
+ },
571
+ },
572
+
573
+ "freebsd" => {
574
+ group: Chef::Provider::Group::Pw,
575
+ user: Chef::Provider::User::Pw,
576
+
577
+ "freebsd" => {
578
+ "3.1.4" => {
579
+ },
580
+ },
581
+ },
582
+ "suse" => {
583
+ group: Chef::Provider::Group::Gpasswd,
584
+ "suse" => {
585
+ "12.0" => {
586
+ },
587
+ %w(11.1 11.2 11.3) => {
588
+ group: Chef::Provider::Group::Suse,
589
+ },
590
+ },
591
+ "opensuse" => {
592
+ # service: Chef::Provider::Service::Redhat,
593
+ package: Chef::Provider::Package::Zypper,
594
+ group: Chef::Provider::Group::Usermod,
595
+ "12.3" => {
596
+ },
597
+ "12.2" => {
598
+ group: Chef::Provider::Group::Suse,
599
+ },
600
+ },
601
+ },
602
+
603
+ "gentoo" => {
604
+ package: Chef::Provider::Package::Portage,
605
+ portage_package: Chef::Provider::Package::Portage,
606
+ # service: Chef::Provider::Service::Gentoo,
607
+
608
+ "gentoo" => {
609
+ "3.1.4" => {
610
+ },
611
+ },
612
+ },
613
+
614
+ "rhel" => {
615
+ # service: Chef::Provider::Service::Systemd,
616
+ package: Chef::Provider::Package::Yum,
617
+ ifconfig: Chef::Provider::Ifconfig::Redhat,
618
+
619
+ %w(amazon xcp xenserver ibm_powerkvm cloudlinux parallels) => {
620
+ "3.1.4" => {
621
+ # service: Chef::Provider::Service::Redhat,
622
+ },
623
+ },
624
+ %w(redhat centos scientific oracle) => {
625
+ "7.0" => {
626
+ },
627
+ "6.0" => {
628
+ # service: Chef::Provider::Service::Redhat,
629
+ },
630
+ },
631
+ "fedora" => {
632
+ "15.0" => {
633
+ },
634
+ "14.0" => {
635
+ # service: Chef::Provider::Service::Redhat,
636
+ },
637
+ },
638
+ },
481
639
 
482
- provider_mapping = {
483
- "mac_os_x" => {
484
- :package => Chef::Provider::Package::Homebrew,
485
- :user => Chef::Provider::User::Dscl,
486
- :group => Chef::Provider::Group::Dscl,
487
640
  },
488
- "mac_os_x_server" => {
489
- :package => Chef::Provider::Package::Homebrew,
490
- :user => Chef::Provider::User::Dscl,
491
- :group => Chef::Provider::Group::Dscl,
492
- },
493
- "mswin" => {
494
- :env => Chef::Provider::Env::Windows,
495
- :user => Chef::Provider::User::Windows,
496
- :group => Chef::Provider::Group::Windows,
497
- :mount => Chef::Provider::Mount::Windows,
498
- :batch => Chef::Provider::Batch,
499
- :powershell_script => Chef::Provider::PowershellScript,
500
- },
501
- "mingw32" => {
502
- :env => Chef::Provider::Env::Windows,
503
- :user => Chef::Provider::User::Windows,
504
- :group => Chef::Provider::Group::Windows,
505
- :mount => Chef::Provider::Mount::Windows,
506
- :batch => Chef::Provider::Batch,
507
- :powershell_script => Chef::Provider::PowershellScript,
641
+
642
+ "darwin" => {
643
+ %w(mac_os_x mac_os_x_server) => {
644
+ group: Chef::Provider::Group::Dscl,
645
+ package: Chef::Provider::Package::Homebrew,
646
+ user: Chef::Provider::User::Dscl,
647
+
648
+ "mac_os_x" => {
649
+ "10.9.2" => {
650
+ },
651
+ },
652
+ },
508
653
  },
654
+
509
655
  "windows" => {
510
- :env => Chef::Provider::Env::Windows,
511
- :user => Chef::Provider::User::Windows,
512
- :group => Chef::Provider::Group::Windows,
513
- :mount => Chef::Provider::Mount::Windows,
514
- :batch => Chef::Provider::Batch,
515
- :powershell_script => Chef::Provider::PowershellScript,
656
+ batch: Chef::Provider::Batch,
657
+ dsc_script: Chef::Provider::DscScript,
658
+ env: Chef::Provider::Env::Windows,
659
+ group: Chef::Provider::Group::Windows,
660
+ mount: Chef::Provider::Mount::Windows,
661
+ package: Chef::Provider::Package::Windows,
662
+ powershell_script: Chef::Provider::PowershellScript,
663
+ service: Chef::Provider::Service::Windows,
664
+ user: Chef::Provider::User::Windows,
665
+ windows_package: Chef::Provider::Package::Windows,
666
+ windows_service: Chef::Provider::Service::Windows,
667
+
668
+ "windows" => {
669
+ %w(mswin mingw32 windows) => {
670
+ "10.9.2" => {
671
+ },
672
+ },
673
+ },
516
674
  },
675
+
517
676
  "aix" => {
518
- :cron => Chef::Provider::Cron::Aix,
519
- },
520
- "netbsd"=> {
521
- :group => Chef::Provider::Group::Groupmod,
677
+ bff_package: Chef::Provider::Package::Aix,
678
+ cron: Chef::Provider::Cron::Aix,
679
+ group: Chef::Provider::Group::Aix,
680
+ ifconfig: Chef::Provider::Ifconfig::Aix,
681
+ mount: Chef::Provider::Mount::Aix,
682
+ package: Chef::Provider::Package::Aix,
683
+ rpm_package: Chef::Provider::Package::Rpm,
684
+ user: Chef::Provider::User::Aix,
685
+ # service: Chef::Provider::Service::Aix,
686
+
687
+ "aix" => {
688
+ "aix" => {
689
+ "5.6" => {
690
+ },
691
+ },
692
+ },
522
693
  },
523
- "openbsd" => {
524
- :group => Chef::Provider::Group::Usermod,
525
- :package => Chef::Provider::Package::Openbsd,
526
- },
527
- }
528
694
 
529
- def self.do_platform(platform_hash)
530
- platform_hash.each do |resource, provider|
531
- describe "for #{resource}" do
532
- let(:resource_name) { resource }
533
-
534
- it "resolves to a #{provider}" do
535
- expect(resolved_provider).to eql(provider)
536
- end
537
- end
538
- end
539
- end
540
-
541
- describe "individual platform mappings" do
542
- let(:resource_name) { :user }
543
-
544
- before do
545
- expect(provider_resolver).not_to receive(:maybe_chef_platform_lookup)
546
- end
547
-
548
- %w{mac_os_x mac_os_x_server}.each do |platform|
549
- describe "on #{platform}" do
550
- let(:os) { "darwin" }
551
- let(:platform) { platform }
552
- let(:platform_family) { "mac_os_x" }
553
- let(:platform_version) { "10.9.2" }
554
-
555
- do_platform(provider_mapping[platform])
556
- end
557
- end
558
-
559
- %w{mswin mingw32 windows}.each do |platform|
560
- describe "on #{platform}" do
561
- let(:os) { "windows" }
562
- let(:platform) { platform }
563
- let(:platform_family) { "windows" }
564
- let(:platform_version) { "10.9.2" }
695
+ "hpux" => {
696
+ "hpux" => {
697
+ "hpux" => {
698
+ "3.1.4" => {
699
+ group: Chef::Provider::Group::Usermod
700
+ }
701
+ }
702
+ }
703
+ },
565
704
 
566
- do_platform(provider_mapping[platform])
567
- end
568
- end
705
+ "netbsd" => {
706
+ "netbsd" => {
707
+ "netbsd" => {
708
+ "3.1.4" => {
709
+ group: Chef::Provider::Group::Groupmod,
710
+ },
711
+ },
712
+ },
713
+ },
569
714
 
570
- describe "on AIX" do
571
- let(:os) { "aix" }
572
- let(:platform) { "aix" }
573
- let(:platform_family) { "aix" }
574
- let(:platform_version) { "6.2" }
715
+ "openbsd" => {
716
+ group: Chef::Provider::Group::Usermod,
717
+ package: Chef::Provider::Package::Openbsd,
718
+
719
+ "openbsd" => {
720
+ "openbsd" => {
721
+ "3.1.4" => {
722
+ },
723
+ },
724
+ },
725
+ },
575
726
 
576
- do_platform(provider_mapping['aix'])
577
- end
727
+ "solaris2" => {
728
+ group: Chef::Provider::Group::Usermod,
729
+ ips_package: Chef::Provider::Package::Ips,
730
+ package: Chef::Provider::Package::Ips,
731
+ mount: Chef::Provider::Mount::Solaris,
732
+ solaris_package: Chef::Provider::Package::Solaris,
733
+
734
+ "smartos" => {
735
+ smartos_package: Chef::Provider::Package::SmartOS,
736
+ package: Chef::Provider::Package::SmartOS,
737
+
738
+ "smartos" => {
739
+ "3.1.4" => {
740
+ },
741
+ },
742
+ },
743
+
744
+ "solaris2" => {
745
+ "nexentacore" => {
746
+ "3.1.4" => {
747
+ package: Chef::Provider::Package::Solaris,
748
+ },
749
+ },
750
+ "omnios" => {
751
+ "3.1.4" => {
752
+ user: Chef::Provider::User::Solaris,
753
+ }
754
+ },
755
+ "openindiana" => {
756
+ "3.1.4" => {
757
+ },
758
+ },
759
+ "opensolaris" => {
760
+ "3.1.4" => {
761
+ },
762
+ },
763
+ "solaris2" => {
764
+ user: Chef::Provider::User::Solaris,
765
+ "5.11" => {
766
+ },
767
+ "5.9" => {
768
+ package: Chef::Provider::Package::Solaris,
769
+ },
770
+ },
771
+ },
578
772
 
579
- %w{netbsd openbsd}.each do |platform|
580
- describe "on #{platform}" do
581
- let(:os) { platform }
582
- let(:platform) { platform }
583
- let(:platform_family) { platform }
584
- let(:platform_version) { "10.0-RELEASE" }
773
+ },
585
774
 
586
- do_platform(provider_mapping[platform])
587
- end
588
- end
589
- end
775
+ "solaris" => {
776
+ "solaris" => {
777
+ "solaris" => {
778
+ "3.1.4" => {
779
+ },
780
+ },
781
+ },
782
+ },
590
783
 
591
- describe "resolving static providers" do
592
- def resource_class(resource)
593
- Chef::Resource.const_get(convert_to_class_name(resource.to_s))
594
- end
595
- static_mapping = {
596
- apt_package: Chef::Provider::Package::Apt,
597
- bash: Chef::Provider::Script,
598
- bff_package: Chef::Provider::Package::Aix,
599
- breakpoint: Chef::Provider::Breakpoint,
600
- chef_gem: Chef::Provider::Package::Rubygems,
601
- cookbook_file: Chef::Provider::CookbookFile,
602
- csh: Chef::Provider::Script,
603
- deploy: Chef::Provider::Deploy::Timestamped,
604
- deploy_revision: Chef::Provider::Deploy::Revision,
605
- directory: Chef::Provider::Directory,
606
- dpkg_package: Chef::Provider::Package::Dpkg,
607
- dsc_script: Chef::Provider::DscScript,
608
- easy_install_package: Chef::Provider::Package::EasyInstall,
609
- erl_call: Chef::Provider::ErlCall,
610
- execute: Chef::Provider::Execute,
611
- file: Chef::Provider::File,
612
- gem_package: Chef::Provider::Package::Rubygems,
613
- git: Chef::Provider::Git,
614
- homebrew_package: Chef::Provider::Package::Homebrew,
615
- http_request: Chef::Provider::HttpRequest,
616
- ips_package: Chef::Provider::Package::Ips,
617
- link: Chef::Provider::Link,
618
- log: Chef::Provider::Log::ChefLog,
619
- macports_package: Chef::Provider::Package::Macports,
620
- mdadm: Chef::Provider::Mdadm,
621
- pacman_package: Chef::Provider::Package::Pacman,
622
- paludis_package: Chef::Provider::Package::Paludis,
623
- perl: Chef::Provider::Script,
624
- portage_package: Chef::Provider::Package::Portage,
625
- python: Chef::Provider::Script,
626
- remote_directory: Chef::Provider::RemoteDirectory,
627
- route: Chef::Provider::Route,
628
- rpm_package: Chef::Provider::Package::Rpm,
629
- ruby: Chef::Provider::Script,
630
- ruby_block: Chef::Provider::RubyBlock,
631
- script: Chef::Provider::Script,
632
- smartos_package: Chef::Provider::Package::SmartOS,
633
- solaris_package: Chef::Provider::Package::Solaris,
634
- subversion: Chef::Provider::Subversion,
635
- template: Chef::Provider::Template,
636
- timestamped_deploy: Chef::Provider::Deploy::Timestamped,
637
- whyrun_safe_ruby_block: Chef::Provider::WhyrunSafeRubyBlock,
638
- windows_package: Chef::Provider::Package::Windows,
639
- windows_service: Chef::Provider::Service::Windows,
640
- yum_package: Chef::Provider::Package::Yum,
784
+ "exherbo" => {
785
+ "exherbo" => {
786
+ "exherbo" => {
787
+ "3.1.4" => {
788
+ package: Chef::Provider::Package::Paludis
789
+ }
790
+ }
641
791
  }
792
+ }
793
+ }
642
794
 
643
- describe "on Ubuntu 14.04" do
644
- let(:os) { "linux" }
645
- let(:platform) { "ubuntu" }
646
- let(:platform_family) { "debian" }
647
- let(:platform_version) { "14.04" }
648
-
649
- supported_providers = [
650
- :apt_package, :bash, :breakpoint, :chef_gem, :cookbook_file, :csh, :deploy,
651
- :deploy_revision, :directory, :dpkg_package, :easy_install_package, :erl_call,
652
- :execute, :file, :gem_package, :git, :homebrew_package, :http_request, :link,
653
- :log, :macports_package, :pacman_package, :paludis_package, :perl, :python,
654
- :remote_directory, :route, :rpm_package, :ruby, :ruby_block, :script, :subversion,
655
- :template, :timestamped_deploy, :whyrun_safe_ruby_block, :yum_package,
656
- ]
657
-
658
- supported_providers.each do |static_resource|
659
- static_provider = static_mapping[static_resource]
660
- context "when the resource is a #{static_resource}" do
661
- let(:resource) { double(Chef::Resource, provider: nil, resource_name: static_resource) }
662
- let(:action) { :start } # in reality this doesn't matter much
663
- it "should resolve to a #{static_provider} provider" do
664
- expect(provider_resolver).not_to receive(:maybe_chef_platform_lookup)
665
- expect(resolved_provider).to eql(static_provider)
795
+ def self.create_provider_tests(providers, test, expected, filter)
796
+ expected = expected.merge(providers.select { |key, value| key.is_a?(Symbol) })
797
+ providers.each do |key, value|
798
+ if !key.is_a?(Symbol)
799
+ next_test = test.merge({ filter => key })
800
+ next_filter =
801
+ case filter
802
+ when :os
803
+ :platform_family
804
+ when :platform_family
805
+ :platform
806
+ when :platform
807
+ :platform_version
808
+ when :platform_version
809
+ nil
810
+ else
811
+ raise "Hash too deep; only os, platform_family, platform and platform_version supported"
666
812
  end
667
- end
813
+ create_provider_tests(value, next_test, expected, next_filter)
668
814
  end
669
-
670
- unsupported_providers = [
671
- :bff_package, :dsc_script, :ips_package, :smartos_package,
672
- :solaris_package, :windows_package, :windows_service,
673
- ]
674
-
675
- unsupported_providers.each do |static_resource|
676
- static_provider = static_mapping[static_resource]
677
- context "when the resource is a #{static_resource}" do
678
- let(:resource) { double(Chef::Resource, provider: nil, resource_name: static_resource) }
679
- let(:action) { :start } # in reality this doesn't matter much
680
- it "should fall back into the old provider mapper code and hooks" do
681
- retval = Object.new
682
- expect(provider_resolver).to receive(:maybe_chef_platform_lookup).and_return(retval)
683
- expect(resolved_provider).to equal(retval)
684
- end
685
- end
815
+ end
816
+ # If there is no filter, we're as deep as we need to go
817
+ if !filter
818
+ on_platform test.delete(:platform), test do
819
+ expect_providers(expected)
686
820
  end
687
821
  end
688
822
  end
823
+
824
+ create_provider_tests(PROVIDERS, {}, {}, :os)
689
825
  end