diff options
Diffstat (limited to 'spec')
-rw-r--r-- | spec/functional/resource/group_spec.rb | 8 | ||||
-rw-r--r-- | spec/support/shared/unit/provider/useradd_based_user_provider.rb | 52 | ||||
-rw-r--r-- | spec/unit/provider/user/dscl_spec.rb | 2 | ||||
-rw-r--r-- | spec/unit/provider/user/linux_spec.rb (renamed from spec/unit/provider/user/useradd_spec.rb) | 32 | ||||
-rw-r--r-- | spec/unit/provider/user/pw_spec.rb | 9 | ||||
-rw-r--r-- | spec/unit/provider/user/solaris_spec.rb | 6 | ||||
-rw-r--r-- | spec/unit/provider/user/windows_spec.rb | 6 | ||||
-rw-r--r-- | spec/unit/provider_resolver_spec.rb | 76 | ||||
-rw-r--r-- | spec/unit/resource/user_spec.rb | 2 |
9 files changed, 128 insertions, 65 deletions
diff --git a/spec/functional/resource/group_spec.rb b/spec/functional/resource/group_spec.rb index 89f742a8f9..06a89a67c5 100644 --- a/spec/functional/resource/group_spec.rb +++ b/spec/functional/resource/group_spec.rb @@ -85,8 +85,14 @@ describe Chef::Resource::Group, :requires_root_or_running_windows, :not_supporte end end + def node + node = Chef::Node.new + node.consume_external_attrs(ohai.data, {}) + node + end + def user(username) - usr = Chef::Resource::User.new("#{username}", run_context) + usr = Chef::Resource.resource_for_node(:user, node).new(username, run_context) if ohai[:platform_family] == "windows" usr.password("ComplexPass11!") end diff --git a/spec/support/shared/unit/provider/useradd_based_user_provider.rb b/spec/support/shared/unit/provider/useradd_based_user_provider.rb index 6677a069ea..de851c4ad4 100644 --- a/spec/support/shared/unit/provider/useradd_based_user_provider.rb +++ b/spec/support/shared/unit/provider/useradd_based_user_provider.rb @@ -18,13 +18,18 @@ # limitations under the License. # +# XXX: this used to be shared by solaris and linux classes, but at some +# point became linux-specific. it is now a misnomer to call these 'shared' +# examples and they should either realy get turned into shared examples or +# should be copypasta'd back directly into the linux tests. + shared_examples_for "a useradd-based user provider" do |supported_useradd_options| before(:each) do @node = Chef::Node.new @events = Chef::EventDispatch::Dispatcher.new @run_context = Chef::RunContext.new(@node, {}, @events) - @new_resource = Chef::Resource::User.new("adam", @run_context) + @new_resource = Chef::Resource::User::LinuxUser.new("adam", @run_context) @new_resource.comment "Adam Jacob" @new_resource.uid 1000 @new_resource.gid 1000 @@ -35,7 +40,7 @@ shared_examples_for "a useradd-based user provider" do |supported_useradd_option @new_resource.manage_home false @new_resource.force false @new_resource.non_unique false - @current_resource = Chef::Resource::User.new("adam", @run_context) + @current_resource = Chef::Resource::User::LinuxUser.new("adam", @run_context) @current_resource.comment "Adam Jacob" @current_resource.uid 1000 @current_resource.gid 1000 @@ -46,7 +51,6 @@ shared_examples_for "a useradd-based user provider" do |supported_useradd_option @current_resource.manage_home false @current_resource.force false @current_resource.non_unique false - @current_resource.supports({ :manage_home => false, :non_unique => false }) end describe "when setting option" do @@ -102,9 +106,8 @@ shared_examples_for "a useradd-based user provider" do |supported_useradd_option describe "when the resource has a different home directory and supports home directory management" do before do - allow(@new_resource).to receive(:home).and_return("/wowaweea") - allow(@new_resource).to receive(:supports).and_return({ :manage_home => true, - :non_unique => false }) + @new_resource.home "/wowaweea" + @new_resource.manage_home true end it "should set -m -d /homedir" do @@ -126,32 +129,20 @@ shared_examples_for "a useradd-based user provider" do |supported_useradd_option end end - describe "when the resource supports non_unique ids" do - before do - allow(@new_resource).to receive(:supports).and_return({ :manage_home => false, - :non_unique => true }) - end - - it "should set -m -o" do - expect(provider.universal_options).to eql([ "-o" ]) - end + it "when non_unique is false should not set -m" do + @new_resource.non_unique false + expect(provider.universal_options).to eql([ ]) end - describe "when the resource supports non_unique ids (using real attributes)" do - before do - allow(@new_resource).to receive(:manage_home).and_return(false) - allow(@new_resource).to receive(:non_unique).and_return(true) - end - - it "should set -m -o" do - expect(provider.universal_options).to eql([ "-o" ]) - end + it "when non_unique is true should set -o" do + @new_resource.non_unique true + expect(provider.universal_options).to eql([ "-o" ]) end end describe "when creating a user" do before(:each) do - @current_resource = Chef::Resource::User.new(@new_resource.name, @run_context) + @current_resource = Chef::Resource::User::LinuxUser.new(@new_resource.name, @run_context) @current_resource.username(@new_resource.username) provider.current_resource = @current_resource provider.new_resource.manage_home true @@ -246,15 +237,12 @@ shared_examples_for "a useradd-based user provider" do |supported_useradd_option end it "should run userdel with the new resources user name and -r if manage_home is true" do - @new_resource.supports({ :manage_home => true, - :non_unique => false }) + @new_resource.manage_home true expect(provider).to receive(:shell_out!).with("userdel", "-r", @new_resource.username).and_return(true) provider.remove_user end it "should run userdel with the new resources user name if non_unique is true" do - @new_resource.supports({ :manage_home => false, - :non_unique => true }) expect(provider).to receive(:shell_out!).with("userdel", @new_resource.username).and_return(true) provider.remove_user end @@ -420,9 +408,9 @@ shared_examples_for "a useradd-based user provider" do |supported_useradd_option end end it "should return true if the current home does not exist but a home is specified by the new resource" do - @new_resource = Chef::Resource::User.new("adam", @run_context) - @current_resource = Chef::Resource::User.new("adam", @run_context) - provider = Chef::Provider::User::Useradd.new(@new_resource, @run_context) + @new_resource = Chef::Resource::User::LinuxUser.new("adam", @run_context) + @current_resource = Chef::Resource::User::LinuxUser.new("adam", @run_context) + provider = Chef::Provider::User::Linux.new(@new_resource, @run_context) provider.current_resource = @current_resource @current_resource.home nil @new_resource.home "/home/kitten" diff --git a/spec/unit/provider/user/dscl_spec.rb b/spec/unit/provider/user/dscl_spec.rb index a309033161..dfaaa377d3 100644 --- a/spec/unit/provider/user/dscl_spec.rb +++ b/spec/unit/provider/user/dscl_spec.rb @@ -43,7 +43,7 @@ describe Chef::Provider::User::Dscl do end let(:new_resource) do - r = Chef::Resource::User.new("toor") + r = Chef::Resource::User::DsclUser.new("toor") r.password(password) r.salt(salt) r.iterations(iterations) diff --git a/spec/unit/provider/user/useradd_spec.rb b/spec/unit/provider/user/linux_spec.rb index 7c67449a86..ef12cec234 100644 --- a/spec/unit/provider/user/useradd_spec.rb +++ b/spec/unit/provider/user/linux_spec.rb @@ -21,7 +21,7 @@ require "spec_helper" require "chef/provider/user/useradd" -describe Chef::Provider::User::Useradd do +describe Chef::Provider::User::Linux do subject(:provider) do p = described_class.new(@new_resource, @run_context) @@ -48,4 +48,34 @@ describe Chef::Provider::User::Useradd do provider.manage_user end end + + describe "manage_home behavior" do + before(:each) do + @new_resource = Chef::Resource::User::LinuxUser.new("adam", @run_context) + @current_resource = Chef::Resource::User::LinuxUser.new("adam", @run_context) + end + + it "sets supports manage_home to true" do + Chef::Config[:treat_deprecation_warnings_as_errors] = false + expect( @new_resource.supports[:manage_home] ).to be true + end + + it "sets supports non-unique to true" do + Chef::Config[:treat_deprecation_warnings_as_errors] = false + expect( @new_resource.supports[:non_unique] ).to be true + end + + it "defaults manage_home to true" do + expect( @new_resource.manage_home ).to be true + end + + it "by default manage_home is true and we do not -M" do + expect( provider.useradd_options ).to eql([]) + end + + it "setting manage_home to false includes -M" do + @new_resource.manage_home false + expect( provider.useradd_options ).to eql(["-M"]) + end + end end diff --git a/spec/unit/provider/user/pw_spec.rb b/spec/unit/provider/user/pw_spec.rb index 1e9fda9f7e..624bcfc67d 100644 --- a/spec/unit/provider/user/pw_spec.rb +++ b/spec/unit/provider/user/pw_spec.rb @@ -24,7 +24,7 @@ describe Chef::Provider::User::Pw do @events = Chef::EventDispatch::Dispatcher.new @run_context = Chef::RunContext.new(@node, {}, @events) - @new_resource = Chef::Resource::User.new("adam") + @new_resource = Chef::Resource::User::PwUser.new("adam") @new_resource.comment "Adam Jacob" @new_resource.uid 1000 @new_resource.gid 1000 @@ -34,7 +34,7 @@ describe Chef::Provider::User::Pw do @new_resource.supports :manage_home => true - @current_resource = Chef::Resource::User.new("adam") + @current_resource = Chef::Resource::User::PwUser.new("adam") @current_resource.comment "Adam Jacob" @current_resource.uid 1000 @current_resource.gid 1000 @@ -170,7 +170,6 @@ describe Chef::Provider::User::Pw do end it "logs an appropriate message" do - expect(Chef::Log).to receive(:debug).with("user[adam] no change needed to password") @provider.modify_password end end @@ -194,7 +193,6 @@ describe Chef::Provider::User::Pw do end it "logs an appropriate message" do - expect(Chef::Log).to receive(:debug).with("user[adam] no change needed to password") @provider.modify_password end end @@ -206,7 +204,6 @@ describe Chef::Provider::User::Pw do end it "should log an appropriate message" do - expect(Chef::Log).to receive(:debug).with("user[adam] updating password") @provider.modify_password end @@ -236,7 +233,7 @@ describe Chef::Provider::User::Pw do describe "when loading the current state" do before do - @provider.new_resource = Chef::Resource::User.new("adam") + @provider.new_resource = Chef::Resource::User::PwUser.new("adam") end it "should raise an error if the required binary /usr/sbin/pw doesn't exist" do diff --git a/spec/unit/provider/user/solaris_spec.rb b/spec/unit/provider/user/solaris_spec.rb index af16a6bd80..860c9e41dd 100644 --- a/spec/unit/provider/user/solaris_spec.rb +++ b/spec/unit/provider/user/solaris_spec.rb @@ -44,8 +44,8 @@ describe Chef::Provider::User::Solaris do @events = Chef::EventDispatch::Dispatcher.new @run_context = Chef::RunContext.new(@node, {}, @events) - @new_resource = Chef::Resource::User.new("adam", @run_context) - @current_resource = Chef::Resource::User.new("adam", @run_context) + @new_resource = Chef::Resource::User::SolarisUser.new("adam", @run_context) + @current_resource = Chef::Resource::User::SolarisUser.new("adam", @run_context) @new_resource.password "hocus-pocus" @@ -81,7 +81,7 @@ describe Chef::Provider::User::Solaris do @events = Chef::EventDispatch::Dispatcher.new @run_context = Chef::RunContext.new(@node, {}, @events) - @new_resource = Chef::Resource::User.new("dave") + @new_resource = Chef::Resource::User::SolarisUser.new("dave") @current_resource = @new_resource.dup @provider = Chef::Provider::User::Solaris.new(@new_resource, @run_context) diff --git a/spec/unit/provider/user/windows_spec.rb b/spec/unit/provider/user/windows_spec.rb index 4a62e6ec9d..324b5f503f 100644 --- a/spec/unit/provider/user/windows_spec.rb +++ b/spec/unit/provider/user/windows_spec.rb @@ -30,10 +30,10 @@ end describe Chef::Provider::User::Windows do before(:each) do @node = Chef::Node.new - @new_resource = Chef::Resource::User.new("monkey") + @new_resource = Chef::Resource::User::WindowsUser.new("monkey") @events = Chef::EventDispatch::Dispatcher.new @run_context = Chef::RunContext.new(@node, {}, @events) - @current_resource = Chef::Resource::User.new("monkey") + @current_resource = Chef::Resource::User::WindowsUser.new("monkey") @net_user = double("Chef::Util::Windows::NetUser") allow(Chef::Util::Windows::NetUser).to receive(:new).and_return(@net_user) @@ -89,7 +89,7 @@ describe Chef::Provider::User::Windows do describe "and the attributes do not match" do before do - @current_resource = Chef::Resource::User.new("adam") + @current_resource = Chef::Resource::User::WindowsUser.new("adam") @current_resource.comment "Adam Jacob-foo" @current_resource.uid 1111 @current_resource.gid 1111 diff --git a/spec/unit/provider_resolver_spec.rb b/spec/unit/provider_resolver_spec.rb index f1567ed86e..5ba5ddae03 100644 --- a/spec/unit/provider_resolver_spec.rb +++ b/spec/unit/provider_resolver_spec.rb @@ -480,7 +480,7 @@ describe Chef::ProviderResolver do end end - on_platform %w{freebsd netbsd}, platform_version: "3.1.4" do + on_platform "freebsd", os: "freebsd", platform_version: "10.3" 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) @@ -507,7 +507,41 @@ describe Chef::ProviderResolver do expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd) end - it "foo" do + it "always returns a freebsd provider by default?" do + stub_service_providers + stub_service_configs + expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd) + end + end + + on_platform "netbsd", os: "netbsd", platform_version: "7.0.1" 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) + expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd) + end + + it "returns a Freebsd provider if it finds the /etc/rc.d initscript" do + stub_service_providers + stub_service_configs(:etc_rcd) + expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd) + end + + it "always returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do + # should only care about :usr_local_etc_rcd stub in the service configs + stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd) + stub_service_configs(:usr_local_etc_rcd, :initd, :upstart, :xinetd, :systemd) + expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd) + end + + it "always returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do + # should only care about :etc_rcd stub in the service configs + stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd) + stub_service_configs(:etc_rcd, :initd, :upstart, :xinetd, :systemd) + expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd) + end + + it "always returns a freebsd provider by default?" do stub_service_providers stub_service_configs expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd) @@ -552,7 +586,12 @@ describe Chef::ProviderResolver do subversion: [ Chef::Resource::Subversion, Chef::Provider::Subversion ], template: [ Chef::Resource::Template, Chef::Provider::Template ], timestamped_deploy: [ Chef::Resource::TimestampedDeploy, Chef::Provider::Deploy::Timestamped ], - user: [ Chef::Resource::User, Chef::Provider::User::Useradd ], + aix_user: [ Chef::Resource::User::AixUser, Chef::Provider::User::Aix ], + dscl_user: [ Chef::Resource::User::DsclUser, Chef::Provider::User::Dscl ], + linux_user: [ Chef::Resource::User::LinuxUser, Chef::Provider::User::Linux ], + pw_user: [ Chef::Resource::User::PwUser, Chef::Provider::User::Pw ], + solaris_user: [ Chef::Resource::User::SolarisUser, Chef::Provider::User::Solaris ], + windows_user: [ Chef::Resource::User::WindowsUser, Chef::Provider::User::Windows ], whyrun_safe_ruby_block: [ Chef::Resource::WhyrunSafeRubyBlock, Chef::Provider::WhyrunSafeRubyBlock ], # We want to check that these are unsupported: @@ -634,15 +673,6 @@ describe Chef::ProviderResolver do }, }, - "freebsd" => { - group: [ Chef::Resource::Group, Chef::Provider::Group::Pw ], - user: [ Chef::Resource::User, Chef::Provider::User::Pw ], - - "freebsd" => { - "3.1.4" => { - }, - }, - }, "suse" => { group: [ Chef::Resource::Group, Chef::Provider::Group::Gpasswd ], "suse" => { @@ -704,12 +734,24 @@ describe Chef::ProviderResolver do }, + "freebsd" => { + "freebsd" => { + group: [ Chef::Resource::Group, Chef::Provider::Group::Pw ], + user: [ Chef::Resource::User::PwUser, Chef::Provider::User::Pw ], + + "freebsd" => { + "10.3" => { + }, + }, + }, + }, + "darwin" => { %w{mac_os_x mac_os_x_server} => { group: [ Chef::Resource::Group, Chef::Provider::Group::Dscl ], package: [ Chef::Resource::HomebrewPackage, Chef::Provider::Package::Homebrew ], osx_profile: [ Chef::Resource::OsxProfile, Chef::Provider::OsxProfile], - user: [ Chef::Resource::User, Chef::Provider::User::Dscl ], + user: [ Chef::Resource::User::DsclUser, Chef::Provider::User::Dscl ], "mac_os_x" => { "10.9.2" => { @@ -727,7 +769,7 @@ describe Chef::ProviderResolver do package: [ Chef::Resource::WindowsPackage, Chef::Provider::Package::Windows ], powershell_script: [ Chef::Resource::PowershellScript, Chef::Provider::PowershellScript ], service: [ Chef::Resource::WindowsService, Chef::Provider::Service::Windows ], - user: [ Chef::Resource::User, Chef::Provider::User::Windows ], + user: [ Chef::Resource::User::WindowsUser, Chef::Provider::User::Windows ], windows_package: [ Chef::Resource::WindowsPackage, Chef::Provider::Package::Windows ], windows_service: [ Chef::Resource::WindowsService, Chef::Provider::Service::Windows ], @@ -748,7 +790,7 @@ describe Chef::ProviderResolver do # TODO should be Chef::Resource::BffPackage package: [ Chef::Resource::Package, Chef::Provider::Package::Aix ], rpm_package: [ Chef::Resource::RpmPackage, Chef::Provider::Package::Rpm ], - user: [ Chef::Resource::User, Chef::Provider::User::Aix ], + user: [ Chef::Resource::User::AixUser, Chef::Provider::User::Aix ], # service: [ Chef::Resource::AixService, Chef::Provider::Service::Aix ], "aix" => { @@ -815,7 +857,7 @@ describe Chef::ProviderResolver do }, "omnios" => { "3.1.4" => { - user: [ Chef::Resource::User, Chef::Provider::User::Solaris ], + user: [ Chef::Resource::User::SolarisUser, Chef::Provider::User::Solaris ], }, }, "openindiana" => { @@ -827,7 +869,7 @@ describe Chef::ProviderResolver do }, }, "solaris2" => { - user: [ Chef::Resource::User, Chef::Provider::User::Solaris ], + user: [ Chef::Resource::User::SolarisUser, Chef::Provider::User::Solaris ], "5.11" => { package: [ Chef::Resource::IpsPackage, Chef::Provider::Package::Ips ], }, diff --git a/spec/unit/resource/user_spec.rb b/spec/unit/resource/user_spec.rb index 9648ee1305..138ffb1bfe 100644 --- a/spec/unit/resource/user_spec.rb +++ b/spec/unit/resource/user_spec.rb @@ -29,7 +29,7 @@ describe Chef::Resource::User, "initialize" do end it "should set the resource_name to :user" do - expect(@resource.resource_name).to eql(:user) + expect(@resource.resource_name).to eql(:user_resource_abstract_base_class) end it "should set the username equal to the argument to initialize" do |