We're squashing the following changes into this commit to
1) fix a failing spec
2) add some more behavior-driven tests into the specs
Otherwise, +1
diff --git a/spec/unit/provider/user/user_role_add_spec.rb
b/spec/unit/provider/user/user_role_add_spec.rb
index 9cf6492..f739423 100644
--- a/spec/unit/provider/user/user_role_add_spec.rb
+++ b/spec/unit/provider/user/user_role_add_spec.rb
@@ -115,6 +115,7 @@ describe provider_class do
describe "when allow duplicate is enabled" do
before do
@resource.expects(:allowdupe?).returns true
+ @resource.stubs(:system?)
@provider.stubs(:is_role?).returns(false)
@provider.stubs(:execute)
@provider.expects(:execute).with { |args| args.include?("-o") }
diff --git a/spec/unit/provider/user/useradd_spec.rb
b/spec/unit/provider/user/useradd_spec.rb
index 81ad7d4..fd75c43 100755
--- a/spec/unit/provider/user/useradd_spec.rb
+++ b/spec/unit/provider/user/useradd_spec.rb
@@ -132,11 +132,6 @@ describe provider_class do
@provider.addcmd
end
- it "should check and add if it's a system user" do
- @provider.expects(:check_system_users).returns([])
- @provider.addcmd
- end
-
it "should check and add if home is managed" do
@provider.expects(:check_manage_home).returns([])
@provider.addcmd
@@ -147,6 +142,18 @@ describe provider_class do
@provider.addcmd
end
+ it "should return an array with -r if system? is true" do
+ resource = Puppet::Type.type(:user).new( :name => "bob", :system =>
true)
+
+ provider_class.new( resource ).addcmd.should include("-r")
+ end
+
+ it "should return an array without -r if system? is false" do
+ resource = Puppet::Type.type(:user).new( :name => "bob", :system =>
false)
+
+ provider_class.new( resource ).addcmd.should_not include("-r")
+ end
+
it "should return an array with full command" do
@provider.stubs(:command).with(:add).returns("useradd")
@provider.stubs(:add_properties).returns(["-G", "somegroup"])
On Tue, Mar 8, 2011 at 11:00 PM, James Turnbull <[email protected]>wrote:
> On Red Hat, Ubuntu, Debian and deriatives the -r flag
> allows creation of "system" users with a UID below that
> defined in /etc/login.defs.
>
> This commit adds support for a system parameter and a
> system_users feature which can be used like so:
>
> user { "foo":
> system => true,
> ensure => present,
> }
>
> This will create a user with a lower UID.
>
> The system parameter defaults to false.
>
> Signed-off-by: James Turnbull <[email protected]>
> ---
> lib/puppet/provider/user/useradd.rb | 7 ++++-
> lib/puppet/type/user.rb | 11 ++++++++
> spec/unit/provider/user/useradd_spec.rb | 39
> ++++++++++++++++++++++++++++--
> spec/unit/type/user_spec.rb | 4 +++
> 4 files changed, 57 insertions(+), 4 deletions(-)
>
> diff --git a/lib/puppet/provider/user/useradd.rb
> b/lib/puppet/provider/user/useradd.rb
> index ba406cc..b879717 100644
> --- a/lib/puppet/provider/user/useradd.rb
> +++ b/lib/puppet/provider/user/useradd.rb
> @@ -19,7 +19,7 @@ Puppet::Type.type(:user).provide :useradd, :parent =>
> Puppet::Provider::NameServ
> value !~ /\s/
> end
>
> - has_features :manages_homedir, :allows_duplicates, :manages_expiry
> + has_features :manages_homedir, :allows_duplicates, :manages_expiry,
> :system_users
>
> has_features :manages_passwords, :manages_password_age if
> Puppet.features.libshadow?
>
> @@ -46,6 +46,10 @@ Puppet::Type.type(:user).provide :useradd, :parent =>
> Puppet::Provider::NameServ
> cmd
> end
>
> + def check_system_users
> + @resource.system? ? ["-r"] : []
> + end
> +
> def add_properties
> cmd = []
> Puppet::Type.type(:user).validproperties.each do |property|
> @@ -66,6 +70,7 @@ Puppet::Type.type(:user).provide :useradd, :parent =>
> Puppet::Provider::NameServ
> cmd += check_allow_dup
> cmd += check_manage_home
> cmd += check_manage_expiry
> + cmd += check_system_users
> cmd << @resource[:name]
> end
>
> diff --git a/lib/puppet/type/user.rb b/lib/puppet/type/user.rb
> index e7389a0..dcba181 100755
> --- a/lib/puppet/type/user.rb
> +++ b/lib/puppet/type/user.rb
> @@ -34,6 +34,9 @@ module Puppet
> feature :manages_expiry,
> "The provider can manage the expiry date for a user."
>
> + feature :system_users,
> + "The provider allows you to create system users with lower UIDs."
> +
> newproperty(:ensure, :parent => Puppet::Property::Ensure) do
> newvalue(:present, :event => :user_created) do
> provider.create
> @@ -230,6 +233,14 @@ module Puppet
> defaultto :minimum
> end
>
> + newparam(:system, :boolean => true) do
> + desc "Whether the user is a system user with lower UID."
> +
> + newvalues(:true, :false)
> +
> + defaultto false
> + end
> +
> newparam(:allowdupe, :boolean => true) do
> desc "Whether to allow duplicate UIDs."
>
> diff --git a/spec/unit/provider/user/useradd_spec.rb
> b/spec/unit/provider/user/useradd_spec.rb
> index 9ebba59..81ad7d4 100755
> --- a/spec/unit/provider/user/useradd_spec.rb
> +++ b/spec/unit/provider/user/useradd_spec.rb
> @@ -15,6 +15,7 @@ describe provider_class do
> # #1360
> it "should add -o when allowdupe is enabled and the user is being
> created" do
> @resource.expects(:allowdupe?).returns true
> + @resource.expects(:system?).returns true
> @provider.stubs(:execute)
> @provider.expects(:execute).with { |args| args.include?("-o") }
> @provider.create
> @@ -27,6 +28,14 @@ describe provider_class do
> @provider.uid = 150
> end
>
> + it "should add -r when system is enabled" do
> + @resource.expects(:allowdupe?).returns true
> + @resource.expects(:system?).returns true
> + @provider.stubs(:execute)
> + @provider.expects(:execute).with { |args| args.include?("-r") }
> + @provider.create
> + end
> +
> it "should set password age rules" do
> provider_class.has_feature :manages_password_age
> @resource = Puppet::Type.type(:user).new :name => "myuser",
> :password_min_age => 5, :password_max_age => 10, :provider => :useradd
> @@ -53,6 +62,23 @@ describe provider_class do
> end
> end
>
> + describe "when checking to add system users" do
> + it "should check system users" do
> + @resource.expects(:system?)
> + @provider.check_system_users
> + end
> +
> + it "should return an array with a flag if it's a system user" do
> + @resource.stubs(:system?).returns true
> + @provider.check_system_users.must == ["-r"]
> + end
> +
> + it "should return an empty array if it's not a system user" do
> + @resource.stubs(:system?).returns false
> + @provider.check_system_users.must == []
> + end
> + end
> +
> describe "when checking manage home" do
> it "should check manage home" do
> @resource.expects(:managehome?)
> @@ -88,6 +114,7 @@ describe provider_class do
> before do
> @resource.stubs(:allowdupe?).returns true
> @resource.stubs(:managehome?).returns true
> + @resource.stubs(:system?).returns true
> end
>
> it "should call command with :add" do
> @@ -105,6 +132,11 @@ describe provider_class do
> @provider.addcmd
> end
>
> + it "should check and add if it's a system user" do
> + @provider.expects(:check_system_users).returns([])
> + @provider.addcmd
> + end
> +
> it "should check and add if home is managed" do
> @provider.expects(:check_manage_home).returns([])
> @provider.addcmd
> @@ -120,15 +152,15 @@ describe provider_class do
> @provider.stubs(:add_properties).returns(["-G", "somegroup"])
> @resource.stubs(:[]).with(:name).returns("someuser")
> @resource.stubs(:[]).with(:expiry).returns("somedate")
> - @provider.addcmd.must == ["useradd", "-G", "somegroup", "-o", "-m",
> '-e somedate', "someuser"]
> + @provider.addcmd.must == ["useradd", "-G", "somegroup", "-o", "-m",
> '-e somedate', "-r", "someuser"]
> end
>
> - it "should return an array without -e if expery is undefined full
> command" do
> + it "should return an array without -e if expiry is undefined full
> command" do
> @provider.stubs(:command).with(:add).returns("useradd")
> @provider.stubs(:add_properties).returns(["-G", "somegroup"])
> @resource.stubs(:[]).with(:name).returns("someuser")
> @resource.stubs(:[]).with(:expiry).returns nil
> - @provider.addcmd.must == ["useradd", "-G", "somegroup", "-o", "-m",
> "someuser"]
> + @provider.addcmd.must == ["useradd", "-G", "somegroup", "-o", "-m",
> "-r", "someuser"]
> end
> end
>
> @@ -136,6 +168,7 @@ describe provider_class do
> before do
> @resource.stubs(:allowdupe?).returns true
> @resource.stubs(:managehome?).returns true
> + @resource.stubs(:system?).returns true
> end
>
> it "should call command with :pass" do
> diff --git a/spec/unit/type/user_spec.rb b/spec/unit/type/user_spec.rb
> index 2971344..5a84af4 100755
> --- a/spec/unit/type/user_spec.rb
> +++ b/spec/unit/type/user_spec.rb
> @@ -43,6 +43,10 @@ describe user do
> user.provider_feature(:manages_password_age).should_not be_nil
> end
>
> + it "should have a system_users feature" do
> + user.provider_feature(:system_users).should_not be_nil
> + end
> +
> describe "instances" do
> it "should have a valid provider" do
> user.new(:name => "foo").provider.class.ancestors.should
> be_include(Puppet::Provider)
> --
> 1.7.1
>
> --
> You received this message because you are subscribed to the Google Groups
> "Puppet Developers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/puppet-dev?hl=en.
>
>
--
You received this message because you are subscribed to the Google Groups
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/puppet-dev?hl=en.