TIMEOUT_RETRY_WAIT = 5
TIMEOUT_ERROR_MATCHER = /no valid OpenPGP data found/
-describe 'apt_key' do
+%w[apt_key apt_key2].each do |typename|
+describe typename do
before(:each) do
# Delete twice to make sure everything is cleaned
# up after the short key collision
context "#{key}" do
it 'works' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{value}',
ensure => 'present',
}
context 'invalid length key id' do
it 'fails' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '8280EF8D349F',
}
EOS
context 'absent' do
it 'is removed' do
pp = <<-EOS
- apt_key { 'centos':
+ #{typename} { 'centos':
id => '#{CENTOS_GPG_KEY_LONG_ID}',
ensure => 'absent',
}
context 'absent, added with long key', :unless => (fact('operatingsystem') == 'Debian' and fact('operatingsystemmajrelease') == '6') do
it 'is removed' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
ensure => 'absent',
}
context 'puppetlabs gpg key' do
it 'works' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_FINGERPRINT}',
ensure => 'present',
content => "-----BEGIN PGP PUBLIC KEY BLOCK-----
context 'multiple keys' do
it 'runs without errors' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_FINGERPRINT}',
ensure => 'present',
content => "-----BEGIN PGP PUBLIC KEY BLOCK-----
context 'bogus key' do
it 'fails' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
ensure => 'present',
content => 'For posterity: such content, much bogus, wow',
context 'hkps.pool.sks-keyservers.net' do
it 'works' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
ensure => 'present',
server => 'hkps.pool.sks-keyservers.net',
context 'hkp://hkps.pool.sks-keyservers.net:80' do
it 'works' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_FINGERPRINT}',
ensure => 'present',
server => 'hkp://hkps.pool.sks-keyservers.net:80',
context 'nonexistant.key.server' do
it 'fails' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
ensure => 'present',
server => 'nonexistant.key.server',
context 'key server start with dot' do
it 'fails' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
ensure => 'present',
server => '.pgp.key.server',
context 'http://' do
it 'works' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
ensure => 'present',
source => 'http://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
it 'works with userinfo' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
ensure => 'present',
source => 'http://dummyuser:dummypassword@#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
it 'fails with a 404' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
ensure => 'present',
source => 'http://#{PUPPETLABS_APT_URL}/herpderp.gpg',
it 'fails with a socket error' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
ensure => 'present',
source => 'http://apt.puppetlabss.com/herpderp.gpg',
it 'works' do
pp = <<-EOS
- apt_key { 'CentOS 6':
+ #{typename} { 'CentOS 6':
id => '#{CENTOS_GPG_KEY_LONG_ID}',
ensure => 'present',
source => 'ftp://#{CENTOS_REPO_URL}/#{CENTOS_GPG_KEY_FILE}',
it 'fails with a 550' do
pp = <<-EOS
- apt_key { 'CentOS 6':
+ #{typename} { 'CentOS 6':
id => '#{SHOULD_NEVER_EXIST_ID}',
ensure => 'present',
source => 'ftp://#{CENTOS_REPO_URL}/herpderp.gpg',
it 'fails with a socket error' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
ensure => 'present',
source => 'ftp://apt.puppetlabss.com/herpderp.gpg',
context 'https://' do
it 'works' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
ensure => 'present',
source => 'https://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
it 'works with userinfo' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
ensure => 'present',
source => 'https://dummyuser:dummypassword@#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
it 'fails with a 404' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{SHOULD_NEVER_EXIST_ID}',
ensure => 'present',
source => 'https://#{PUPPETLABS_APT_URL}/herpderp.gpg',
it 'fails with a socket error' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{SHOULD_NEVER_EXIST_ID}',
ensure => 'present',
source => 'https://apt.puppetlabss.com/herpderp.gpg',
it 'works' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => 'EF8D349F',
ensure => 'present',
source => '/tmp/puppetlabs-pubkey.gpg',
context '/path/that/does/not/exist' do
it 'fails' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
ensure => 'present',
source => '/tmp/totally_bogus.file',
end
it 'fails' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
ensure => 'present',
source => '/tmp/fake-key.gpg',
context 'debug' do
it 'works' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
ensure => 'present',
options => 'debug',
context 'fingerprint in id matches fingerprint from remote key' do
it 'works' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{typename} { 'puppetlabs':
id => '#{PUPPETLABS_GPG_KEY_FINGERPRINT}',
ensure => 'present',
source => 'https://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
context 'fingerprint in id does NOT match fingerprint from remote key' do
it 'works' do
pp = <<-EOS
- apt_key { 'puppetlabs':
+ #{} { 'puppetlabs':
id => '6F6B15509CF8E59E6E469F327F438280EF8D9999',
ensure => 'present',
source => 'https://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
end
end
+end
require 'puppet'
[:apt_key, :apt_key2].each do |typename|
- describe Puppet::Type::type(typename) do
- context 'only namevar 32bit key id' do
- let(:resource) { Puppet::Type.type(typename).new(
- :id => 'EF8D349F'
- )}
- it 'id is set' do
- expect(resource[:id]).to eq 'EF8D349F'
- end
+describe Puppet::Type::type(typename) do
+ context 'only namevar 32bit key id' do
+ let(:resource) { Puppet::Type.type(typename).new(
+ :id => 'EF8D349F'
+ )}
+ it 'id is set' do
+ expect(resource[:id]).to eq 'EF8D349F'
+ end
- it 'name is set to id' do
- expect(resource[:name]).to eq 'EF8D349F'
- end
+ it 'name is set to id' do
+ expect(resource[:name]).to eq 'EF8D349F'
+ end
- it 'keyserver is default' do
- expect(resource[:server]).to eq :'keyserver.ubuntu.com'
- end
+ it 'keyserver is default' do
+ expect(resource[:server]).to eq :'keyserver.ubuntu.com'
+ end
- it 'source is not set' do
- expect(resource[:source]).to eq nil
- end
+ it 'source is not set' do
+ expect(resource[:source]).to eq nil
+ end
- it 'content is not set' do
- expect(resource[:content]).to eq nil
- end
+ it 'content is not set' do
+ expect(resource[:content]).to eq nil
end
+ end
- context 'with a lowercase 32bit key id' do
- let(:resource) { Puppet::Type.type(typename).new(
- :id => 'ef8d349f'
- )}
- it 'id is set' do
- expect(resource[:id]).to eq 'EF8D349F'
- end
+ context 'with a lowercase 32bit key id' do
+ let(:resource) { Puppet::Type.type(typename).new(
+ :id => 'ef8d349f'
+ )}
+ it 'id is set' do
+ expect(resource[:id]).to eq 'EF8D349F'
end
+ end
- context 'with a 64bit key id' do
- let(:resource) { Puppet::Type.type(typename).new(
- :id => 'FFFFFFFFEF8D349F'
- )}
- it 'id is set' do
- expect(resource[:id]).to eq 'FFFFFFFFEF8D349F'
- end
+ context 'with a 64bit key id' do
+ let(:resource) { Puppet::Type.type(typename).new(
+ :id => 'FFFFFFFFEF8D349F'
+ )}
+ it 'id is set' do
+ expect(resource[:id]).to eq 'FFFFFFFFEF8D349F'
end
+ end
- context 'with a 0x formatted key id' do
- let(:resource) { Puppet::Type.type(typename).new(
- :id => '0xEF8D349F'
- )}
- it 'id is set' do
- expect(resource[:id]).to eq 'EF8D349F'
- end
+ context 'with a 0x formatted key id' do
+ let(:resource) { Puppet::Type.type(typename).new(
+ :id => '0xEF8D349F'
+ )}
+ it 'id is set' do
+ expect(resource[:id]).to eq 'EF8D349F'
end
+ end
- context 'with a 0x formatted lowercase key id' do
- let(:resource) { Puppet::Type.type(typename).new(
- :id => '0xef8d349f'
- )}
- it 'id is set' do
- expect(resource[:id]).to eq 'EF8D349F'
- end
+ context 'with a 0x formatted lowercase key id' do
+ let(:resource) { Puppet::Type.type(typename).new(
+ :id => '0xef8d349f'
+ )}
+ it 'id is set' do
+ expect(resource[:id]).to eq 'EF8D349F'
end
+ end
- context 'with a 0x formatted 64bit key id' do
- let(:resource) { Puppet::Type.type(typename).new(
- :id => '0xFFFFFFFFEF8D349F'
- )}
- it 'id is set' do
- expect(resource[:id]).to eq 'FFFFFFFFEF8D349F'
- end
+ context 'with a 0x formatted 64bit key id' do
+ let(:resource) { Puppet::Type.type(typename).new(
+ :id => '0xFFFFFFFFEF8D349F'
+ )}
+ it 'id is set' do
+ expect(resource[:id]).to eq 'FFFFFFFFEF8D349F'
end
+ end
- context 'with source' do
- let(:resource) { Puppet::Type.type(typename).new(
- :id => 'EF8D349F',
- :source => 'http://apt.puppetlabs.com/pubkey.gpg'
- )}
+ context 'with source' do
+ let(:resource) { Puppet::Type.type(typename).new(
+ :id => 'EF8D349F',
+ :source => 'http://apt.puppetlabs.com/pubkey.gpg'
+ )}
- it 'source is set to the URL' do
- expect(resource[:source]).to eq 'http://apt.puppetlabs.com/pubkey.gpg'
- end
+ it 'source is set to the URL' do
+ expect(resource[:source]).to eq 'http://apt.puppetlabs.com/pubkey.gpg'
end
+ end
- context 'with content' do
- let(:resource) { Puppet::Type.type(typename).new(
- :id => 'EF8D349F',
- :content => 'http://apt.puppetlabs.com/pubkey.gpg'
- )}
+ context 'with content' do
+ let(:resource) { Puppet::Type.type(typename).new(
+ :id => 'EF8D349F',
+ :content => 'http://apt.puppetlabs.com/pubkey.gpg'
+ )}
- it 'content is set to the string' do
- expect(resource[:content]).to eq 'http://apt.puppetlabs.com/pubkey.gpg'
- end
+ it 'content is set to the string' do
+ expect(resource[:content]).to eq 'http://apt.puppetlabs.com/pubkey.gpg'
end
+ end
- context 'with keyserver' do
- let(:resource) { Puppet::Type.type(typename).new(
- :id => 'EF8D349F',
- :server => 'http://keyring.debian.org'
- )}
+ context 'with keyserver' do
+ let(:resource) { Puppet::Type.type(typename).new(
+ :id => 'EF8D349F',
+ :server => 'http://keyring.debian.org'
+ )}
- it 'keyserver is set to Debian' do
- expect(resource[:server]).to eq 'http://keyring.debian.org'
- end
+ it 'keyserver is set to Debian' do
+ expect(resource[:server]).to eq 'http://keyring.debian.org'
end
+ end
- context 'validation' do
- it 'raises an error if content and source are set' do
- expect { Puppet::Type.type(typename).new(
- :id => 'EF8D349F',
- :source => 'http://apt.puppetlabs.com/pubkey.gpg',
- :content => 'Completely invalid as a GPG key'
- )}.to raise_error(/content and source are mutually exclusive/)
- end
-
- it 'raises an error if a weird length key is used' do
- expect { Puppet::Type.type(typename).new(
- :id => 'FEF8D349F',
- :source => 'http://apt.puppetlabs.com/pubkey.gpg',
- :content => 'Completely invalid as a GPG key'
- )}.to raise_error(/Valid values match/)
+ context 'validation' do
+ it 'raises an error if content and source are set' do
+ if typename == :apt_key2
+ pending "cross-property validation moved completely to the provider"
end
+ expect { Puppet::Type.type(typename).new(
+ :id => 'EF8D349F',
+ :source => 'http://apt.puppetlabs.com/pubkey.gpg',
+ :content => 'Completely invalid as a GPG key'
+ )}.to raise_error(/content and source are mutually exclusive/)
+ end
- it 'raises an error when an invalid URI scheme is used in source' do
- expect { Puppet::Type.type(typename).new(
- :id => 'EF8D349F',
- :source => 'hkp://pgp.mit.edu'
- )}.to raise_error(/Valid values match/)
- end
+ it 'raises an error if a weird length key is used' do
+ expect { Puppet::Type.type(typename).new(
+ :id => 'FEF8D349F',
+ :source => 'http://apt.puppetlabs.com/pubkey.gpg',
+ :content => 'Completely invalid as a GPG key'
+ )}.to raise_error(/Valid values match/)
+ end
- it 'allows the http URI scheme in source' do
- expect { Puppet::Type.type(typename).new(
- :id => 'EF8D349F',
- :source => 'http://pgp.mit.edu'
- )}.to_not raise_error
- end
+ it 'raises an error when an invalid URI scheme is used in source' do
+ expect { Puppet::Type.type(typename).new(
+ :id => 'EF8D349F',
+ :source => 'hkp://pgp.mit.edu'
+ )}.to raise_error(/Valid values match/)
+ end
- it 'allows the http URI with username and password' do
- expect { Puppet::Type.type(typename).new(
- :id => '4BD6EC30',
- :source => 'http://testme:Password2@pgp.mit.edu'
- )}.to_not raise_error
- end
+ it 'allows the http URI scheme in source' do
+ expect { Puppet::Type.type(typename).new(
+ :id => 'EF8D349F',
+ :source => 'http://pgp.mit.edu'
+ )}.to_not raise_error
+ end
- it 'allows the https URI scheme in source' do
- expect { Puppet::Type.type(typename).new(
- :id => 'EF8D349F',
- :source => 'https://pgp.mit.edu'
- )}.to_not raise_error
- end
+ it 'allows the http URI with username and password' do
+ expect { Puppet::Type.type(typename).new(
+ :id => '4BD6EC30',
+ :source => 'http://testme:Password2@pgp.mit.edu'
+ )}.to_not raise_error
+ end
- it 'allows the https URI with username and password' do
- expect { Puppet::Type.type(typename).new(
- :id => 'EF8D349F',
- :source => 'https://testme:Password2@pgp.mit.edu'
- )}.to_not raise_error
- end
+ it 'allows the https URI scheme in source' do
+ expect { Puppet::Type.type(typename).new(
+ :id => 'EF8D349F',
+ :source => 'https://pgp.mit.edu'
+ )}.to_not raise_error
+ end
- it 'allows the ftp URI scheme in source' do
- expect { Puppet::Type.type(typename).new(
+ it 'allows the https URI with username and password' do
+ expect { Puppet::Type.type(typename).new(
:id => 'EF8D349F',
- :source => 'ftp://pgp.mit.edu'
- )}.to_not raise_error
- end
+ :source => 'https://testme:Password2@pgp.mit.edu'
+ )}.to_not raise_error
+ end
- it 'allows an absolute path in source' do
- expect { Puppet::Type.type(typename).new(
- :id => 'EF8D349F',
- :source => '/path/to/a/file'
- )}.to_not raise_error
- end
+ it 'allows the ftp URI scheme in source' do
+ expect { Puppet::Type.type(typename).new(
+ :id => 'EF8D349F',
+ :source => 'ftp://pgp.mit.edu'
+ )}.to_not raise_error
+ end
- it 'allows 5-digit ports' do
- expect { Puppet::Type.type(typename).new(
- :id => 'EF8D349F',
- :source => 'http://pgp.mit.edu:12345/key'
- )}.to_not raise_error
- end
+ it 'allows an absolute path in source' do
+ expect { Puppet::Type.type(typename).new(
+ :id => 'EF8D349F',
+ :source => '/path/to/a/file'
+ )}.to_not raise_error
+ end
- it 'allows 5-digit ports when using key servers' do
- expect { Puppet::Type.type(typename).new(
- :id => 'EF8D349F',
- :server => 'http://pgp.mit.edu:12345'
- )}.to_not raise_error
- end
+ it 'allows 5-digit ports' do
+ expect { Puppet::Type.type(typename).new(
+ :id => 'EF8D349F',
+ :source => 'http://pgp.mit.edu:12345/key'
+ )}.to_not raise_error
+ end
+
+ it 'allows 5-digit ports when using key servers' do
+ expect { Puppet::Type.type(typename).new(
+ :id => 'EF8D349F',
+ :server => 'http://pgp.mit.edu:12345'
+ )}.to_not raise_error
end
end
end
+end