diff --git a/spec/unit/provider/user/useradd_spec.rb b/spec/unit/provider/user/useradd_spec.rb index f215f9048..0f552a972 100755 --- a/spec/unit/provider/user/useradd_spec.rb +++ b/spec/unit/provider/user/useradd_spec.rb @@ -1,244 +1,257 @@ #! /usr/bin/env ruby require 'spec_helper' describe Puppet::Type.type(:user).provider(:useradd) do before :each do described_class.stubs(:command).with(:password).returns '/usr/bin/chage' described_class.stubs(:command).with(:add).returns '/usr/sbin/useradd' described_class.stubs(:command).with(:modify).returns '/usr/sbin/usermod' described_class.stubs(:command).with(:delete).returns '/usr/sbin/userdel' end let(:resource) do Puppet::Type.type(:user).new( :name => 'myuser', :managehome => :false, :system => :false, :provider => provider ) end let(:provider) { described_class.new(:name => 'myuser') } describe "#create" do it "should add -o when allowdupe is enabled and the user is being created" do resource[:allowdupe] = true - provider.expects(:execute).with(['/usr/sbin/useradd', '-o', 'myuser']) + if Facter.value(:osfamily) == 'RedHat' + provider.expects(:execute).with(['/usr/sbin/useradd', '-o', '-M', 'myuser']) + else + provider.expects(:execute).with(['/usr/sbin/useradd', '-o', 'myuser']) + end provider.create end describe "on systems that support has_system", :if => described_class.system_users? do it "should add -r when system is enabled" do resource[:system] = :true provider.should be_system_users - provider.expects(:execute).with(['/usr/sbin/useradd', '-r', 'myuser']) + if Facter.value(:osfamily) == 'RedHat' + provider.expects(:execute).with(['/usr/sbin/useradd', '-M', '-r', 'myuser']) + else + provider.expects(:execute).with(['/usr/sbin/useradd', '-r', 'myuser']) + end + provider.create end end describe "on systems that do not support has_system", :unless => described_class.system_users? do it "should not add -r when system is enabled" do resource[:system] = :true provider.should_not be_system_users provider.expects(:execute).with(['/usr/sbin/useradd', 'myuser']) provider.create end end it "should set password age rules" do described_class.has_feature :manages_password_age resource[:password_min_age] = 5 resource[:password_max_age] = 10 - provider.expects(:execute).with(['/usr/sbin/useradd', 'myuser']) + if Facter.value(:osfamily) == 'RedHat' + provider.expects(:execute).with(['/usr/sbin/useradd', '-M', 'myuser']) + else + provider.expects(:execute).with(['/usr/sbin/useradd', 'myuser']) + end provider.expects(:execute).with(['/usr/bin/chage', '-m', 5, '-M', 10, 'myuser']) provider.create end end describe "#uid=" do it "should add -o when allowdupe is enabled and the uid is being modified" do resource[:allowdupe] = :true provider.expects(:execute).with(['/usr/sbin/usermod', '-u', 150, '-o', 'myuser']) provider.uid = 150 end end describe "#check_allow_dup" do it "should check allow dup" do resource.expects(:allowdupe?) provider.check_allow_dup end it "should return an array with a flag if dup is allowed" do resource[:allowdupe] = :true provider.check_allow_dup.must == ["-o"] end it "should return an empty array if no dup is allowed" do resource[:allowdupe] = :false provider.check_allow_dup.must == [] end end describe "#check_system_users" do it "should check system users" do described_class.expects(:system_users?).returns true resource.expects(:system?) provider.check_system_users end it "should return an array with a flag if it's a system user" do described_class.expects(:system_users?).returns true resource[:system] = :true provider.check_system_users.must == ["-r"] end it "should return an empty array if it's not a system user" do described_class.expects(:system_users?).returns true resource[:system] = :false provider.check_system_users.must == [] end it "should return an empty array if system user is not featured" do described_class.expects(:system_users?).returns false resource[:system] = :true provider.check_system_users.must == [] end end describe "#check_manage_home" do it "should check manage home" do resource.expects(:managehome?) provider.check_manage_home end it "should return an array with -m flag if home is managed" do resource[:managehome] = :true provider.check_manage_home.must == ["-m"] end it "should return an array with -r flag if home is managed" do resource[:managehome] = :true resource[:ensure] = :absent provider.deletecmd.must == ['/usr/sbin/userdel', '-r', 'myuser'] end it "should return an array with -M if home is not managed and on Redhat" do Facter.stubs(:value).with(:osfamily).returns("RedHat") resource[:managehome] = :false provider.check_manage_home.must == ["-M"] end it "should return an empty array if home is not managed and not on Redhat" do Facter.stubs(:value).with(:osfamily).returns("not RedHat") resource[:managehome] = :false provider.check_manage_home.must == [] end end describe "#addcmd" do before do resource[:allowdupe] = :true resource[:managehome] = :true resource[:system] = :true end it "should call command with :add" do provider.expects(:command).with(:add) provider.addcmd end it "should add properties" do provider.expects(:add_properties).returns(['-foo_add_properties']) provider.addcmd.should include '-foo_add_properties' end it "should check and add if dup allowed" do provider.expects(:check_allow_dup).returns(['-allow_dup_flag']) provider.addcmd.should include '-allow_dup_flag' end it "should check and add if home is managed" do provider.expects(:check_manage_home).returns(['-manage_home_flag']) provider.addcmd.should include '-manage_home_flag' end it "should add the resource :name" do provider.addcmd.should include 'myuser' end describe "on systems featuring system_users", :if => described_class.system_users? do it "should return an array with -r if system? is true" do resource[:system] = :true provider.addcmd.should include("-r") end it "should return an array without -r if system? is false" do resource[:system] = :false provider.addcmd.should_not include("-r") end end describe "on systems not featuring system_users", :unless => described_class.system_users? do [:false, :true].each do |system| it "should return an array without -r if system? is #{system}" do resource[:system] = system provider.addcmd.should_not include("-r") end end end it "should return an array with full command" do described_class.expects(:system_users?).returns true provider.stubs(:add_properties).returns(["-G", "somegroup"]) resource[:expiry] = "2012-08-18" provider.addcmd.must == ["/usr/sbin/useradd", "-G", "somegroup", "-o", "-m", '-e 2012-08-18', "-r", "myuser"] end it "should return an array without -e if expiry is undefined full command" do described_class.expects(:system_users?).returns true provider.stubs(:add_properties).returns(["-G", "somegroup"]) provider.addcmd.must == ["/usr/sbin/useradd", "-G", "somegroup", "-o", "-m", "-r", "myuser"] end end describe "#passcmd" do before do resource[:allowdupe] = :true resource[:managehome] = :true resource[:system] = :true described_class.has_feature :manages_password_age end it "should call command with :pass" do # command(:password) is only called inside passcmd if # password_min_age or password_max_age is set resource[:password_min_age] = 123 provider.expects(:command).with(:password) provider.passcmd end it "should return nil if neither min nor max is set" do provider.passcmd.must be_nil end it "should return a chage command array with -m and the user name if password_min_age is set" do resource[:password_min_age] = 123 provider.passcmd.must == ['/usr/bin/chage','-m',123,'myuser'] end it "should return a chage command array with -M if password_max_age is set" do resource[:password_max_age] = 999 provider.passcmd.must == ['/usr/bin/chage','-M',999,'myuser'] end it "should return a chage command array with -M -m if both password_min_age and password_max_age are set" do resource[:password_min_age] = 123 resource[:password_max_age] = 999 provider.passcmd.must == ['/usr/bin/chage','-m',123,'-M',999,'myuser'] end end end