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