From 871848fe20769ca8ebf54632f278cc508b5c26aa Mon Sep 17 00:00:00 2001 From: John Keiser Date: Mon, 1 Jun 2015 18:09:45 -0700 Subject: Create tests for all previous provider_mappings --- lib/chef/platform/provider_mapping.rb | 2 +- lib/chef/provider/group/suse.rb | 2 +- lib/chef/provider/group/usermod.rb | 1 + lib/chef/provider/mount.rb | 2 - lib/chef/provider/mount/mount.rb | 2 + lib/chef/provider/package.rb | 14 +- spec/unit/provider_resolver_spec.rb | 495 ++++++++++++++++++++++++---------- 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 -- cgit v1.2.1