View Javadoc

1   package com.atlassian.asap.feign;
2   
3   import com.atlassian.asap.api.Jwt;
4   import com.atlassian.asap.api.JwtBuilder;
5   import com.atlassian.asap.api.client.http.AuthorizationHeaderGenerator;
6   import com.atlassian.asap.core.client.http.AuthorizationHeaderGeneratorImpl;
7   import feign.Feign;
8   import feign.RequestLine;
9   import feign.gson.GsonDecoder;
10  import org.hamcrest.Matchers;
11  import org.junit.Rule;
12  import org.junit.Test;
13  import org.mockserver.client.server.MockServerClient;
14  import org.mockserver.junit.MockServerRule;
15  import org.mockserver.model.HttpRequest;
16  import org.mockserver.model.HttpResponse;
17  
18  import java.net.URI;
19  
20  import static org.hamcrest.Matchers.is;
21  import static org.junit.Assert.assertThat;
22  
23  public class AsapInterceptorIntegrationTest {
24      @Rule
25      public MockServerRule mockServerRule = new MockServerRule(this);
26  
27      private MockServerClient mockServerClient;
28  
29      @Test
30      public void shouldIncludeTokenInTheRequest() {
31          // client
32          AuthorizationHeaderGenerator authorizationHeaderGenerator =
33                  AuthorizationHeaderGeneratorImpl.createDefault(URI.create("classpath:/privatekeys/"));
34          Jwt jwtPrototype = JwtBuilder.newJwt()
35                  .audience("audience").issuer("issuer1").keyId("issuer1/rsa-key-for-tests")
36                  .build();
37          Client client = Feign.builder()
38                  .decoder(new GsonDecoder())
39                  .requestInterceptor(new AsapInterceptor(authorizationHeaderGenerator, jwtPrototype))
40                  .target(Client.class, "http://localhost:" + mockServerRule.getPort());
41  
42          // server
43          HttpRequest expectedRequest = HttpRequest.request().withPath("/hello");
44          mockServerClient
45                  .when(expectedRequest)
46                  .respond(HttpResponse.response().withStatusCode(200));
47  
48          // request
49          client.hello();
50  
51          // assertions
52          HttpRequest[] actualRequests = mockServerClient.retrieveRecordedRequests(expectedRequest);
53          assertThat(actualRequests.length, is(1));
54          assertThat(actualRequests[0].getFirstHeader("Authorization"), Matchers.startsWith("Bearer "));
55      }
56  
57      interface Client {
58          @RequestLine("GET /hello")
59          String hello();
60      }
61  }