[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, master, updated. debian/0.24.6-1-356-g5718585
James Turnbull
james at lovedthanlost.net
Fri Jan 23 14:21:08 UTC 2009
The following commit has been merged in the master branch:
commit 63ad84587892e9cab851cf516f7a381c5ea51f90
Author: Luke Kanies <luke at madstop.com>
Date: Tue Sep 30 23:19:38 2008 -0500
Refactoring and adding tests to the file group property.
Drastically simplified the class, removing a lot of obsolete
code and adding tests for nearly the whole class.
Signed-off-by: Luke Kanies <luke at madstop.com>
diff --git a/lib/puppet/type/file/group.rb b/lib/puppet/type/file/group.rb
index cc482ff..75beb53 100755
--- a/lib/puppet/type/file/group.rb
+++ b/lib/puppet/type/file/group.rb
@@ -1,6 +1,10 @@
+require 'puppet/util/posix'
+
# Manage file group ownership.
module Puppet
Puppet.type(:file).newproperty(:group) do
+ include Puppet::Util::POSIX
+
require 'etc'
desc "Which group should own the file. Argument can be either group
name or group ID."
@@ -43,31 +47,7 @@ module Puppet
end
def retrieve
- if self.should
- @should = @should.collect do |val|
- unless val.is_a?(Integer)
- if tmp = validgroup?(val)
- val = tmp
- else
- raise "Could not find group %s" % val
- end
- else
- val
- end
- end
- end
- stat = @resource.stat(false)
-
- unless stat
- return :absent
- end
-
- # Set our method appropriately, depending on links.
- if stat.ftype == "link" and @resource[:links] != :follow
- @method = :lchown
- else
- @method = :chown
- end
+ return :absent unless stat = resource.stat(false)
currentvalue = stat.gid
@@ -84,12 +64,8 @@ module Puppet
# Determine if the group is valid, and if so, return the GID
def validgroup?(value)
- if value =~ /^\d+$/
- value = value.to_i
- end
-
- if gid = Puppet::Util.gid(value)
- return gid
+ if number = gid(value)
+ return number
else
return false
end
@@ -99,32 +75,28 @@ module Puppet
# we'll just let it fail, but we should probably set things up so
# that users get warned if they try to change to an unacceptable group.
def sync
- unless @resource.stat(false)
- stat = @resource.stat(true)
- currentvalue = self.retrieve
-
- unless stat
- self.debug "File '%s' does not exist; cannot chgrp" %
- @resource[:path]
- return nil
- end
+ # Set our method appropriately, depending on links.
+ if resource[:links] == :manage
+ method = :lchown
+ else
+ method = :chown
end
gid = nil
- unless gid = Puppet::Util.gid(self.should)
- raise Puppet::Error, "Could not find group %s" % self.should
+ @should.each do |group|
+ break if gid = validgroup?(group)
end
+ raise Puppet::Error, "Could not find group(s) %s" % @should.join(",") unless gid
+
begin
# set owner to nil so it's ignored
- File.send(@method,nil,gid, at resource[:path])
+ File.send(method, nil, gid, resource[:path])
rescue => detail
- error = Puppet::Error.new( "failed to chgrp %s to %s: %s" %
- [@resource[:path], self.should, detail.message])
+ error = Puppet::Error.new( "failed to chgrp %s to %s: %s" % [resource[:path], gid, detail.message])
raise error
end
return :file_changed
end
end
end
-
diff --git a/spec/unit/type/file/group.rb b/spec/unit/type/file/group.rb
new file mode 100755
index 0000000..2b47c75
--- /dev/null
+++ b/spec/unit/type/file/group.rb
@@ -0,0 +1,87 @@
+#!/usr/bin/env ruby
+
+Dir.chdir(File.dirname(__FILE__)) { (s = lambda { |f| File.exist?(f) ? require(f) : Dir.chdir("..") { s.call(f) } }).call("spec/spec_helper.rb") }
+
+property = Puppet::Type.type(:file).attrclass(:group)
+
+describe property do
+ before do
+ @resource = mock 'resource'
+ @resource.stubs(:[]).returns "foo"
+ @resource.stubs(:[]).with(:path).returns "/my/file"
+ @group = property.new :resource => @resource
+ end
+
+ it "should have a method for testing whether a group is valid" do
+ @group.must respond_to(:validgroup?)
+ end
+
+ it "should return the found gid if a group is valid" do
+ @group.expects(:gid).with("foo").returns 500
+ @group.validgroup?("foo").should == 500
+ end
+
+ it "should return false if a group is not valid" do
+ @group.expects(:gid).with("foo").returns nil
+ @group.validgroup?("foo").should be_false
+ end
+
+ describe "when retrieving the current value" do
+ it "should return :absent if the file cannot stat" do
+ @resource.expects(:stat).returns nil
+
+ @group.retrieve.should == :absent
+ end
+
+ it "should get the gid from the stat instance from the file" do
+ stat = stub 'stat', :ftype => "foo"
+ @resource.expects(:stat).returns stat
+ stat.expects(:gid).returns 500
+
+ @group.retrieve.should == 500
+ end
+
+ it "should warn and return :silly if the found value is higher than the maximum uid value" do
+ Puppet.settings.expects(:value).with(:maximum_uid).returns 500
+
+ stat = stub 'stat', :ftype => "foo"
+ @resource.expects(:stat).returns stat
+ stat.expects(:gid).returns 1000
+
+ @group.expects(:warning)
+ @group.retrieve.should == :silly
+ end
+ end
+
+ describe "when changing the group" do
+ before do
+ @group.should = %w{one}
+ @group.stubs(:gid).returns 500
+ end
+
+ it "should chown the file if :links is set to :follow" do
+ @resource.expects(:[]).with(:links).returns :follow
+ File.expects(:chown)
+
+ @group.sync
+ end
+
+ it "should lchown the file if :links is set to :manage" do
+ @resource.expects(:[]).with(:links).returns :manage
+ File.expects(:lchown)
+
+ @group.sync
+ end
+
+ it "should use the first valid group in its 'should' list" do
+ @group.should = %w{one two three}
+ @group.expects(:validgroup?).with("one").returns nil
+ @group.expects(:validgroup?).with("two").returns 500
+ @group.expects(:validgroup?).with("three").never
+
+ File.expects(:chown).with(nil, 500, "/my/file")
+
+ @group.sync
+ end
+ end
+end
--
Puppet packaging for Debian
More information about the Pkg-puppet-devel
mailing list