diff options
Diffstat (limited to 'spec/unit/type/tidy_spec.rb')
-rwxr-xr-x | spec/unit/type/tidy_spec.rb | 648 |
1 files changed, 324 insertions, 324 deletions
diff --git a/spec/unit/type/tidy_spec.rb b/spec/unit/type/tidy_spec.rb index f39ccb572..11edbfbf3 100755 --- a/spec/unit/type/tidy_spec.rb +++ b/spec/unit/type/tidy_spec.rb @@ -6,419 +6,419 @@ require 'puppet/file_bucket/dipper' tidy = Puppet::Type.type(:tidy) describe tidy do - before do - @basepath = Puppet.features.posix? ? "/what/ever" : "C:/tmp" - Puppet.settings.stubs(:use) - - # for an unknown reason some of these specs fails when run individually - # with a failed expectation on File.lstat in the autoloader. - File.stubs(:lstat) - end - - it "should use :lstat when stating a file" do - resource = tidy.new :path => "/foo/bar", :age => "1d" - stat = mock 'stat' - File.expects(:lstat).with("/foo/bar").returns stat - resource.stat("/foo/bar").should == stat + before do + @basepath = Puppet.features.posix? ? "/what/ever" : "C:/tmp" + Puppet.settings.stubs(:use) + + # for an unknown reason some of these specs fails when run individually + # with a failed expectation on File.lstat in the autoloader. + File.stubs(:lstat) + end + + it "should use :lstat when stating a file" do + resource = tidy.new :path => "/foo/bar", :age => "1d" + stat = mock 'stat' + File.expects(:lstat).with("/foo/bar").returns stat + resource.stat("/foo/bar").should == stat + end + + [:age, :size, :path, :matches, :type, :recurse, :rmdirs].each do |param| + it "should have a #{param} parameter" do + Puppet::Type.type(:tidy).attrclass(param).ancestors.should be_include(Puppet::Parameter) end - [:age, :size, :path, :matches, :type, :recurse, :rmdirs].each do |param| - it "should have a #{param} parameter" do - Puppet::Type.type(:tidy).attrclass(param).ancestors.should be_include(Puppet::Parameter) - end - - it "should have documentation for its #{param} param" do - Puppet::Type.type(:tidy).attrclass(param).doc.should be_instance_of(String) - end + it "should have documentation for its #{param} param" do + Puppet::Type.type(:tidy).attrclass(param).doc.should be_instance_of(String) end + end - describe "when validating parameter values" do - describe "for 'recurse'" do - before do - @tidy = Puppet::Type.type(:tidy).new :path => "/tmp", :age => "100d" - end + describe "when validating parameter values" do + describe "for 'recurse'" do + before do + @tidy = Puppet::Type.type(:tidy).new :path => "/tmp", :age => "100d" + end - it "should allow 'true'" do - lambda { @tidy[:recurse] = true }.should_not raise_error - end + it "should allow 'true'" do + lambda { @tidy[:recurse] = true }.should_not raise_error + end - it "should allow 'false'" do - lambda { @tidy[:recurse] = false }.should_not raise_error - end + it "should allow 'false'" do + lambda { @tidy[:recurse] = false }.should_not raise_error + end - it "should allow integers" do - lambda { @tidy[:recurse] = 10 }.should_not raise_error - end + it "should allow integers" do + lambda { @tidy[:recurse] = 10 }.should_not raise_error + end - it "should allow string representations of integers" do - lambda { @tidy[:recurse] = "10" }.should_not raise_error - end + it "should allow string representations of integers" do + lambda { @tidy[:recurse] = "10" }.should_not raise_error + end - it "should allow 'inf'" do - lambda { @tidy[:recurse] = "inf" }.should_not raise_error - end + it "should allow 'inf'" do + lambda { @tidy[:recurse] = "inf" }.should_not raise_error + end - it "should not allow arbitrary values" do - lambda { @tidy[:recurse] = "whatever" }.should raise_error - end - end + it "should not allow arbitrary values" do + lambda { @tidy[:recurse] = "whatever" }.should raise_error + end + end - describe "for 'matches'" do - before do - @tidy = Puppet::Type.type(:tidy).new :path => "/tmp", :age => "100d" - end - - it "should object if matches is given with recurse is not specified" do - lambda { @tidy[:matches] = '*.doh' }.should raise_error - end - it "should object if matches is given and recurse is 0" do - lambda { @tidy[:recurse] = 0; @tidy[:matches] = '*.doh' }.should raise_error - end - it "should object if matches is given and recurse is false" do - lambda { @tidy[:recurse] = false; @tidy[:matches] = '*.doh' }.should raise_error - end - it "should not object if matches is given and recurse is > 0" do - lambda { @tidy[:recurse] = 1; @tidy[:matches] = '*.doh' }.should_not raise_error - end - it "should not object if matches is given and recurse is true" do - lambda { @tidy[:recurse] = true; @tidy[:matches] = '*.doh' }.should_not raise_error - end - end + describe "for 'matches'" do + before do + @tidy = Puppet::Type.type(:tidy).new :path => "/tmp", :age => "100d" + end + + it "should object if matches is given with recurse is not specified" do + lambda { @tidy[:matches] = '*.doh' }.should raise_error + end + it "should object if matches is given and recurse is 0" do + lambda { @tidy[:recurse] = 0; @tidy[:matches] = '*.doh' }.should raise_error + end + it "should object if matches is given and recurse is false" do + lambda { @tidy[:recurse] = false; @tidy[:matches] = '*.doh' }.should raise_error + end + it "should not object if matches is given and recurse is > 0" do + lambda { @tidy[:recurse] = 1; @tidy[:matches] = '*.doh' }.should_not raise_error + end + it "should not object if matches is given and recurse is true" do + lambda { @tidy[:recurse] = true; @tidy[:matches] = '*.doh' }.should_not raise_error + end end + end - describe "when matching files by age" do - convertors = { - :second => 1, - :minute => 60 - } + describe "when matching files by age" do + convertors = { + :second => 1, + :minute => 60 + } - convertors[:hour] = convertors[:minute] * 60 - convertors[:day] = convertors[:hour] * 24 - convertors[:week] = convertors[:day] * 7 + convertors[:hour] = convertors[:minute] * 60 + convertors[:day] = convertors[:hour] * 24 + convertors[:week] = convertors[:day] * 7 - convertors.each do |unit, multiple| - it "should consider a #{unit} to be #{multiple} seconds" do - @tidy = Puppet::Type.type(:tidy).new :path => @basepath, :age => "5#{unit.to_s[0..0]}" + convertors.each do |unit, multiple| + it "should consider a #{unit} to be #{multiple} seconds" do + @tidy = Puppet::Type.type(:tidy).new :path => @basepath, :age => "5#{unit.to_s[0..0]}" - @tidy[:age].should == 5 * multiple - end - end + @tidy[:age].should == 5 * multiple + end end - - describe "when matching files by size" do - convertors = { - :b => 0, - :kb => 1, - :mb => 2, - :gb => 3 - } - - convertors.each do |unit, multiple| - it "should consider a #{unit} to be 1024^#{multiple} bytes" do - @tidy = Puppet::Type.type(:tidy).new :path => @basepath, :size => "5#{unit}" - - total = 5 - multiple.times { total *= 1024 } - @tidy[:size].should == total - end - end + end + + describe "when matching files by size" do + convertors = { + :b => 0, + :kb => 1, + :mb => 2, + :gb => 3 + } + + convertors.each do |unit, multiple| + it "should consider a #{unit} to be 1024^#{multiple} bytes" do + @tidy = Puppet::Type.type(:tidy).new :path => @basepath, :size => "5#{unit}" + + total = 5 + multiple.times { total *= 1024 } + @tidy[:size].should == total + end end + end - describe "when tidying" do - before do - @tidy = Puppet::Type.type(:tidy).new :path => @basepath - @stat = stub 'stat', :ftype => "directory" - File.stubs(:lstat).with(@basepath).returns @stat - end + describe "when tidying" do + before do + @tidy = Puppet::Type.type(:tidy).new :path => @basepath + @stat = stub 'stat', :ftype => "directory" + File.stubs(:lstat).with(@basepath).returns @stat + end - describe "and generating files" do - it "should set the backup on the file if backup is set on the tidy instance" do - @tidy[:backup] = "whatever" - Puppet::Type.type(:file).expects(:new).with { |args| args[:backup] == "whatever" } + describe "and generating files" do + it "should set the backup on the file if backup is set on the tidy instance" do + @tidy[:backup] = "whatever" + Puppet::Type.type(:file).expects(:new).with { |args| args[:backup] == "whatever" } - @tidy.mkfile(@basepath) - end + @tidy.mkfile(@basepath) + end - it "should set the file's path to the tidy's path" do - Puppet::Type.type(:file).expects(:new).with { |args| args[:path] == @basepath } + it "should set the file's path to the tidy's path" do + Puppet::Type.type(:file).expects(:new).with { |args| args[:path] == @basepath } - @tidy.mkfile(@basepath) - end + @tidy.mkfile(@basepath) + end - it "should configure the file for deletion" do - Puppet::Type.type(:file).expects(:new).with { |args| args[:ensure] == :absent } + it "should configure the file for deletion" do + Puppet::Type.type(:file).expects(:new).with { |args| args[:ensure] == :absent } - @tidy.mkfile(@basepath) - end + @tidy.mkfile(@basepath) + end - it "should force deletion on the file" do - Puppet::Type.type(:file).expects(:new).with { |args| args[:force] == true } + it "should force deletion on the file" do + Puppet::Type.type(:file).expects(:new).with { |args| args[:force] == true } - @tidy.mkfile(@basepath) - end + @tidy.mkfile(@basepath) + end - it "should do nothing if the targeted file does not exist" do - File.expects(:lstat).with(@basepath).raises Errno::ENOENT + it "should do nothing if the targeted file does not exist" do + File.expects(:lstat).with(@basepath).raises Errno::ENOENT - @tidy.generate.should == [] - end - end + @tidy.generate.should == [] + end + end - describe "and recursion is not used" do - it "should generate a file resource if the file should be tidied" do - @tidy.expects(:tidy?).with(@basepath).returns true - file = Puppet::Type.type(:file).new(:path => @basepath+"/eh") - @tidy.expects(:mkfile).with(@basepath).returns file + describe "and recursion is not used" do + it "should generate a file resource if the file should be tidied" do + @tidy.expects(:tidy?).with(@basepath).returns true + file = Puppet::Type.type(:file).new(:path => @basepath+"/eh") + @tidy.expects(:mkfile).with(@basepath).returns file - @tidy.generate.should == [file] - end + @tidy.generate.should == [file] + end - it "should do nothing if the file should not be tidied" do - @tidy.expects(:tidy?).with(@basepath).returns false - @tidy.expects(:mkfile).never + it "should do nothing if the file should not be tidied" do + @tidy.expects(:tidy?).with(@basepath).returns false + @tidy.expects(:mkfile).never - @tidy.generate.should == [] - end - end + @tidy.generate.should == [] + end + end - describe "and recursion is used" do - before do - @tidy[:recurse] = true - Puppet::FileServing::Fileset.any_instance.stubs(:stat).returns mock("stat") - @fileset = Puppet::FileServing::Fileset.new(@basepath) - Puppet::FileServing::Fileset.stubs(:new).returns @fileset - end + describe "and recursion is used" do + before do + @tidy[:recurse] = true + Puppet::FileServing::Fileset.any_instance.stubs(:stat).returns mock("stat") + @fileset = Puppet::FileServing::Fileset.new(@basepath) + Puppet::FileServing::Fileset.stubs(:new).returns @fileset + end - it "should use a Fileset for infinite recursion" do - Puppet::FileServing::Fileset.expects(:new).with(@basepath, :recurse => true).returns @fileset - @fileset.expects(:files).returns %w{. one two} - @tidy.stubs(:tidy?).returns false + it "should use a Fileset for infinite recursion" do + Puppet::FileServing::Fileset.expects(:new).with(@basepath, :recurse => true).returns @fileset + @fileset.expects(:files).returns %w{. one two} + @tidy.stubs(:tidy?).returns false - @tidy.generate - end + @tidy.generate + end - it "should use a Fileset for limited recursion" do - @tidy[:recurse] = 42 - Puppet::FileServing::Fileset.expects(:new).with(@basepath, :recurse => true, :recurselimit => 42).returns @fileset - @fileset.expects(:files).returns %w{. one two} - @tidy.stubs(:tidy?).returns false + it "should use a Fileset for limited recursion" do + @tidy[:recurse] = 42 + Puppet::FileServing::Fileset.expects(:new).with(@basepath, :recurse => true, :recurselimit => 42).returns @fileset + @fileset.expects(:files).returns %w{. one two} + @tidy.stubs(:tidy?).returns false - @tidy.generate - end + @tidy.generate + end - it "should generate a file resource for every file that should be tidied but not for files that should not be tidied" do - @fileset.expects(:files).returns %w{. one two} + it "should generate a file resource for every file that should be tidied but not for files that should not be tidied" do + @fileset.expects(:files).returns %w{. one two} - @tidy.expects(:tidy?).with(@basepath).returns true - @tidy.expects(:tidy?).with(@basepath+"/one").returns true - @tidy.expects(:tidy?).with(@basepath+"/two").returns false + @tidy.expects(:tidy?).with(@basepath).returns true + @tidy.expects(:tidy?).with(@basepath+"/one").returns true + @tidy.expects(:tidy?).with(@basepath+"/two").returns false - file = Puppet::Type.type(:file).new(:path => @basepath+"/eh") - @tidy.expects(:mkfile).with(@basepath).returns file - @tidy.expects(:mkfile).with(@basepath+"/one").returns file + file = Puppet::Type.type(:file).new(:path => @basepath+"/eh") + @tidy.expects(:mkfile).with(@basepath).returns file + @tidy.expects(:mkfile).with(@basepath+"/one").returns file - @tidy.generate - end - end + @tidy.generate + end + end - describe "and determining whether a file matches provided glob patterns" do - before do - @tidy = Puppet::Type.type(:tidy).new :path => @basepath, :recurse => 1 - @tidy[:matches] = %w{*foo* *bar*} + describe "and determining whether a file matches provided glob patterns" do + before do + @tidy = Puppet::Type.type(:tidy).new :path => @basepath, :recurse => 1 + @tidy[:matches] = %w{*foo* *bar*} - @stat = mock 'stat' + @stat = mock 'stat' - @matcher = @tidy.parameter(:matches) - end + @matcher = @tidy.parameter(:matches) + end - it "should always convert the globs to an array" do - @matcher.value = "*foo*" - @matcher.value.should == %w{*foo*} - end + it "should always convert the globs to an array" do + @matcher.value = "*foo*" + @matcher.value.should == %w{*foo*} + end - it "should return true if any pattern matches the last part of the file" do - @matcher.value = %w{*foo* *bar*} - @matcher.must be_tidy("/file/yaybarness", @stat) - end + it "should return true if any pattern matches the last part of the file" do + @matcher.value = %w{*foo* *bar*} + @matcher.must be_tidy("/file/yaybarness", @stat) + end - it "should return false if no pattern matches the last part of the file" do - @matcher.value = %w{*foo* *bar*} - @matcher.should_not be_tidy("/file/yayness", @stat) - end - end + it "should return false if no pattern matches the last part of the file" do + @matcher.value = %w{*foo* *bar*} + @matcher.should_not be_tidy("/file/yayness", @stat) + end + end - describe "and determining whether a file is too old" do - before do - @tidy = Puppet::Type.type(:tidy).new :path => @basepath - @stat = stub 'stat' + describe "and determining whether a file is too old" do + before do + @tidy = Puppet::Type.type(:tidy).new :path => @basepath + @stat = stub 'stat' - @tidy[:age] = "1s" - @tidy[:type] = "mtime" - @ager = @tidy.parameter(:age) - end + @tidy[:age] = "1s" + @tidy[:type] = "mtime" + @ager = @tidy.parameter(:age) + end - it "should use the age type specified" do - @tidy[:type] = :ctime - @stat.expects(:ctime).returns(Time.now) + it "should use the age type specified" do + @tidy[:type] = :ctime + @stat.expects(:ctime).returns(Time.now) - @ager.tidy?(@basepath, @stat) - end + @ager.tidy?(@basepath, @stat) + end - it "should return false if the file is more recent than the specified age" do - @stat.expects(:mtime).returns(Time.now) + it "should return false if the file is more recent than the specified age" do + @stat.expects(:mtime).returns(Time.now) - @ager.should_not be_tidy(@basepath, @stat) - end + @ager.should_not be_tidy(@basepath, @stat) + end - it "should return true if the file is older than the specified age" do - @stat.expects(:mtime).returns(Time.now - 10) + it "should return true if the file is older than the specified age" do + @stat.expects(:mtime).returns(Time.now - 10) - @ager.must be_tidy(@basepath, @stat) - end - end + @ager.must be_tidy(@basepath, @stat) + end + end - describe "and determining whether a file is too large" do - before do - @tidy = Puppet::Type.type(:tidy).new :path => @basepath - @stat = stub 'stat', :ftype => "file" + describe "and determining whether a file is too large" do + before do + @tidy = Puppet::Type.type(:tidy).new :path => @basepath + @stat = stub 'stat', :ftype => "file" - @tidy[:size] = "1kb" - @sizer = @tidy.parameter(:size) - end + @tidy[:size] = "1kb" + @sizer = @tidy.parameter(:size) + end - it "should return false if the file is smaller than the specified size" do - @stat.expects(:size).returns(4) # smaller than a kilobyte + it "should return false if the file is smaller than the specified size" do + @stat.expects(:size).returns(4) # smaller than a kilobyte - @sizer.should_not be_tidy(@basepath, @stat) - end + @sizer.should_not be_tidy(@basepath, @stat) + end - it "should return true if the file is larger than the specified size" do - @stat.expects(:size).returns(1500) # larger than a kilobyte + it "should return true if the file is larger than the specified size" do + @stat.expects(:size).returns(1500) # larger than a kilobyte - @sizer.must be_tidy(@basepath, @stat) - end + @sizer.must be_tidy(@basepath, @stat) + end - it "should return true if the file is equal to the specified size" do - @stat.expects(:size).returns(1024) + it "should return true if the file is equal to the specified size" do + @stat.expects(:size).returns(1024) - @sizer.must be_tidy(@basepath, @stat) - end - end + @sizer.must be_tidy(@basepath, @stat) + end + end - describe "and determining whether a file should be tidied" do - before do - @tidy = Puppet::Type.type(:tidy).new :path => @basepath - @stat = stub 'stat', :ftype => "file" - File.stubs(:lstat).with(@basepath).returns @stat - end + describe "and determining whether a file should be tidied" do + before do + @tidy = Puppet::Type.type(:tidy).new :path => @basepath + @stat = stub 'stat', :ftype => "file" + File.stubs(:lstat).with(@basepath).returns @stat + end - it "should not try to recurse if the file does not exist" do - @tidy[:recurse] = true + it "should not try to recurse if the file does not exist" do + @tidy[:recurse] = true - File.stubs(:lstat).with(@basepath).returns nil + File.stubs(:lstat).with(@basepath).returns nil - @tidy.generate.should == [] - end + @tidy.generate.should == [] + end - it "should not be tidied if the file does not exist" do - File.expects(:lstat).with(@basepath).raises Errno::ENOENT + it "should not be tidied if the file does not exist" do + File.expects(:lstat).with(@basepath).raises Errno::ENOENT - @tidy.should_not be_tidy(@basepath) - end + @tidy.should_not be_tidy(@basepath) + end - it "should not be tidied if the user has no access to the file" do - File.expects(:lstat).with(@basepath).raises Errno::EACCES + it "should not be tidied if the user has no access to the file" do + File.expects(:lstat).with(@basepath).raises Errno::EACCES - @tidy.should_not be_tidy(@basepath) - end + @tidy.should_not be_tidy(@basepath) + end - it "should not be tidied if it is a directory and rmdirs is set to false" do - stat = mock 'stat', :ftype => "directory" - File.expects(:lstat).with(@basepath).returns stat + it "should not be tidied if it is a directory and rmdirs is set to false" do + stat = mock 'stat', :ftype => "directory" + File.expects(:lstat).with(@basepath).returns stat - @tidy.should_not be_tidy(@basepath) - end + @tidy.should_not be_tidy(@basepath) + end - it "should return false if it does not match any provided globs" do - @tidy[:recurse] = 1 - @tidy[:matches] = "globs" + it "should return false if it does not match any provided globs" do + @tidy[:recurse] = 1 + @tidy[:matches] = "globs" - matches = @tidy.parameter(:matches) - matches.expects(:tidy?).with(@basepath, @stat).returns false - @tidy.should_not be_tidy(@basepath) - end + matches = @tidy.parameter(:matches) + matches.expects(:tidy?).with(@basepath, @stat).returns false + @tidy.should_not be_tidy(@basepath) + end - it "should return false if it does not match aging requirements" do - @tidy[:age] = "1d" + it "should return false if it does not match aging requirements" do + @tidy[:age] = "1d" - ager = @tidy.parameter(:age) - ager.expects(:tidy?).with(@basepath, @stat).returns false - @tidy.should_not be_tidy(@basepath) - end + ager = @tidy.parameter(:age) + ager.expects(:tidy?).with(@basepath, @stat).returns false + @tidy.should_not be_tidy(@basepath) + end - it "should return false if it does not match size requirements" do - @tidy[:size] = "1b" + it "should return false if it does not match size requirements" do + @tidy[:size] = "1b" - sizer = @tidy.parameter(:size) - sizer.expects(:tidy?).with(@basepath, @stat).returns false - @tidy.should_not be_tidy(@basepath) - end + sizer = @tidy.parameter(:size) + sizer.expects(:tidy?).with(@basepath, @stat).returns false + @tidy.should_not be_tidy(@basepath) + end - it "should tidy a file if age and size are set but only size matches" do - @tidy[:size] = "1b" - @tidy[:age] = "1d" + it "should tidy a file if age and size are set but only size matches" do + @tidy[:size] = "1b" + @tidy[:age] = "1d" - @tidy.parameter(:size).stubs(:tidy?).returns true - @tidy.parameter(:age).stubs(:tidy?).returns false - @tidy.should be_tidy(@basepath) - end + @tidy.parameter(:size).stubs(:tidy?).returns true + @tidy.parameter(:age).stubs(:tidy?).returns false + @tidy.should be_tidy(@basepath) + end - it "should tidy a file if age and size are set but only age matches" do - @tidy[:size] = "1b" - @tidy[:age] = "1d" + it "should tidy a file if age and size are set but only age matches" do + @tidy[:size] = "1b" + @tidy[:age] = "1d" - @tidy.parameter(:size).stubs(:tidy?).returns false - @tidy.parameter(:age).stubs(:tidy?).returns true - @tidy.should be_tidy(@basepath) - end + @tidy.parameter(:size).stubs(:tidy?).returns false + @tidy.parameter(:age).stubs(:tidy?).returns true + @tidy.should be_tidy(@basepath) + end - it "should tidy all files if neither age nor size is set" do - @tidy.must be_tidy(@basepath) - end + it "should tidy all files if neither age nor size is set" do + @tidy.must be_tidy(@basepath) + end - it "should sort the results inversely by path length, so files are added to the catalog before their directories" do - @tidy[:recurse] = true - @tidy[:rmdirs] = true - fileset = Puppet::FileServing::Fileset.new(@basepath) - Puppet::FileServing::Fileset.expects(:new).returns fileset - fileset.expects(:files).returns %w{. one one/two} + it "should sort the results inversely by path length, so files are added to the catalog before their directories" do + @tidy[:recurse] = true + @tidy[:rmdirs] = true + fileset = Puppet::FileServing::Fileset.new(@basepath) + Puppet::FileServing::Fileset.expects(:new).returns fileset + fileset.expects(:files).returns %w{. one one/two} - @tidy.stubs(:tidy?).returns true + @tidy.stubs(:tidy?).returns true - @tidy.generate.collect { |r| r[:path] }.should == [@basepath+"/one/two", @basepath+"/one", @basepath] - end - end + @tidy.generate.collect { |r| r[:path] }.should == [@basepath+"/one/two", @basepath+"/one", @basepath] + end + end - it "should configure directories to require their contained files if rmdirs is enabled, so the files will be deleted first" do - @tidy[:recurse] = true - @tidy[:rmdirs] = true - fileset = mock 'fileset' - Puppet::FileServing::Fileset.expects(:new).with(@basepath, :recurse => true).returns fileset - fileset.expects(:files).returns %w{. one two one/subone two/subtwo one/subone/ssone} - @tidy.stubs(:tidy?).returns true - - result = @tidy.generate.inject({}) { |hash, res| hash[res[:path]] = res; hash } - { - @basepath => [ @basepath+"/one", @basepath+"/two" ], - @basepath+"/one" => [@basepath+"/one/subone"], - @basepath+"/two" => [@basepath+"/two/subtwo"], - @basepath+"/one/subone" => [@basepath+"/one/subone/ssone"] - }.each do |parent, children| - children.each do |child| - ref = Puppet::Resource.new(:file, child) - result[parent][:require].find { |req| req.to_s == ref.to_s }.should_not be_nil - end - end + it "should configure directories to require their contained files if rmdirs is enabled, so the files will be deleted first" do + @tidy[:recurse] = true + @tidy[:rmdirs] = true + fileset = mock 'fileset' + Puppet::FileServing::Fileset.expects(:new).with(@basepath, :recurse => true).returns fileset + fileset.expects(:files).returns %w{. one two one/subone two/subtwo one/subone/ssone} + @tidy.stubs(:tidy?).returns true + + result = @tidy.generate.inject({}) { |hash, res| hash[res[:path]] = res; hash } + { + @basepath => [ @basepath+"/one", @basepath+"/two" ], + @basepath+"/one" => [@basepath+"/one/subone"], + @basepath+"/two" => [@basepath+"/two/subtwo"], + @basepath+"/one/subone" => [@basepath+"/one/subone/ssone"] + }.each do |parent, children| + children.each do |child| + ref = Puppet::Resource.new(:file, child) + result[parent][:require].find { |req| req.to_s == ref.to_s }.should_not be_nil end + end end + end end |