Add puppet/archive module
[mirror/dsa-puppet.git] / 3rdparty / modules / archive / spec / unit / puppet / type / archive_spec.rb
1 require 'spec_helper'
2 require 'puppet'
3
4 describe Puppet::Type.type(:archive) do
5   let(:resource) do
6     Puppet::Type.type(:archive).new(
7       path: '/tmp/example.zip',
8       source: 'http://home.lan/example.zip'
9     )
10   end
11
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 }
25   end
26
27   it 'verify resource[:path] is absolute filepath' do
28     expect do
29       resource[:path] = 'relative/file'
30     end.to raise_error(Puppet::Error, %r{archive path must be absolute: })
31   end
32
33   it 'verify resource[:temp_dir] is absolute filetemp_dir' do
34     expect do
35       resource[:temp_dir] = 'relative/file'
36     end.to raise_error(Puppet::Error, %r{Invalid temp_dir})
37   end
38
39   describe 'on posix', if: Puppet.features.posix? do
40     it 'accepts valid resource[:source]' do
41       expect 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
48     end
49
50     %w[
51       afp://home.lan/example.zip
52       \tmp
53       D:/example.zip
54     ].each do |s|
55       it 'rejects invalid resource[:source]' do
56         expect do
57           resource[:source] = s
58         end.to raise_error(Puppet::Error, %r{invalid source url: })
59       end
60     end
61   end
62
63   describe 'on windows', if: Puppet.features.microsoft_windows? do
64     it 'accepts valid windows resource[:source]' do
65       expect do
66         resource[:source] = 'D:/example.zip'
67       end.not_to raise_error
68     end
69
70     %w[
71       /tmp/example.zip
72       \Z:
73     ].each do |s|
74       it 'rejects invalid windows resource[:source]' do
75         expect do
76           resource[:source] = s
77         end.to raise_error(Puppet::Error, %r{invalid source url: })
78       end
79     end
80   end
81
82   %w[
83     557e2ebb67b35d1fddff18090b6bc26b
84     557e2ebb67b35d1fddff18090b6bc26557e2ebb67b35d1fddff18090b6bc26bb
85   ].each do |cs|
86     it 'accepts valid resource[:checksum]' do
87       expect do
88         resource[:checksum] = cs
89       end.not_to raise_error
90     end
91   end
92
93   %w[
94     z57e2ebb67b35d1fddff18090b6bc26b
95     557e
96   ].each do |cs|
97     it 'rejects bad checksum' do
98       expect do
99         resource[:checksum] = cs
100       end.to raise_error(Puppet::Error, %r{Invalid value})
101     end
102   end
103
104   it 'accepts valid resource[:checksum_type]' do
105     expect do
106       [:none, :md5, :sha1, :sha2, :sha256, :sha384, :sha512].each do |type|
107         resource[:checksum_type] = type
108       end
109     end.not_to raise_error
110   end
111
112   it 'rejects invalid resource[:checksum_type]' do
113     expect do
114       resource[:checksum_type] = :crc32
115     end.to raise_error(Puppet::Error, %r{Invalid value})
116   end
117
118   it 'verify resource[:allow_insecure] is valid' do
119     expect do
120       [:true, :false, :yes, :no].each do |type|
121         resource[:allow_insecure] = type
122       end
123     end.not_to raise_error
124   end
125
126   it 'verify resource[:download_options] is valid' do
127     expect do
128       ['--tlsv1', ['--region', 'eu-central-1']].each do |type|
129         resource[:download_options] = type
130       end
131     end.not_to raise_error
132   end
133
134   describe 'archive autorequire' do
135     let(:file_resource) { Puppet::Type.type(:file).new(name: '/tmp') }
136     let(:archive_resource) do
137       described_class.new(
138         path: '/tmp/example.zip',
139         source: 'http://home.lan/example.zip'
140       )
141     end
142
143     let(:auto_req) do
144       catalog = Puppet::Resource::Catalog.new
145       catalog.add_resource file_resource
146       catalog.add_resource archive_resource
147
148       archive_resource.autorequire
149     end
150
151     it 'creates relationship' do
152       expect(auto_req.size).to be 1
153     end
154     it 'links to archive resource' do
155       expect(auto_req[0].target).to eql archive_resource
156     end
157     it 'autorequires parent directory' do
158       expect(auto_req[0].source).to eql file_resource
159     end
160   end
161 end