key_compat_spec.rb 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. require 'spec_helper'
  2. describe 'apt::key', :type => :define do
  3. let(:facts) { {
  4. :lsbdistid => 'Debian',
  5. :osfamily => 'Debian',
  6. :puppetversion => Puppet.version,
  7. } }
  8. GPG_KEY_ID = '47B320EB4C7C375AA9DAE1A01054B7A24BD6EC30'
  9. let :title do
  10. GPG_KEY_ID
  11. end
  12. let :pre_condition do
  13. 'include apt'
  14. end
  15. describe 'normal operation' do
  16. describe 'default options' do
  17. it {
  18. is_expected.to contain_apt_key(title).with({
  19. :id => title,
  20. :ensure => 'present',
  21. :source => nil,
  22. :server => 'keyserver.ubuntu.com',
  23. :content => nil,
  24. :keyserver_options => nil,
  25. })
  26. }
  27. it 'contains the apt_key present anchor' do
  28. is_expected.to contain_anchor("apt_key #{title} present")
  29. end
  30. end
  31. describe 'title and key =>' do
  32. let :title do
  33. 'puppetlabs'
  34. end
  35. let :params do {
  36. :key => GPG_KEY_ID,
  37. } end
  38. it 'contains the apt_key' do
  39. is_expected.to contain_apt_key(title).with({
  40. :id => GPG_KEY_ID,
  41. :ensure => 'present',
  42. :source => nil,
  43. :server => 'keyserver.ubuntu.com',
  44. :content => nil,
  45. :keyserver_options => nil,
  46. })
  47. end
  48. it 'contains the apt_key present anchor' do
  49. is_expected.to contain_anchor("apt_key #{GPG_KEY_ID} present")
  50. end
  51. end
  52. describe 'ensure => absent' do
  53. let :params do {
  54. :ensure => 'absent',
  55. } end
  56. it 'contains the apt_key' do
  57. is_expected.to contain_apt_key(title).with({
  58. :id => title,
  59. :ensure => 'absent',
  60. :source => nil,
  61. :server => 'keyserver.ubuntu.com',
  62. :content => nil,
  63. :keyserver_options => nil,
  64. })
  65. end
  66. it 'contains the apt_key absent anchor' do
  67. is_expected.to contain_anchor("apt_key #{title} absent")
  68. end
  69. end
  70. describe 'set a bunch of things!' do
  71. let :params do {
  72. :key_content => 'GPG key content',
  73. :key_source => 'http://apt.puppetlabs.com/pubkey.gpg',
  74. :key_server => 'pgp.mit.edu',
  75. :key_options => 'debug',
  76. } end
  77. it 'contains the apt_key' do
  78. is_expected.to contain_apt_key(title).with({
  79. :id => title,
  80. :ensure => 'present',
  81. :source => 'http://apt.puppetlabs.com/pubkey.gpg',
  82. :server => 'pgp.mit.edu',
  83. :content => params[:key_content],
  84. :options => 'debug',
  85. })
  86. end
  87. it 'contains the apt_key present anchor' do
  88. is_expected.to contain_anchor("apt_key #{title} present")
  89. end
  90. end
  91. context "domain with dash" do
  92. let(:params) do{
  93. :key_server => 'p-gp.m-it.edu',
  94. } end
  95. it 'contains the apt_key' do
  96. is_expected.to contain_apt_key(title).with({
  97. :id => title,
  98. :server => 'p-gp.m-it.edu',
  99. })
  100. end
  101. end
  102. context "url" do
  103. let :params do
  104. {
  105. :key_server => 'hkp://pgp.mit.edu',
  106. }
  107. end
  108. it 'contains the apt_key' do
  109. is_expected.to contain_apt_key(title).with({
  110. :id => title,
  111. :server => 'hkp://pgp.mit.edu',
  112. })
  113. end
  114. end
  115. context "url with port number" do
  116. let :params do
  117. {
  118. :key_server => 'hkp://pgp.mit.edu:80',
  119. }
  120. end
  121. it 'contains the apt_key' do
  122. is_expected.to contain_apt_key(title).with({
  123. :id => title,
  124. :server => 'hkp://pgp.mit.edu:80',
  125. })
  126. end
  127. end
  128. end
  129. describe 'validation' do
  130. context "domain begin with dash" do
  131. let(:params) do{
  132. :key_server => '-pgp.mit.edu',
  133. } end
  134. it 'fails' do
  135. expect { subject.call } .to raise_error(/does not match/)
  136. end
  137. end
  138. context "domain begin with dot" do
  139. let(:params) do{
  140. :key_server => '.pgp.mit.edu',
  141. } end
  142. it 'fails' do
  143. expect { subject.call } .to raise_error(/does not match/)
  144. end
  145. end
  146. context "domain end with dot" do
  147. let(:params) do{
  148. :key_server => "pgp.mit.edu.",
  149. } end
  150. it 'fails' do
  151. expect { subject.call } .to raise_error(/does not match/)
  152. end
  153. end
  154. context "exceed character url" do
  155. let :params do
  156. {
  157. :key_server => 'hkp://pgpiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii.mit.edu'
  158. }
  159. end
  160. it 'fails' do
  161. expect { subject.call }.to raise_error(/does not match/)
  162. end
  163. end
  164. context "incorrect port number url" do
  165. let :params do
  166. {
  167. :key_server => 'hkp://pgp.mit.edu:8008080'
  168. }
  169. end
  170. it 'fails' do
  171. expect { subject.call }.to raise_error(/does not match/)
  172. end
  173. end
  174. context "incorrect protocol for url" do
  175. let :params do
  176. {
  177. :key_server => 'abc://pgp.mit.edu:80'
  178. }
  179. end
  180. it 'fails' do
  181. expect { subject.call }.to raise_error(/does not match/)
  182. end
  183. end
  184. context "missing port number url" do
  185. let :params do
  186. {
  187. :key_server => 'hkp://pgp.mit.edu:'
  188. }
  189. end
  190. it 'fails' do
  191. expect { subject.call }.to raise_error(/does not match/)
  192. end
  193. end
  194. context "url ending with a dot" do
  195. let :params do
  196. {
  197. :key_server => 'hkp://pgp.mit.edu.'
  198. }
  199. end
  200. it 'fails' do
  201. expect { subject.call }.to raise_error(/does not match/)
  202. end
  203. end
  204. context "url begin with a dash" do
  205. let(:params) do{
  206. :key_server => "hkp://-pgp.mit.edu",
  207. } end
  208. it 'fails' do
  209. expect { subject.call }.to raise_error(/does not match/)
  210. end
  211. end
  212. context 'invalid key' do
  213. let :title do
  214. 'Out of rum. Why? Why are we out of rum?'
  215. end
  216. it 'fails' do
  217. expect { subject.call }.to raise_error(/does not match/)
  218. end
  219. end
  220. context 'invalid source' do
  221. let :params do {
  222. :key_source => 'afp://puppetlabs.com/key.gpg',
  223. } end
  224. it 'fails' do
  225. expect { subject.call }.to raise_error(/does not match/)
  226. end
  227. end
  228. context 'invalid content' do
  229. let :params do {
  230. :key_content => [],
  231. } end
  232. it 'fails' do
  233. expect { subject.call }.to raise_error(/is not a string/)
  234. end
  235. end
  236. context 'invalid server' do
  237. let :params do {
  238. :key_server => 'two bottles of rum',
  239. } end
  240. it 'fails' do
  241. expect { subject.call }.to raise_error(/does not match/)
  242. end
  243. end
  244. context 'invalid keyserver_options' do
  245. let :params do {
  246. :key_options => {},
  247. } end
  248. it 'fails' do
  249. expect { subject.call }.to raise_error(/is not a string/)
  250. end
  251. end
  252. context 'invalid ensure' do
  253. let :params do
  254. {
  255. :ensure => 'foo',
  256. }
  257. end
  258. it 'fails' do
  259. expect { subject.call }.to raise_error(/does not match/)
  260. end
  261. end
  262. describe 'duplication' do
  263. context 'two apt::key resources for same key, different titles' do
  264. let :pre_condition do
  265. "#{super()}\napt::key { 'duplicate': key => '#{title}', }"
  266. end
  267. it 'contains the duplicate apt::key resource' do
  268. is_expected.to contain_apt__key('duplicate').with({
  269. :key => title,
  270. :ensure => 'present',
  271. })
  272. end
  273. it 'contains the original apt::key resource' do
  274. is_expected.to contain_apt__key(title).with({
  275. :id => title,
  276. :ensure => 'present',
  277. })
  278. end
  279. it 'contains the native apt_key' do
  280. is_expected.to contain_apt_key('duplicate').with({
  281. :id => title,
  282. :ensure => 'present',
  283. :source => nil,
  284. :server => 'keyserver.ubuntu.com',
  285. :content => nil,
  286. :keyserver_options => nil,
  287. })
  288. end
  289. it 'does not contain the original apt_key' do
  290. is_expected.not_to contain_apt_key(title)
  291. end
  292. end
  293. context 'two apt::key resources, different ensure' do
  294. let :pre_condition do
  295. "#{super()}\napt::key { 'duplicate': key => '#{title}', ensure => 'absent', }"
  296. end
  297. it 'informs the user of the impossibility' do
  298. expect { subject.call }.to raise_error(/already ensured as absent/)
  299. end
  300. end
  301. end
  302. end
  303. end