3 GPG_KEY_ID = '6F6B15509CF8E59E6E469F327F438280EF8D349F'.freeze
5 title_key_example = { id: GPG_KEY_ID,
8 server: 'keyserver.ubuntu.com',
12 def default_apt_key_example(title)
16 server: 'keyserver.ubuntu.com',
22 def bunch_things_apt_key_example(title, params)
25 source: 'http://apt.puppetlabs.com/pubkey.gpg',
26 server: 'pgp.mit.edu',
27 content: params[:content],
31 def absent_apt_key(title)
35 server: 'keyserver.ubuntu.com',
40 describe 'apt::key' do
47 os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
50 lsbdistcodename: 'jessie',
58 describe 'normal operation' do
59 describe 'default options' do
60 it 'contains the apt_key' do
61 is_expected.to contain_apt_key(title).with(default_apt_key_example(title))
63 it 'contains the apt_key present anchor' do
64 is_expected.to contain_anchor("apt_key #{title} present")
68 describe 'title and key =>' do
79 it 'contains the apt_key' do
80 is_expected.to contain_apt_key(title).with(title_key_example)
82 it 'contains the apt_key present anchor' do
83 is_expected.to contain_anchor("apt_key #{GPG_KEY_ID} present")
87 describe 'ensure => absent' do
94 it 'contains the apt_key' do
95 is_expected.to contain_apt_key(title).with(absent_apt_key(title))
97 it 'contains the apt_key absent anchor' do
98 is_expected.to contain_anchor("apt_key #{title} absent")
102 describe 'ensure => refreshed' do
109 it 'contains the apt_key with refresh => true' do
110 is_expected.to contain_apt_key(title).with(
117 describe 'set a bunch of things!' do
120 content: 'GPG key content',
121 source: 'http://apt.puppetlabs.com/pubkey.gpg',
122 server: 'pgp.mit.edu',
127 it 'contains the apt_key' do
128 is_expected.to contain_apt_key(title).with(bunch_things_apt_key_example(title, params))
130 it 'contains the apt_key present anchor' do
131 is_expected.to contain_anchor("apt_key #{title} present")
135 context 'when domain with dash' do
138 server: 'p-gp.m-it.edu',
142 it 'contains the apt_key' do
143 is_expected.to contain_apt_key(title).with(id: title,
144 server: 'p-gp.m-it.edu')
148 context 'with url' do
151 server: 'hkp://pgp.mit.edu',
155 it 'contains the apt_key' do
156 is_expected.to contain_apt_key(title).with(id: title,
157 server: 'hkp://pgp.mit.edu')
160 context 'when url with port number' do
163 server: 'hkp://pgp.mit.edu:80',
167 it 'contains the apt_key' do
168 is_expected.to contain_apt_key(title).with(id: title,
169 server: 'hkp://pgp.mit.edu:80')
174 describe 'validation' do
175 context 'when domain begin with dash' do
178 server: '-pgp.mit.edu',
183 is_expected .to raise_error(%r{expects a match})
187 context 'when domain begin with dot' do
190 server: '.pgp.mit.edu',
195 is_expected .to raise_error(%r{expects a match})
199 context 'when domain end with dot' do
202 server: 'pgp.mit.edu.',
207 is_expected .to raise_error(%r{expects a match})
210 context 'when character url exceeded' do
213 server: 'hkp://pgpiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii.mit.edu',
218 is_expected.to raise_error(%r{expects a match})
221 context 'with incorrect port number url' do
224 server: 'hkp://pgp.mit.edu:8008080',
229 is_expected.to raise_error(%r{expects a match})
232 context 'with incorrect protocol for url' do
235 server: 'abc://pgp.mit.edu:80',
240 is_expected.to raise_error(%r{expects a match})
243 context 'with missing port number url' do
246 server: 'hkp://pgp.mit.edu:',
251 is_expected.to raise_error(%r{expects a match})
254 context 'with url ending with a dot' do
257 server: 'hkp://pgp.mit.edu.',
262 is_expected.to raise_error(%r{expects a match})
265 context 'when url begins with a dash' do
268 server: 'hkp://-pgp.mit.edu',
273 is_expected.to raise_error(%r{expects a match})
276 context 'with invalid key' do
278 'Out of rum. Why? Why are we out of rum?'
282 is_expected.to raise_error(%r{expects a match})
286 context 'with invalid source' do
289 source: 'afp://puppetlabs.com/key.gpg',
294 is_expected.to raise_error(%r{evaluating a Resource})
298 context 'with invalid content' do
306 is_expected.to raise_error(%r{expects a})
310 context 'with invalid server' do
313 server: 'two bottles of rum',
318 is_expected.to raise_error(%r{expects a match})
322 context 'with invalid options' do
330 is_expected.to raise_error(%r{expects a})
334 context 'with invalid ensure' do
335 ['foo', 'aabsent', 'absenta', 'apresent', 'presenta', 'refresh', 'arefreshed', 'refresheda'].each do |param|
343 is_expected.to raise_error(%r{for Enum\['absent', 'present', 'refreshed'\], got})
348 describe 'duplication - two apt::key resources for same key, different titles' do
349 let :pre_condition do
351 apt::key { 'duplicate': id => '#{title}', }"
354 it 'contains two apt::key resource - duplicate' do
355 is_expected.to contain_apt__key('duplicate').with(id: title,
358 it 'contains two apt::key resource - title' do
359 is_expected.to contain_apt__key(title).with(id: title,
363 it 'contains only a single apt_key - duplicate' do
364 is_expected.to contain_apt_key('duplicate').with(default_apt_key_example(title))
366 it 'contains only a single apt_key - no title' do
367 is_expected.not_to contain_apt_key(title)
371 describe 'duplication - two apt::key resources, different ensure' do
372 let :pre_condition do
374 apt::key { 'duplicate': id => '#{title}', ensure => 'absent', }"
377 it 'informs the user of the impossibility' do
378 is_expected.to raise_error(%r{already ensured as absent})
383 describe 'defaults' do
384 context 'when setting keyserver on the apt class' do
385 let :pre_condition do
387 keyserver => "keyserver.example.com",
391 it 'uses default keyserver' do
392 is_expected.to contain_apt_key(title).with_server('keyserver.example.com')
396 context 'when setting key_options on the apt class' do
397 let :pre_condition do
399 key_options => "http-proxy=http://proxy.example.com:8080",
403 it 'uses default keyserver' do
404 is_expected.to contain_apt_key(title).with_options('http-proxy=http://proxy.example.com:8080')