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