diff options
-rw-r--r-- | lib/puppet/file_serving/metadata.rb | 10 | ||||
-rwxr-xr-x | spec/unit/file_serving/metadata.rb | 46 |
2 files changed, 34 insertions, 22 deletions
diff --git a/lib/puppet/file_serving/metadata.rb b/lib/puppet/file_serving/metadata.rb index 275a090eb..678a4ff42 100644 --- a/lib/puppet/file_serving/metadata.rb +++ b/lib/puppet/file_serving/metadata.rb @@ -22,18 +22,15 @@ class Puppet::FileServing::Metadata < Puppet::FileServing::Base PARAM_ORDER = [:mode, :ftype, :owner, :group] def attributes_with_tabs + raise(ArgumentError, "Cannot manage files of type #{ftype}") unless ['file','directory','link'].include? ftype desc = [] PARAM_ORDER.each { |check| check = :ftype if check == :type desc << send(check) } - case ftype - when "file", "directory"; desc << checksum - when "link"; desc << @destination - else - raise ArgumentError, "Cannot manage files of type %s" % ftype - end + desc << checksum if ftype == 'file' or ftype == 'directory' or (ftype == 'link' and @links == :follow) + desc << @destination if ftype == 'link' and @links != :follow return desc.join("\t") end @@ -66,6 +63,7 @@ class Puppet::FileServing::Metadata < Puppet::FileServing::Base @checksum = ("{%s}" % @checksum_type) + send("%s_file" % @checksum_type, path).to_s when "link" @destination = File.readlink(real_path) + @checksum = ("{%s}" % @checksum_type) + send("%s_file" % @checksum_type, real_path).to_s if @links == :follow else raise ArgumentError, "Cannot manage files of type %s" % stat.ftype end diff --git a/spec/unit/file_serving/metadata.rb b/spec/unit/file_serving/metadata.rb index 38240f7e4..a3078faf7 100755 --- a/spec/unit/file_serving/metadata.rb +++ b/spec/unit/file_serving/metadata.rb @@ -230,23 +230,37 @@ describe Puppet::FileServing::Metadata, " when collecting attributes" do end describe Puppet::FileServing::Metadata, " when pointing to a link" do - it "should store the destination of the link in :destination if links are :manage" do - file = Puppet::FileServing::Metadata.new("/base/path/my/file", :links => :manage) - - File.expects(:lstat).with("/base/path/my/file").returns stub("stat", :uid => 1, :gid => 2, :ftype => "link", :mode => 0755) - File.expects(:readlink).with("/base/path/my/file").returns "/some/other/path" - - file.collect - file.destination.should == "/some/other/path" + describe "when links are managed" do + before do + @file = Puppet::FileServing::Metadata.new("/base/path/my/file", :links => :manage) + File.expects(:lstat).with("/base/path/my/file").returns stub("stat", :uid => 1, :gid => 2, :ftype => "link", :mode => 0755) + File.expects(:readlink).with("/base/path/my/file").returns "/some/other/path" + end + it "should store the destination of the link in :destination if links are :manage" do + @file.collect + @file.destination.should == "/some/other/path" + end + it "should not collect the checksum if links are :manage" do + @file.collect + @file.checksum.should be_nil + end end - it "should not collect the checksum" do - file = Puppet::FileServing::Metadata.new("/base/path/my/file", :links => :manage) - - File.expects(:lstat).with("/base/path/my/file").returns stub("stat", :uid => 1, :gid => 2, :ftype => "link", :mode => 0755) - File.expects(:readlink).with("/base/path/my/file").returns "/some/other/path" - - file.collect - file.checksum.should be_nil + describe "when links are followed" do + before do + @file = Puppet::FileServing::Metadata.new("/base/path/my/file", :links => :follow) + File.expects(:stat).with("/base/path/my/file").returns stub("stat", :uid => 1, :gid => 2, :ftype => "file", :mode => 0755) + File.expects(:readlink).with("/base/path/my/file").never + @checksum = Digest::MD5.hexdigest("some content\n") + @file.stubs(:md5_file).returns(@checksum) + end + it "should not store the destination of the link in :destination if links are :follow" do + @file.collect + @file.destination.should be_nil + end + it "should collect the checksum if links are :follow" do + @file.collect + @file.checksum.should == "{md5}#{@checksum}" + end end end |