|
207 | 207 | end
|
208 | 208 | end
|
209 | 209 | end
|
| 210 | + |
| 211 | + context 'when getting certificates' do |
| 212 | + let(:cert) { cert_fixture('signed.pem') } |
| 213 | + let(:pem) { cert.to_pem } |
| 214 | + let(:url) { "https://www.example.com/puppet-ca/v1/certificate_renewal" } |
| 215 | + let(:cert_context) { Puppet::SSL::SSLContext.new(client_cert: pem) } |
| 216 | + let(:client) { Puppet::HTTP::Client.new(ssl_context: cert_context) } |
| 217 | + let(:session) { Puppet::HTTP::Session.new(client, []) } |
| 218 | + let(:subject) { client.create_session.route_to(:ca) } |
| 219 | + |
| 220 | + it "gets a certificate from the 'certificate_renewal' endpoint" do |
| 221 | + stub_request(:post, url).to_return(body: pem) |
| 222 | + |
| 223 | + _, body = subject.post_certificate_renewal(cert_context) |
| 224 | + expect(body).to eq(pem) |
| 225 | + end |
| 226 | + |
| 227 | + it 'returns the request response' do |
| 228 | + stub_request(:post, url).to_return(body: 'pem') |
| 229 | + |
| 230 | + resp, _ = subject.post_certificate_renewal(cert_context) |
| 231 | + expect(resp).to be_a(Puppet::HTTP::Response) |
| 232 | + end |
| 233 | + |
| 234 | + it 'accepts text/plain responses' do |
| 235 | + stub_request(:post, url).with(headers: {'Accept' => 'text/plain'}) |
| 236 | + |
| 237 | + subject.post_certificate_renewal(cert_context) |
| 238 | + end |
| 239 | + |
| 240 | + it 'raises an ArgumentError if the SSL context does not contain a client cert' do |
| 241 | + stub_request(:post, url) |
| 242 | + expect { subject.post_certificate_renewal(ssl_context) }.to raise_error(ArgumentError, 'SSL context must contain a client certificate.') |
| 243 | + end |
| 244 | + |
| 245 | + it 'raises response error if unsuccessful' do |
| 246 | + stub_request(:post, url).to_return(status: [400, 'Bad Request']) |
| 247 | + |
| 248 | + expect { |
| 249 | + subject.post_certificate_renewal(cert_context) |
| 250 | + }.to raise_error do |err| |
| 251 | + expect(err).to be_an_instance_of(Puppet::HTTP::ResponseError) |
| 252 | + expect(err.message).to eq('Bad Request') |
| 253 | + expect(err.response.code).to eq(400) |
| 254 | + end |
| 255 | + end |
| 256 | + |
| 257 | + it 'raises a response error if unsuccessful' do |
| 258 | + stub_request(:post, url).to_return(status: [404, 'Not Found']) |
| 259 | + |
| 260 | + expect { |
| 261 | + subject.post_certificate_renewal(cert_context) |
| 262 | + }.to raise_error do |err| |
| 263 | + expect(err).to be_an_instance_of(Puppet::HTTP::ResponseError) |
| 264 | + expect(err.message).to eq("Not Found") |
| 265 | + expect(err.response.code).to eq(404) |
| 266 | + end |
| 267 | + end |
| 268 | + |
| 269 | + it 'raises a response error if unsuccessful' do |
| 270 | + stub_request(:post, url).to_return(status: [404, 'Forbidden']) |
| 271 | + |
| 272 | + expect { |
| 273 | + subject.post_certificate_renewal(cert_context) |
| 274 | + }.to raise_error do |err| |
| 275 | + expect(err).to be_an_instance_of(Puppet::HTTP::ResponseError) |
| 276 | + expect(err.message).to eq("Forbidden") |
| 277 | + expect(err.response.code).to eq(404) |
| 278 | + end |
| 279 | + end |
| 280 | + end |
210 | 281 | end
|
0 commit comments