4 describe Puppet::Type.type(:archive) do
6 Puppet::Type.type(:archive).new(
7 path: '/tmp/example.zip',
8 source: 'http://home.lan/example.zip'
12 context 'resource defaults' do
13 it { expect(resource[:path]).to eq '/tmp/example.zip' }
14 it { expect(resource[:name]).to eq '/tmp/example.zip' }
15 it { expect(resource[:filename]).to eq 'example.zip' }
16 it { expect(resource[:extract]).to eq :false }
17 it { expect(resource[:cleanup]).to eq :true }
18 it { expect(resource[:checksum_type]).to eq :none }
19 it { expect(resource[:digest_type]).to eq nil }
20 it { expect(resource[:checksum_verify]).to eq :true }
21 it { expect(resource[:extract_flags]).to eq :undef }
22 it { expect(resource[:allow_insecure]).to eq false }
23 it { expect(resource[:download_options]).to eq nil }
24 it { expect(resource[:temp_dir]).to eq nil }
27 it 'verify resource[:path] is absolute filepath' do
29 resource[:path] = 'relative/file'
30 end.to raise_error(Puppet::Error, %r{archive path must be absolute: })
33 it 'verify resource[:temp_dir] is absolute filetemp_dir' do
35 resource[:temp_dir] = 'relative/file'
36 end.to raise_error(Puppet::Error, %r{Invalid temp_dir})
39 describe 'on posix', if: Puppet.features.posix? do
40 it 'accepts valid resource[:source]' do
42 resource[:source] = 'http://home.lan/example.zip'
43 resource[:source] = 'https://home.lan/example.zip'
44 resource[:source] = 'ftp://home.lan/example.zip'
45 resource[:source] = 's3://home.lan/example.zip'
46 resource[:source] = '/tmp/example.zip'
47 end.not_to raise_error
51 afp://home.lan/example.zip
55 it 'rejects invalid resource[:source]' do
58 end.to raise_error(Puppet::Error, %r{invalid source url: })
63 describe 'on windows', if: Puppet.features.microsoft_windows? do
64 it 'accepts valid windows resource[:source]' do
66 resource[:source] = 'D:/example.zip'
67 end.not_to raise_error
74 it 'rejects invalid windows resource[:source]' do
77 end.to raise_error(Puppet::Error, %r{invalid source url: })
83 557e2ebb67b35d1fddff18090b6bc26b
84 557e2ebb67b35d1fddff18090b6bc26557e2ebb67b35d1fddff18090b6bc26bb
86 it 'accepts valid resource[:checksum]' do
88 resource[:checksum] = cs
89 end.not_to raise_error
94 z57e2ebb67b35d1fddff18090b6bc26b
97 it 'rejects bad checksum' do
99 resource[:checksum] = cs
100 end.to raise_error(Puppet::Error, %r{Invalid value})
104 it 'accepts valid resource[:checksum_type]' do
106 [:none, :md5, :sha1, :sha2, :sha256, :sha384, :sha512].each do |type|
107 resource[:checksum_type] = type
109 end.not_to raise_error
112 it 'rejects invalid resource[:checksum_type]' do
114 resource[:checksum_type] = :crc32
115 end.to raise_error(Puppet::Error, %r{Invalid value})
118 it 'verify resource[:allow_insecure] is valid' do
120 [:true, :false, :yes, :no].each do |type|
121 resource[:allow_insecure] = type
123 end.not_to raise_error
126 it 'verify resource[:download_options] is valid' do
128 ['--tlsv1', ['--region', 'eu-central-1']].each do |type|
129 resource[:download_options] = type
131 end.not_to raise_error
134 describe 'archive autorequire' do
135 let(:file_resource) { Puppet::Type.type(:file).new(name: '/tmp') }
136 let(:archive_resource) do
138 path: '/tmp/example.zip',
139 source: 'http://home.lan/example.zip'
144 catalog = Puppet::Resource::Catalog.new
145 catalog.add_resource file_resource
146 catalog.add_resource archive_resource
148 archive_resource.autorequire
151 it 'creates relationship' do
152 expect(auto_req.size).to be 1
154 it 'links to archive resource' do
155 expect(auto_req[0].target).to eql archive_resource
157 it 'autorequires parent directory' do
158 expect(auto_req[0].source).to eql file_resource