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
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
43 HttpRequest expectedRequest = HttpRequest.request().withPath("/hello");
44 mockServerClient
45 .when(expectedRequest)
46 .respond(HttpResponse.response().withStatusCode(200));
47
48
49 client.hello();
50
51
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 }