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