Merge pull request #963 from puppetlabs/pdksync
[puppet-modules/puppetlabs-apt.git] / spec / unit / puppet / type / apt_key_spec.rb
1 # frozen_string_literal: true
2
3 require 'spec_helper'
4 require 'puppet'
5
6 describe Puppet::Type.type(:apt_key) do
7   context 'with only namevar 32bit key id' do
8     let(:resource) do
9       Puppet::Type.type(:apt_key).new(
10         id: 'EF8D349F',
11       )
12     end
13
14     it 'id is set' do
15       expect(resource[:id]).to eq 'EF8D349F'
16     end
17
18     it 'name is set to id' do
19       expect(resource[:name]).to eq 'EF8D349F'
20     end
21
22     it 'keyserver is default' do
23       expect(resource[:server]).to eq :'keyserver.ubuntu.com'
24     end
25
26     it 'source is not set' do
27       expect(resource[:source]).to eq nil
28     end
29
30     it 'content is not set' do
31       expect(resource[:content]).to eq nil
32     end
33
34     it 'refresh is not set' do
35       expect(resource[:refresh]).to eq nil
36     end
37
38     it 'weak_ssl is not set' do
39       expect(resource[:weak_ssl]).to eq nil
40     end
41   end
42
43   context 'with a lowercase 32bit key id' do
44     let(:resource) do
45       Puppet::Type.type(:apt_key).new(
46         id: 'ef8d349f',
47       )
48     end
49
50     it 'id is set' do
51       expect(resource[:id]).to eq 'EF8D349F'
52     end
53   end
54
55   context 'with a 64bit key id' do
56     let(:resource) do
57       Puppet::Type.type(:apt_key).new(
58         id: 'FFFFFFFFEF8D349F',
59       )
60     end
61
62     it 'id is set' do
63       expect(resource[:id]).to eq 'FFFFFFFFEF8D349F'
64     end
65   end
66
67   context 'with a 0x formatted key id' do
68     let(:resource) do
69       Puppet::Type.type(:apt_key).new(
70         id: '0xEF8D349F',
71       )
72     end
73
74     it 'id is set' do
75       expect(resource[:id]).to eq 'EF8D349F'
76     end
77   end
78
79   context 'with a 0x formatted lowercase key id' do
80     let(:resource) do
81       Puppet::Type.type(:apt_key).new(
82         id: '0xef8d349f',
83       )
84     end
85
86     it 'id is set' do
87       expect(resource[:id]).to eq 'EF8D349F'
88     end
89   end
90
91   context 'with a 0x formatted 64bit key id' do
92     let(:resource) do
93       Puppet::Type.type(:apt_key).new(
94         id: '0xFFFFFFFFEF8D349F',
95       )
96     end
97
98     it 'id is set' do
99       expect(resource[:id]).to eq 'FFFFFFFFEF8D349F'
100     end
101   end
102
103   context 'with source' do
104     let(:resource) do
105       Puppet::Type.type(:apt_key).new(
106         id: 'EF8D349F',
107         source: 'http://apt.puppetlabs.com/pubkey.gpg',
108       )
109     end
110
111     it 'source is set to the URL' do
112       expect(resource[:source]).to eq 'http://apt.puppetlabs.com/pubkey.gpg'
113     end
114   end
115
116   context 'with source and weak_ssl' do
117     let(:resource) do
118       Puppet::Type.type(:apt_key).new(
119         id: 'EF8D349F',
120         source: 'https://apt.puppetlabs.com/pubkey.gpg',
121         weak_ssl: true,
122       )
123     end
124
125     it 'source is set to the URL' do
126       expect(resource[:source]).to eq 'https://apt.puppetlabs.com/pubkey.gpg'
127     end
128   end
129
130   context 'with content' do
131     let(:resource) do
132       Puppet::Type.type(:apt_key).new(
133         id: 'EF8D349F',
134         content: 'http://apt.puppetlabs.com/pubkey.gpg',
135       )
136     end
137
138     it 'content is set to the string' do
139       expect(resource[:content]).to eq 'http://apt.puppetlabs.com/pubkey.gpg'
140     end
141   end
142
143   context 'with keyserver' do
144     let(:resource) do
145       Puppet::Type.type(:apt_key).new(
146         id: 'EF8D349F',
147         server: 'http://keyring.debian.org',
148       )
149     end
150
151     it 'keyserver is set to Debian' do
152       expect(resource[:server]).to eq 'http://keyring.debian.org'
153     end
154   end
155
156   context 'with validation' do
157     it 'raises an error if content and source are set' do
158       expect {
159         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
160                                         source: 'http://apt.puppetlabs.com/pubkey.gpg',
161                                         content: 'Completely invalid as a GPG key')
162       }.to raise_error(%r{content and source are mutually exclusive})
163     end
164
165     it 'raises an error if refresh => true and ensure => absent' do
166       expect {
167         Puppet::Type.type(:apt_key).new(id:       'EF8D349F',
168                                         source:   'http://apt.puppetlabs.com/pubkey.gpg',
169                                         ensure:   :absent,
170                                         refresh:  :true)
171       }.to raise_error(%r{ensure => absent and refresh => true are mutually exclusive})
172     end
173
174     it 'raises an error if a weird length key is used' do
175       expect {
176         Puppet::Type.type(:apt_key).new(id: 'FEF8D349F',
177                                         source: 'http://apt.puppetlabs.com/pubkey.gpg',
178                                         content: 'Completely invalid as a GPG key')
179       }.to raise_error(%r{Valid values match})
180     end
181
182     it 'raises an error when an invalid URI scheme is used in source' do
183       expect {
184         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
185                                         source: 'hkp://pgp.mit.edu')
186       }.to raise_error(%r{Valid values match})
187     end
188
189     it 'allows the http URI scheme in source' do
190       expect {
191         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
192                                         source: 'http://pgp.mit.edu')
193       }.not_to raise_error
194     end
195
196     it 'allows the http URI with username and password' do
197       expect {
198         Puppet::Type.type(:apt_key).new(id: '4BD6EC30',
199                                         source: 'http://testme:Password2@pgp.mit.edu')
200       }.not_to raise_error
201     end
202
203     it 'allows the https URI scheme in source' do
204       expect {
205         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
206                                         source: 'https://pgp.mit.edu')
207       }.not_to raise_error
208     end
209
210     it 'allows the https URI with username and password' do
211       expect {
212         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
213                                         source: 'https://testme:Password2@pgp.mit.edu')
214       }.not_to raise_error
215     end
216
217     it 'allows the ftp URI scheme in source' do
218       expect {
219         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
220                                         source: 'ftp://pgp.mit.edu')
221       }.not_to raise_error
222     end
223
224     it 'allows an absolute path in source' do
225       expect {
226         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
227                                         source: '/path/to/a/file')
228       }.not_to raise_error
229     end
230
231     it 'allows 5-digit ports' do
232       expect {
233         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
234                                         source: 'http://pgp.mit.edu:12345/key')
235       }.not_to raise_error
236     end
237
238     it 'allows 5-digit ports when using key servers' do
239       expect {
240         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
241                                         server: 'http://pgp.mit.edu:12345')
242       }.not_to raise_error
243     end
244   end
245 end