apt_key_provider_spec.rb 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510
  1. require 'spec_helper_acceptance'
  2. PUPPETLABS_GPG_KEY_ID = '4BD6EC30'
  3. PUPPETLABS_GPG_LONG_KEY_ID = '1054B7A24BD6EC30'
  4. PUPPETLABS_APT_URL = 'apt.puppetlabs.com'
  5. PUPPETLABS_GPG_KEY_FILE = 'pubkey.gpg'
  6. CENTOS_GPG_KEY_ID = 'C105B9DE'
  7. CENTOS_REPO_URL = 'ftp.cvut.cz/centos'
  8. CENTOS_GPG_KEY_FILE = 'RPM-GPG-KEY-CentOS-6'
  9. describe 'apt_key' do
  10. before(:each) do
  11. # Delete twice to make sure everything is cleaned
  12. # up after the short key collision
  13. shell("apt-key del #{PUPPETLABS_GPG_KEY_ID}",
  14. :acceptable_exit_codes => [0,1,2])
  15. shell("apt-key del #{PUPPETLABS_GPG_KEY_ID}",
  16. :acceptable_exit_codes => [0,1,2])
  17. end
  18. describe 'default options' do
  19. key_versions = {
  20. '32bit key id' => '4BD6EC30',
  21. '64bit key id' => '1054B7A24BD6EC30',
  22. '32bit lowercase key id' => '4bd6ec30',
  23. '64bit lowercase key id' => '1054b7a24bd6ec30',
  24. '0x formatted 32bit key id' => '0x4BD6EC30',
  25. '0x formatted 64bit key id' => '0x1054B7A24BD6EC30',
  26. '0x formatted 32bit lowercase key id' => '0x4bd6ec30',
  27. '0x formatted 64bit lowercase key id' => '0x1054b7a24bd6ec30',
  28. }
  29. key_versions.each do |key, value|
  30. context "#{key}" do
  31. it 'works' do
  32. pp = <<-EOS
  33. apt_key { 'puppetlabs':
  34. id => '#{value}',
  35. ensure => 'present',
  36. }
  37. EOS
  38. apply_manifest(pp, :catch_failures => true)
  39. apply_manifest(pp, :catch_changes => true)
  40. shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
  41. end
  42. end
  43. end
  44. context 'invalid length key id' do
  45. it 'fails' do
  46. pp = <<-EOS
  47. apt_key { 'puppetlabs':
  48. id => '4B7A24BD6EC30',
  49. }
  50. EOS
  51. apply_manifest(pp, :expect_failures => true) do |r|
  52. expect(r.stderr).to match(/Valid values match/)
  53. end
  54. end
  55. end
  56. end
  57. describe 'ensure =>' do
  58. context 'absent' do
  59. it 'is removed' do
  60. pp = <<-EOS
  61. apt_key { 'centos':
  62. id => '#{CENTOS_GPG_KEY_ID}',
  63. ensure => 'absent',
  64. }
  65. EOS
  66. # Install the key first
  67. shell("apt-key adv --keyserver keyserver.ubuntu.com \
  68. --recv-keys #{CENTOS_GPG_KEY_ID}")
  69. shell("apt-key list | grep #{CENTOS_GPG_KEY_ID}")
  70. # Time to remove it using Puppet
  71. apply_manifest(pp, :catch_failures => true)
  72. apply_manifest(pp, :catch_failures => true)
  73. shell("apt-key list | grep #{CENTOS_GPG_KEY_ID}",
  74. :acceptable_exit_codes => [1])
  75. shell("apt-key adv --keyserver keyserver.ubuntu.com \
  76. --recv-keys #{CENTOS_GPG_KEY_ID}")
  77. end
  78. end
  79. context 'absent, added with long key', :unless => (fact('operatingsystem') == 'Debian' and fact('operatingsystemmajrelease') == '6') do
  80. it 'is removed' do
  81. pp = <<-EOS
  82. apt_key { 'puppetlabs':
  83. id => '#{PUPPETLABS_GPG_KEY_ID}',
  84. ensure => 'absent',
  85. }
  86. EOS
  87. # Install the key first
  88. shell("apt-key adv --keyserver keyserver.ubuntu.com \
  89. --recv-keys #{PUPPETLABS_GPG_LONG_KEY_ID}")
  90. shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
  91. # Time to remove it using Puppet
  92. apply_manifest(pp, :catch_failures => true)
  93. apply_manifest(pp, :catch_failures => true)
  94. shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}",
  95. :acceptable_exit_codes => [1])
  96. end
  97. end
  98. end
  99. describe 'content =>' do
  100. context 'puppetlabs gpg key' do
  101. it 'works' do
  102. pp = <<-EOS
  103. apt_key { 'puppetlabs':
  104. id => '#{PUPPETLABS_GPG_KEY_ID}',
  105. ensure => 'present',
  106. content => "-----BEGIN PGP PUBLIC KEY BLOCK-----
  107. Version: GnuPG v1.4.12 (GNU/Linux)
  108. Comment: GPGTools - http://gpgtools.org
  109. mQINBEw3u0ABEAC1+aJQpU59fwZ4mxFjqNCgfZgDhONDSYQFMRnYC1dzBpJHzI6b
  110. fUBQeaZ8rh6N4kZ+wq1eL86YDXkCt4sCvNTP0eF2XaOLbmxtV9bdpTIBep9bQiKg
  111. 5iZaz+brUZlFk/MyJ0Yz//VQ68N1uvXccmD6uxQsVO+gx7rnarg/BGuCNaVtGwy+
  112. S98g8Begwxs9JmGa8pMCcSxtC7fAfAEZ02cYyrw5KfBvFI3cHDdBqrEJQKwKeLKY
  113. GHK3+H1TM4ZMxPsLuR/XKCbvTyl+OCPxU2OxPjufAxLlr8BWUzgJv6ztPe9imqpH
  114. Ppp3KuLFNorjPqWY5jSgKl94W/CO2x591e++a1PhwUn7iVUwVVe+mOEWnK5+Fd0v
  115. VMQebYCXS+3dNf6gxSvhz8etpw20T9Ytg4EdhLvCJRV/pYlqhcq+E9le1jFOHOc0
  116. Nc5FQweUtHGaNVyn8S1hvnvWJBMxpXq+Bezfk3X8PhPT/l9O2lLFOOO08jo0OYiI
  117. wrjhMQQOOSZOb3vBRvBZNnnxPrcdjUUm/9cVB8VcgI5KFhG7hmMCwH70tpUWcZCN
  118. NlI1wj/PJ7Tlxjy44f1o4CQ5FxuozkiITJvh9CTg+k3wEmiaGz65w9jRl9ny2gEl
  119. f4CR5+ba+w2dpuDeMwiHJIs5JsGyJjmA5/0xytB7QvgMs2q25vWhygsmUQARAQAB
  120. tEdQdXBwZXQgTGFicyBSZWxlYXNlIEtleSAoUHVwcGV0IExhYnMgUmVsZWFzZSBL
  121. ZXkpIDxpbmZvQHB1cHBldGxhYnMuY29tPokCPgQTAQIAKAUCTDe7QAIbAwUJA8Jn
  122. AAYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQEFS3okvW7DAZaw//aLmE/eob
  123. pXpIUVyCUWQxEvPtM/h/SAJsG3KoHN9u216ews+UHsL/7F91ceVXQQdD2e8CtYWF
  124. eLNM0RSM9i/KM60g4CvIQlmNqdqhi1HsgGqInZ72/XLAXun0gabfC36rLww2kel+
  125. aMpRf58SrSuskY321NnMEJl4OsHV2hfNtAIgw2e/zm9RhoMpGKxoHZCvFhnP7u2M
  126. 2wMq7iNDDWb6dVsLpzdlVf242zCbubPCxxQXOpA56rzkUPuJ85mdVw4i19oPIFIZ
  127. VL5owit1SxCOxBg4b8oaMS36hEl3qtZG834rtLfcqAmqjhx6aJuJLOAYN84QjDEU
  128. 3NI5IfNRMvluIeTcD4Dt5FCYahN045tW1Rc6s5GAR8RW45GYwQDzG+kkkeeGxwEh
  129. qCW7nOHuwZIoVJufNhd28UFn83KGJHCQt4NBBr3K5TcY6bDQEIrpSplWSDBbd3p1
  130. IaoZY1WSDdP9OTVOSbsz0JiglWmUWGWCdd/CMSW/D7/3VUOJOYRDwptvtSYcjJc8
  131. 1UV+1zB+rt5La/OWe4UOORD+jU1ATijQEaFYxBbqBBkFboAEXq9btRQyegqk+eVp
  132. HhzacP5NYFTMThvHuTapNytcCso5au/cMywqCgY1DfcMJyjocu4bCtrAd6w4kGKN
  133. MUdwNDYQulHZDI+UjJInhramyngdzZLjdeGJARwEEAECAAYFAkw3wEYACgkQIVr+
  134. UOQUcDKvEwgAoBuOPnPioBwYp8oHVPTo/69cJn1225kfraUYGebCcrRwuoKd8Iyh
  135. R165nXYJmD8yrAFBk8ScUVKsQ/pSnqNrBCrlzQD6NQvuIWVFegIdjdasrWX6Szj+
  136. N1OllbzIJbkE5eo0WjCMEKJVI/GTY2AnTWUAm36PLQC5HnSATykqwxeZDsJ/s8Rc
  137. kd7+QN5sBVytG3qb45Q7jLJpLcJO6KYH4rz9ZgN7LzyyGbu9DypPrulADG9OrL7e
  138. lUnsGDG4E1M8Pkgk9Xv9MRKao1KjYLD5zxOoVtdeoKEQdnM+lWMJin1XvoqJY7FT
  139. DJk6o+cVqqHkdKL+sgsscFVQljgCEd0EgIkCHAQQAQgABgUCTPlA6QAKCRBcE9bb
  140. kwUuAxdYD/40FxAeNCYByxkr/XRT0gFT+NCjPuqPWCM5tf2NIhSapXtb2+32WbAf
  141. DzVfqWjC0G0RnQBve+vcjpY4/rJu4VKIDGIT8CtnKOIyEcXTNFOehi65xO4ypaei
  142. BPSb3ip3P0of1iZZDQrNHMW5VcyL1c+PWT/6exXSGsePtO/89tc6mupqZtC05f5Z
  143. XG4jswMF0U6Q5s3S0tG7Y+oQhKNFJS4sH4rHe1o5CxKwNRSzqccA0hptKy3MHUZ2
  144. +zeHzuRdRWGjb2rUiVxnIvPPBGxF2JHhB4ERhGgbTxRZ6wZbdW06BOE8r7pGrUpU
  145. fCw/WRT3gGXJHpGPOzFAvr3Xl7VcDUKTVmIajnpd3SoyD1t2XsvJlSQBOWbViucH
  146. dvE4SIKQ77vBLRlZIoXXVb6Wu7Vq+eQs1ybjwGOhnnKjz8llXcMnLzzN86STpjN4
  147. qGTXQy/E9+dyUP1sXn3RRwb+ZkdI77m1YY95QRNgG/hqh77IuWWg1MtTSgQnP+F2
  148. 7mfo0/522hObhdAe73VO3ttEPiriWy7tw3bS9daP2TAVbYyFqkvptkBb1OXRUSzq
  149. UuWjBmZ35UlXjKQsGeUHlOiEh84aondF90A7gx0X/ktNIPRrfCGkHJcDu+HVnR7x
  150. Kk+F0qb9+/pGLiT3rqeQTr8fYsb4xLHT7uEg1gVFB1g0kd+RQHzV74kCPgQTAQIA
  151. KAIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AFAk/x5PoFCQtIMjoACgkQEFS3
  152. okvW7DAIKQ/9HvZyf+LHVSkCk92Kb6gckniin3+5ooz67hSr8miGBfK4eocqQ0H7
  153. bdtWjAILzR/IBY0xj6OHKhYP2k8TLc7QhQjt0dRpNkX+Iton2AZryV7vUADreYz4
  154. 4B0bPmhiE+LL46ET5IThLKu/KfihzkEEBa9/t178+dO9zCM2xsXaiDhMOxVE32gX
  155. vSZKP3hmvnK/FdylUY3nWtPedr+lHpBLoHGaPH7cjI+MEEugU3oAJ0jpq3V8n4w0
  156. jIq2V77wfmbD9byIV7dXcxApzciK+ekwpQNQMSaceuxLlTZKcdSqo0/qmS2A863Y
  157. ZQ0ZBe+Xyf5OI33+y+Mry+vl6Lre2VfPm3udgR10E4tWXJ9Q2CmG+zNPWt73U1FD
  158. 7xBI7PPvOlyzCX4QJhy2Fn/fvzaNjHp4/FSiCw0HvX01epcersyun3xxPkRIjwwR
  159. M9m5MJ0o4hhPfa97zibXSh8XXBnosBQxeg6nEnb26eorVQbqGx0ruu/W2m5/JpUf
  160. REsFmNOBUbi8xlKNS5CZypH3Zh88EZiTFolOMEh+hT6s0l6znBAGGZ4m/Unacm5y
  161. DHmg7unCk4JyVopQ2KHMoqG886elu+rm0ASkhyqBAk9sWKptMl3NHiYTRE/m9VAk
  162. ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
  163. =a34C
  164. -----END PGP PUBLIC KEY BLOCK-----",
  165. }
  166. EOS
  167. apply_manifest(pp, :catch_failures => true)
  168. apply_manifest(pp, :catch_failures => true)
  169. shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
  170. end
  171. end
  172. context 'bogus key' do
  173. it 'fails' do
  174. pp = <<-EOS
  175. apt_key { 'puppetlabs':
  176. id => '#{PUPPETLABS_GPG_KEY_ID}',
  177. ensure => 'present',
  178. content => 'For posterity: such content, much bogus, wow',
  179. }
  180. EOS
  181. apply_manifest(pp, :expect_failures => true) do |r|
  182. expect(r.stderr).to match(/no valid OpenPGP data found/)
  183. end
  184. end
  185. end
  186. end
  187. describe 'server =>' do
  188. context 'pgp.mit.edu' do
  189. it 'works' do
  190. pp = <<-EOS
  191. apt_key { 'puppetlabs':
  192. id => '#{PUPPETLABS_GPG_KEY_ID}',
  193. ensure => 'present',
  194. server => 'pgp.mit.edu',
  195. }
  196. EOS
  197. apply_manifest(pp, :catch_failures => true)
  198. apply_manifest(pp, :catch_failures => true)
  199. shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
  200. end
  201. end
  202. context 'hkp://pgp.mit.edu:80' do
  203. it 'works' do
  204. pp = <<-EOS
  205. apt_key { 'puppetlabs':
  206. id => '#{PUPPETLABS_GPG_KEY_ID}',
  207. ensure => 'present',
  208. server => 'hkp://pgp.mit.edu:80',
  209. }
  210. EOS
  211. apply_manifest(pp, :catch_failures => true)
  212. apply_manifest(pp, :catch_failures => true)
  213. shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
  214. end
  215. end
  216. context 'nonexistant.key.server' do
  217. it 'fails' do
  218. pp = <<-EOS
  219. apt_key { 'puppetlabs':
  220. id => '#{PUPPETLABS_GPG_KEY_ID}',
  221. ensure => 'present',
  222. server => 'nonexistant.key.server',
  223. }
  224. EOS
  225. apply_manifest(pp, :expect_failures => true) do |r|
  226. expect(r.stderr).to match(/(Host not found|Couldn't resolve host)/)
  227. end
  228. end
  229. end
  230. context 'key server start with dot' do
  231. it 'fails' do
  232. pp = <<-EOS
  233. apt_key { 'puppetlabs':
  234. id => '#{PUPPETLABS_GPG_KEY_ID}',
  235. ensure => 'present',
  236. server => '.pgp.key.server',
  237. }
  238. EOS
  239. apply_manifest(pp, :expect_failures => true) do |r|
  240. expect(r.stderr).to match(/Invalid value \".pgp.key.server\"/)
  241. end
  242. end
  243. end
  244. end
  245. describe 'source =>' do
  246. context 'http://' do
  247. it 'works' do
  248. pp = <<-EOS
  249. apt_key { 'puppetlabs':
  250. id => '#{PUPPETLABS_GPG_KEY_ID}',
  251. ensure => 'present',
  252. source => 'http://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
  253. }
  254. EOS
  255. apply_manifest(pp, :catch_failures => true)
  256. apply_manifest(pp, :catch_failures => true)
  257. shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
  258. end
  259. it 'fails with a 404' do
  260. pp = <<-EOS
  261. apt_key { 'puppetlabs':
  262. id => '#{PUPPETLABS_GPG_KEY_ID}',
  263. ensure => 'present',
  264. source => 'http://#{PUPPETLABS_APT_URL}/herpderp.gpg',
  265. }
  266. EOS
  267. apply_manifest(pp, :expect_failures => true) do |r|
  268. expect(r.stderr).to match(/404 Not Found/)
  269. end
  270. end
  271. it 'fails with a socket error' do
  272. pp = <<-EOS
  273. apt_key { 'puppetlabs':
  274. id => '#{PUPPETLABS_GPG_KEY_ID}',
  275. ensure => 'present',
  276. source => 'http://apt.puppetlabss.com/herpderp.gpg',
  277. }
  278. EOS
  279. apply_manifest(pp, :expect_failures => true) do |r|
  280. expect(r.stderr).to match(/could not resolve/)
  281. end
  282. end
  283. end
  284. context 'ftp://' do
  285. before(:each) do
  286. shell("apt-key del #{CENTOS_GPG_KEY_ID}",
  287. :acceptable_exit_codes => [0,1,2])
  288. end
  289. it 'works' do
  290. pp = <<-EOS
  291. apt_key { 'CentOS 6':
  292. id => '#{CENTOS_GPG_KEY_ID}',
  293. ensure => 'present',
  294. source => 'ftp://#{CENTOS_REPO_URL}/#{CENTOS_GPG_KEY_FILE}',
  295. }
  296. EOS
  297. apply_manifest(pp, :catch_failures => true)
  298. apply_manifest(pp, :catch_failures => true)
  299. shell("apt-key list | grep #{CENTOS_GPG_KEY_ID}")
  300. end
  301. it 'fails with a 550' do
  302. pp = <<-EOS
  303. apt_key { 'CentOS 6':
  304. id => '#{CENTOS_GPG_KEY_ID}',
  305. ensure => 'present',
  306. source => 'ftp://#{CENTOS_REPO_URL}/herpderp.gpg',
  307. }
  308. EOS
  309. apply_manifest(pp, :expect_failures => true) do |r|
  310. expect(r.stderr).to match(/550 Failed to open/)
  311. end
  312. end
  313. it 'fails with a socket error' do
  314. pp = <<-EOS
  315. apt_key { 'puppetlabs':
  316. id => '#{PUPPETLABS_GPG_KEY_ID}',
  317. ensure => 'present',
  318. source => 'ftp://apt.puppetlabss.com/herpderp.gpg',
  319. }
  320. EOS
  321. apply_manifest(pp, :expect_failures => true) do |r|
  322. expect(r.stderr).to match(/could not resolve/)
  323. end
  324. end
  325. end
  326. context 'https://' do
  327. it 'works' do
  328. pp = <<-EOS
  329. apt_key { 'puppetlabs':
  330. id => '#{PUPPETLABS_GPG_KEY_ID}',
  331. ensure => 'present',
  332. source => 'https://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
  333. }
  334. EOS
  335. apply_manifest(pp, :catch_failures => true)
  336. apply_manifest(pp, :catch_failures => true)
  337. shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
  338. end
  339. it 'fails with a 404' do
  340. pp = <<-EOS
  341. apt_key { 'puppetlabs':
  342. id => '4BD6EC30',
  343. ensure => 'present',
  344. source => 'https://#{PUPPETLABS_APT_URL}/herpderp.gpg',
  345. }
  346. EOS
  347. apply_manifest(pp, :expect_failures => true) do |r|
  348. expect(r.stderr).to match(/404 Not Found/)
  349. end
  350. end
  351. it 'fails with a socket error' do
  352. pp = <<-EOS
  353. apt_key { 'puppetlabs':
  354. id => '4BD6EC30',
  355. ensure => 'present',
  356. source => 'https://apt.puppetlabss.com/herpderp.gpg',
  357. }
  358. EOS
  359. apply_manifest(pp, :expect_failures => true) do |r|
  360. expect(r.stderr).to match(/could not resolve/)
  361. end
  362. end
  363. end
  364. context '/path/that/exists' do
  365. before(:each) do
  366. shell("curl -o /tmp/puppetlabs-pubkey.gpg \
  367. http://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}")
  368. end
  369. after(:each) do
  370. shell('rm /tmp/puppetlabs-pubkey.gpg')
  371. end
  372. it 'works' do
  373. pp = <<-EOS
  374. apt_key { 'puppetlabs':
  375. id => '4BD6EC30',
  376. ensure => 'present',
  377. source => '/tmp/puppetlabs-pubkey.gpg',
  378. }
  379. EOS
  380. apply_manifest(pp, :catch_failures => true)
  381. apply_manifest(pp, :catch_failures => true)
  382. shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
  383. end
  384. end
  385. context '/path/that/does/not/exist' do
  386. it 'fails' do
  387. pp = <<-EOS
  388. apt_key { 'puppetlabs':
  389. id => '#{PUPPETLABS_GPG_KEY_ID}',
  390. ensure => 'present',
  391. source => '/tmp/totally_bogus.file',
  392. }
  393. EOS
  394. apply_manifest(pp, :expect_failures => true) do |r|
  395. expect(r.stderr).to match(/does not exist/)
  396. end
  397. end
  398. end
  399. context '/path/that/exists/with/bogus/content' do
  400. before(:each) do
  401. shell('echo "here be dragons" > /tmp/fake-key.gpg')
  402. end
  403. after(:each) do
  404. shell('rm /tmp/fake-key.gpg')
  405. end
  406. it 'fails' do
  407. pp = <<-EOS
  408. apt_key { 'puppetlabs':
  409. id => '#{PUPPETLABS_GPG_KEY_ID}',
  410. ensure => 'present',
  411. source => '/tmp/fake-key.gpg',
  412. }
  413. EOS
  414. apply_manifest(pp, :expect_failures => true) do |r|
  415. expect(r.stderr).to match(/no valid OpenPGP data found/)
  416. end
  417. end
  418. end
  419. end
  420. describe 'keyserver_options =>' do
  421. context 'debug' do
  422. it 'works' do
  423. pp = <<-EOS
  424. apt_key { 'puppetlabs':
  425. id => '#{PUPPETLABS_GPG_KEY_ID}',
  426. ensure => 'present',
  427. keyserver_options => 'debug',
  428. }
  429. EOS
  430. apply_manifest(pp, :catch_failures => true)
  431. apply_manifest(pp, :catch_failures => true)
  432. shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
  433. end
  434. it 'fails on invalid options' do
  435. pp = <<-EOS
  436. apt_key { 'puppetlabs':
  437. id => '#{PUPPETLABS_GPG_KEY_ID}',
  438. ensure => 'present',
  439. keyserver_options => 'this is totally bonkers',
  440. }
  441. EOS
  442. shell("apt-key del #{PUPPETLABS_GPG_KEY_ID}", :acceptable_exit_codes => [0,1,2])
  443. apply_manifest(pp, :expect_failures => true) do |r|
  444. expect(r.stderr).to match(/--keyserver-options this is totally/)
  445. end
  446. end
  447. end
  448. end
  449. end