5b205e9924b3d749944b973a8c91cdd31a8d901e
[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   end
36
37   context 'with a lowercase 32bit key id' do
38     let(:resource) do
39       Puppet::Type.type(:apt_key).new(
40         id: 'ef8d349f',
41       )
42     end
43
44     it 'id is set' do
45       expect(resource[:id]).to eq 'EF8D349F'
46     end
47   end
48
49   context 'with a 64bit key id' do
50     let(:resource) do
51       Puppet::Type.type(:apt_key).new(
52         id: 'FFFFFFFFEF8D349F',
53       )
54     end
55
56     it 'id is set' do
57       expect(resource[:id]).to eq 'FFFFFFFFEF8D349F'
58     end
59   end
60
61   context 'with a 0x formatted key id' do
62     let(:resource) do
63       Puppet::Type.type(:apt_key).new(
64         id: '0xEF8D349F',
65       )
66     end
67
68     it 'id is set' do
69       expect(resource[:id]).to eq 'EF8D349F'
70     end
71   end
72
73   context 'with a 0x formatted lowercase key id' do
74     let(:resource) do
75       Puppet::Type.type(:apt_key).new(
76         id: '0xef8d349f',
77       )
78     end
79
80     it 'id is set' do
81       expect(resource[:id]).to eq 'EF8D349F'
82     end
83   end
84
85   context 'with a 0x formatted 64bit key id' do
86     let(:resource) do
87       Puppet::Type.type(:apt_key).new(
88         id: '0xFFFFFFFFEF8D349F',
89       )
90     end
91
92     it 'id is set' do
93       expect(resource[:id]).to eq 'FFFFFFFFEF8D349F'
94     end
95   end
96
97   context 'with source' do
98     let(:resource) do
99       Puppet::Type.type(:apt_key).new(
100         id: 'EF8D349F',
101         source: 'http://apt.puppetlabs.com/pubkey.gpg',
102       )
103     end
104
105     it 'source is set to the URL' do
106       expect(resource[:source]).to eq 'http://apt.puppetlabs.com/pubkey.gpg'
107     end
108   end
109
110   context 'with content' do
111     let(:resource) do
112       Puppet::Type.type(:apt_key).new(
113         id: 'EF8D349F',
114         content: 'http://apt.puppetlabs.com/pubkey.gpg',
115       )
116     end
117
118     it 'content is set to the string' do
119       expect(resource[:content]).to eq 'http://apt.puppetlabs.com/pubkey.gpg'
120     end
121   end
122
123   context 'with keyserver' do
124     let(:resource) do
125       Puppet::Type.type(:apt_key).new(
126         id: 'EF8D349F',
127         server: 'http://keyring.debian.org',
128       )
129     end
130
131     it 'keyserver is set to Debian' do
132       expect(resource[:server]).to eq 'http://keyring.debian.org'
133     end
134   end
135
136   context 'with validation' do
137     it 'raises an error if content and source are set' do
138       expect {
139         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
140                                         source: 'http://apt.puppetlabs.com/pubkey.gpg',
141                                         content: 'Completely invalid as a GPG key')
142       }.to raise_error(%r{content and source are mutually exclusive})
143     end
144
145     it 'raises an error if refresh => true and ensure => absent' do
146       expect {
147         Puppet::Type.type(:apt_key).new(id:       'EF8D349F',
148                                         source:   'http://apt.puppetlabs.com/pubkey.gpg',
149                                         ensure:   :absent,
150                                         refresh:  :true)
151       }.to raise_error(%r{ensure => absent and refresh => true are mutually exclusive})
152     end
153
154     it 'raises an error if a weird length key is used' do
155       expect {
156         Puppet::Type.type(:apt_key).new(id: 'FEF8D349F',
157                                         source: 'http://apt.puppetlabs.com/pubkey.gpg',
158                                         content: 'Completely invalid as a GPG key')
159       }.to raise_error(%r{Valid values match})
160     end
161
162     it 'raises an error when an invalid URI scheme is used in source' do
163       expect {
164         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
165                                         source: 'hkp://pgp.mit.edu')
166       }.to raise_error(%r{Valid values match})
167     end
168
169     it 'allows the http URI scheme in source' do
170       expect {
171         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
172                                         source: 'http://pgp.mit.edu')
173       }.not_to raise_error
174     end
175
176     it 'allows the http URI with username and password' do
177       expect {
178         Puppet::Type.type(:apt_key).new(id: '4BD6EC30',
179                                         source: 'http://testme:Password2@pgp.mit.edu')
180       }.not_to raise_error
181     end
182
183     it 'allows the https URI scheme in source' do
184       expect {
185         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
186                                         source: 'https://pgp.mit.edu')
187       }.not_to raise_error
188     end
189
190     it 'allows the https URI with username and password' do
191       expect {
192         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
193                                         source: 'https://testme:Password2@pgp.mit.edu')
194       }.not_to raise_error
195     end
196
197     it 'allows the ftp URI scheme in source' do
198       expect {
199         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
200                                         source: 'ftp://pgp.mit.edu')
201       }.not_to raise_error
202     end
203
204     it 'allows an absolute path in source' do
205       expect {
206         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
207                                         source: '/path/to/a/file')
208       }.not_to raise_error
209     end
210
211     it 'allows 5-digit ports' do
212       expect {
213         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
214                                         source: 'http://pgp.mit.edu:12345/key')
215       }.not_to raise_error
216     end
217
218     it 'allows 5-digit ports when using key servers' do
219       expect {
220         Puppet::Type.type(:apt_key).new(id: 'EF8D349F',
221                                         server: 'http://pgp.mit.edu:12345')
222       }.not_to raise_error
223     end
224   end
225 end