+++ /dev/null
-require 'spec_helper'
-require 'puppet'
-
-describe Puppet::Type.type(:archive) do
- let(:resource) do
- Puppet::Type.type(:archive).new(
- path: '/tmp/example.zip',
- source: 'http://home.lan/example.zip'
- )
- end
-
- context 'resource defaults' do
- it { expect(resource[:path]).to eq '/tmp/example.zip' }
- it { expect(resource[:name]).to eq '/tmp/example.zip' }
- it { expect(resource[:filename]).to eq 'example.zip' }
- it { expect(resource[:extract]).to eq :false }
- it { expect(resource[:cleanup]).to eq :true }
- it { expect(resource[:checksum_type]).to eq :none }
- it { expect(resource[:digest_type]).to eq nil }
- it { expect(resource[:checksum_verify]).to eq :true }
- it { expect(resource[:extract_flags]).to eq :undef }
- it { expect(resource[:allow_insecure]).to eq false }
- it { expect(resource[:download_options]).to eq nil }
- it { expect(resource[:temp_dir]).to eq nil }
- end
-
- it 'verify resource[:path] is absolute filepath' do
- expect do
- resource[:path] = 'relative/file'
- end.to raise_error(Puppet::Error, %r{archive path must be absolute: })
- end
-
- it 'verify resource[:temp_dir] is absolute filetemp_dir' do
- expect do
- resource[:temp_dir] = 'relative/file'
- end.to raise_error(Puppet::Error, %r{Invalid temp_dir})
- end
-
- describe 'on posix', if: Puppet.features.posix? do
- it 'accepts valid resource[:source]' do
- expect do
- resource[:source] = 'http://home.lan/example.zip'
- resource[:source] = 'https://home.lan/example.zip'
- resource[:source] = 'ftp://home.lan/example.zip'
- resource[:source] = 's3://home.lan/example.zip'
- resource[:source] = '/tmp/example.zip'
- end.not_to raise_error
- end
-
- %w[
- afp://home.lan/example.zip
- \tmp
- D:/example.zip
- ].each do |s|
- it 'rejects invalid resource[:source]' do
- expect do
- resource[:source] = s
- end.to raise_error(Puppet::Error, %r{invalid source url: })
- end
- end
- end
-
- describe 'on windows', if: Puppet.features.microsoft_windows? do
- it 'accepts valid windows resource[:source]' do
- expect do
- resource[:source] = 'D:/example.zip'
- end.not_to raise_error
- end
-
- %w[
- /tmp/example.zip
- \Z:
- ].each do |s|
- it 'rejects invalid windows resource[:source]' do
- expect do
- resource[:source] = s
- end.to raise_error(Puppet::Error, %r{invalid source url: })
- end
- end
- end
-
- %w[
- 557e2ebb67b35d1fddff18090b6bc26b
- 557e2ebb67b35d1fddff18090b6bc26557e2ebb67b35d1fddff18090b6bc26bb
- ].each do |cs|
- it 'accepts valid resource[:checksum]' do
- expect do
- resource[:checksum] = cs
- end.not_to raise_error
- end
- end
-
- %w[
- z57e2ebb67b35d1fddff18090b6bc26b
- 557e
- ].each do |cs|
- it 'rejects bad checksum' do
- expect do
- resource[:checksum] = cs
- end.to raise_error(Puppet::Error, %r{Invalid value})
- end
- end
-
- it 'accepts valid resource[:checksum_type]' do
- expect do
- [:none, :md5, :sha1, :sha2, :sha256, :sha384, :sha512].each do |type|
- resource[:checksum_type] = type
- end
- end.not_to raise_error
- end
-
- it 'rejects invalid resource[:checksum_type]' do
- expect do
- resource[:checksum_type] = :crc32
- end.to raise_error(Puppet::Error, %r{Invalid value})
- end
-
- it 'verify resource[:allow_insecure] is valid' do
- expect do
- [:true, :false, :yes, :no].each do |type|
- resource[:allow_insecure] = type
- end
- end.not_to raise_error
- end
-
- it 'verify resource[:download_options] is valid' do
- expect do
- ['--tlsv1', ['--region', 'eu-central-1']].each do |type|
- resource[:download_options] = type
- end
- end.not_to raise_error
- end
-
- describe 'archive autorequire' do
- let(:file_resource) { Puppet::Type.type(:file).new(name: '/tmp') }
- let(:archive_resource) do
- described_class.new(
- path: '/tmp/example.zip',
- source: 'http://home.lan/example.zip'
- )
- end
-
- let(:auto_req) do
- catalog = Puppet::Resource::Catalog.new
- catalog.add_resource file_resource
- catalog.add_resource archive_resource
-
- archive_resource.autorequire
- end
-
- it 'creates relationship' do
- expect(auto_req.size).to be 1
- end
- it 'links to archive resource' do
- expect(auto_req[0].target).to eql archive_resource
- end
- it 'autorequires parent directory' do
- expect(auto_req[0].source).to eql file_resource
- end
- end
-end