apt_key_provider_spec.rb 17 KB

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