Merge pull request #229 from daenney/apt-key-ftp
[puppet-modules/puppetlabs-apt.git] / spec / acceptance / apt_source_spec.rb
1 require 'spec_helper_acceptance'
2
3 describe 'apt::source', :unless => UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
4
5   context 'apt::source' do
6     context 'ensure => present' do
7       it 'should work with no errors' do
8         pp = <<-EOS
9         include '::apt'
10         apt::source { 'puppetlabs':
11           ensure     => present,
12           location   => 'http://apt.puppetlabs.com',
13           repos      => 'main',
14           key        => '4BD6EC30',
15           key_server => 'pgp.mit.edu',
16         }
17         EOS
18
19         shell('apt-key del 4BD6EC30', :acceptable_exit_codes => [0,1,2])
20         shell('rm /etc/apt/sources.list.d/puppetlabs.list', :acceptable_exit_codes => [0,1,2])
21         apply_manifest(pp, :catch_failures => true)
22       end
23
24       describe 'key should exist' do
25         it 'finds puppetlabs key' do
26           shell('apt-key list | grep 4BD6EC30', :acceptable_exit_codes => [0])
27         end
28       end
29
30       describe file('/etc/apt/sources.list.d/puppetlabs.list') do
31         it { should be_file }
32       end
33     end
34
35     context 'ensure => absent' do
36       it 'should work with no errors' do
37         pp = <<-EOS
38         include '::apt'
39         apt::source { 'puppetlabs':
40           ensure     => absent,
41           location   => 'http://apt.puppetlabs.com',
42           repos      => 'main',
43           key        => '4BD6EC30',
44           key_server => 'pgp.mit.edu',
45         }
46         EOS
47
48         apply_manifest(pp, :catch_failures => true)
49       end
50
51       # The key should remain -we don't delete those when deleting a source.
52       describe 'key should exist' do
53         it 'finds puppetlabs key' do
54           shell('apt-key list | grep 4BD6EC30', :acceptable_exit_codes => [0])
55         end
56       end
57       describe file('/etc/apt/sources.list.d/puppetlabs.list') do
58         it { should_not be_file }
59       end
60     end
61
62   end
63
64   context 'release' do
65     context 'test' do
66       it 'should work with no errors' do
67         pp = <<-EOS
68         include '::apt'
69         apt::source { 'puppetlabs':
70           ensure     => present,
71           location   => 'http://apt.puppetlabs.com',
72           repos      => 'main',
73           key        => '4BD6EC30',
74           key_server => 'pgp.mit.edu',
75           release    => 'precise',
76         }
77         EOS
78
79         apply_manifest(pp, :catch_failures => true)
80       end
81
82       describe file('/etc/apt/sources.list.d/puppetlabs.list') do
83         it { should be_file }
84         it { should contain 'deb http://apt.puppetlabs.com precise main' }
85       end
86     end
87   end
88
89   context 'include_src' do
90     context 'true' do
91       it 'should work with no errors' do
92         pp = <<-EOS
93         include '::apt'
94         apt::source { 'puppetlabs':
95           ensure      => present,
96           location    => 'http://apt.puppetlabs.com',
97           repos       => 'main',
98           key         => '4BD6EC30',
99           key_server  => 'pgp.mit.edu',
100           include_src => true,
101         }
102         EOS
103
104         apply_manifest(pp, :catch_failures => true)
105       end
106
107       describe file('/etc/apt/sources.list.d/puppetlabs.list') do
108         it { should be_file }
109         it { should contain 'deb-src http://apt.puppetlabs.com' }
110       end
111     end
112
113     context 'false' do
114       it 'should work with no errors' do
115         pp = <<-EOS
116         include '::apt'
117         apt::source { 'puppetlabs':
118           ensure      => present,
119           location    => 'http://apt.puppetlabs.com',
120           repos       => 'main',
121           key         => '4BD6EC30',
122           key_server  => 'pgp.mit.edu',
123           include_src => false,
124         }
125         EOS
126
127         apply_manifest(pp, :catch_failures => true)
128       end
129
130       describe file('/etc/apt/sources.list.d/puppetlabs.list') do
131         it { should be_file }
132         it { should_not contain 'deb-src http://apt.puppetlabs.com' }
133       end
134     end
135   end
136
137   context 'required_packages' do
138     context 'vim' do
139       it 'should work with no errors' do
140         pp = <<-EOS
141         include '::apt'
142         apt::source { 'puppetlabs':
143           ensure             => present,
144           location           => 'http://apt.puppetlabs.com',
145           repos              => 'main',
146           key                => '4BD6EC30',
147           key_server         => 'pgp.mit.edu',
148           required_packages  => 'vim',
149         }
150         EOS
151
152         shell('apt-get -y remove vim')
153         apply_manifest(pp, :catch_failures => true)
154       end
155
156       describe package('vim') do
157         it { should be_installed }
158       end
159     end
160   end
161
162   context 'key content' do
163     context 'giant key' do
164       it 'should work with no errors' do
165         pp = <<-EOS
166         include '::apt'
167         apt::source { 'puppetlabs':
168           ensure      => present,
169           location    => 'http://apt.puppetlabs.com',
170           repos       => 'main',
171           key         => '4BD6EC30',
172           key_content => '-----BEGIN PGP PUBLIC KEY BLOCK-----
173           Version: GnuPG v1.4.12 (GNU/Linux)
174           Comment: GPGTools - http://gpgtools.org
175
176           mQINBEw3u0ABEAC1+aJQpU59fwZ4mxFjqNCgfZgDhONDSYQFMRnYC1dzBpJHzI6b
177           fUBQeaZ8rh6N4kZ+wq1eL86YDXkCt4sCvNTP0eF2XaOLbmxtV9bdpTIBep9bQiKg
178           5iZaz+brUZlFk/MyJ0Yz//VQ68N1uvXccmD6uxQsVO+gx7rnarg/BGuCNaVtGwy+
179           S98g8Begwxs9JmGa8pMCcSxtC7fAfAEZ02cYyrw5KfBvFI3cHDdBqrEJQKwKeLKY
180           GHK3+H1TM4ZMxPsLuR/XKCbvTyl+OCPxU2OxPjufAxLlr8BWUzgJv6ztPe9imqpH
181           Ppp3KuLFNorjPqWY5jSgKl94W/CO2x591e++a1PhwUn7iVUwVVe+mOEWnK5+Fd0v
182           VMQebYCXS+3dNf6gxSvhz8etpw20T9Ytg4EdhLvCJRV/pYlqhcq+E9le1jFOHOc0
183           Nc5FQweUtHGaNVyn8S1hvnvWJBMxpXq+Bezfk3X8PhPT/l9O2lLFOOO08jo0OYiI
184           wrjhMQQOOSZOb3vBRvBZNnnxPrcdjUUm/9cVB8VcgI5KFhG7hmMCwH70tpUWcZCN
185           NlI1wj/PJ7Tlxjy44f1o4CQ5FxuozkiITJvh9CTg+k3wEmiaGz65w9jRl9ny2gEl
186           f4CR5+ba+w2dpuDeMwiHJIs5JsGyJjmA5/0xytB7QvgMs2q25vWhygsmUQARAQAB
187           tEdQdXBwZXQgTGFicyBSZWxlYXNlIEtleSAoUHVwcGV0IExhYnMgUmVsZWFzZSBL
188           ZXkpIDxpbmZvQHB1cHBldGxhYnMuY29tPokCPgQTAQIAKAUCTDe7QAIbAwUJA8Jn
189           AAYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQEFS3okvW7DAZaw//aLmE/eob
190           pXpIUVyCUWQxEvPtM/h/SAJsG3KoHN9u216ews+UHsL/7F91ceVXQQdD2e8CtYWF
191           eLNM0RSM9i/KM60g4CvIQlmNqdqhi1HsgGqInZ72/XLAXun0gabfC36rLww2kel+
192           aMpRf58SrSuskY321NnMEJl4OsHV2hfNtAIgw2e/zm9RhoMpGKxoHZCvFhnP7u2M
193           2wMq7iNDDWb6dVsLpzdlVf242zCbubPCxxQXOpA56rzkUPuJ85mdVw4i19oPIFIZ
194           VL5owit1SxCOxBg4b8oaMS36hEl3qtZG834rtLfcqAmqjhx6aJuJLOAYN84QjDEU
195           3NI5IfNRMvluIeTcD4Dt5FCYahN045tW1Rc6s5GAR8RW45GYwQDzG+kkkeeGxwEh
196           qCW7nOHuwZIoVJufNhd28UFn83KGJHCQt4NBBr3K5TcY6bDQEIrpSplWSDBbd3p1
197           IaoZY1WSDdP9OTVOSbsz0JiglWmUWGWCdd/CMSW/D7/3VUOJOYRDwptvtSYcjJc8
198           1UV+1zB+rt5La/OWe4UOORD+jU1ATijQEaFYxBbqBBkFboAEXq9btRQyegqk+eVp
199           HhzacP5NYFTMThvHuTapNytcCso5au/cMywqCgY1DfcMJyjocu4bCtrAd6w4kGKN
200           MUdwNDYQulHZDI+UjJInhramyngdzZLjdeGJARwEEAECAAYFAkw3wEYACgkQIVr+
201           UOQUcDKvEwgAoBuOPnPioBwYp8oHVPTo/69cJn1225kfraUYGebCcrRwuoKd8Iyh
202           R165nXYJmD8yrAFBk8ScUVKsQ/pSnqNrBCrlzQD6NQvuIWVFegIdjdasrWX6Szj+
203           N1OllbzIJbkE5eo0WjCMEKJVI/GTY2AnTWUAm36PLQC5HnSATykqwxeZDsJ/s8Rc
204           kd7+QN5sBVytG3qb45Q7jLJpLcJO6KYH4rz9ZgN7LzyyGbu9DypPrulADG9OrL7e
205           lUnsGDG4E1M8Pkgk9Xv9MRKao1KjYLD5zxOoVtdeoKEQdnM+lWMJin1XvoqJY7FT
206           DJk6o+cVqqHkdKL+sgsscFVQljgCEd0EgIkCHAQQAQgABgUCTPlA6QAKCRBcE9bb
207           kwUuAxdYD/40FxAeNCYByxkr/XRT0gFT+NCjPuqPWCM5tf2NIhSapXtb2+32WbAf
208           DzVfqWjC0G0RnQBve+vcjpY4/rJu4VKIDGIT8CtnKOIyEcXTNFOehi65xO4ypaei
209           BPSb3ip3P0of1iZZDQrNHMW5VcyL1c+PWT/6exXSGsePtO/89tc6mupqZtC05f5Z
210           XG4jswMF0U6Q5s3S0tG7Y+oQhKNFJS4sH4rHe1o5CxKwNRSzqccA0hptKy3MHUZ2
211           +zeHzuRdRWGjb2rUiVxnIvPPBGxF2JHhB4ERhGgbTxRZ6wZbdW06BOE8r7pGrUpU
212           fCw/WRT3gGXJHpGPOzFAvr3Xl7VcDUKTVmIajnpd3SoyD1t2XsvJlSQBOWbViucH
213           dvE4SIKQ77vBLRlZIoXXVb6Wu7Vq+eQs1ybjwGOhnnKjz8llXcMnLzzN86STpjN4
214           qGTXQy/E9+dyUP1sXn3RRwb+ZkdI77m1YY95QRNgG/hqh77IuWWg1MtTSgQnP+F2
215           7mfo0/522hObhdAe73VO3ttEPiriWy7tw3bS9daP2TAVbYyFqkvptkBb1OXRUSzq
216           UuWjBmZ35UlXjKQsGeUHlOiEh84aondF90A7gx0X/ktNIPRrfCGkHJcDu+HVnR7x
217           Kk+F0qb9+/pGLiT3rqeQTr8fYsb4xLHT7uEg1gVFB1g0kd+RQHzV74kCPgQTAQIA
218           KAIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AFAk/x5PoFCQtIMjoACgkQEFS3
219           okvW7DAIKQ/9HvZyf+LHVSkCk92Kb6gckniin3+5ooz67hSr8miGBfK4eocqQ0H7
220           bdtWjAILzR/IBY0xj6OHKhYP2k8TLc7QhQjt0dRpNkX+Iton2AZryV7vUADreYz4
221           4B0bPmhiE+LL46ET5IThLKu/KfihzkEEBa9/t178+dO9zCM2xsXaiDhMOxVE32gX
222           vSZKP3hmvnK/FdylUY3nWtPedr+lHpBLoHGaPH7cjI+MEEugU3oAJ0jpq3V8n4w0
223           jIq2V77wfmbD9byIV7dXcxApzciK+ekwpQNQMSaceuxLlTZKcdSqo0/qmS2A863Y
224           ZQ0ZBe+Xyf5OI33+y+Mry+vl6Lre2VfPm3udgR10E4tWXJ9Q2CmG+zNPWt73U1FD
225           7xBI7PPvOlyzCX4QJhy2Fn/fvzaNjHp4/FSiCw0HvX01epcersyun3xxPkRIjwwR
226           M9m5MJ0o4hhPfa97zibXSh8XXBnosBQxeg6nEnb26eorVQbqGx0ruu/W2m5/JpUf
227           REsFmNOBUbi8xlKNS5CZypH3Zh88EZiTFolOMEh+hT6s0l6znBAGGZ4m/Unacm5y
228           DHmg7unCk4JyVopQ2KHMoqG886elu+rm0ASkhyqBAk9sWKptMl3NHiYTRE/m9VAk
229           ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
230           =a34C
231           -----END PGP PUBLIC KEY BLOCK-----',
232         }
233         EOS
234
235         shell('apt-key del 4BD6EC30', :acceptable_exit_codes => [0,1,2])
236         apply_manifest(pp, :catch_failures => true)
237       end
238
239       describe file('/etc/apt/sources.list.d/puppetlabs.list') do
240         it { should be_file }
241       end
242       describe 'keys should exist' do
243         it 'finds puppetlabs key' do
244           shell('apt-key list | grep 4BD6EC30')
245         end
246       end
247     end
248   end
249
250   context 'key_source' do
251     context 'http://apt.puppetlabs.com/pubkey.gpg' do
252       it 'should work with no errors' do
253         pp = <<-EOS
254         include '::apt'
255         apt::source { 'puppetlabs':
256           ensure     => present,
257           location   => 'http://apt.puppetlabs.com',
258           release    => 'precise',
259           repos      => 'main',
260           key        => '4BD6EC30',
261           key_source  => 'http://apt.puppetlabs.com/pubkey.gpg',
262         }
263         EOS
264
265         shell('apt-key del 4BD6EC30', :acceptable_exit_codes => [0,1,2])
266         apply_manifest(pp, :catch_failures => true)
267       end
268
269       describe file('/etc/apt/sources.list.d/puppetlabs.list') do
270         it { should be_file }
271         it { should contain 'deb http://apt.puppetlabs.com precise main' }
272       end
273       describe 'keys should exist' do
274         it 'finds puppetlabs key' do
275           shell('apt-key list | grep 4BD6EC30')
276         end
277       end
278     end
279   end
280
281   context 'pin' do
282     context 'false' do
283       it 'should work with no errors' do
284         pp = <<-EOS
285         include '::apt'
286         apt::source { 'puppetlabs':
287           ensure     => present,
288           location   => 'http://apt.puppetlabs.com',
289           repos      => 'main',
290           key        => '4BD6EC30',
291           key_server => 'pgp.mit.edu',
292           pin        => false,
293         }
294         EOS
295
296         apply_manifest(pp, :catch_failures => true)
297       end
298
299       describe file('/etc/apt/preferences.d/puppetlabs.pref') do
300         it { should_not be_file }
301       end
302     end
303     context 'true' do
304       it 'should work with no errors' do
305         pp = <<-EOS
306         include '::apt'
307         apt::source { 'puppetlabs':
308           ensure     => present,
309           location   => 'http://apt.puppetlabs.com',
310           repos      => 'main',
311           key        => '4BD6EC30',
312           key_server => 'pgp.mit.edu',
313           pin        => true,
314         }
315         EOS
316
317         apply_manifest(pp, :catch_failures => true)
318       end
319
320       describe file('/etc/apt/preferences.d/puppetlabs.pref') do
321         it { should be_file }
322       end
323     end
324   end
325
326 end