1 require 'spec_helper_acceptance'
3 PUPPETLABS_GPG_KEY_ID = '4BD6EC30'
4 PUPPETLABS_GPG_LONG_KEY_ID = '1054B7A24BD6EC30'
5 PUPPETLABS_APT_URL = 'apt.puppetlabs.com'
6 PUPPETLABS_GPG_KEY_FILE = 'pubkey.gpg'
7 CENTOS_GPG_KEY_ID = 'C105B9DE'
8 CENTOS_REPO_URL = 'ftp.cvut.cz/centos'
9 CENTOS_GPG_KEY_FILE = 'RPM-GPG-KEY-CentOS-6'
13 # Delete twice to make sure everything is cleaned
14 # up after the short key collision
15 shell("apt-key del #{PUPPETLABS_GPG_KEY_ID}",
16 :acceptable_exit_codes => [0,1,2])
17 shell("apt-key del #{PUPPETLABS_GPG_KEY_ID}",
18 :acceptable_exit_codes => [0,1,2])
21 describe 'default options' do
23 '32bit key id' => '4BD6EC30',
24 '64bit key id' => '1054B7A24BD6EC30',
25 '32bit lowercase key id' => '4bd6ec30',
26 '64bit lowercase key id' => '1054b7a24bd6ec30',
27 '0x formatted 32bit key id' => '0x4BD6EC30',
28 '0x formatted 64bit key id' => '0x1054B7A24BD6EC30',
29 '0x formatted 32bit lowercase key id' => '0x4bd6ec30',
30 '0x formatted 64bit lowercase key id' => '0x1054b7a24bd6ec30',
33 key_versions.each do |key, value|
37 apt_key { 'puppetlabs':
43 apply_manifest(pp, :catch_failures => true)
44 apply_manifest(pp, :catch_changes => true)
45 shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
50 context 'invalid length key id' do
53 apt_key { 'puppetlabs':
54 id => '4B7A24BD6EC30',
58 apply_manifest(pp, :expect_failures => true) do |r|
59 expect(r.stderr).to match(/Valid values match/)
65 describe 'ensure =>' do
70 id => '#{CENTOS_GPG_KEY_ID}',
75 # Install the key first
76 shell("apt-key adv --keyserver keyserver.ubuntu.com \
77 --recv-keys #{CENTOS_GPG_KEY_ID}")
78 shell("apt-key list | grep #{CENTOS_GPG_KEY_ID}")
80 # Time to remove it using Puppet
81 apply_manifest(pp, :catch_failures => true)
82 apply_manifest(pp, :catch_failures => true)
84 shell("apt-key list | grep #{CENTOS_GPG_KEY_ID}",
85 :acceptable_exit_codes => [1])
87 shell("apt-key adv --keyserver keyserver.ubuntu.com \
88 --recv-keys #{CENTOS_GPG_KEY_ID}")
92 context 'absent, added with long key', :unless => (fact('operatingsystem') == 'Debian' and fact('operatingsystemmajrelease') == '6') do
95 apt_key { 'puppetlabs':
96 id => '#{PUPPETLABS_GPG_KEY_ID}',
101 # Install the key first
102 shell("apt-key adv --keyserver keyserver.ubuntu.com \
103 --recv-keys #{PUPPETLABS_GPG_LONG_KEY_ID}")
104 shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
106 # Time to remove it using Puppet
107 apply_manifest(pp, :catch_failures => true)
108 apply_manifest(pp, :catch_failures => true)
110 shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}",
111 :acceptable_exit_codes => [1])
116 describe 'content =>' do
117 context 'puppetlabs gpg key' do
120 apt_key { 'puppetlabs':
121 id => '#{PUPPETLABS_GPG_KEY_ID}',
123 content => "-----BEGIN PGP PUBLIC KEY BLOCK-----
124 Version: GnuPG v1.4.12 (GNU/Linux)
125 Comment: GPGTools - http://gpgtools.org
127 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
182 -----END PGP PUBLIC KEY BLOCK-----",
186 apply_manifest(pp, :catch_failures => true)
187 apply_manifest(pp, :catch_failures => true)
188 shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
192 context 'bogus key' do
195 apt_key { 'puppetlabs':
196 id => '#{PUPPETLABS_GPG_KEY_ID}',
198 content => 'For posterity: such content, much bogus, wow',
202 apply_manifest(pp, :expect_failures => true) do |r|
203 expect(r.stderr).to match(/no valid OpenPGP data found/)
209 describe 'server =>' do
210 context 'pgp.mit.edu' do
213 apt_key { 'puppetlabs':
214 id => '#{PUPPETLABS_GPG_KEY_ID}',
216 server => 'pgp.mit.edu',
220 apply_manifest(pp, :catch_failures => true)
221 apply_manifest(pp, :catch_failures => true)
222 shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
226 context 'hkp://pgp.mit.edu:80' do
229 apt_key { 'puppetlabs':
230 id => '#{PUPPETLABS_GPG_KEY_ID}',
232 server => 'hkp://pgp.mit.edu:80',
236 apply_manifest(pp, :catch_failures => true)
237 apply_manifest(pp, :catch_failures => true)
238 shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
242 context 'nonexistant.key.server' do
245 apt_key { 'puppetlabs':
246 id => '#{PUPPETLABS_GPG_KEY_ID}',
248 server => 'nonexistant.key.server',
252 apply_manifest(pp, :expect_failures => true) do |r|
253 expect(r.stderr).to match(/(Host not found|Couldn't resolve host)/)
258 context 'key server start with dot' do
261 apt_key { 'puppetlabs':
262 id => '#{PUPPETLABS_GPG_KEY_ID}',
264 server => '.pgp.key.server',
268 apply_manifest(pp, :expect_failures => true) do |r|
269 expect(r.stderr).to match(/Invalid value \".pgp.key.server\"/)
275 describe 'source =>' do
279 apt_key { 'puppetlabs':
280 id => '#{PUPPETLABS_GPG_KEY_ID}',
282 source => 'http://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
286 apply_manifest(pp, :catch_failures => true)
287 apply_manifest(pp, :catch_failures => true)
288 shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
291 it 'fails with a 404' do
293 apt_key { 'puppetlabs':
294 id => '#{PUPPETLABS_GPG_KEY_ID}',
296 source => 'http://#{PUPPETLABS_APT_URL}/herpderp.gpg',
300 apply_manifest(pp, :expect_failures => true) do |r|
301 expect(r.stderr).to match(/404 Not Found/)
305 it 'fails with a socket error' do
307 apt_key { 'puppetlabs':
308 id => '#{PUPPETLABS_GPG_KEY_ID}',
310 source => 'http://apt.puppetlabss.com/herpderp.gpg',
314 apply_manifest(pp, :expect_failures => true) do |r|
315 expect(r.stderr).to match(/could not resolve/)
322 shell("apt-key del #{CENTOS_GPG_KEY_ID}",
323 :acceptable_exit_codes => [0,1,2])
328 apt_key { 'CentOS 6':
329 id => '#{CENTOS_GPG_KEY_ID}',
331 source => 'ftp://#{CENTOS_REPO_URL}/#{CENTOS_GPG_KEY_FILE}',
335 apply_manifest(pp, :catch_failures => true)
336 apply_manifest(pp, :catch_failures => true)
337 shell("apt-key list | grep #{CENTOS_GPG_KEY_ID}")
340 it 'fails with a 550' do
342 apt_key { 'CentOS 6':
343 id => '#{CENTOS_GPG_KEY_ID}',
345 source => 'ftp://#{CENTOS_REPO_URL}/herpderp.gpg',
349 apply_manifest(pp, :expect_failures => true) do |r|
350 expect(r.stderr).to match(/550 Failed to open/)
354 it 'fails with a socket error' do
356 apt_key { 'puppetlabs':
357 id => '#{PUPPETLABS_GPG_KEY_ID}',
359 source => 'ftp://apt.puppetlabss.com/herpderp.gpg',
363 apply_manifest(pp, :expect_failures => true) do |r|
364 expect(r.stderr).to match(/could not resolve/)
369 context 'https://' do
372 apt_key { 'puppetlabs':
373 id => '#{PUPPETLABS_GPG_KEY_ID}',
375 source => 'https://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
379 apply_manifest(pp, :catch_failures => true)
380 apply_manifest(pp, :catch_failures => true)
381 shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
384 it 'fails with a 404' do
386 apt_key { 'puppetlabs':
389 source => 'https://#{PUPPETLABS_APT_URL}/herpderp.gpg',
393 apply_manifest(pp, :expect_failures => true) do |r|
394 expect(r.stderr).to match(/404 Not Found/)
398 it 'fails with a socket error' do
400 apt_key { 'puppetlabs':
403 source => 'https://apt.puppetlabss.com/herpderp.gpg',
407 apply_manifest(pp, :expect_failures => true) do |r|
408 expect(r.stderr).to match(/could not resolve/)
413 context '/path/that/exists' do
415 shell("curl -o /tmp/puppetlabs-pubkey.gpg \
416 http://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}")
420 shell('rm /tmp/puppetlabs-pubkey.gpg')
425 apt_key { 'puppetlabs':
428 source => '/tmp/puppetlabs-pubkey.gpg',
432 apply_manifest(pp, :catch_failures => true)
433 apply_manifest(pp, :catch_failures => true)
434 shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
438 context '/path/that/does/not/exist' do
441 apt_key { 'puppetlabs':
442 id => '#{PUPPETLABS_GPG_KEY_ID}',
444 source => '/tmp/totally_bogus.file',
448 apply_manifest(pp, :expect_failures => true) do |r|
449 expect(r.stderr).to match(/does not exist/)
454 context '/path/that/exists/with/bogus/content' do
456 shell('echo "here be dragons" > /tmp/fake-key.gpg')
460 shell('rm /tmp/fake-key.gpg')
464 apt_key { 'puppetlabs':
465 id => '#{PUPPETLABS_GPG_KEY_ID}',
467 source => '/tmp/fake-key.gpg',
471 apply_manifest(pp, :expect_failures => true) do |r|
472 expect(r.stderr).to match(/no valid OpenPGP data found/)
478 describe 'keyserver_options =>' do
482 apt_key { 'puppetlabs':
483 id => '#{PUPPETLABS_GPG_KEY_ID}',
485 keyserver_options => 'debug',
489 apply_manifest(pp, :catch_failures => true)
490 apply_manifest(pp, :catch_failures => true)
491 shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
494 it 'fails on invalid options' do
496 apt_key { 'puppetlabs':
497 id => '#{PUPPETLABS_GPG_KEY_ID}',
499 keyserver_options => 'this is totally bonkers',
503 shell("apt-key del #{PUPPETLABS_GPG_KEY_ID}", :acceptable_exit_codes => [0,1,2])
504 apply_manifest(pp, :expect_failures => true) do |r|
505 expect(r.stderr).to match(/--keyserver-options this is totally/)