1 package com.atlassian.asap.core.keys.publickey;
2
3 import com.atlassian.asap.core.exception.PublicKeyRetrievalException;
4 import com.atlassian.asap.core.keys.PemReader;
5 import com.atlassian.asap.core.validator.ValidatedKeyId;
6 import org.junit.Before;
7 import org.junit.Rule;
8 import org.junit.Test;
9 import org.junit.rules.ExpectedException;
10 import org.mockserver.client.server.MockServerClient;
11 import org.mockserver.junit.MockServerRule;
12 import org.mockserver.model.HttpRequest;
13 import org.mockserver.model.HttpResponse;
14 import org.mockserver.verify.VerificationTimes;
15
16 import java.net.URI;
17
18 import static org.junit.Assert.fail;
19
20 public class HttpPublicKeyProviderIntTest {
21 private static final String KEY_ID = "keyId";
22
23 @Rule
24 public MockServerRule mockServerRule = new MockServerRule(this);
25
26 @Rule
27 public ExpectedException expectedException = ExpectedException.none();
28
29 private MockServerClient mockServerClient;
30
31 private HttpPublicKeyProvider httpPublicKeyProvider;
32
33 @Before
34 public void createProvider() {
35 httpPublicKeyProvider = new HttpPublicKeyProvider(
36 URI.create("http://localhost:" + mockServerRule.getPort() + "/"),
37 HttpPublicKeyProvider.defaultHttpClient(),
38 new PemReader(),
39 true);
40 }
41
42 @Test
43 public void shouldRetryOnServerFailure() throws Exception {
44 HttpRequest expectedRequest = HttpRequest.request().withPath("/" + KEY_ID);
45 mockServerClient
46 .when(expectedRequest)
47 .respond(HttpResponse.response().withStatusCode(500));
48
49 try {
50 httpPublicKeyProvider.getKey(ValidatedKeyId.validate(KEY_ID));
51 fail("Should have failed");
52 } catch (PublicKeyRetrievalException e) {
53
54 mockServerClient.verify(expectedRequest, VerificationTimes.exactly(3));
55 }
56 }
57 }