2decba19192a0dac04af785e97cbb20c5d589ffd
[aaa.git] / aaa-shiro / impl / src / test / java / org / opendaylight / aaa / shiro / realm / TokenAuthRealmTest.java
1 /*
2  * Copyright (c) 2015, 2017 Brocade Communications Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.aaa.shiro.realm;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertNull;
14 import static org.junit.Assert.assertTrue;
15 import static org.mockito.Mockito.mock;
16 import static org.mockito.Mockito.when;
17
18 import com.google.common.collect.Lists;
19 import java.util.HashMap;
20 import java.util.List;
21 import java.util.Map;
22 import org.apache.shiro.authc.AuthenticationToken;
23 import org.opendaylight.aaa.shiro.realm.util.TokenUtils;
24 import org.opendaylight.aaa.shiro.realm.util.http.header.HeaderUtils;
25 import org.junit.Ignore;
26 import org.junit.Test;
27
28 public class TokenAuthRealmTest extends TokenAuthRealm {
29
30     private TokenAuthRealm testRealm = new TokenAuthRealm();
31
32     @Test
33     public void testTokenAuthRealm() {
34         assertEquals("TokenAuthRealm", testRealm.getName());
35     }
36
37     @Test(expected = NullPointerException.class)
38     public void testDoGetAuthorizationInfoPrincipalCollectionNullCacheToken() {
39         testRealm.doGetAuthorizationInfo(null);
40     }
41
42     @Test
43     public void testGetUsernamePasswordDomainString() {
44         final String username = "user";
45         final String password = "password";
46         final String domain = "domain";
47         final String expectedUsernamePasswordString = "user:password:domain";
48         assertEquals(expectedUsernamePasswordString, HeaderUtils.getUsernamePasswordDomainString(username, password, domain));
49     }
50
51     @Test
52     public void testGetEncodedToken() {
53         final String stringToEncode = "admin1:admin1";
54         final byte[] bytesToEncode = stringToEncode.getBytes();
55         final String expectedToken = org.apache.shiro.codec.Base64.encodeToString(bytesToEncode);
56         assertEquals(expectedToken, HeaderUtils.getEncodedToken(stringToEncode));
57     }
58
59     @Test
60     public void testGetTokenAuthHeader() {
61         final String encodedCredentials = HeaderUtils.getEncodedToken(HeaderUtils.getUsernamePasswordDomainString("user1",
62                 "password", "sdn"));
63         final String expectedTokenAuthHeader = "Basic " + encodedCredentials;
64         assertEquals(expectedTokenAuthHeader, HeaderUtils.getTokenAuthHeader(encodedCredentials));
65     }
66
67     @Test
68     public void testFormHeadersWithToken() {
69         final String authHeader = HeaderUtils.getEncodedToken(
70                 HeaderUtils.getTokenAuthHeader(
71                         HeaderUtils.getUsernamePasswordDomainString(
72                                 "user1", "password", "sdn")));
73         final Map<String, List<String>> expectedHeaders = new HashMap<String, List<String>>();
74         expectedHeaders.put("Authorization", Lists.newArrayList(authHeader));
75         final Map<String, List<String>> actualHeaders = HeaderUtils.formHeadersWithToken(authHeader);
76         List<String> value;
77         for (String key : expectedHeaders.keySet()) {
78             value = expectedHeaders.get(key);
79             assertTrue(actualHeaders.get(key).equals(value));
80         }
81     }
82
83     @Test
84     public void testFormHeaders() {
85         final String username = "basicUser";
86         final String password = "basicPassword";
87         final String domain = "basicDomain";
88         final String authHeader = HeaderUtils.getTokenAuthHeader(HeaderUtils.getEncodedToken(
89                 HeaderUtils.getUsernamePasswordDomainString(
90                         username, password, domain)));
91         final Map<String, List<String>> expectedHeaders = new HashMap<String, List<String>>();
92         expectedHeaders.put("Authorization", Lists.newArrayList(authHeader));
93         final Map<String, List<String>> actualHeaders = HeaderUtils.formHeaders(username, password, domain);
94         List<String> value;
95         for (String key : expectedHeaders.keySet()) {
96             value = expectedHeaders.get(key);
97             assertTrue(actualHeaders.get(key).equals(value));
98         }
99     }
100
101     @Ignore
102     @Test
103     public void testIsTokenAuthAvailable() {
104         assertTrue(testRealm.isTokenAuthAvailable());
105     }
106
107     @Test(expected = org.apache.shiro.authc.AuthenticationException.class)
108     public void testDoGetAuthenticationInfoAuthenticationToken() {
109         testRealm.doGetAuthenticationInfo(null);
110     }
111
112     @Test
113     public void testExtractUsernameNullUsername() {
114         AuthenticationToken at = mock(AuthenticationToken.class);
115         when(at.getPrincipal()).thenReturn(null);
116         assertNull(TokenUtils.extractUsername(at));
117     }
118
119     @Test(expected = ClassCastException.class)
120     public void testExtractPasswordNullPassword() {
121         AuthenticationToken at = mock(AuthenticationToken.class);
122         when(at.getPrincipal()).thenReturn("username");
123         when(at.getCredentials()).thenReturn(null);
124         TokenUtils.extractPassword(at);
125     }
126
127     @Test(expected = ClassCastException.class)
128     public void testExtractUsernameBadUsernameClass() {
129         AuthenticationToken at = mock(AuthenticationToken.class);
130         when(at.getPrincipal()).thenReturn(new Integer(1));
131         TokenUtils.extractUsername(at);
132     }
133
134     @Test(expected = ClassCastException.class)
135     public void testExtractPasswordBadPasswordClass() {
136         AuthenticationToken at = mock(AuthenticationToken.class);
137         when(at.getPrincipal()).thenReturn("username");
138         when(at.getCredentials()).thenReturn(new Integer(1));
139         TokenUtils.extractPassword(at);
140     }
141 }