summaryrefslogtreecommitdiffstats
path: root/spec/unit/file_serving/metadata.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/unit/file_serving/metadata.rb')
-rwxr-xr-xspec/unit/file_serving/metadata.rb75
1 files changed, 56 insertions, 19 deletions
diff --git a/spec/unit/file_serving/metadata.rb b/spec/unit/file_serving/metadata.rb
index d31dd21f0..9743370c1 100755
--- a/spec/unit/file_serving/metadata.rb
+++ b/spec/unit/file_serving/metadata.rb
@@ -26,8 +26,8 @@ describe Puppet::FileServing::Metadata, " when finding the file to use for setti
@metadata.path = @full
- # Use a symlink because it's easier to test -- no checksumming
- @stat = stub "stat", :uid => 10, :gid => 20, :mode => 0755, :ftype => "symlink"
+ # Use a link because it's easier to test -- no checksumming
+ @stat = stub "stat", :uid => 10, :gid => 20, :mode => 0755, :ftype => "link"
end
it "should accept a base path path to which the file should be relative" do
@@ -55,17 +55,19 @@ end
describe Puppet::FileServing::Metadata, " when collecting attributes" do
before do
@path = "/my/file"
- @stat = stub 'stat', :uid => 10, :gid => 20, :mode => 0755, :ftype => "file"
+ # Use a real file mode, so we can validate the masking is done.
+ @stat = stub 'stat', :uid => 10, :gid => 20, :mode => 33261, :ftype => "file"
File.stubs(:lstat).returns(@stat)
- @filehandle = mock 'filehandle'
- #@filehandle.expects(:read).with(512).returns("some content\n").then.returns(nil)
- File.stubs(:open).with(@path, 'r').yields(@filehandle)
@checksum = Digest::MD5.hexdigest("some content\n")
@metadata = Puppet::FileServing::Metadata.new("file", :path => "/my/file")
- @metadata.expects(:md5_file).returns(@checksum)
+ @metadata.stubs(:md5_file).returns(@checksum)
@metadata.collect_attributes
end
+ it "should be able to produce xmlrpc-style attribute information" do
+ @metadata.should respond_to(:attributes_with_tabs)
+ end
+
# LAK:FIXME This should actually change at some point
it "should set the owner by id" do
@metadata.owner.should be_instance_of(Fixnum)
@@ -84,28 +86,63 @@ describe Puppet::FileServing::Metadata, " when collecting attributes" do
@metadata.group.should == 20
end
- it "should set the mode to a string version of the mode in octal" do
- @metadata.mode.should == "755"
- end
-
- it "should set the mode to the file's current mode" do
- @metadata.mode.should == "755"
+ it "should set the mode to the file's masked mode" do
+ @metadata.mode.should == 0755
end
it "should set the checksum to the file's current checksum" do
@metadata.checksum.should == "{md5}" + @checksum
end
- it "should default to a checksum of type MD5" do
- @metadata.checksum.should == "{md5}" + @checksum
+ describe "when managing files" do
+ it "should default to a checksum of type MD5" do
+ @metadata.checksum.should == "{md5}" + @checksum
+ end
+
+ it "should produce tab-separated mode, type, owner, group, and checksum for xmlrpc" do
+ @metadata.attributes_with_tabs.should == "#{0755.to_s}\tfile\t10\t20\t{md5}#{@checksum}"
+ end
+ end
+
+ describe "when managing directories" do
+ before do
+ @stat.stubs(:ftype).returns("directory")
+ @time = Time.now
+ @metadata.expects(:ctime_file).returns(@time)
+ @metadata.collect_attributes
+ end
+
+ it "should only use checksums of type 'ctime' for directories" do
+ @metadata.checksum.should == "{ctime}" + @time.to_s
+ end
+
+ it "should produce tab-separated mode, type, owner, group, and checksum for xmlrpc" do
+ @metadata.attributes_with_tabs.should == "#{0755.to_s}\tdirectory\t10\t20\t{ctime}#{@time.to_s}"
+ end
+ end
+
+ describe "when managing links" do
+ before do
+ @stat.stubs(:ftype).returns("link")
+ File.expects(:readlink).with("/my/file").returns("/path/to/link")
+ @metadata.collect_attributes
+ end
+
+ it "should read links instead of returning their checksums" do
+ @metadata.destination.should == "/path/to/link"
+ end
+
+ it "should produce tab-separated mode, type, owner, group, and destination for xmlrpc" do
+ @metadata.attributes_with_tabs.should == "#{0755.to_s}\tlink\t10\t20\t/path/to/link"
+ end
end
end
-describe Puppet::FileServing::Metadata, " when pointing to a symlink" do
- it "should store the destination of the symlink in :destination if links are :manage" do
+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("mykey", :links => :manage, :path => "/base/path/my/file")
- File.expects(:lstat).with("/base/path/my/file").returns stub("stat", :uid => 1, :gid => 2, :ftype => "symlink", :mode => 0755)
+ 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_attributes
@@ -115,7 +152,7 @@ describe Puppet::FileServing::Metadata, " when pointing to a symlink" do
it "should not collect the checksum" do
file = Puppet::FileServing::Metadata.new("my/file", :links => :manage, :path => "/base/path/my/file")
- File.expects(:lstat).with("/base/path/my/file").returns stub("stat", :uid => 1, :gid => 2, :ftype => "symlink", :mode => 0755)
+ 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_attributes