key_spec.rb 8.2 KB

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