summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-03-19 21:29:08 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-03-19 21:29:08 +0000
commit60ea7d2a9df65f3c2ed492ec4447420c5e5151fe (patch)
treede99ac27de31df3cadc4b721406b579404106d9c /test
parent3d17685f9954b584cf84a6fe224b2513007108f0 (diff)
downloadpuppet-60ea7d2a9df65f3c2ed492ec4447420c5e5151fe.tar.gz
puppet-60ea7d2a9df65f3c2ed492ec4447420c5e5151fe.tar.xz
puppet-60ea7d2a9df65f3c2ed492ec4447420c5e5151fe.zip
Fixing #432 - you can now manage home dirs with users. You cannot yet purge home directories, because there is still controversy over how that should be done. Also, allowdupe is now handled like a feature, which is, um, better.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2328 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'test')
-rwxr-xr-xtest/ral/manager/provider.rb11
-rwxr-xr-xtest/ral/providers/user/useradd.rb179
-rwxr-xr-xtest/ral/types/user.rb25
3 files changed, 214 insertions, 1 deletions
diff --git a/test/ral/manager/provider.rb b/test/ral/manager/provider.rb
index a314506c5..3b727a4c5 100755
--- a/test/ral/manager/provider.rb
+++ b/test/ral/manager/provider.rb
@@ -138,6 +138,9 @@ class TestProviderFeatures < Test::Unit::TestCase
end
def test_has_feature
+ # Define a new feature that has no methods
+ @type.feature(:nomeths, "desc")
+
# Define a provider with nothing
provider = @type.provide(:nothing) {}
@@ -163,8 +166,14 @@ class TestProviderFeatures < Test::Unit::TestCase
has_features :alpha
end
+ # And a provider that declares it has our methodless feature.
+ @type.provide(:none) do
+ has_features :nomeths
+ end
+
should = {:nothing => [], :both => [:numeric, :alpha],
- :letters => [:alpha], :numbers => [:numeric]}
+ :letters => [:alpha], :numbers => [:numeric],
+ :none => [:nomeths]}
should.each do |name, features|
provider = @type.provider(name)
diff --git a/test/ral/providers/user/useradd.rb b/test/ral/providers/user/useradd.rb
new file mode 100755
index 000000000..1ababecb7
--- /dev/null
+++ b/test/ral/providers/user/useradd.rb
@@ -0,0 +1,179 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../../lib/puppettest'
+
+require 'mocha'
+
+class UserAddProviderTest < PuppetTest::TestCase
+ confine "useradd user provider missing" =>
+ Puppet::Type.type(:user).provider(:useradd).suitable?
+
+ def setup
+ super
+ @type = Puppet::Type.type(:user)
+ @provider = Puppet::Type.type(:user).provider(:useradd)
+ @home = tempfile
+ @vals = {:name => 'faff',
+ :provider => :useradd,
+ :ensure => :present,
+ :uid => 5000,
+ :gid => 5000,
+ :home => @home,
+ :comment => "yayness",
+ :groups => %w{one two}
+ }
+ end
+
+ def setup_user
+ @user = @type.create(@vals)
+
+ @vals.each do |name, val|
+ next unless @user.class.validproperty?(name)
+ @user.is = [name, :absent]
+ end
+ @user
+ end
+
+ def test_features
+ [:manages_homedir].each do |feature|
+ assert(@provider.feature?(feature),
+ "useradd provider is missing %s" % feature)
+ end
+ end
+
+ def test_create
+ user = setup_user
+
+ @vals.each do |name, val|
+ next unless user.class.validproperty?(name)
+ user.is = [name, :absent]
+ end
+
+ user.expects(:allowdupe?).returns(false)
+ user.expects(:managehome?).returns(false)
+
+ user.provider.expects(:execute).with do |params|
+ command = params.shift
+ assert_equal(@provider.command(:add), command,
+ "Got incorrect command")
+
+ if %w{Fedora RedHat}.include?(Facter.value(:operatingsystem))
+ assert(params.include?("-M"),
+ "Did not disable homedir creation on red hat")
+ params.delete("-M")
+ end
+
+ options = {}
+ while params.length > 0
+ options[params.shift] = params.shift
+ end
+
+ @vals[:groups] = @vals[:groups].join(",")
+
+ flags = {:home => "-d", :groups => "-G", :gid => "-g",
+ :uid => "-u", :comment => "-c"}
+
+ flags.each do |param, flag|
+ assert_equal(@vals[param], options[flag],
+ "Got incorrect value for %s" % param)
+ end
+
+ true
+ end
+
+ user.provider.create
+ end
+
+ # Make sure we add the right flags when managing home
+ def test_managehome
+ @vals[:managehome] = true
+ setup_user
+
+ assert(@user.provider.respond_to?(:manages_homedir?),
+ "provider did not get managehome test set")
+
+ assert(@user.managehome?, "provider did not get managehome")
+
+ # First run
+ @user.expects(:managehome?).returns(true)
+
+ @user.provider.expects(:execute).with do |params|
+ assert_equal(params[0], @provider.command(:add),
+ "useradd was not called")
+ assert(params.include?("-m"),
+ "Did not add -m when managehome was in affect")
+
+ true
+ end
+
+ @user.provider.create
+ @user.class.clear
+
+ # Start again, this time with manages_home off
+ @vals[:managehome] = false
+ setup_user
+
+ # First run
+ @user.expects(:managehome?).returns(false)
+
+ @user.provider.expects(:execute).with do |params|
+ assert_equal(params[0], @provider.command(:add),
+ "useradd was not called")
+ if %w{Fedora RedHat}.include?(Facter.value(:operatingsystem))
+ assert(params.include?("-M"),
+ "Did not add -M on Red Hat")
+ end
+ assert(! params.include?("-m"),
+ "Added -m when managehome was disabled")
+
+ true
+ end
+
+ @user.provider.create
+ end
+
+ def test_allowdupe
+ @vals[:allowdupe] = true
+ setup_user
+
+ assert(@user.provider.respond_to?(:manages_homedir?),
+ "provider did not get allowdupe test set")
+
+ assert(@user.allowdupe?, "provider did not get allowdupe")
+
+ # First run
+ @user.expects(:allowdupe?).returns(true)
+
+ @user.provider.expects(:execute).with do |params|
+ assert_equal(params[0], @provider.command(:add),
+ "useradd was not called")
+ assert(params.include?("-o"),
+ "Did not add -o when allowdupe was in affect")
+
+ true
+ end
+
+ @user.provider.create
+ @user.class.clear
+
+ # Start again, this time with manages_home off
+ @vals[:allowdupe] = false
+ setup_user
+
+ # First run
+ @user.expects(:allowdupe?).returns(false)
+
+ @user.provider.expects(:execute).with do |params|
+ assert_equal(params[0], @provider.command(:add),
+ "useradd was not called")
+ assert(! params.include?("-o"),
+ "Added -o when allowdupe was disabled")
+
+ true
+ end
+
+ @user.provider.create
+ end
+end
+
+# $Id$
diff --git a/test/ral/types/user.rb b/test/ral/types/user.rb
index 8af6b5d48..be1dd6f78 100755
--- a/test/ral/types/user.rb
+++ b/test/ral/types/user.rb
@@ -463,6 +463,31 @@ class TestUser < Test::Unit::TestCase
assert(user.send(:property, :groups).insync?,
"Groups state considered out of sync with no :should value")
end
+
+ # Make sure the 'managehome' param can only be set when the provider
+ # has that feature. Uses a patch from #432.
+ def test_managehome
+ user = Puppet::Type.type(:user).create(:name => "yaytest", :check => :all)
+
+ prov = user.provider
+
+ home = false
+ prov.class.meta_def(:manages_homedir?) { home }
+
+ assert_nothing_raised("failed on false managehome") do
+ user[:managehome] = false
+ end
+
+ assert_raise(ArgumentError, "did not fail when managehome? is false") do
+ user[:managehome] = true
+ end
+
+ home = true
+ assert(prov.class.manages_homedir?, "provider did not enable homedir")
+ assert_nothing_raised("failed when managehome is true") do
+ user[:managehome] = true
+ end
+ end
end
# $Id$