aa1e5a425ec0e49d680f649eae63b874cf5144c0
[puppet-modules/puppetlabs-apt.git] / spec / acceptance / apt_key_provider_spec.rb
1 require 'spec_helper_acceptance'
2
3 PUPPETLABS_GPG_KEY_SHORT_ID    = '4BD6EC30'
4 PUPPETLABS_GPG_KEY_LONG_ID     = '1054B7A24BD6EC30'
5 PUPPETLABS_GPG_KEY_FINGERPRINT = '47B320EB4C7C375AA9DAE1A01054B7A24BD6EC30'
6 PUPPETLABS_APT_URL             = 'apt.puppetlabs.com'
7 PUPPETLABS_GPG_KEY_FILE        = 'pubkey.gpg'
8 CENTOS_GPG_KEY_SHORT_ID        = 'C105B9DE'
9 CENTOS_GPG_KEY_LONG_ID         = '0946FCA2C105B9DE'
10 CENTOS_GPG_KEY_FINGERPRINT     = 'C1DAC52D1664E8A4386DBA430946FCA2C105B9DE'
11 CENTOS_REPO_URL                = 'ftp.cvut.cz/centos'
12 CENTOS_GPG_KEY_FILE            = 'RPM-GPG-KEY-CentOS-6'
13
14 KEY_CHECK_COMMAND              = "apt-key adv --list-keys --with-colons --fingerprint | grep "
15 PUPPETLABS_KEY_CHECK_COMMAND   = "#{KEY_CHECK_COMMAND} #{PUPPETLABS_GPG_KEY_FINGERPRINT}"
16 CENTOS_KEY_CHECK_COMMAND       = "#{KEY_CHECK_COMMAND} #{CENTOS_GPG_KEY_FINGERPRINT}"
17
18 describe 'apt_key' do
19   before(:each) do
20     # Delete twice to make sure everything is cleaned
21     # up after the short key collision
22     shell("apt-key del #{PUPPETLABS_GPG_KEY_SHORT_ID}",
23           :acceptable_exit_codes => [0,1,2])
24     shell("apt-key del #{PUPPETLABS_GPG_KEY_SHORT_ID}",
25           :acceptable_exit_codes => [0,1,2])
26   end
27
28   describe 'default options' do
29     key_versions = {
30       '32bit key id'                        => '4BD6EC30',
31       '64bit key id'                        => '1054B7A24BD6EC30',
32       '160bit key fingerprint'              => '47B320EB4C7C375AA9DAE1A01054B7A24BD6EC30',
33       '32bit lowercase key id'              => '4bd6ec30',
34       '64bit lowercase key id'              => '1054b7a24bd6ec30',
35       '160bit lowercase key fingerprint'    => '47b320eb4c7c375aa9dae1a01054b7a24bd6ec30',
36       '0x formatted 32bit key id'           => '0x4BD6EC30',
37       '0x formatted 64bit key id'           => '0x1054B7A24BD6EC30',
38       '0x formatted 160bit key fingerprint' => '0x47B320EB4C7C375AA9DAE1A01054B7A24BD6EC30',
39       '0x formatted 32bit lowercase key id' => '0x4bd6ec30',
40       '0x formatted 64bit lowercase key id' => '0x1054b7a24bd6ec30',
41       '0x formatted 160bit lowercase key fingerprint' => '0x47b320eb4c7c375aa9dae1a01054b7a24bd6ec30',
42     }
43
44     key_versions.each do |key, value|
45       context "#{key}" do
46         it 'works' do
47           pp = <<-EOS
48           apt_key { 'puppetlabs':
49             id     => '#{value}',
50             ensure => 'present',
51           }
52           EOS
53
54           apply_manifest(pp, :catch_failures => true)
55           apply_manifest(pp, :catch_changes => true)
56           shell(PUPPETLABS_KEY_CHECK_COMMAND)
57         end
58       end
59     end
60
61     context 'invalid length key id' do
62       it 'fails' do
63         pp = <<-EOS
64         apt_key { 'puppetlabs':
65           id => '4B7A24BD6EC30',
66         }
67         EOS
68
69         apply_manifest(pp, :expect_failures => true) do |r|
70           expect(r.stderr).to match(/Valid values match/)
71         end
72       end
73     end
74   end
75
76   describe 'ensure =>' do
77     context 'absent' do
78       it 'is removed' do
79         pp = <<-EOS
80         apt_key { 'centos':
81           id     => '#{CENTOS_GPG_KEY_LONG_ID}',
82           ensure => 'absent',
83         }
84         EOS
85
86         # Install the key first
87         shell("apt-key adv --keyserver keyserver.ubuntu.com \
88               --recv-keys #{CENTOS_GPG_KEY_FINGERPRINT}")
89         shell(CENTOS_KEY_CHECK_COMMAND)
90
91         # Time to remove it using Puppet
92         apply_manifest(pp, :catch_failures => true)
93         apply_manifest(pp, :catch_failures => true)
94
95         shell(CENTOS_KEY_CHECK_COMMAND,
96               :acceptable_exit_codes => [1])
97
98         shell("apt-key adv --keyserver keyserver.ubuntu.com \
99               --recv-keys #{CENTOS_GPG_KEY_FINGERPRINT}")
100       end
101     end
102
103     context 'absent, added with long key', :unless => (fact('operatingsystem') == 'Debian' and fact('operatingsystemmajrelease') == '6') do
104       it 'is removed' do
105         pp = <<-EOS
106         apt_key { 'puppetlabs':
107           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
108           ensure => 'absent',
109         }
110         EOS
111
112         # Install the key first
113         shell("apt-key adv --keyserver keyserver.ubuntu.com \
114               --recv-keys #{PUPPETLABS_GPG_KEY_LONG_ID}")
115         shell(PUPPETLABS_KEY_CHECK_COMMAND)
116
117         # Time to remove it using Puppet
118         apply_manifest(pp, :catch_failures => true)
119         apply_manifest(pp, :catch_failures => true)
120
121         shell(PUPPETLABS_KEY_CHECK_COMMAND,
122               :acceptable_exit_codes => [1])
123       end
124     end
125   end
126
127   describe 'content =>' do
128     context 'puppetlabs gpg key' do
129       it 'works' do
130         pp = <<-EOS
131           apt_key { 'puppetlabs':
132             id      => '#{PUPPETLABS_GPG_KEY_FINGERPRINT}',
133             ensure  => 'present',
134             content => "-----BEGIN PGP PUBLIC KEY BLOCK-----
135 Version: GnuPG v1.4.12 (GNU/Linux)
136 Comment: GPGTools - http://gpgtools.org
137
138 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
192 =a34C
193 -----END PGP PUBLIC KEY BLOCK-----",
194           }
195         EOS
196
197         apply_manifest(pp, :catch_failures => true)
198         apply_manifest(pp, :catch_failures => true)
199         shell(PUPPETLABS_KEY_CHECK_COMMAND)
200       end
201     end
202
203     context 'bogus key' do
204       it 'fails' do
205         pp = <<-EOS
206         apt_key { 'puppetlabs':
207           id      => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
208           ensure  => 'present',
209           content => 'For posterity: such content, much bogus, wow',
210         }
211         EOS
212
213         apply_manifest(pp, :expect_failures => true) do |r|
214           expect(r.stderr).to match(/no valid OpenPGP data found/)
215         end
216       end
217     end
218   end
219
220   describe 'server =>' do
221     context 'pgp.mit.edu' do
222       it 'works' do
223         pp = <<-EOS
224         apt_key { 'puppetlabs':
225           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
226           ensure => 'present',
227           server => 'pgp.mit.edu',
228         }
229         EOS
230
231         apply_manifest(pp, :catch_failures => true)
232         apply_manifest(pp, :catch_failures => true)
233         shell(PUPPETLABS_KEY_CHECK_COMMAND)
234       end
235     end
236
237     context 'hkp://pgp.mit.edu:80' do
238       it 'works' do
239         pp = <<-EOS
240         apt_key { 'puppetlabs':
241           id     => '#{PUPPETLABS_GPG_KEY_FINGERPRINT}',
242           ensure => 'present',
243           server => 'hkp://pgp.mit.edu:80',
244         }
245         EOS
246
247         apply_manifest(pp, :catch_failures => true)
248         apply_manifest(pp, :catch_failures => true)
249         shell(PUPPETLABS_KEY_CHECK_COMMAND)
250       end
251     end
252
253     context 'nonexistant.key.server' do
254       it 'fails' do
255         pp = <<-EOS
256         apt_key { 'puppetlabs':
257           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
258           ensure => 'present',
259           server => 'nonexistant.key.server',
260         }
261         EOS
262
263         apply_manifest(pp, :expect_failures => true) do |r|
264           expect(r.stderr).to match(/(Host not found|Couldn't resolve host)/)
265         end
266       end
267     end
268
269     context 'key server start with dot' do
270       it 'fails' do
271         pp = <<-EOS
272         apt_key { 'puppetlabs':
273           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
274           ensure => 'present',
275           server => '.pgp.key.server',
276         }
277         EOS
278
279         apply_manifest(pp, :expect_failures => true) do |r|
280           expect(r.stderr).to match(/Invalid value \".pgp.key.server\"/)
281         end
282       end
283     end
284   end
285
286   describe 'source =>' do
287     context 'http://' do
288       it 'works' do
289         pp = <<-EOS
290         apt_key { 'puppetlabs':
291           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
292           ensure => 'present',
293           source => 'http://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
294         }
295         EOS
296
297         apply_manifest(pp, :catch_failures => true)
298         apply_manifest(pp, :catch_failures => true)
299         shell(PUPPETLABS_KEY_CHECK_COMMAND)
300       end
301
302       it 'fails with a 404' do
303         pp = <<-EOS
304         apt_key { 'puppetlabs':
305           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
306           ensure => 'present',
307           source => 'http://#{PUPPETLABS_APT_URL}/herpderp.gpg',
308         }
309         EOS
310
311         apply_manifest(pp, :expect_failures => true) do |r|
312           expect(r.stderr).to match(/404 Not Found/)
313         end
314       end
315
316       it 'fails with a socket error' do
317         pp = <<-EOS
318         apt_key { 'puppetlabs':
319           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
320           ensure => 'present',
321           source => 'http://apt.puppetlabss.com/herpderp.gpg',
322         }
323         EOS
324
325         apply_manifest(pp, :expect_failures => true) do |r|
326           expect(r.stderr).to match(/could not resolve/)
327         end
328       end
329     end
330
331     context 'ftp://' do
332       before(:each) do
333         shell("apt-key del #{CENTOS_GPG_KEY_LONG_ID}",
334               :acceptable_exit_codes => [0,1,2])
335       end
336
337       it 'works' do
338         pp = <<-EOS
339         apt_key { 'CentOS 6':
340           id     => '#{CENTOS_GPG_KEY_LONG_ID}',
341           ensure => 'present',
342           source => 'ftp://#{CENTOS_REPO_URL}/#{CENTOS_GPG_KEY_FILE}',
343         }
344         EOS
345
346         apply_manifest(pp, :catch_failures => true)
347         apply_manifest(pp, :catch_failures => true)
348         shell(CENTOS_KEY_CHECK_COMMAND)
349       end
350
351       it 'fails with a 550' do
352         pp = <<-EOS
353         apt_key { 'CentOS 6':
354           id     => '#{CENTOS_GPG_KEY_LONG_ID}',
355           ensure => 'present',
356           source => 'ftp://#{CENTOS_REPO_URL}/herpderp.gpg',
357         }
358         EOS
359
360         apply_manifest(pp, :expect_failures => true) do |r|
361           expect(r.stderr).to match(/550 Failed to open/)
362         end
363       end
364
365       it 'fails with a socket error' do
366         pp = <<-EOS
367         apt_key { 'puppetlabs':
368           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
369           ensure => 'present',
370           source => 'ftp://apt.puppetlabss.com/herpderp.gpg',
371         }
372         EOS
373
374         apply_manifest(pp, :expect_failures => true) do |r|
375           expect(r.stderr).to match(/could not resolve/)
376         end
377       end
378     end
379
380     context 'https://' do
381       it 'works' do
382         pp = <<-EOS
383         apt_key { 'puppetlabs':
384           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
385           ensure => 'present',
386           source => 'https://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
387         }
388         EOS
389
390         apply_manifest(pp, :catch_failures => true)
391         apply_manifest(pp, :catch_failures => true)
392         shell(PUPPETLABS_KEY_CHECK_COMMAND)
393       end
394
395       it 'fails with a 404' do
396         pp = <<-EOS
397         apt_key { 'puppetlabs':
398           id     => '4BD6EC30',
399           ensure => 'present',
400           source => 'https://#{PUPPETLABS_APT_URL}/herpderp.gpg',
401         }
402         EOS
403
404         apply_manifest(pp, :expect_failures => true) do |r|
405           expect(r.stderr).to match(/404 Not Found/)
406         end
407       end
408
409       it 'fails with a socket error' do
410         pp = <<-EOS
411         apt_key { 'puppetlabs':
412           id     => '4BD6EC30',
413           ensure => 'present',
414           source => 'https://apt.puppetlabss.com/herpderp.gpg',
415         }
416         EOS
417
418         apply_manifest(pp, :expect_failures => true) do |r|
419           expect(r.stderr).to match(/could not resolve/)
420         end
421       end
422     end
423
424     context '/path/that/exists' do
425       before(:each) do
426         shell("curl -o /tmp/puppetlabs-pubkey.gpg \
427               http://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}")
428       end
429
430       after(:each) do
431         shell('rm /tmp/puppetlabs-pubkey.gpg')
432       end
433
434       it 'works' do
435         pp = <<-EOS
436         apt_key { 'puppetlabs':
437           id     => '4BD6EC30',
438           ensure => 'present',
439           source => '/tmp/puppetlabs-pubkey.gpg',
440         }
441         EOS
442
443         apply_manifest(pp, :catch_failures => true)
444         apply_manifest(pp, :catch_failures => true)
445         shell(PUPPETLABS_KEY_CHECK_COMMAND)
446       end
447     end
448
449     context '/path/that/does/not/exist' do
450       it 'fails' do
451         pp = <<-EOS
452         apt_key { 'puppetlabs':
453           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
454           ensure => 'present',
455           source => '/tmp/totally_bogus.file',
456         }
457         EOS
458
459         apply_manifest(pp, :expect_failures => true) do |r|
460           expect(r.stderr).to match(/does not exist/)
461         end
462       end
463     end
464
465     context '/path/that/exists/with/bogus/content' do
466       before(:each) do
467         shell('echo "here be dragons" > /tmp/fake-key.gpg')
468       end
469
470       after(:each) do
471         shell('rm /tmp/fake-key.gpg')
472       end
473       it 'fails' do
474         pp = <<-EOS
475         apt_key { 'puppetlabs':
476           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
477           ensure => 'present',
478           source => '/tmp/fake-key.gpg',
479         }
480         EOS
481
482         apply_manifest(pp, :expect_failures => true) do |r|
483           expect(r.stderr).to match(/no valid OpenPGP data found/)
484         end
485       end
486     end
487   end
488
489   describe 'keyserver_options =>' do
490     context 'debug' do
491       it 'works' do
492         pp = <<-EOS
493         apt_key { 'puppetlabs':
494           id                => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
495           ensure            => 'present',
496           keyserver_options => 'debug',
497         }
498         EOS
499
500         apply_manifest(pp, :catch_failures => true)
501         apply_manifest(pp, :catch_failures => true)
502         shell(PUPPETLABS_KEY_CHECK_COMMAND)
503       end
504
505       it 'fails on invalid options' do
506         pp = <<-EOS
507         apt_key { 'puppetlabs':
508           id                => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
509           ensure            => 'present',
510           keyserver_options => 'this is totally bonkers',
511         }
512         EOS
513
514         shell("apt-key del #{PUPPETLABS_GPG_KEY_FINGERPRINT}", :acceptable_exit_codes => [0,1,2])
515         apply_manifest(pp, :expect_failures => true) do |r|
516           expect(r.stderr).to match(/--keyserver-options this is totally/)
517         end
518       end
519     end
520   end
521 end