View Javadoc

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              // verify request is retried
54              mockServerClient.verify(expectedRequest, VerificationTimes.exactly(3)); // initial + 2 retries
55          }
56      }
57  }