2 * Copyright (c) 2015 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.junit.Test;
27 * @author Ryan Goulding (ryandgoulding@gmail.com)
30 public class TokenAuthRealmTest extends TokenAuthRealm {
32 private TokenAuthRealm testRealm = new TokenAuthRealm();
35 public void testTokenAuthRealm() {
36 assertEquals("TokenAuthRealm", testRealm.getName());
39 @Test(expected = NullPointerException.class)
40 public void testDoGetAuthorizationInfoPrincipalCollectionNullCacheToken() {
41 testRealm.doGetAuthorizationInfo(null);
45 public void testGetUsernamePasswordDomainString() {
46 final String username = "user";
47 final String password = "password";
48 final String domain = "domain";
49 final String expectedUsernamePasswordString = "user:password:domain";
50 assertEquals(expectedUsernamePasswordString, getUsernamePasswordDomainString(username, password, domain));
54 public void testGetEncodedToken() {
55 final String stringToEncode = "admin1:admin1";
56 final byte[] bytesToEncode = stringToEncode.getBytes();
57 final String expectedToken = org.apache.shiro.codec.Base64.encodeToString(bytesToEncode);
58 assertEquals(expectedToken, getEncodedToken(stringToEncode));
62 public void testGetTokenAuthHeader() {
63 final String encodedCredentials = getEncodedToken(getUsernamePasswordDomainString("user1",
65 final String expectedTokenAuthHeader = "Basic " + encodedCredentials;
66 assertEquals(expectedTokenAuthHeader, getTokenAuthHeader(encodedCredentials));
70 public void testFormHeadersWithToken() {
71 final String authHeader = getEncodedToken(getTokenAuthHeader(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 = 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 = getTokenAuthHeader(getEncodedToken(getUsernamePasswordDomainString(
89 username, password, domain)));
90 final Map<String, List<String>> expectedHeaders = new HashMap<String, List<String>>();
91 expectedHeaders.put("Authorization", Lists.newArrayList(authHeader));
92 final Map<String, List<String>> actualHeaders = formHeaders(username, password, domain);
94 for (String key : expectedHeaders.keySet()) {
95 value = expectedHeaders.get(key);
96 assertTrue(actualHeaders.get(key).equals(value));
101 public void testIsTokenAuthAvailable() {
102 assertFalse(testRealm.isTokenAuthAvailable());
105 @Test(expected = org.apache.shiro.authc.AuthenticationException.class)
106 public void testDoGetAuthenticationInfoAuthenticationToken() {
107 testRealm.doGetAuthenticationInfo(null);
111 public void testExtractUsernameNullUsername() {
112 AuthenticationToken at = mock(AuthenticationToken.class);
113 when(at.getPrincipal()).thenReturn(null);
114 assertNull(extractUsername(at));
117 @Test(expected = ClassCastException.class)
118 public void testExtractPasswordNullPassword() {
119 AuthenticationToken at = mock(AuthenticationToken.class);
120 when(at.getPrincipal()).thenReturn("username");
121 when(at.getCredentials()).thenReturn(null);
125 @Test(expected = ClassCastException.class)
126 public void testExtractUsernameBadUsernameClass() {
127 AuthenticationToken at = mock(AuthenticationToken.class);
128 when(at.getPrincipal()).thenReturn(new Integer(1));
132 @Test(expected = ClassCastException.class)
133 public void testExtractPasswordBadPasswordClass() {
134 AuthenticationToken at = mock(AuthenticationToken.class);
135 when(at.getPrincipal()).thenReturn("username");
136 when(at.getCredentials()).thenReturn(new Integer(1));