diff options
Diffstat (limited to 'spec/unit/module_tool/applications/unpacker_spec.rb')
-rw-r--r-- | spec/unit/module_tool/applications/unpacker_spec.rb | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/spec/unit/module_tool/applications/unpacker_spec.rb b/spec/unit/module_tool/applications/unpacker_spec.rb index 39b0c261f..81557df99 100644 --- a/spec/unit/module_tool/applications/unpacker_spec.rb +++ b/spec/unit/module_tool/applications/unpacker_spec.rb @@ -2,6 +2,7 @@ require 'spec_helper' require 'json' require 'puppet/module_tool/applications' +require 'puppet/file_system' require 'puppet_spec/modules' describe Puppet::ModuleTool::Applications::Unpacker do @@ -31,4 +32,43 @@ describe Puppet::ModuleTool::Applications::Unpacker do Puppet::ModuleTool::Applications::Unpacker.run(filename, :target_dir => target) File.should be_directory(File.join(target, 'mytarball')) end + + it "should warn about symlinks", :if => Puppet.features.manages_symlinks? do + untar = mock('Tar') + untar.expects(:unpack).with(filename, anything()) do |src, dest, _| + FileUtils.mkdir(File.join(dest, 'extractedmodule')) + File.open(File.join(dest, 'extractedmodule', 'metadata.json'), 'w+') do |file| + file.puts JSON.generate('name' => module_name, 'version' => '1.0.0') + end + FileUtils.touch(File.join(dest, 'extractedmodule/tempfile')) + Puppet::FileSystem.symlink(File.join(dest, 'extractedmodule/tempfile'), File.join(dest, 'extractedmodule/tempfile2')) + true + end + + Puppet::ModuleTool::Tar.expects(:instance).returns(untar) + Puppet.expects(:warning).with(regexp_matches(/symlinks/i)) + + Puppet::ModuleTool::Applications::Unpacker.run(filename, :target_dir => target) + File.should be_directory(File.join(target, 'mytarball')) + end + + it "should warn about symlinks in subdirectories", :if => Puppet.features.manages_symlinks? do + untar = mock('Tar') + untar.expects(:unpack).with(filename, anything()) do |src, dest, _| + FileUtils.mkdir(File.join(dest, 'extractedmodule')) + File.open(File.join(dest, 'extractedmodule', 'metadata.json'), 'w+') do |file| + file.puts JSON.generate('name' => module_name, 'version' => '1.0.0') + end + FileUtils.mkdir(File.join(dest, 'extractedmodule/manifests')) + FileUtils.touch(File.join(dest, 'extractedmodule/manifests/tempfile')) + Puppet::FileSystem.symlink(File.join(dest, 'extractedmodule/manifests/tempfile'), File.join(dest, 'extractedmodule/manifests/tempfile2')) + true + end + + Puppet::ModuleTool::Tar.expects(:instance).returns(untar) + Puppet.expects(:warning).with(regexp_matches(/symlinks/i)) + + Puppet::ModuleTool::Applications::Unpacker.run(filename, :target_dir => target) + File.should be_directory(File.join(target, 'mytarball')) + end end |