Add puppet/archive module
[mirror/dsa-puppet.git] / 3rdparty / modules / archive / spec / support / shared_behaviour.rb
diff --git a/3rdparty/modules/archive/spec/support/shared_behaviour.rb b/3rdparty/modules/archive/spec/support/shared_behaviour.rb
new file mode 100644 (file)
index 0000000..08e08ca
--- /dev/null
@@ -0,0 +1,107 @@
+# rubocop:disable RSpec/MultipleExpectations
+require 'spec_helper'
+require 'tmpdir'
+
+RSpec.shared_examples 'an archive provider' do |provider_class|
+  describe provider_class do
+    let(:resource) do
+      Puppet::Type::Archive.new(name: '/tmp/example.zip', source: 'http://home.lan/example.zip')
+    end
+
+    let(:provider) do
+      provider_class.new(resource)
+    end
+
+    let(:zipfile) do
+      File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'files', 'test.zip'))
+    end
+
+    it '#checksum?' do
+      Dir.mktmpdir do |dir|
+        resource[:path] = File.join(dir, resource[:filename])
+        FileUtils.cp(zipfile, resource[:path])
+
+        resource[:checksum] = '377ec712d7fdb7266221db3441e3af2055448ead'
+        resource[:checksum_type] = :sha1
+        expect(provider.checksum?).to eq true
+
+        resource[:checksum] = '557e2ebb67b35d1fddff18090b6bc26b'
+        resource[:checksum_type] = :md5
+        expect(provider.checksum?).to eq true
+
+        resource[:checksum] = '557e2ebb67b35d1fddff18090b6bc26b'
+        resource[:checksum_type] = :sha1
+        expect(provider.checksum?).to eq false
+      end
+    end
+
+    it '#extract' do
+      skip 'jruby not supported' if defined? JRUBY_VERSION
+      Dir.mktmpdir do |dir|
+        resource[:path] = File.join(dir, resource[:filename])
+        extracted_file = File.join(dir, 'test')
+        FileUtils.cp(zipfile, resource[:path])
+
+        resource[:extract] = :true
+        resource[:creates] = extracted_file
+        resource[:extract_path] = dir
+
+        provider.extract
+        expect(File.read(extracted_file)).to eq "hello world\n"
+      end
+    end
+
+    it '#extracted?' do
+      skip 'jruby not supported' if defined? JRUBY_VERSION
+      Dir.mktmpdir do |dir|
+        resource[:path] = File.join(dir, resource[:filename])
+        extracted_file = File.join(dir, 'test')
+        FileUtils.cp(zipfile, resource[:path])
+
+        resource[:extract] = :true
+        resource[:creates] = extracted_file
+        resource[:extract_path] = dir
+
+        expect(provider.extracted?).to eq false
+        provider.extract
+        expect(provider.extracted?).to eq true
+      end
+    end
+
+    it '#cleanup' do
+      skip 'jruby not supported' if defined? JRUBY_VERSION
+      Dir.mktmpdir do |dir|
+        resource[:path] = File.join(dir, resource[:filename])
+        extracted_file = File.join(dir, 'test')
+        FileUtils.cp(zipfile, resource[:path])
+
+        resource[:extract] = :true
+        resource[:cleanup] = :true
+        resource[:creates] = extracted_file
+        resource[:extract_path] = dir
+
+        provider.extract
+        provider.cleanup
+        expect(File.exist?(resource[:path])).to eq false
+      end
+    end
+
+    it '#create' do
+      skip 'jruby not supported' if defined? JRUBY_VERSION
+      Dir.mktmpdir do |dir|
+        resource[:path] = File.join(dir, resource[:filename])
+        extracted_file = File.join(dir, 'test')
+        FileUtils.cp(zipfile, resource[:path])
+
+        resource[:extract] = :true
+        resource[:cleanup] = :true
+        resource[:creates] = extracted_file
+        resource[:extract_path] = dir
+
+        provider.create
+        expect(File.read(extracted_file)).to eq "hello world\n"
+        expect(File.exist?(resource[:path])).to eq false
+      end
+    end
+  end
+end