1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes* @author Maxim V. Makarov
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes*/
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.auth.tests.login;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileOutputStream;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.OutputStream;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.MalformedURLException;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.URL;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.HashMap;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Iterator;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.List;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Map;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Properties;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.login.AppConfigurationEntry;
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.auth.login.DefaultConfigurationParser;
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.auth.login.DefaultConfigurationParser.InvalidFormatException;
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.resource.Support_Resources;
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tests parser implementation for default configuration.
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class DefaultConfigParserTest extends TestCase {
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static String fconf = Support_Resources
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            .getAbsoluteResourcePath("auth.conf");
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	Properties p;
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	URL url;
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	List<AppConfigurationEntry> entriesList;
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	@Override
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void setUp() throws Exception {
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		p = System.getProperties();
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		File f = new File(fconf);
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			url = f.toURL();
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (MalformedURLException e) {
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 *  test on existence of a application name
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @throws Exception
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public final void testConfigParser_01() throws Exception {
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Map<String, List<AppConfigurationEntry>> config = null;
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			config = DefaultConfigurationParser.configParser(url, p, new HashMap<String, List<AppConfigurationEntry>>());
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			entriesList = config.get("Login1");
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNotNull(entriesList);
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			entriesList = config.get("other");
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNotNull(entriesList);
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			entriesList = config.get("Login2");
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNotNull(entriesList);
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			entriesList = config.get("Login3");
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNotNull(entriesList);
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			entriesList = config.get("Login4");
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNotNull(entriesList);
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			entriesList = config.get("Login5");
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNotNull(entriesList);
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			entriesList = config.get("Login6");
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNotNull(entriesList);
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			entriesList = config.get("Login7");
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNotNull(entriesList);
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			entriesList = config.get("Login8");
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNull(entriesList);
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * test on correct initialization of a config file
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @throws Exception
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public final void testConfigParser_02() throws Exception {
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Map<String, List<AppConfigurationEntry>> config = DefaultConfigurationParser.configParser(url, p, new HashMap<String, List<AppConfigurationEntry>>());
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			entriesList = config.get("Login1");
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			if (entriesList == null || entriesList.size() == 0) {
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			    fail("Unable to read configuration");
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Iterator<AppConfigurationEntry> i = entriesList.iterator();
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			while (i.hasNext()) {
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				AppConfigurationEntry e = i.next();
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				assertEquals("com.intel.security.auth.module.LoginModule1", e
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						.getLoginModuleName());
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				assertEquals("LoginModuleControlFlag: required", e
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						.getControlFlag().toString());
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				assertEquals(
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						AppConfigurationEntry.LoginModuleControlFlag.REQUIRED,
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						e.getControlFlag());
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				Map<String, String> m = new HashMap<String, String>();
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				m.put("debug1", "true");
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				m.put("test1", "false");
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				assertEquals(m, e.getOptions());
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * test on invalid initialization of a config file
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @throws Exception
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public final void testNegConfig() throws Exception {
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		String[] str = {
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Login ERR {\n com.intel.security.auth.module.LoginModule required debug=\"true\" test=false;\n};",
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"{\n com.intel.security.auth.module.LoginModule required debug=\"true\" test=false;\n};",
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Login \n com.intel.security.auth.module.LoginModule required debug=\"true\" test=false;\n};",
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Login {\n com.intel.security.auth.module.LoginModule required debug=\"true\" test=false;\n}",
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Login {\n com.intel.security.auth.module.LoginModule required debug=\"true\" test=false;\n;",
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Login {\n com.intel.security.auth.module.LoginModule required debug=\"true\" test=false\n};",
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Login {\n com.intel.security.auth.module.LoginModule required debug=\"true\" test=;\n};",
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Login {\n com.intel.security.auth.module.LoginModule required debug=\"true\" =false;\n};",
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Login {\n com.intel.security.auth.module.LoginModule required debug=\"true test=false;\n};",
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Login {\n com.intel.security.auth.module.LoginModule required debug=true\" test=false;\n};",
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Login {\n com.intel.security.auth.module.LoginModule required debug\n};",
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Login {\n com.intel.security.auth.module.LoginModule INVALID \n};",
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Login {\n required \n};",
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Login {\n com.intel.security.auth.module.LoginModule required\n}",
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Login {\n com.intel.security.auth.module.LoginModule1 required debug=\"true\";\n};\n"
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				+ "Login {\n com.intel.security.auth.module.LoginModule2 required debug=\"true\" test=false;\n};\n",
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				};
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < str.length; i++) {
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			File file = File.createTempFile("auth_neg_", ".conf");
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			byte[] b = str[i].getBytes();
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			OutputStream os = new FileOutputStream(file);
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			for (byte element : b) {
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				os.write(element);
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			os.flush();
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			os.close();
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			try {
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				DefaultConfigurationParser.configParser(file.toURL(), p, new HashMap<String, List<AppConfigurationEntry>>());
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				fail("no expected InvalidFormatException" + i);
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			} catch (NullPointerException e) {
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				System.out.println(file.getCanonicalPath());
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			} catch (DefaultConfigurationParser.InvalidFormatException e) {
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			} finally {
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				file.delete();
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void testException() {
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		InvalidFormatException ife = new InvalidFormatException("message");
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("message", ife.getMessage());
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throw ife;
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }catch (Exception e){
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue(ife.equals(e));
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DefaultConfigurationParser.InvalidFormatException ife1 = new DefaultConfigurationParser.InvalidFormatException("message");
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("message", ife1.getMessage());
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
187