View Javadoc

1   package com.atlassian.asap.core.server.jersey;
2   
3   import com.atlassian.asap.api.Jwt;
4   import com.atlassian.asap.api.JwtClaims;
5   import com.atlassian.asap.api.exception.AuthenticationFailedException;
6   import com.atlassian.asap.api.exception.AuthorizationFailedException;
7   import com.atlassian.asap.api.exception.PermanentAuthenticationFailedException;
8   import com.atlassian.asap.api.server.http.RequestAuthenticator;
9   import org.junit.Before;
10  import org.junit.Rule;
11  import org.junit.Test;
12  import org.mockito.Mock;
13  import org.mockito.junit.MockitoJUnit;
14  import org.mockito.junit.MockitoRule;
15  
16  import javax.ws.rs.container.ContainerRequestContext;
17  import javax.ws.rs.container.ResourceInfo;
18  import javax.ws.rs.core.Response;
19  import java.io.IOException;
20  import java.util.Optional;
21  
22  import static com.atlassian.asap.core.server.filter.AbstractRequestAuthenticationFilter.AUTHENTIC_JWT_REQUEST_ATTRIBUTE;
23  import static com.atlassian.asap.core.server.jersey.AuthenticationRequestFilter.ASAP_REQUEST_ATTRIBUTE;
24  import static com.google.common.collect.Sets.newHashSet;
25  import static org.mockito.Mockito.any;
26  import static org.mockito.Mockito.doThrow;
27  import static org.mockito.Mockito.eq;
28  import static org.mockito.Mockito.mock;
29  import static org.mockito.Mockito.never;
30  import static org.mockito.Mockito.verify;
31  import static org.mockito.Mockito.when;
32  
33  public class AuthorizationRequestFilterTest {
34      @Rule
35      public MockitoRule rule = MockitoJUnit.rule();
36  
37      @Mock
38      private RequestAuthenticator authenticator;
39      @Mock
40      private ResourceInfo resourceInfo;
41      @Mock
42      private ContainerRequestContext context;
43      @Mock
44      private Jwt jwt;
45      private AuthorizationRequestFilter filter;
46      private AsapValidator asapValidator;
47  
48      @Before
49      public void setUp() throws AuthenticationFailedException {
50          String audience = "presence-test";
51          JwtClaims claims = mock(JwtClaims.class);
52          when(claims.getAudience()).thenReturn(newHashSet(audience));
53          when(claims.getIssuer()).thenReturn("presence-test");
54          when(claims.getSubject()).thenReturn(Optional.empty());
55          when(jwt.getClaims()).thenReturn(claims);
56  
57          when(authenticator.authenticateRequest("Bearer validjwt")).thenReturn(jwt);
58  
59          when(authenticator.authenticateRequest("Bearer invalidjwt"))
60                  .thenThrow(new PermanentAuthenticationFailedException("invalid jwt", null));
61  
62          asapValidator = mock(AsapValidator.class);
63          filter = new AuthorizationRequestFilter(new EmptyBodyFailureHandler(), asapValidator);
64          filter.resourceInfo = resourceInfo;
65      }
66  
67      @Test
68      @SuppressWarnings("unchecked")
69      public void filterWithAuthorizationFailure() throws IOException, NoSuchMethodException,
70              AuthorizationFailedException {
71          Asap asap = mock(Asap.class);
72          when(context.getProperty(AUTHENTIC_JWT_REQUEST_ATTRIBUTE)).thenReturn(jwt);
73          when(context.getProperty(ASAP_REQUEST_ATTRIBUTE)).thenReturn(asap);
74  
75          doThrow(new AuthorizationFailedException("blah")).when(asapValidator).validate(any(Asap.class), eq(jwt));
76          filter.filter(context);
77          verify(context).abortWith(any(Response.class));
78          verify(context).getProperty(AUTHENTIC_JWT_REQUEST_ATTRIBUTE);
79      }
80  
81      @Test
82      @SuppressWarnings("unchecked")
83      public void filterWithoutAsap() throws IOException, NoSuchMethodException {
84          filter.filter(context);
85  
86          verify(context).getProperty(AUTHENTIC_JWT_REQUEST_ATTRIBUTE);
87          verify(context, never()).getProperty(ASAP_REQUEST_ATTRIBUTE);
88      }
89  }