2 * Copyright (c) 2015, 2017 Brocade Communications Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.aaa.shiro.realm;
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;
18 import com.google.common.collect.Lists;
19 import java.util.HashMap;
20 import java.util.List;
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;
28 public class TokenAuthRealmTest extends TokenAuthRealm {
30 private TokenAuthRealm testRealm = new TokenAuthRealm();
33 public void testTokenAuthRealm() {
34 assertEquals("TokenAuthRealm", testRealm.getName());
37 @Test(expected = NullPointerException.class)
38 public void testDoGetAuthorizationInfoPrincipalCollectionNullCacheToken() {
39 testRealm.doGetAuthorizationInfo(null);
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));
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));
60 public void testGetTokenAuthHeader() {
61 final String encodedCredentials = HeaderUtils.getEncodedToken(HeaderUtils.getUsernamePasswordDomainString("user1",
63 final String expectedTokenAuthHeader = "Basic " + encodedCredentials;
64 assertEquals(expectedTokenAuthHeader, HeaderUtils.getTokenAuthHeader(encodedCredentials));
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);
77 for (String key : expectedHeaders.keySet()) {
78 value = expectedHeaders.get(key);
79 assertTrue(actualHeaders.get(key).equals(value));
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);
95 for (String key : expectedHeaders.keySet()) {
96 value = expectedHeaders.get(key);
97 assertTrue(actualHeaders.get(key).equals(value));
103 public void testIsTokenAuthAvailable() {
104 assertTrue(testRealm.isTokenAuthAvailable());
107 @Test(expected = org.apache.shiro.authc.AuthenticationException.class)
108 public void testDoGetAuthenticationInfoAuthenticationToken() {
109 testRealm.doGetAuthenticationInfo(null);
113 public void testExtractUsernameNullUsername() {
114 AuthenticationToken at = mock(AuthenticationToken.class);
115 when(at.getPrincipal()).thenReturn(null);
116 assertNull(TokenUtils.extractUsername(at));
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);
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);
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);