apt_key_provider_spec.rb 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723
  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 hkps.pool.sks-keyservers.net \
  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 hkps.pool.sks-keyservers.net \
  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 hkps.pool.sks-keyservers.net \
  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 'multiple keys' do
  184. it 'runs without errors' do
  185. pp = <<-EOS
  186. apt_key { 'puppetlabs':
  187. id => '#{PUPPETLABS_GPG_KEY_FINGERPRINT}',
  188. ensure => 'present',
  189. content => "-----BEGIN PGP PUBLIC KEY BLOCK-----
  190. Version: GnuPG v1.4.12 (GNU/Linux)
  191. Comment: GPGTools - http://gpgtools.org
  192. mQINBEw3u0ABEAC1+aJQpU59fwZ4mxFjqNCgfZgDhONDSYQFMRnYC1dzBpJHzI6b
  193. fUBQeaZ8rh6N4kZ+wq1eL86YDXkCt4sCvNTP0eF2XaOLbmxtV9bdpTIBep9bQiKg
  194. 5iZaz+brUZlFk/MyJ0Yz//VQ68N1uvXccmD6uxQsVO+gx7rnarg/BGuCNaVtGwy+
  195. S98g8Begwxs9JmGa8pMCcSxtC7fAfAEZ02cYyrw5KfBvFI3cHDdBqrEJQKwKeLKY
  196. GHK3+H1TM4ZMxPsLuR/XKCbvTyl+OCPxU2OxPjufAxLlr8BWUzgJv6ztPe9imqpH
  197. Ppp3KuLFNorjPqWY5jSgKl94W/CO2x591e++a1PhwUn7iVUwVVe+mOEWnK5+Fd0v
  198. VMQebYCXS+3dNf6gxSvhz8etpw20T9Ytg4EdhLvCJRV/pYlqhcq+E9le1jFOHOc0
  199. Nc5FQweUtHGaNVyn8S1hvnvWJBMxpXq+Bezfk3X8PhPT/l9O2lLFOOO08jo0OYiI
  200. wrjhMQQOOSZOb3vBRvBZNnnxPrcdjUUm/9cVB8VcgI5KFhG7hmMCwH70tpUWcZCN
  201. NlI1wj/PJ7Tlxjy44f1o4CQ5FxuozkiITJvh9CTg+k3wEmiaGz65w9jRl9ny2gEl
  202. f4CR5+ba+w2dpuDeMwiHJIs5JsGyJjmA5/0xytB7QvgMs2q25vWhygsmUQARAQAB
  203. tEdQdXBwZXQgTGFicyBSZWxlYXNlIEtleSAoUHVwcGV0IExhYnMgUmVsZWFzZSBL
  204. ZXkpIDxpbmZvQHB1cHBldGxhYnMuY29tPokCPgQTAQIAKAUCTDe7QAIbAwUJA8Jn
  205. AAYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQEFS3okvW7DAZaw//aLmE/eob
  206. pXpIUVyCUWQxEvPtM/h/SAJsG3KoHN9u216ews+UHsL/7F91ceVXQQdD2e8CtYWF
  207. eLNM0RSM9i/KM60g4CvIQlmNqdqhi1HsgGqInZ72/XLAXun0gabfC36rLww2kel+
  208. aMpRf58SrSuskY321NnMEJl4OsHV2hfNtAIgw2e/zm9RhoMpGKxoHZCvFhnP7u2M
  209. 2wMq7iNDDWb6dVsLpzdlVf242zCbubPCxxQXOpA56rzkUPuJ85mdVw4i19oPIFIZ
  210. VL5owit1SxCOxBg4b8oaMS36hEl3qtZG834rtLfcqAmqjhx6aJuJLOAYN84QjDEU
  211. 3NI5IfNRMvluIeTcD4Dt5FCYahN045tW1Rc6s5GAR8RW45GYwQDzG+kkkeeGxwEh
  212. qCW7nOHuwZIoVJufNhd28UFn83KGJHCQt4NBBr3K5TcY6bDQEIrpSplWSDBbd3p1
  213. IaoZY1WSDdP9OTVOSbsz0JiglWmUWGWCdd/CMSW/D7/3VUOJOYRDwptvtSYcjJc8
  214. 1UV+1zB+rt5La/OWe4UOORD+jU1ATijQEaFYxBbqBBkFboAEXq9btRQyegqk+eVp
  215. HhzacP5NYFTMThvHuTapNytcCso5au/cMywqCgY1DfcMJyjocu4bCtrAd6w4kGKN
  216. MUdwNDYQulHZDI+UjJInhramyngdzZLjdeGJARwEEAECAAYFAkw3wEYACgkQIVr+
  217. UOQUcDKvEwgAoBuOPnPioBwYp8oHVPTo/69cJn1225kfraUYGebCcrRwuoKd8Iyh
  218. R165nXYJmD8yrAFBk8ScUVKsQ/pSnqNrBCrlzQD6NQvuIWVFegIdjdasrWX6Szj+
  219. N1OllbzIJbkE5eo0WjCMEKJVI/GTY2AnTWUAm36PLQC5HnSATykqwxeZDsJ/s8Rc
  220. kd7+QN5sBVytG3qb45Q7jLJpLcJO6KYH4rz9ZgN7LzyyGbu9DypPrulADG9OrL7e
  221. lUnsGDG4E1M8Pkgk9Xv9MRKao1KjYLD5zxOoVtdeoKEQdnM+lWMJin1XvoqJY7FT
  222. DJk6o+cVqqHkdKL+sgsscFVQljgCEd0EgIkCHAQQAQgABgUCTPlA6QAKCRBcE9bb
  223. kwUuAxdYD/40FxAeNCYByxkr/XRT0gFT+NCjPuqPWCM5tf2NIhSapXtb2+32WbAf
  224. DzVfqWjC0G0RnQBve+vcjpY4/rJu4VKIDGIT8CtnKOIyEcXTNFOehi65xO4ypaei
  225. BPSb3ip3P0of1iZZDQrNHMW5VcyL1c+PWT/6exXSGsePtO/89tc6mupqZtC05f5Z
  226. XG4jswMF0U6Q5s3S0tG7Y+oQhKNFJS4sH4rHe1o5CxKwNRSzqccA0hptKy3MHUZ2
  227. +zeHzuRdRWGjb2rUiVxnIvPPBGxF2JHhB4ERhGgbTxRZ6wZbdW06BOE8r7pGrUpU
  228. fCw/WRT3gGXJHpGPOzFAvr3Xl7VcDUKTVmIajnpd3SoyD1t2XsvJlSQBOWbViucH
  229. dvE4SIKQ77vBLRlZIoXXVb6Wu7Vq+eQs1ybjwGOhnnKjz8llXcMnLzzN86STpjN4
  230. qGTXQy/E9+dyUP1sXn3RRwb+ZkdI77m1YY95QRNgG/hqh77IuWWg1MtTSgQnP+F2
  231. 7mfo0/522hObhdAe73VO3ttEPiriWy7tw3bS9daP2TAVbYyFqkvptkBb1OXRUSzq
  232. UuWjBmZ35UlXjKQsGeUHlOiEh84aondF90A7gx0X/ktNIPRrfCGkHJcDu+HVnR7x
  233. Kk+F0qb9+/pGLiT3rqeQTr8fYsb4xLHT7uEg1gVFB1g0kd+RQHzV74kCPgQTAQIA
  234. KAIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AFAk/x5PoFCQtIMjoACgkQEFS3
  235. okvW7DAIKQ/9HvZyf+LHVSkCk92Kb6gckniin3+5ooz67hSr8miGBfK4eocqQ0H7
  236. bdtWjAILzR/IBY0xj6OHKhYP2k8TLc7QhQjt0dRpNkX+Iton2AZryV7vUADreYz4
  237. 4B0bPmhiE+LL46ET5IThLKu/KfihzkEEBa9/t178+dO9zCM2xsXaiDhMOxVE32gX
  238. vSZKP3hmvnK/FdylUY3nWtPedr+lHpBLoHGaPH7cjI+MEEugU3oAJ0jpq3V8n4w0
  239. jIq2V77wfmbD9byIV7dXcxApzciK+ekwpQNQMSaceuxLlTZKcdSqo0/qmS2A863Y
  240. ZQ0ZBe+Xyf5OI33+y+Mry+vl6Lre2VfPm3udgR10E4tWXJ9Q2CmG+zNPWt73U1FD
  241. 7xBI7PPvOlyzCX4QJhy2Fn/fvzaNjHp4/FSiCw0HvX01epcersyun3xxPkRIjwwR
  242. M9m5MJ0o4hhPfa97zibXSh8XXBnosBQxeg6nEnb26eorVQbqGx0ruu/W2m5/JpUf
  243. REsFmNOBUbi8xlKNS5CZypH3Zh88EZiTFolOMEh+hT6s0l6znBAGGZ4m/Unacm5y
  244. DHmg7unCk4JyVopQ2KHMoqG886elu+rm0ASkhyqBAk9sWKptMl3NHiYTRE/m9VAk
  245. ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYWJAhwEEAEC
  246. AAYFAlHk3M4ACgkQSjMLmtZI+uP5hA//UTZfD340ukip6jPlMzxwSD/QapwtO7D4
  247. gsGTsXezDkO97D21d1pNaNT0RrXAMagwk1ElDxmn/YHUDfMovZa2bKagjWmV38xk
  248. Ws+Prh1P44vUDG30CAU6KZ+mTGLUbolfOvDffCTm9Mn1i2kxFaJxbVhWR6zR28KZ
  249. R28s1IBsrqeTCksYfdKdkuw1/j850hW8MM3hPBJ/48VLx5QEFfnlXwt1fp+LygAv
  250. rIyJw7vJtsa9QjCIkQk2tcv77rhkiZ6ADthgVIx5j3yDWSm4nLqFpwbQTKrNRrCb
  251. 5XbL/oIMeHJuFICb2HckDS1KuKXHmqvDuLoRr0/wFEZMps5XQevomUa7JkMeS5j9
  252. AubCG4g1zKEtPPaGDsfDKBljCHBKwUysQj5oGU5w8VvlOPnS62DBfsgU2y5ipmmI
  253. TYkjSOL6LXwO6xG5/sxA8cyoJSmbN286imcY6AHloTiiu6/N7Us+CNrhw/V7HAun
  254. 56etWBn3bZWCRGGAPF3qJr4y2sUMY0E3Ha7OPEHIKfBb4MiJnpXntWT28nQfF3dl
  255. TFTthAzwcnZchx2es4yrfDXn33Y4eisqxWCbTluErXUogUEKH1KohSatYMtxencv
  256. 7bUlzIr22zSUCYyVf9cyg50kBy+0J7seEpqG5K5R8z9s/63BT5Oghmi6bB2s5iK5
  257. fBt3Tu1IYpyZAg0EURGeeQEQALoU2rlo+usvGKqmBKaEl8Cbx0UZY4tQa1OQSDCj
  258. 6QeCBc36rq2NCAFpjYg0nrxMN86e0aHYVVetT75rSX701jRJD/TRCPzr03QVwEtk
  259. GpGIpBXtdx0962I0We5rSZL2TWKuPtGRKrbs6CSVlNynLprIEnN+2sJYd/1yEsrR
  260. 9wBtUfVOkq6o4hBWOj4oEqhqQv1MPv1RPqGEgJl19s4LS9277cMIwrj553nGzsy1
  261. XwO6BQIP8IhJQZ+8Okw3UaJjLHkJExgo3UHMFdZhAOOYbrlxwq3lENmkdgjxCUBZ
  262. iVNiEX9NLm8x1HWaW/nnBIHu6g7r+1Ff5qMSI2hBVan6om4gKHdI9wThG89V16Nq
  263. 3YztuK5L6Nh9a7BVQJos0r419NHGXPqXqN99jWRL+jAqwKozviUYijDx8k4xLnpQ
  264. 1dIbHfwE0MPuIkgHeQIoBMkxD1tiQC7ouqVRqU1gg9VKhOZf0opDnvqQ+cDMyfUC
  265. hgrjjikSoCBIVCDvr1r7T/gUMDEXfnaMfAdEy1z9qnUzTRRzMbl4BN3Zn+4Htf+B
  266. zpAln6H8h7sBb6CO1TX2Qh3JPTrV9zSSbbOW/kuySU+rkHBQPza5l+pnWD7eXaVj
  267. 7+WEx+TsYIP9Gpe/FOVp2ht93NgjNFAodPW+i5jm7MRk+vlzjidHJ69pEUoQQtuk
  268. Td8LABEBAAG0V1B1cHBldCBMYWJzIE5pZ2h0bHkgQnVpbGQgS2V5IChQdXBwZXQg
  269. TGFicyBOaWdodGx5IEJ1aWxkIEtleSkgPGRlbGl2ZXJ5QHB1cHBldGxhYnMuY29t
  270. PokCPwQTAQIAKQUCURGzrQIbAwUJBaOagAcLCQgHAwIBBhUIAgkKCwQWAgMBAh4B
  271. AheAAAoJELj5mcAHu2xX7UUQAKGDOQS20BRNEa3top+dQONWmC/j1ABDVTOkF7Zc
  272. 9JT5oEESzVof/yIWKAfCbYyH5l3yySZI3NOQt7CswIWDYe0JR/uBhyGoHkA1t52L
  273. zP45UxI29K5XaeBm3qoQbV3W6GWScGkijfaJ2yz/dIHh0m3SkC8mUGBrIqqVwV38
  274. JcsW1/CzTetZiWGlk8/nPeUg+snGwd22zUlZkTaVh3FbHrqh2xsMFdrphDOtSU5s
  275. Jzebu5h6mp7cMZELaRNNmg3O7VeQMA1hwaq05jQuPisS/ktOqSgJXh8pOaUpDoV0
  276. ta4JSwaqEkWsZHv3tmaXGy0Qzs9X9bOjRbIKgN2w9JY+z2OKJ5L4Yg5VMJPYMdKp
  277. wGSQf70YaaT0d1N/84P8j7CRsDBnVME/TDuE2u1XM/9B7xmdcI28FxZrqQc06OGS
  278. UvK9vSgTkTxXSsjobah8ssi4C4/zRgTZu94KOhSlH4YGrzLX7g25M708NxgXJiPZ
  279. 7K8Ceea28mHYf3f+JobEbpzPeewURAFCXHCm4cFU31FsiXQrNhGmUpRKVayiMMzN
  280. JF8yjuHpwB2DjGdV3QR5C8Ms+RO86JnD/Yq9zeoF7T7jCAkQKuh76cQe60XllKhV
  281. Dlh2rpKXAtLAbea9hcSraZkm3Lj+oKzXUSf3Ml9xp65yjUjm9O+a4AMQ1wFroGEP
  282. QUEEiQEcBBABCgAGBQJT0XkMAAoJELrV8KOS6YVy7O8IAKJYT0Afd6Ufkx4cR0rj
  283. soCoPpDDiyITmSdeLSzvl9rr1X39+PqR0dcncEhO1heCZo8sm/iMNsiV4UORv2Wh
  284. lCriE2fDpu9ByX1rwuKl9nEu9xx2WTRWtdx4M4fB+ZXYiJbgb1vuM46mGp51NYRK
  285. ByPIm1EAjOhsfXm14BZICOQO5WLy5Sv/oRVSEBiGXNXf1kweXSzrhRCNEWYfPhQJ
  286. 4pCsvNeiQuhqQIB+J9FbA48x47JikMM92w0aEa4aVVokNF2PBCp9/SdRAzlY7Ikx
  287. aAdIzuyc0ANIZBPgYxIgdH/Fltwz6VW6iFNk3gS7jR6TFBjRQba73I53IBbiVIRq
  288. dnWJAhwEEAECAAYFAlPRd2QACgkQRp6bNpsPDx1HiQ//TEOYPkp+iHT/wNcTUO4A
  289. r00La6xl9bw3v5XlnW83YjrB0ieChbXcHpChNRk08vdRSgxyWCtbIwmMeOO8mDiv
  290. aJbYrgngJY+FSMsAzhSyPauze0l4PV3dnLRMZmK5Nro4GNI4oiOGp0qXPcBjstlc
  291. BnEa6XuLHDnRYFhkcVboZDu2o/tdz+OJD+CZjyeiIAtChMJ+ghlpfO3cOuK0wmTh
  292. Jtn/eDAfjB34CZdkt1paKZap5bLZCF0QwP+DbJd189HZy/ot6w2jpNXFt1JFnoyn
  293. 7Nluo6MPNTZSG3pzh7fvzb924M1sm+CyLFzEV1rYi6ujyHOsW+KYc6fOUB5jk/BZ
  294. QPaU6vG1JRDLHWPjbPf9Ax8uGQSrVXC3txiu2OLZcn4Ti54PoHed5m7Fxk9fnaiT
  295. gNGL0ox/wmIPbIsdGrXuTHcdmPyuRM5btXFWCMbknTIbefEEOQdbPl+e5QgWR5cf
  296. EVOvo6qTBstH7aHqiWMQpuvnU7l9xpfcJ40SawHxiY/UCKXhpf7SJXAvE8zkMIvi
  297. PJaHKDy2FyCwtCHwG1wiQSqjnCJt5gmTGCXzO/yAGhcgUWbTpykIMij9IPboL7VL
  298. er+I/3CikWeszcjBp5lJhg4k2OCBi5LOiI+8EUTlFcAqxbTFEyM+IQDOwnW8Gznf
  299. nMb070gS9iBk0GTVC9iXHla0U1B1cHBldCBMYWJzIE5pZ2h0bHkgQnVpbGQgS2V5
  300. IChQdXBwZXQgTGFicyBOaWdodGx5IEJ1aWxkIEtleSkgPGluZm9AcHVwcGV0bGFi
  301. cy5jb20+iQI+BBMBAgAoBQJREZ55AhsDBQkFo5qABgsJCAcDAgYVCAIJCgsEFgID
  302. AQIeAQIXgAAKCRC4+ZnAB7tsVyjmEACSw9ZLq1ehcq8/QemiB+i8W/yVYZAxphmq
  303. w547JXOxk19V5joR5Wp0fwqIEvE1Thw0mAiMUDAgM4TpdZc8zOaILj2OH1gWsuyi
  304. fbFTHExTZAuZ1Lx1Nc1AlUv5Q+bmrzjAhx13Nk3LE7yfe4DLZnSyF3cZxAcSXYSq
  305. wSo1sBrWxf2bOYnuyJwLlz94eeEkNdSi0mfANqt+ihiiAeTe9OXf65iPFn8SYRqV
  306. W0hUayVlOedoCl0kviVXHvIgHxgkfazeIPqncFgPiRyYGNCVhKjaFjpUm+RzBFOk
  307. HQzzcyNovlnjHmhxKkN+L2f1JqmHmUQguTTpJfpRdwmnEkA1BYY6m0WQ5Owga1eE
  308. WEeHh9AjtVrukJOOibvpoS/M5FdAgaUgGXPIOziURDKBjQ0zuYMtlXgEDzKt0ugp
  309. 7YO74EAv1JiyeZ0Mu+m6WnxRX0Sb/op0ef74xZYD4eKYixOxahQ7kxtO9qTy+pOs
  310. c3/KSNGv+oQh/CgChBbN3oq1UBfL6gVioRIp2GmP6Jmfipfod+VGIVI8xyfD3h/Z
  311. nKF7dEHHMsyB03Ap2ypCcy8OEVwCeAZ4eY+lKXNyBSnddXcMGuFTqgJ1IMvTm0T8
  312. BfYn74A4fDqwNKKQGYjb67MZ+3N7YaWwCgWUvFpfd557fTQmZfV1arok2urvWIGa
  313. x82lgKTA64kBHAQQAQoABgUCU9F5DwAKCRC61fCjkumFchUwB/wLfX/PA0LUbSen
  314. es6ilcbHOZVZKyppMA5bIU6fG6SIS9FVauL0lgkEnJAhr5w3rXGd14LM33QkkPbs
  315. /uNe2YQHzzrsffLhFyJkKJXH5rc6sSM7RYbAxtMNXKpkdMhPGmHgIgMzJo3ZuD8+
  316. ixsyR/8tGAMXbHwX5aAJDKYfg8X4kkPBxzysWJzN5/wFbYEK8FHiULkHNfJv480H
  317. UBLNwczVeg9Etaje0tCQuGkD/CJHR50Kxuc/BiGYdYVjAnQVILXa2NcBizXtUU3f
  318. N+6L+K2m9Fm3Dvhw0ZVEq7TxTMmHA23HGt8fMJ7zNCRO3krK7vtjUQxSXKOM7HF+
  319. D60QA/oGiQIcBBABAgAGBQJT0XdkAAoJEEaemzabDw8dtt0QAITarh4rsJWupVXD
  320. BFHbxsUyT7AXspJ7kW3vxG3Y/gHSjleDX0VdblzUUBmD5y5JvR/DHrAgDd8XQN4E
  321. 4+hTOpZhzILZcoSWhiAW+VuL5b+R5NxSzIiHEt/qKgslvcx/sbQz8+Ro/zWHxhn9
  322. 1uFf5JOFw+5W2wBmC4OdQby7B8AiV58OBAGcVUs0+57oJRYIU0zTRAJKRstMlD7s
  323. F3R1d6EyNUbGjnJhPcltk6RRsYuJJx8vJzyY4pEy5eZPNSPEpFBjWlWyRnKDbQ6/
  324. TbtSB7bojbtjQFhh905kvdKxzcBkFgYTyzqJffUwHqJti8QQMraGAtC79/D/0vmf
  325. lIJtzTB+gA/NOhyriaSXoGzi0oA/ZKReU3uJd5Yl202s/hvG+xpBkh7ouaVa5zFX
  326. cqfi6gmmpQzVo6snI7d+Wonyvg1lhqZ7TXvtUIilsmbc5zEedidaCei77buX/ZuV
  327. 8jo+32HtsSKTYYHVsJzY6YzEy1SVfrUY+EdXXWG7Y97JaXKJc8oCNT1YA8BG4c+M
  328. 1cMXO1LTiP56gyYnrH6/oTIFrBXMl3dO/gKpcwUmf8lScFXIfVn5Wm3D0n6cUBKT
  329. aRmmpfu7UhzBMEA7ZrIGxNBuD8WwfVi8ZSwBbV92fHkukkfixkhmeUmCB9vyq31+
  330. UfTwFXkHDTMZ4jfctKuBU+3p5sEwuQINBFERnnkBEAC0XpaBe0L9yvF1oc7rDLEt
  331. XMrjDWHL6qPEW8ei94D619n1eo1QbZA4zZSZFjmN1SWtxg+2VRJazIlaFNMTpp+q
  332. 7lpmHPwzGdFdZZPVvjwd7cIe5KrGjEiTD1zf7i5Ws5Xh9jTh6VzY8nseakhIGTOC
  333. lWzxl/+X2cJlMAR4/nLJjiTi3VwI2JBT8w2H8j8EgfRpjf6P1FyLv0WWMODc/hgc
  334. /o5koLb4WRsK2w5usP/a3RNeh6L6iqHiiAL1Y9+0GZXOrjtNpkzPRarIL3MiX29o
  335. VKSFcjUREpsEZHBHLwuA3WIR6WBX49LhrA6uLgofYhALeky6/H3ZFEH9ZS3plmnX
  336. /vow8YWmz0Lyzzf848qsg5E5cHg36m2CXSEUeZfH748H78R62uIf/shusffl9Op2
  337. aZnQoPyeYIkA6N8m29CqIa/pzd68rLEQ+MNHHkp0KjQ0oKyrz9/YCXeQg3lIBXAv
  338. +FIVK/04fMA3rr5tnynkeG9Ow6fGEtqzNjZhMZtx5BnkhdLTt6qu+wyaDw3q9X1/
  339. /j3lhplXteYzUkNUIinCHODGXaI55R/I4HNsbvtvy904g5sTHZX9QBn0x7QpVZaW
  340. 90jCgl6+NPH96g1cuHFuk+HED4H6XYFcdt1VRVb9YA7GgRXkSyfw6KdtGFT15e7o
  341. 7PcaD6NpqyBfbYfrNQmiOwARAQABiQIlBBgBAgAPBQJREZ55AhsMBQkFo5qAAAoJ
  342. ELj5mcAHu2xXR8cP/Ai4PqUKBZdN6Jz628VQdiVX2EO7jhQ7KYdt9RWz87kfm0rC
  343. LhdROCyeddgGsYbpdikC3Gzrk0JFIs/qAzpZOMIip0cXTxDEWWObuwShIac8hmZz
  344. BE5SM7TcA9+/jmBwLajcreGgKs/MfDkkWkiBT/B+FyHkqS6O/rdBvYqFzLtvUigG
  345. SRf1clP4QEGWcR6LLsJ1uiH+brK3G1GsILVpX5iQ0Y4wNv0xNRGZzAPVZ1/vgHCM
  346. sAG7TZy26oOraigvnZeo1Q9r7pg+i6uSIu4ywfdNTOuoBK+VY+RKyAybBHIqH07w
  347. p9TmYOY1x+wmIe0oSYcR47OcvZU57fdLsEB9djYvkGkkmbz0gwXQL0iEW3kX+05J
  348. zrLzPsx6muR35SPNCvfR2T/0VCDwtNwwxACWuZI/tqsobU/+lA/MqRZ4kOD/Bx07
  349. CpZfYIAi2STc0MIDvpyDnZLiYVMMkqV4+gn2ANtkF+GKbra3Aeof9b4KEVabSaQ5
  350. 5W70DJF0G5bmHBSdyqdYnKB/yRj1rH+dgRbiRMv7rBAx5Q8rbYiym8im+5XNUDy2
  351. ZTQcCD53HcBLvKX6RJ4ByYawKaQqMa27WK/YWVmFXqVDVk12iKrQW6zktDdGInnD
  352. +f0rRH7c/7F/QuBR6Y4Zkso0CuVMNsmxv0E+7Zk0z4dWalzQuXpN7OXcZ8Gp
  353. =Gl+v
  354. -----END PGP PUBLIC KEY BLOCK-----",
  355. }
  356. EOS
  357. apply_manifest(pp, :catch_failures => true)
  358. apply_manifest(pp, :catch_failures => true)
  359. shell(PUPPETLABS_KEY_CHECK_COMMAND)
  360. end
  361. end
  362. context 'bogus key' do
  363. it 'fails' do
  364. pp = <<-EOS
  365. apt_key { 'puppetlabs':
  366. id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
  367. ensure => 'present',
  368. content => 'For posterity: such content, much bogus, wow',
  369. }
  370. EOS
  371. apply_manifest(pp, :expect_failures => true) do |r|
  372. expect(r.stderr).to match(/no valid OpenPGP data found/)
  373. end
  374. end
  375. end
  376. end
  377. describe 'server =>' do
  378. context 'hkps.pool.sks-keyservers.net' do
  379. it 'works' do
  380. pp = <<-EOS
  381. apt_key { 'puppetlabs':
  382. id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
  383. ensure => 'present',
  384. server => 'hkps.pool.sks-keyservers.net',
  385. }
  386. EOS
  387. apply_manifest(pp, :catch_failures => true)
  388. apply_manifest(pp, :catch_failures => true)
  389. shell(PUPPETLABS_KEY_CHECK_COMMAND)
  390. end
  391. end
  392. context 'hkp://hkps.pool.sks-keyservers.net:80' do
  393. it 'works' do
  394. pp = <<-EOS
  395. apt_key { 'puppetlabs':
  396. id => '#{PUPPETLABS_GPG_KEY_FINGERPRINT}',
  397. ensure => 'present',
  398. server => 'hkp://hkps.pool.sks-keyservers.net:80',
  399. }
  400. EOS
  401. apply_manifest(pp, :catch_failures => true)
  402. apply_manifest(pp, :catch_failures => true)
  403. shell(PUPPETLABS_KEY_CHECK_COMMAND)
  404. end
  405. end
  406. context 'nonexistant.key.server' do
  407. it 'fails' do
  408. pp = <<-EOS
  409. apt_key { 'puppetlabs':
  410. id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
  411. ensure => 'present',
  412. server => 'nonexistant.key.server',
  413. }
  414. EOS
  415. apply_manifest(pp, :expect_failures => true) do |r|
  416. expect(r.stderr).to match(/(Host not found|Couldn't resolve host)/)
  417. end
  418. end
  419. end
  420. context 'key server start with dot' do
  421. it 'fails' do
  422. pp = <<-EOS
  423. apt_key { 'puppetlabs':
  424. id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
  425. ensure => 'present',
  426. server => '.pgp.key.server',
  427. }
  428. EOS
  429. apply_manifest(pp, :expect_failures => true) do |r|
  430. expect(r.stderr).to match(/Invalid value \".pgp.key.server\"/)
  431. end
  432. end
  433. end
  434. end
  435. describe 'source =>' do
  436. context 'http://' do
  437. it 'works' do
  438. pp = <<-EOS
  439. apt_key { 'puppetlabs':
  440. id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
  441. ensure => 'present',
  442. source => 'http://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
  443. }
  444. EOS
  445. apply_manifest(pp, :catch_failures => true)
  446. apply_manifest(pp, :catch_failures => true)
  447. shell(PUPPETLABS_KEY_CHECK_COMMAND)
  448. end
  449. it 'fails with a 404' do
  450. pp = <<-EOS
  451. apt_key { 'puppetlabs':
  452. id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
  453. ensure => 'present',
  454. source => 'http://#{PUPPETLABS_APT_URL}/herpderp.gpg',
  455. }
  456. EOS
  457. apply_manifest(pp, :expect_failures => true) do |r|
  458. expect(r.stderr).to match(/404 Not Found/)
  459. end
  460. end
  461. it 'fails with a socket error' do
  462. pp = <<-EOS
  463. apt_key { 'puppetlabs':
  464. id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
  465. ensure => 'present',
  466. source => 'http://apt.puppetlabss.com/herpderp.gpg',
  467. }
  468. EOS
  469. apply_manifest(pp, :expect_failures => true) do |r|
  470. expect(r.stderr).to match(/could not resolve/)
  471. end
  472. end
  473. end
  474. context 'ftp://' do
  475. before(:each) do
  476. shell("apt-key del #{CENTOS_GPG_KEY_LONG_ID}",
  477. :acceptable_exit_codes => [0,1,2])
  478. end
  479. it 'works' do
  480. pp = <<-EOS
  481. apt_key { 'CentOS 6':
  482. id => '#{CENTOS_GPG_KEY_LONG_ID}',
  483. ensure => 'present',
  484. source => 'ftp://#{CENTOS_REPO_URL}/#{CENTOS_GPG_KEY_FILE}',
  485. }
  486. EOS
  487. apply_manifest(pp, :catch_failures => true)
  488. apply_manifest(pp, :catch_failures => true)
  489. shell(CENTOS_KEY_CHECK_COMMAND)
  490. end
  491. it 'fails with a 550' do
  492. pp = <<-EOS
  493. apt_key { 'CentOS 6':
  494. id => '#{SHOULD_NEVER_EXIST_ID}',
  495. ensure => 'present',
  496. source => 'ftp://#{CENTOS_REPO_URL}/herpderp.gpg',
  497. }
  498. EOS
  499. apply_manifest(pp, :expect_failures => true) do |r|
  500. expect(r.stderr).to match(/550 Failed to open/)
  501. end
  502. end
  503. it 'fails with a socket error' do
  504. pp = <<-EOS
  505. apt_key { 'puppetlabs':
  506. id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
  507. ensure => 'present',
  508. source => 'ftp://apt.puppetlabss.com/herpderp.gpg',
  509. }
  510. EOS
  511. apply_manifest(pp, :expect_failures => true) do |r|
  512. expect(r.stderr).to match(/could not resolve/)
  513. end
  514. end
  515. end
  516. context 'https://' do
  517. it 'works' do
  518. pp = <<-EOS
  519. apt_key { 'puppetlabs':
  520. id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
  521. ensure => 'present',
  522. source => 'https://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
  523. }
  524. EOS
  525. apply_manifest(pp, :catch_failures => true)
  526. apply_manifest(pp, :catch_failures => true)
  527. shell(PUPPETLABS_KEY_CHECK_COMMAND)
  528. end
  529. it 'fails with a 404' do
  530. pp = <<-EOS
  531. apt_key { 'puppetlabs':
  532. id => '#{SHOULD_NEVER_EXIST_ID}',
  533. ensure => 'present',
  534. source => 'https://#{PUPPETLABS_APT_URL}/herpderp.gpg',
  535. }
  536. EOS
  537. apply_manifest(pp, :expect_failures => true) do |r|
  538. expect(r.stderr).to match(/404 Not Found/)
  539. end
  540. end
  541. it 'fails with a socket error' do
  542. pp = <<-EOS
  543. apt_key { 'puppetlabs':
  544. id => '#{SHOULD_NEVER_EXIST_ID}',
  545. ensure => 'present',
  546. source => 'https://apt.puppetlabss.com/herpderp.gpg',
  547. }
  548. EOS
  549. apply_manifest(pp, :expect_failures => true) do |r|
  550. expect(r.stderr).to match(/could not resolve/)
  551. end
  552. end
  553. end
  554. context '/path/that/exists' do
  555. before(:each) do
  556. shell("curl -o /tmp/puppetlabs-pubkey.gpg \
  557. http://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}")
  558. end
  559. after(:each) do
  560. shell('rm /tmp/puppetlabs-pubkey.gpg')
  561. end
  562. it 'works' do
  563. pp = <<-EOS
  564. apt_key { 'puppetlabs':
  565. id => '4BD6EC30',
  566. ensure => 'present',
  567. source => '/tmp/puppetlabs-pubkey.gpg',
  568. }
  569. EOS
  570. apply_manifest(pp, :catch_failures => true)
  571. apply_manifest(pp, :catch_failures => true)
  572. shell(PUPPETLABS_KEY_CHECK_COMMAND)
  573. end
  574. end
  575. context '/path/that/does/not/exist' do
  576. it 'fails' do
  577. pp = <<-EOS
  578. apt_key { 'puppetlabs':
  579. id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
  580. ensure => 'present',
  581. source => '/tmp/totally_bogus.file',
  582. }
  583. EOS
  584. apply_manifest(pp, :expect_failures => true) do |r|
  585. expect(r.stderr).to match(/does not exist/)
  586. end
  587. end
  588. end
  589. context '/path/that/exists/with/bogus/content' do
  590. before(:each) do
  591. shell('echo "here be dragons" > /tmp/fake-key.gpg')
  592. end
  593. after(:each) do
  594. shell('rm /tmp/fake-key.gpg')
  595. end
  596. it 'fails' do
  597. pp = <<-EOS
  598. apt_key { 'puppetlabs':
  599. id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
  600. ensure => 'present',
  601. source => '/tmp/fake-key.gpg',
  602. }
  603. EOS
  604. apply_manifest(pp, :expect_failures => true) do |r|
  605. expect(r.stderr).to match(/no valid OpenPGP data found/)
  606. end
  607. end
  608. end
  609. end
  610. describe 'options =>' do
  611. context 'debug' do
  612. it 'works' do
  613. pp = <<-EOS
  614. apt_key { 'puppetlabs':
  615. id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
  616. ensure => 'present',
  617. options => 'debug',
  618. }
  619. EOS
  620. apply_manifest(pp, :catch_failures => true)
  621. apply_manifest(pp, :catch_failures => true)
  622. shell(PUPPETLABS_KEY_CHECK_COMMAND)
  623. end
  624. end
  625. end
  626. describe 'fingerprint validation against source/content' do
  627. context 'fingerprint in id matches fingerprint from remote key' do
  628. it 'works' do
  629. pp = <<-EOS
  630. apt_key { 'puppetlabs':
  631. id => '#{PUPPETLABS_GPG_KEY_FINGERPRINT}',
  632. ensure => 'present',
  633. source => 'https://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
  634. }
  635. EOS
  636. apply_manifest(pp, :catch_failures => true)
  637. apply_manifest(pp, :catch_failures => true)
  638. end
  639. end
  640. context 'fingerprint in id does NOT match fingerprint from remote key' do
  641. it 'works' do
  642. pp = <<-EOS
  643. apt_key { 'puppetlabs':
  644. id => '47B320EB4C7C375AA9DAE1A01054B7A24BD6E666',
  645. ensure => 'present',
  646. source => 'https://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
  647. }
  648. EOS
  649. apply_manifest(pp, :expect_failures => true) do |r|
  650. expect(r.stderr).to match(/do not match/)
  651. end
  652. end
  653. end
  654. end
  655. end