summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Keiser <john@johnkeiser.com>2015-06-01 18:09:45 -0700
committerJohn Keiser <john@johnkeiser.com>2015-06-02 09:53:41 -0700
commit871848fe20769ca8ebf54632f278cc508b5c26aa (patch)
tree98327c777bcdeba2933bbff11e945685840d400e
parentcd7617fcf5fa45149de934c29abc54d9e8bb4d28 (diff)
downloadchef-jk/one_map_to_rule_them_all.tar.gz
Create tests for all previous provider_mappingsjk/one_map_to_rule_them_all
-rw-r--r--lib/chef/platform/provider_mapping.rb2
-rw-r--r--lib/chef/provider/group/suse.rb2
-rw-r--r--lib/chef/provider/group/usermod.rb1
-rw-r--r--lib/chef/provider/mount.rb2
-rw-r--r--lib/chef/provider/mount/mount.rb2
-rw-r--r--lib/chef/provider/package.rb14
-rw-r--r--spec/unit/provider_resolver_spec.rb495
7 files changed, 370 insertions, 148 deletions
diff --git a/lib/chef/platform/provider_mapping.rb b/lib/chef/platform/provider_mapping.rb
index 7e9c4028e0..0440ff8601 100644
--- a/lib/chef/platform/provider_mapping.rb
+++ b/lib/chef/platform/provider_mapping.rb
@@ -39,7 +39,7 @@ class Chef
name_sym = name
if name.kind_of?(String)
- name.downcase!
+ name = name.downcase
name.gsub!(/\s/, "_")
name_sym = name.to_sym
end
diff --git a/lib/chef/provider/group/suse.rb b/lib/chef/provider/group/suse.rb
index 370cbe8492..b47ea33e80 100644
--- a/lib/chef/provider/group/suse.rb
+++ b/lib/chef/provider/group/suse.rb
@@ -22,7 +22,7 @@ class Chef
class Provider
class Group
class Suse < Chef::Provider::Group::Groupadd
- provides :group, platform: 'opensuse'
+ provides :group, platform: 'opensuse', platform_version: '< 12.3'
provides :group, platform: 'suse', platform_version: '< 12.0'
def load_current_resource
diff --git a/lib/chef/provider/group/usermod.rb b/lib/chef/provider/group/usermod.rb
index fee97e05a4..d78d42d6e1 100644
--- a/lib/chef/provider/group/usermod.rb
+++ b/lib/chef/provider/group/usermod.rb
@@ -24,6 +24,7 @@ class Chef
class Usermod < Chef::Provider::Group::Groupadd
provides :group, os: %w(openbsd solaris2 hpux)
+ provides :group, platform: "opensuse"
def load_current_resource
super
diff --git a/lib/chef/provider/mount.rb b/lib/chef/provider/mount.rb
index 6e8e077eaf..2039e9ae51 100644
--- a/lib/chef/provider/mount.rb
+++ b/lib/chef/provider/mount.rb
@@ -24,8 +24,6 @@ require 'chef/provider'
class Chef
class Provider
class Mount < Chef::Provider
- provides :mount
-
include Chef::Mixin::ShellOut
attr_accessor :unmount_retries
diff --git a/lib/chef/provider/mount/mount.rb b/lib/chef/provider/mount/mount.rb
index 0a6e269d2d..ef074166a9 100644
--- a/lib/chef/provider/mount/mount.rb
+++ b/lib/chef/provider/mount/mount.rb
@@ -24,6 +24,8 @@ class Chef
class Mount
class Mount < Chef::Provider::Mount
+ provides :mount
+
def initialize(new_resource, run_context)
super
@real_device = nil
diff --git a/lib/chef/provider/package.rb b/lib/chef/provider/package.rb
index 29ca3005a5..291ff882f6 100644
--- a/lib/chef/provider/package.rb
+++ b/lib/chef/provider/package.rb
@@ -512,15 +512,15 @@ class Chef
Chef.set_provider_priority_array :package, Apt, platform_family: "debian"
Chef.set_provider_priority_array :package, Yum, platform_family: %w(rhel fedora)
Chef.set_provider_priority_array :package, Zypper, platform_family: "suse"
- Chef.set_provider_priority_array :package, Portage, platform: %w(gentoo)
- Chef.set_provider_priority_array :package, Pacman, platform: %w(arch)
+ Chef.set_provider_priority_array :package, Portage, platform: "gentoo"
+ Chef.set_provider_priority_array :package, Pacman, platform: "arch"
Chef.set_provider_priority_array :package, Ips, platform: %w(openindiana opensolaris omnios solaris2)
- Chef.set_provider_priority_array :package, Solaris, platform: %w(nexentacore)
- Chef.set_provider_priority_array :package, Solaris, platform: %w(solaris2), platform_version: '< 5.11'
+ Chef.set_provider_priority_array :package, Solaris, platform: "nexentacore"
+ Chef.set_provider_priority_array :package, Solaris, platform: "solaris2", platform_version: '< 5.11'
- Chef.set_provider_priority_array :package, SmartOS, platform: %w(smartos)
- Chef.set_provider_priority_array :package, Aix, platform: %w(aix)
- Chef.set_provider_priority_array :package, Paludis, platform: %w(exherbo)
+ Chef.set_provider_priority_array :package, SmartOS, platform: "smartos"
+ Chef.set_provider_priority_array :package, Aix, platform: "aix"
+ Chef.set_provider_priority_array :package, Paludis, platform: "exherbo"
end
end
end
diff --git a/spec/unit/provider_resolver_spec.rb b/spec/unit/provider_resolver_spec.rb
index 90d107f2c0..a27074e0bc 100644
--- a/spec/unit/provider_resolver_spec.rb
+++ b/spec/unit/provider_resolver_spec.rb
@@ -84,7 +84,7 @@ describe Chef::ProviderResolver do
def self.expect_providers(**providers)
providers.each do |name, provider|
- describe "for #{name}" do
+ describe name.to_s do
let(:resource_name) { name }
if provider
it "resolves to a #{provider}" do
@@ -417,7 +417,7 @@ describe Chef::ProviderResolver do
end
end
- on_platform %w(freebsd netbsd), platform_version: '10.0-RELEASE' do
+ on_platform %w(freebsd netbsd), platform_version: '3.1.4' do
it "returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do
stub_service_providers
stub_service_configs(:usr_local_etc_rcd)
@@ -453,153 +453,374 @@ describe Chef::ProviderResolver do
end
- on_platform %w(mac_os_x mac_os_x_server), os: "darwin", platform_family: "mac_os_x", platform_version: "10.9.2" do
- expect_providers(
- package: Chef::Provider::Package::Homebrew,
- user: Chef::Provider::User::Dscl,
- group: Chef::Provider::Group::Dscl
- )
- end
-
- on_platform %w(mswin mingw32 windows), platform_family: "windows", platform_version: "10.9.2" do
- expect_providers(
- env: Chef::Provider::Env::Windows,
- user: Chef::Provider::User::Windows,
+ PROVIDERS =
+ {
+ bash: Chef::Provider::Script,
+ breakpoint: Chef::Provider::Breakpoint,
+ chef_gem: Chef::Provider::Package::Rubygems,
+ cookbook_file: Chef::Provider::CookbookFile,
+ csh: Chef::Provider::Script,
+ deploy: Chef::Provider::Deploy::Timestamped,
+ deploy_revision: Chef::Provider::Deploy::Revision,
+ directory: Chef::Provider::Directory,
+ easy_install_package: Chef::Provider::Package::EasyInstall,
+ erl_call: Chef::Provider::ErlCall,
+ execute: Chef::Provider::Execute,
+ file: Chef::Provider::File,
+ gem_package: Chef::Provider::Package::Rubygems,
+ git: Chef::Provider::Git,
+ group: Chef::Provider::Group::Gpasswd,
+ homebrew_package: Chef::Provider::Package::Homebrew,
+ http_request: Chef::Provider::HttpRequest,
+ ifconfig: Chef::Provider::Ifconfig,
+ link: Chef::Provider::Link,
+ log: Chef::Provider::Log::ChefLog,
+ macports_package: Chef::Provider::Package::Macports,
+ mdadm: Chef::Provider::Mdadm,
+ mount: Chef::Provider::Mount::Mount,
+ perl: Chef::Provider::Script,
+ portage_package: Chef::Provider::Package::Portage,
+ python: Chef::Provider::Script,
+ remote_directory: Chef::Provider::RemoteDirectory,
+ route: Chef::Provider::Route,
+ rpm_package: Chef::Provider::Package::Rpm,
+ ruby: Chef::Provider::Script,
+ ruby_block: Chef::Provider::RubyBlock,
+ script: Chef::Provider::Script,
+ subversion: Chef::Provider::Subversion,
+ template: Chef::Provider::Template,
+ timestamped_deploy: Chef::Provider::Deploy::Timestamped,
+ user: Chef::Provider::User::Useradd,
+ whyrun_safe_ruby_block: Chef::Provider::WhyrunSafeRubyBlock,
+
+ # We want to check that these are unsupported:
+ apt_package: nil,
+ bff_package: nil,
+ dsc_script: nil,
+ dpkg_package: nil,
+ ips_package: nil,
+ pacman_package: nil,
+ paludis_package: nil,
+ rpm_package: nil,
+ smartos_package: nil,
+ solaris_package: nil,
+ yum_package: nil,
+ windows_package: nil,
+ windows_service: nil,
+
+ "linux" => {
+ apt_package: Chef::Provider::Package::Apt,
+ dpkg_package: Chef::Provider::Package::Dpkg,
+ pacman_package: Chef::Provider::Package::Pacman,
+ paludis_package: Chef::Provider::Package::Paludis,
+ rpm_package: Chef::Provider::Package::Rpm,
+ yum_package: Chef::Provider::Package::Yum,
+
+ "debian" => {
+ ifconfig: Chef::Provider::Ifconfig::Debian,
+ package: Chef::Provider::Package::Apt,
+# service: Chef::Provider::Service::Debian,
+
+ "debian" => {
+ "7.0" => {
+ },
+ "6.0" => {
+ ifconfig: Chef::Provider::Ifconfig,
+# service: Chef::Provider::Service::Insserv,
+ },
+ "5.0" => {
+ ifconfig: Chef::Provider::Ifconfig,
+ },
+ },
+ "gcel" => {
+ "3.1.4" => {
+ ifconfig: Chef::Provider::Ifconfig,
+ },
+ },
+ "linaro" => {
+ "3.1.4" => {
+ ifconfig: Chef::Provider::Ifconfig,
+ },
+ },
+ "linuxmint" => {
+ "3.1.4" => {
+ ifconfig: Chef::Provider::Ifconfig,
+# service: Chef::Provider::Service::Upstart,
+ },
+ },
+ "raspbian" => {
+ "3.1.4" => {
+ ifconfig: Chef::Provider::Ifconfig,
+ },
+ },
+ "ubuntu" => {
+ "11.10" => {
+ },
+ "10.04" => {
+ ifconfig: Chef::Provider::Ifconfig,
+ },
+ },
+ },
+
+ "arch" => {
+ package: Chef::Provider::Package::Pacman,
+
+ "arch" => {
+ "3.1.4" => {
+ }
+ },
+ },
+
+ "freebsd" => {
+ group: Chef::Provider::Group::Pw,
+ user: Chef::Provider::User::Pw,
+
+ "freebsd" => {
+ "3.1.4" => {
+ },
+ },
+ },
+ "suse" => {
+ group: Chef::Provider::Group::Gpasswd,
+ "suse" => {
+ "12.0" => {
+ },
+ %w(11.1 11.2 11.3) => {
+ group: Chef::Provider::Group::Suse,
+ },
+ },
+ "opensuse" => {
+# service: Chef::Provider::Service::Redhat,
+ package: Chef::Provider::Package::Zypper,
+ group: Chef::Provider::Group::Usermod,
+ "12.3" => {
+ },
+ "12.2" => {
+ group: Chef::Provider::Group::Suse,
+ },
+ },
+ },
+
+ "gentoo" => {
+ package: Chef::Provider::Package::Portage,
+ portage_package: Chef::Provider::Package::Portage,
+# service: Chef::Provider::Service::Gentoo,
+
+ "gentoo" => {
+ "3.1.4" => {
+ },
+ },
+ },
+
+ "rhel" => {
+# service: Chef::Provider::Service::Systemd,
+ package: Chef::Provider::Package::Yum,
+ ifconfig: Chef::Provider::Ifconfig::Redhat,
+
+ %w(amazon xcp xenserver ibm_powerkvm cloudlinux parallels) => {
+ "3.1.4" => {
+# service: Chef::Provider::Service::Redhat,
+ },
+ },
+ %w(redhat centos scientific oracle) => {
+ "7.0" => {
+ },
+ "6.0" => {
+# service: Chef::Provider::Service::Redhat,
+ },
+ },
+ "fedora" => {
+ "15.0" => {
+ },
+ "14.0" => {
+# service: Chef::Provider::Service::Redhat,
+ },
+ },
+ },
+
+ },
+
+ "darwin" => {
+ %w(mac_os_x mac_os_x_server) => {
+ group: Chef::Provider::Group::Dscl,
+ package: Chef::Provider::Package::Homebrew,
+ user: Chef::Provider::User::Dscl,
+
+ "mac_os_x" => {
+ "10.9.2" => {
+ },
+ },
+ },
+ },
+
+ "windows" => {
+ batch: Chef::Provider::Batch,
+ dsc_script: Chef::Provider::DscScript,
+ env: Chef::Provider::Env::Windows,
group: Chef::Provider::Group::Windows,
mount: Chef::Provider::Mount::Windows,
- batch: Chef::Provider::Batch,
package: Chef::Provider::Package::Windows,
+ powershell_script: Chef::Provider::PowershellScript,
service: Chef::Provider::Service::Windows,
- dsc_script: Chef::Provider::DscScript,
+ user: Chef::Provider::User::Windows,
windows_package: Chef::Provider::Package::Windows,
windows_service: Chef::Provider::Service::Windows,
- powershell_script: Chef::Provider::PowershellScript
- )
- end
-
- on_platform "aix", platform_version: "5.6" do
- expect_providers(
- cron: Chef::Provider::Cron::Aix,
- bff_package: Chef::Provider::Package::Aix
- )
- end
- on_platform "netbsd", platform_version: "10.0-RELEASE" do
- expect_providers(
- group: Chef::Provider::Group::Groupmod
- )
- end
+ "windows" => {
+ %w(mswin mingw32 windows) => {
+ "10.9.2" => {
+ },
+ },
+ },
+ },
- on_platform "openbsd", platform_version: "10.0-RELEASE" do
- expect_providers(
+ "aix" => {
+ bff_package: Chef::Provider::Package::Aix,
+ cron: Chef::Provider::Cron::Aix,
+ group: Chef::Provider::Group::Aix,
+ ifconfig: Chef::Provider::Ifconfig::Aix,
+ mount: Chef::Provider::Mount::Aix,
+ package: Chef::Provider::Package::Aix,
+ rpm_package: Chef::Provider::Package::Rpm,
+ user: Chef::Provider::User::Aix,
+# service: Chef::Provider::Service::Aix,
+
+ "aix" => {
+ "aix" => {
+ "5.6" => {
+ },
+ },
+ },
+ },
+
+ "hpux" => {
+ "hpux" => {
+ "hpux" => {
+ "3.1.4" => {
+ group: Chef::Provider::Group::Usermod
+ }
+ }
+ }
+ },
+
+ "netbsd" => {
+ "netbsd" => {
+ "netbsd" => {
+ "3.1.4" => {
+ group: Chef::Provider::Group::Groupmod,
+ },
+ },
+ },
+ },
+
+ "openbsd" => {
group: Chef::Provider::Group::Usermod,
- package: Chef::Provider::Package::Openbsd
- )
- end
+ package: Chef::Provider::Package::Openbsd,
- on_platform "solaris2", platform_version: "5.9" do
- expect_providers(
- package: Chef::Provider::Package::Solaris,
- solaris_package: Chef::Provider::Package::Solaris
- )
- end
-
- on_platform "solaris2", platform_version: "5.11" do
- expect_providers(
- package: Chef::Provider::Package::Ips,
- ips_package: Chef::Provider::Package::Ips
- )
- end
+ "openbsd" => {
+ "openbsd" => {
+ "3.1.4" => {
+ },
+ },
+ },
+ },
- on_platform %w(openindiana opensolaris), os: "solaris2" do
- expect_providers(
+ "solaris2" => {
+ group: Chef::Provider::Group::Usermod,
+ ips_package: Chef::Provider::Package::Ips,
package: Chef::Provider::Package::Ips,
- ips_package: Chef::Provider::Package::Ips
- )
- end
-
- on_platform "suse", platform_version: %w(11.1 11.2 11.3) do
- expect_providers(
- group: Chef::Provider::Group::Suse
- # service is now handled by direct support? checking
- # service: Chef::Provider::Service::Redhat
- )
- end
-
- on_platform "suse", platform_version: "12.0" do
- expect_providers(
- group: Chef::Provider::Group::Gpasswd
- # service is now handled by direct support? checking
- # service: Chef::Provider::Service::Systemd
- )
- end
-
- on_platform "gentoo", os: "linux" do
- expect_providers(
- package: Chef::Provider::Package::Portage,
- portage_package: Chef::Provider::Package::Portage
- )
- end
-
- on_platform "smartos", os: "solaris2" do
- expect_providers(
- package: Chef::Provider::Package::SmartOS,
- smartos_package: Chef::Provider::Package::SmartOS
- )
- end
-
- describe "resolving static providers" do
- on_platform "ubuntu", os: "linux", platform_family: "debian", platform_version: "14.04" do
- expect_providers(
- apt_package: Chef::Provider::Package::Apt,
- bash: Chef::Provider::Script,
- breakpoint: Chef::Provider::Breakpoint,
- chef_gem: Chef::Provider::Package::Rubygems,
- cookbook_file: Chef::Provider::CookbookFile,
- csh: Chef::Provider::Script,
- deploy: Chef::Provider::Deploy::Timestamped,
- deploy_revision: Chef::Provider::Deploy::Revision,
- directory: Chef::Provider::Directory,
- dpkg_package: Chef::Provider::Package::Dpkg,
- easy_install_package: Chef::Provider::Package::EasyInstall,
- erl_call: Chef::Provider::ErlCall,
- execute: Chef::Provider::Execute,
- file: Chef::Provider::File,
- gem_package: Chef::Provider::Package::Rubygems,
- git: Chef::Provider::Git,
- homebrew_package: Chef::Provider::Package::Homebrew,
- http_request: Chef::Provider::HttpRequest,
- link: Chef::Provider::Link,
- log: Chef::Provider::Log::ChefLog,
- macports_package: Chef::Provider::Package::Macports,
- mdadm: Chef::Provider::Mdadm,
- pacman_package: Chef::Provider::Package::Pacman,
- paludis_package: Chef::Provider::Package::Paludis,
- perl: Chef::Provider::Script,
- portage_package: Chef::Provider::Package::Portage,
- python: Chef::Provider::Script,
- remote_directory: Chef::Provider::RemoteDirectory,
- route: Chef::Provider::Route,
- rpm_package: Chef::Provider::Package::Rpm,
- ruby: Chef::Provider::Script,
- ruby_block: Chef::Provider::RubyBlock,
- script: Chef::Provider::Script,
- subversion: Chef::Provider::Subversion,
- template: Chef::Provider::Template,
- timestamped_deploy: Chef::Provider::Deploy::Timestamped,
- whyrun_safe_ruby_block: Chef::Provider::WhyrunSafeRubyBlock,
- yum_package: Chef::Provider::Package::Yum,
- # We want to check that these are unsupported:
- bff_package: nil,
- dsc_script: nil,
- ips_package: nil,
- smartos_package: nil,
- solaris_package: nil,
- windows_package: nil,
- windows_service: nil
- )
+ mount: Chef::Provider::Mount::Solaris,
+ solaris_package: Chef::Provider::Package::Solaris,
+
+ "smartos" => {
+ smartos_package: Chef::Provider::Package::SmartOS,
+ package: Chef::Provider::Package::SmartOS,
+
+ "smartos" => {
+ "3.1.4" => {
+ },
+ },
+ },
+
+ "solaris2" => {
+ "nexentacore" => {
+ "3.1.4" => {
+ package: Chef::Provider::Package::Solaris,
+ },
+ },
+ "omnios" => {
+ "3.1.4" => {
+ user: Chef::Provider::User::Solaris,
+ }
+ },
+ "openindiana" => {
+ "3.1.4" => {
+ },
+ },
+ "opensolaris" => {
+ "3.1.4" => {
+ },
+ },
+ "solaris2" => {
+ user: Chef::Provider::User::Solaris,
+ "5.11" => {
+ },
+ "5.9" => {
+ package: Chef::Provider::Package::Solaris,
+ },
+ },
+ },
+
+ },
+
+ "solaris" => {
+ "solaris" => {
+ "solaris" => {
+ "3.1.4" => {
+ },
+ },
+ },
+ },
+
+ "exherbo" => {
+ "exherbo" => {
+ "exherbo" => {
+ "3.1.4" => {
+ package: Chef::Provider::Package::Paludis
+ }
+ }
+ }
+ }
+ }
+
+ def self.create_provider_tests(providers, test, expected, filter)
+ expected = expected.merge(providers.select { |key, value| key.is_a?(Symbol) })
+ providers.each do |key, value|
+ if !key.is_a?(Symbol)
+ next_test = test.merge({ filter => key })
+ next_filter =
+ case filter
+ when :os
+ :platform_family
+ when :platform_family
+ :platform
+ when :platform
+ :platform_version
+ when :platform_version
+ nil
+ else
+ raise "Hash too deep; only os, platform_family, platform and platform_version supported"
+ end
+ create_provider_tests(value, next_test, expected, next_filter)
+ end
+ end
+ # If there is no filter, we're as deep as we need to go
+ if !filter
+ on_platform test.delete(:platform), test do
+ expect_providers(expected)
+ end
end
end
-end
-#end
+ create_provider_tests(PROVIDERS, {}, {}, :os)
+end