1/*
2 *  Licensed to the Apache Software Foundation (ASF) under one or more
3 *  contributor license agreements.  See the NOTICE file distributed with
4 *  this work for additional information regarding copyright ownership.
5 *  The ASF licenses this file to You under the Apache License, Version 2.0
6 *  (the "License"); you may not use this file except in compliance with
7 *  the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 */
17
18package org.apache.harmony.auth.tests.module;
19
20import java.io.ByteArrayInputStream;
21import java.io.InputStream;
22import java.util.Arrays;
23
24import javax.security.auth.login.LoginException;
25
26import org.apache.harmony.auth.module.LoginModuleUtils;
27
28import junit.framework.TestCase;
29
30public class LoginModuleUtilsTest extends TestCase {
31
32    public void testGetPassword() throws Exception {
33        final String PASSWORD_AS_STRING = "TESTPASSWORD";
34        final char[] PASSWORD_AS_CHARS = PASSWORD_AS_STRING.toCharArray();
35
36        String password_file_content = PASSWORD_AS_STRING;
37        InputStream in = new ByteArrayInputStream(password_file_content
38                .getBytes());
39        char[] password = LoginModuleUtils.getPassword(in);
40        assertTrue(Arrays.equals(PASSWORD_AS_CHARS, password));
41
42        password_file_content = "TESTPASSWORD" + "\nNONsense";
43        in = new ByteArrayInputStream(password_file_content.getBytes());
44        password = LoginModuleUtils.getPassword(in);
45        assertTrue(Arrays.equals(PASSWORD_AS_CHARS, password));
46
47        password_file_content = "TESTPASSWORD" + "\r\nNONsense";
48        in = new ByteArrayInputStream(password_file_content.getBytes());
49        password = LoginModuleUtils.getPassword(in);
50        assertTrue(Arrays.equals(PASSWORD_AS_CHARS, password));
51
52        password_file_content = "TESTPASSWORD" + "\n\rNONsense";
53        in = new ByteArrayInputStream(password_file_content.getBytes());
54        password = LoginModuleUtils.getPassword(in);
55        assertTrue(Arrays.equals(PASSWORD_AS_CHARS, password));
56
57        password_file_content = "TESTPASSWORD" + "\r\r\nNONsense";
58        in = new ByteArrayInputStream(password_file_content.getBytes());
59        password = LoginModuleUtils.getPassword(in);
60        String expectedString = PASSWORD_AS_STRING + "\r";
61        assertTrue(Arrays.equals(expectedString.toCharArray(), password));
62    }
63
64    public void testClearPassword() throws Exception {
65        final String PASSWORD_AS_STRING = "TESTPASSWORD";
66
67        char[] password = PASSWORD_AS_STRING.toCharArray();
68        LoginModuleUtils.clearPassword(password);
69        for (char c : password) {
70            assertEquals('\0', c);
71        }
72
73        password = null;
74        LoginModuleUtils.clearPassword(password);
75        password = new char[0];
76        LoginModuleUtils.clearPassword(password);
77    }
78
79    public void testLoginModuleStatus() throws Exception {
80        LoginModuleUtils.LoginModuleStatus status = new LoginModuleUtils.LoginModuleStatus();
81        try {
82            status.checkLogin();
83        } catch (LoginException e) {
84            // expected
85        }
86
87        try {
88            status.checkCommit();
89        } catch (LoginException e) {
90            // expected
91        }
92
93        try {
94            status.checkLogout();
95        } catch (LoginException e) {
96            // expected
97        }
98
99        status.initialized();
100        assertEquals(LoginModuleUtils.ACTION.login, status
101                .checkLogin());
102
103        try {
104            status.checkCommit();
105        } catch (LoginException e) {
106            // expected
107        }
108
109        assertEquals(LoginModuleUtils.ACTION.no_action,
110                status.checkLogout());
111
112        status.logined();
113        assertEquals(LoginModuleUtils.ACTION.no_action,
114                status.checkLogin());
115        assertEquals(LoginModuleUtils.ACTION.commit, status
116                .checkCommit());
117        assertEquals(LoginModuleUtils.ACTION.no_action,
118                status.checkLogout());
119
120        status.committed();
121        assertEquals(LoginModuleUtils.ACTION.no_action,
122                status.checkLogin());
123        assertEquals(LoginModuleUtils.ACTION.no_action,
124                status.checkCommit());
125        assertEquals(LoginModuleUtils.ACTION.logout, status
126                .checkLogout());
127
128        status.logined();
129        assertEquals(LoginModuleUtils.ACTION.no_action,
130                status.checkLogin());
131        assertEquals(LoginModuleUtils.ACTION.commit, status
132                .checkCommit());
133        assertEquals(LoginModuleUtils.ACTION.no_action,
134                status.checkLogout());
135    }
136
137}
138