f2eb92b561892cce8bbc57ee7726631b87fa9f96
[moon.git] /
1 /*
2  * Copyright (c) 2015 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.junit.Test;
24
25 /**
26  *
27  * @author Ryan Goulding (ryandgoulding@gmail.com)
28  *
29  */
30 public class TokenAuthRealmTest extends TokenAuthRealm {
31
32     private TokenAuthRealm testRealm = new TokenAuthRealm();
33
34     @Test
35     public void testTokenAuthRealm() {
36         assertEquals("TokenAuthRealm", testRealm.getName());
37     }
38
39     @Test(expected = NullPointerException.class)
40     public void testDoGetAuthorizationInfoPrincipalCollectionNullCacheToken() {
41         testRealm.doGetAuthorizationInfo(null);
42     }
43
44     @Test
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));
51     }
52
53     @Test
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));
59     }
60
61     @Test
62     public void testGetTokenAuthHeader() {
63         final String encodedCredentials = getEncodedToken(getUsernamePasswordDomainString("user1",
64                 "password", "sdn"));
65         final String expectedTokenAuthHeader = "Basic " + encodedCredentials;
66         assertEquals(expectedTokenAuthHeader, getTokenAuthHeader(encodedCredentials));
67     }
68
69     @Test
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);
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 = 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);
93         List<String> value;
94         for (String key : expectedHeaders.keySet()) {
95             value = expectedHeaders.get(key);
96             assertTrue(actualHeaders.get(key).equals(value));
97         }
98     }
99
100     @Test
101     public void testIsTokenAuthAvailable() {
102         assertFalse(testRealm.isTokenAuthAvailable());
103     }
104
105     @Test(expected = org.apache.shiro.authc.AuthenticationException.class)
106     public void testDoGetAuthenticationInfoAuthenticationToken() {
107         testRealm.doGetAuthenticationInfo(null);
108     }
109
110     @Test
111     public void testExtractUsernameNullUsername() {
112         AuthenticationToken at = mock(AuthenticationToken.class);
113         when(at.getPrincipal()).thenReturn(null);
114         assertNull(extractUsername(at));
115     }
116
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);
122         extractPassword(at);
123     }
124
125     @Test(expected = ClassCastException.class)
126     public void testExtractUsernameBadUsernameClass() {
127         AuthenticationToken at = mock(AuthenticationToken.class);
128         when(at.getPrincipal()).thenReturn(new Integer(1));
129         extractUsername(at);
130     }
131
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));
137         extractPassword(at);
138     }
139 }