apt_key now really works with userinfo for http(s)
[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 hkps.pool.sks-keyservers.net \
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 hkps.pool.sks-keyservers.net \
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 hkps.pool.sks-keyservers.net \
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 'multiple keys' do
206       it 'runs without errors' do
207         pp = <<-EOS
208           apt_key { 'puppetlabs':
209             id      => '#{PUPPETLABS_GPG_KEY_FINGERPRINT}',
210             ensure  => 'present',
211             content => "-----BEGIN PGP PUBLIC KEY BLOCK-----
212 Version: GnuPG v1.4.12 (GNU/Linux)
213 Comment: GPGTools - http://gpgtools.org
214
215 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
376 =Gl+v
377 -----END PGP PUBLIC KEY BLOCK-----",
378           }
379         EOS
380         apply_manifest(pp, :catch_failures => true)
381         apply_manifest(pp, :catch_failures => true)
382         shell(PUPPETLABS_KEY_CHECK_COMMAND)
383       end
384     end
385
386     context 'bogus key' do
387       it 'fails' do
388         pp = <<-EOS
389         apt_key { 'puppetlabs':
390           id      => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
391           ensure  => 'present',
392           content => 'For posterity: such content, much bogus, wow',
393         }
394         EOS
395
396         apply_manifest(pp, :expect_failures => true) do |r|
397           expect(r.stderr).to match(/no valid OpenPGP data found/)
398         end
399       end
400     end
401   end
402
403   describe 'server =>' do
404     context 'hkps.pool.sks-keyservers.net' do
405       it 'works' do
406         pp = <<-EOS
407         apt_key { 'puppetlabs':
408           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
409           ensure => 'present',
410           server => 'hkps.pool.sks-keyservers.net',
411         }
412         EOS
413
414         apply_manifest(pp, :catch_failures => true)
415         apply_manifest(pp, :catch_failures => true)
416         shell(PUPPETLABS_KEY_CHECK_COMMAND)
417       end
418     end
419
420     context 'hkp://hkps.pool.sks-keyservers.net:80' do
421       it 'works' do
422         pp = <<-EOS
423         apt_key { 'puppetlabs':
424           id     => '#{PUPPETLABS_GPG_KEY_FINGERPRINT}',
425           ensure => 'present',
426           server => 'hkp://hkps.pool.sks-keyservers.net:80',
427         }
428         EOS
429
430         apply_manifest(pp, :catch_failures => true)
431         apply_manifest(pp, :catch_failures => true)
432         shell(PUPPETLABS_KEY_CHECK_COMMAND)
433       end
434     end
435
436     context 'nonexistant.key.server' do
437       it 'fails' do
438         pp = <<-EOS
439         apt_key { 'puppetlabs':
440           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
441           ensure => 'present',
442           server => 'nonexistant.key.server',
443         }
444         EOS
445
446         apply_manifest(pp, :expect_failures => true) do |r|
447           expect(r.stderr).to match(/(Host not found|Couldn't resolve host)/)
448         end
449       end
450     end
451
452     context 'key server start with dot' do
453       it 'fails' do
454         pp = <<-EOS
455         apt_key { 'puppetlabs':
456           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
457           ensure => 'present',
458           server => '.pgp.key.server',
459         }
460         EOS
461
462         apply_manifest(pp, :expect_failures => true) do |r|
463           expect(r.stderr).to match(/Invalid value \".pgp.key.server\"/)
464         end
465       end
466     end
467   end
468
469   describe 'source =>' do
470     context 'http://' do
471       it 'works' do
472         pp = <<-EOS
473         apt_key { 'puppetlabs':
474           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
475           ensure => 'present',
476           source => 'http://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
477         }
478         EOS
479
480         apply_manifest(pp, :catch_failures => true)
481         apply_manifest(pp, :catch_failures => true)
482         shell(PUPPETLABS_KEY_CHECK_COMMAND)
483       end
484
485       it 'works with userinfo' do
486         pp = <<-EOS
487         apt_key { 'puppetlabs':
488           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
489           ensure => 'present',
490           source => 'http://dummyuser:dummypassword@#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
491         }
492         EOS
493
494         apply_manifest(pp, :catch_failures => true)
495         apply_manifest(pp, :catch_failures => true)
496         shell(PUPPETLABS_KEY_CHECK_COMMAND)
497       end
498
499       it 'fails with a 404' do
500         pp = <<-EOS
501         apt_key { 'puppetlabs':
502           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
503           ensure => 'present',
504           source => 'http://#{PUPPETLABS_APT_URL}/herpderp.gpg',
505         }
506         EOS
507
508         apply_manifest(pp, :expect_failures => true) do |r|
509           expect(r.stderr).to match(/404 Not Found/)
510         end
511       end
512
513       it 'fails with a socket error' do
514         pp = <<-EOS
515         apt_key { 'puppetlabs':
516           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
517           ensure => 'present',
518           source => 'http://apt.puppetlabss.com/herpderp.gpg',
519         }
520         EOS
521
522         apply_manifest(pp, :expect_failures => true) do |r|
523           expect(r.stderr).to match(/could not resolve/)
524         end
525       end
526     end
527
528     context 'ftp://' do
529       before(:each) do
530         shell("apt-key del #{CENTOS_GPG_KEY_LONG_ID}",
531               :acceptable_exit_codes => [0,1,2])
532       end
533
534       it 'works' do
535         pp = <<-EOS
536         apt_key { 'CentOS 6':
537           id     => '#{CENTOS_GPG_KEY_LONG_ID}',
538           ensure => 'present',
539           source => 'ftp://#{CENTOS_REPO_URL}/#{CENTOS_GPG_KEY_FILE}',
540         }
541         EOS
542
543         apply_manifest(pp, :catch_failures => true)
544         apply_manifest(pp, :catch_failures => true)
545         shell(CENTOS_KEY_CHECK_COMMAND)
546       end
547
548       it 'fails with a 550' do
549         pp = <<-EOS
550         apt_key { 'CentOS 6':
551           id     => '#{SHOULD_NEVER_EXIST_ID}',
552           ensure => 'present',
553           source => 'ftp://#{CENTOS_REPO_URL}/herpderp.gpg',
554         }
555         EOS
556
557         apply_manifest(pp, :expect_failures => true) do |r|
558           expect(r.stderr).to match(/550 Failed to open/)
559         end
560       end
561
562       it 'fails with a socket error' do
563         pp = <<-EOS
564         apt_key { 'puppetlabs':
565           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
566           ensure => 'present',
567           source => 'ftp://apt.puppetlabss.com/herpderp.gpg',
568         }
569         EOS
570
571         apply_manifest(pp, :expect_failures => true) do |r|
572           expect(r.stderr).to match(/could not resolve/)
573         end
574       end
575     end
576
577     context 'https://' do
578       it 'works' do
579         pp = <<-EOS
580         apt_key { 'puppetlabs':
581           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
582           ensure => 'present',
583           source => 'https://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
584         }
585         EOS
586
587         apply_manifest(pp, :catch_failures => true)
588         apply_manifest(pp, :catch_failures => true)
589         shell(PUPPETLABS_KEY_CHECK_COMMAND)
590       end
591
592       it 'works with userinfo' do
593         pp = <<-EOS
594         apt_key { 'puppetlabs':
595           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
596           ensure => 'present',
597           source => 'https://dummyuser:dummypassword@#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
598         }
599         EOS
600
601         apply_manifest(pp, :catch_failures => true)
602         apply_manifest(pp, :catch_failures => true)
603         shell(PUPPETLABS_KEY_CHECK_COMMAND)
604       end
605
606       it 'fails with a 404' do
607         pp = <<-EOS
608         apt_key { 'puppetlabs':
609           id     => '#{SHOULD_NEVER_EXIST_ID}',
610           ensure => 'present',
611           source => 'https://#{PUPPETLABS_APT_URL}/herpderp.gpg',
612         }
613         EOS
614
615         apply_manifest(pp, :expect_failures => true) do |r|
616           expect(r.stderr).to match(/404 Not Found/)
617         end
618       end
619
620       it 'fails with a socket error' do
621         pp = <<-EOS
622         apt_key { 'puppetlabs':
623           id     => '#{SHOULD_NEVER_EXIST_ID}',
624           ensure => 'present',
625           source => 'https://apt.puppetlabss.com/herpderp.gpg',
626         }
627         EOS
628
629         apply_manifest(pp, :expect_failures => true) do |r|
630           expect(r.stderr).to match(/could not resolve/)
631         end
632       end
633     end
634
635     context '/path/that/exists' do
636       before(:each) do
637         shell("curl -o /tmp/puppetlabs-pubkey.gpg \
638               http://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}")
639       end
640
641       after(:each) do
642         shell('rm /tmp/puppetlabs-pubkey.gpg')
643       end
644
645       it 'works' do
646         pp = <<-EOS
647         apt_key { 'puppetlabs':
648           id     => '4BD6EC30',
649           ensure => 'present',
650           source => '/tmp/puppetlabs-pubkey.gpg',
651         }
652         EOS
653
654         apply_manifest(pp, :catch_failures => true)
655         apply_manifest(pp, :catch_failures => true)
656         shell(PUPPETLABS_KEY_CHECK_COMMAND)
657       end
658     end
659
660     context '/path/that/does/not/exist' do
661       it 'fails' do
662         pp = <<-EOS
663         apt_key { 'puppetlabs':
664           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
665           ensure => 'present',
666           source => '/tmp/totally_bogus.file',
667         }
668         EOS
669
670         apply_manifest(pp, :expect_failures => true) do |r|
671           expect(r.stderr).to match(/does not exist/)
672         end
673       end
674     end
675
676     context '/path/that/exists/with/bogus/content' do
677       before(:each) do
678         shell('echo "here be dragons" > /tmp/fake-key.gpg')
679       end
680
681       after(:each) do
682         shell('rm /tmp/fake-key.gpg')
683       end
684       it 'fails' do
685         pp = <<-EOS
686         apt_key { 'puppetlabs':
687           id     => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
688           ensure => 'present',
689           source => '/tmp/fake-key.gpg',
690         }
691         EOS
692
693         apply_manifest(pp, :expect_failures => true) do |r|
694           expect(r.stderr).to match(/no valid OpenPGP data found/)
695         end
696       end
697     end
698   end
699
700   describe 'options =>' do
701     context 'debug' do
702       it 'works' do
703         pp = <<-EOS
704         apt_key { 'puppetlabs':
705           id      => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
706           ensure  => 'present',
707           options => 'debug',
708         }
709         EOS
710
711         apply_manifest(pp, :catch_failures => true)
712         apply_manifest(pp, :catch_failures => true)
713         shell(PUPPETLABS_KEY_CHECK_COMMAND)
714       end
715     end
716   end
717
718   describe 'fingerprint validation against source/content' do
719     context 'fingerprint in id matches fingerprint from remote key' do
720       it 'works' do
721         pp = <<-EOS
722         apt_key { 'puppetlabs':
723           id      => '#{PUPPETLABS_GPG_KEY_FINGERPRINT}',
724           ensure  => 'present',
725           source  => 'https://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
726         }
727         EOS
728
729         apply_manifest(pp, :catch_failures => true)
730         apply_manifest(pp, :catch_failures => true)
731       end
732     end
733
734     context 'fingerprint in id does NOT match fingerprint from remote key' do
735       it 'works' do
736         pp = <<-EOS
737         apt_key { 'puppetlabs':
738           id      => '47B320EB4C7C375AA9DAE1A01054B7A24BD6E666',
739           ensure  => 'present',
740           source  => 'https://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
741         }
742         EOS
743
744         apply_manifest(pp, :expect_failures => true) do |r|
745           expect(r.stderr).to match(/do not match/)
746         end
747       end
748     end
749   end
750
751 end