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 Stepan M. Mishura 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes*/ 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.auth.tests.javax.security.auth.login; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Security; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.ArrayList; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.HashMap; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Hashtable; 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Map; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Properties; 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.Subject; 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.callback.Callback; 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.callback.CallbackHandler; 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.login.AppConfigurationEntry; 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.login.Configuration; 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.login.LoginContext; 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.login.LoginException; 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag; 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.spi.LoginModule; 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.auth.tests.support.TestUtils; 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.Support_Exec; 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tests LoginContext class 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class LoginContextTest extends TestCase { 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // system property to specify another login configuration file 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final String AUTH_LOGIN_CONFIG = "java.security.auth.login.config"; 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final String moduleName = "moduleName"; 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private final Subject subject = new Subject(); 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private final MyCallbackHandler handler = new MyCallbackHandler(); 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void setUp() throws Exception { 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.setUp(); 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Configuration.setConfiguration(new MyConfig()); 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(java.lang.String) 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Parameters: valid app. name 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: no exceptions 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_String() throws Exception { 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // configuration contains requested login module 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes LoginContext context = new LoginContext(moduleName); 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Requested module", MyConfig.getLastAppName() == moduleName); 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //FIXME lazy subject initialization? should it be initialized in ctor? 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Instantiated subject", context.getSubject()); 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(java.lang.String) 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Parameters: invalid (null app. name) 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: LoginException 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_String_NullApp() { 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(null); 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected LoginException"); 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (LoginException e) { 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(java.lang.String) 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Precondition: app. name absent in the current configuration 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: LoginException 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_String_NoApp() { 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // configuration doesn't contain requested application name 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyConfig.resetConfiguration(); 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(moduleName); 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected LoginException"); 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (LoginException e) { 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Default module", "other", MyConfig.getLastAppName()); 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(java.lang.String) 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Precondition: configuration contains requested login module and 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * default callback handler is specified via security 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * property but its class is not accessible 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: LoginException 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_String_InaccessibleCallbackHandler() { 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.setProperty("auth.login.defaultCallbackHandler", 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "absentCallBackhandlerClassName"); 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(moduleName); 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected LoginException"); 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (LoginException e) { 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Default module", 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyConfig.getLastAppName() == moduleName); 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //FIXME how to reset security property correctly? 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.setProperty("auth.login.defaultCallbackHandler", ""); 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(java.lang.String) 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Precondition: configuration contains requested login module and 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * default callback handler is specified via security 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * property but its class doesn't implement 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * CallbackHandler interface 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: LoginException 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_String_InvalidCallbackHandler() throws Exception { 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.setProperty("auth.login.defaultCallbackHandler", 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes LoginContextTest.class.getName()); 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(moduleName); 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected ClassCastException"); 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ClassCastException e) { 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //FIXME how to reset security property correctly? 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.setProperty("auth.login.defaultCallbackHandler", ""); 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(java.lang.String) 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: creation of default callback handler 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_String_InitCallbackHandler() throws Exception { 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // checks initialization of specified callback handler 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyCallbackHandler.initialized = false; 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .setProperty("auth.login.defaultCallbackHandler", 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyCallbackHandler.class.getName()); 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(moduleName); 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Initialization", MyCallbackHandler.initialized); 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //FIXME how to reset security property correctly? 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.setProperty("auth.login.defaultCallbackHandler", ""); 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(java.lang.String) 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Precondition: parameters for login module initialization 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * are created in the constructor above 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: not null subject, null callback handler or 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * wrapped default callback handler, not null shared 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * state and not null options. 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_String_LoginModuleInitialize() throws Exception { 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Hashtable<String, Object> options = new Hashtable<String, Object>(); 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // add required module to the current configuration 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyConfig.addRequired("MyLoginModule", options); 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // reset initialized login modules list 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyLoginModule.reset(); 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes LoginContext context = new LoginContext(moduleName); 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes context.login(); 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // only one module must be created 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Number of modules", 1, MyLoginModule.list.size()); 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyLoginModule module = MyLoginModule.list.get(0); 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // login context instantiates subject object itself. 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Subject", module.subject); 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("getSubject", module.subject == context.getSubject()); 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // login context doesn't have callback handler 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Handler", module.handler); 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // login context provides login module with shared state object 234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Shared state", module.sharedState); 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // login context provides login module with module's options 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Option references", module.options != options); 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Option objects", module.options, options); 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // checks initialization of specified callback handler 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyLoginModule.reset(); 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .setProperty("auth.login.defaultCallbackHandler", 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyCallbackHandler.class.getName()); 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes context = new LoginContext(moduleName); 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes context.login(); 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // TODO how to test default callback handler wrapping for LoginContext(java.lang.String)? 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // FIXME wrap a handler 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //assertFalse("Handler", MyLoginModule.handler.getClass().equals( 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // MyCallbackHandler.class)); 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // FIXME how to reset security property correctly? 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.setProperty("auth.login.defaultCallbackHandler", ""); 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, CallbackHandler) 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Parameters: are valid 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: no exceptions 268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringCallbackHandler() throws Exception { 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes LoginContext context = new LoginContext(moduleName, handler); 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Requested module", MyConfig.getLastAppName() == moduleName); 274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //FIXME lazy subject initialization? should it be initialized in ctor? 276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Instantiated subject", context.getSubject()); 277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, CallbackHandler) 281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Parameters: invalid (null app. name) 283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: LoginException 285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringCallbackHandler_NullApp() { 287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(null, handler); 290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected LoginException"); 291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (LoginException e) { 292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, CallbackHandler) 297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Parameters: invalid (null callback handler) 299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: LoginException 301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringCallbackHandler_NullCallbackHandler() { 303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(moduleName, (CallbackHandler) null); 306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected LoginException"); 307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (LoginException e) { 308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, CallbackHandler) 313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Precondition: app. name absent in the current configuration 315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: LoginException 317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringCallbackHandler_NoApp() { 319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // configuration doesn't contain requested application name 321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyConfig.resetConfiguration(); 322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(moduleName, handler); 325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected LoginException"); 326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (LoginException e) { 327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Default module", "other", MyConfig.getLastAppName()); 328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, CallbackHandler) 333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Precondition: configuration contains requested login module and 335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * default callback handler is specified via security property 336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: no default callback handler initialization 338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringCallbackHandler_NoInit() throws Exception { 340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // checks initialization of specified callback handler 342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyCallbackHandler.initialized = false; 343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security 345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .setProperty("auth.login.defaultCallbackHandler", 346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyCallbackHandler.class.getName()); 347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(moduleName, handler); 349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Initialization", MyCallbackHandler.initialized); 351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //FIXME how to reset security property correctly? 353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.setProperty("auth.login.defaultCallbackHandler", ""); 354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, CallbackHandler) 359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Precondition: parameters for login module initialization 361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * are created in the constructor above 362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: not null subject, wrapped provided callback handler, 364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * not null shared state and not null options. 365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringCallbackHandler_LoginModuleInitialize() 367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws Exception { 368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Hashtable<String, Object> options = new Hashtable<String, Object>(); 370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // add required module to the current configuration 372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyConfig.addRequired("MyLoginModule", options); 373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // reset initialized login modules list 375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyLoginModule.reset(); 376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes LoginContext context = new LoginContext(moduleName, handler); 378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes context.login(); 380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // only one module must be created 382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Number of modules", 1, MyLoginModule.list.size()); 383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyLoginModule module = MyLoginModule.list.get(0); 385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // login context instantiates subject object itself. 387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Subject", module.subject); 388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("getSubject", module.subject == context.getSubject()); 389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // TODO how to test callback handler wrapping for LoginContext(String, CallbackHandler)? 391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // FIXME wrap a handler 393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //assertFalse("Handler", MyLoginModule.handler.getClass().equals( 394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // handler.getClass())); 395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // login context provides login module with shared state object 397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Shared state", module.sharedState); 398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // login context provides login module with module's options 400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Option references", module.options != options); 401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Option objects", module.options, options); 402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, Subject) 406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Parameters: are valid 408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: no exceptions 410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringSubject() throws Exception { 412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes LoginContext context = new LoginContext(moduleName, subject); 414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Requested module", MyConfig.getLastAppName() == moduleName); 416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Instantiated subject", context.getSubject() == subject); 417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, Subject) 421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Parameters: invalid (null app. name) 423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: LoginException 425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringSubject_NullApp() { 427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(null, subject); 430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected LoginException"); 431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (LoginException e) { 432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, Subject) 437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Parameters: invalid (null subject) 439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: LoginException 441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringSubject_NullSubject() { 443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(moduleName, (Subject) null); 446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected LoginException"); 447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (LoginException e) { 448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, Subject) 453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Precondition: app. name absent in the current configuration 455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: LoginException 457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringSubject_NoApp() throws Exception { 459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyConfig.resetConfiguration(); 461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(moduleName, subject); 463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected LoginException"); 464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (LoginException e) { 465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Default module", "other", MyConfig.getLastAppName()); 466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, Subject) 471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Precondition: configuration contains requested login module and 473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * default callback handler is specified via security 474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * property but its class is not accessible 475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: LoginException 477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringSubject_InaccessibleCallbackHandler() { 479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.setProperty("auth.login.defaultCallbackHandler", 482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "absentCallBackhandlerClassName"); 483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(moduleName, subject); 485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected LoginException"); 486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (LoginException e) { 487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Default module", 488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyConfig.getLastAppName() == moduleName); 489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // FIXME how to reset security property correctly? 491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.setProperty("auth.login.defaultCallbackHandler", ""); 492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, Subject) 497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: creation of default callback handler 499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringSubject_InitCallbackHandler() 501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws Exception { 502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // checks initialization of specified callback handler 504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyCallbackHandler.initialized = false; 505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security 507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .setProperty("auth.login.defaultCallbackHandler", 508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyCallbackHandler.class.getName()); 509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(moduleName, subject); 511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Initialization", MyCallbackHandler.initialized); 513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // FIXME how to reset security property correctly? 515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.setProperty("auth.login.defaultCallbackHandler", ""); 516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, Subject) 521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Precondition: parameters for login module initialization 523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * are created in the constructor above 524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: provided subject, null callback handler or 526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * wrapped default callback handler, not null shared 527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * state and not null options. 528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringSubject_LoginModuleInitialize() 530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws Exception { 531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Hashtable<String, Object> options = new Hashtable<String, Object>(); 533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // add required module to the current configuration 535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyConfig.addRequired("MyLoginModule", options); 536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // reset initialized login modules list 538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyLoginModule.reset(); 539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes LoginContext context = new LoginContext(moduleName, subject); 541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes context.login(); 543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // only one module must be created 545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Number of modules", 1, MyLoginModule.list.size()); 546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyLoginModule module = MyLoginModule.list.get(0); 548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // login context has provided subject 550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Subject", module.subject == subject); 551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("getSubject", module.subject == context.getSubject()); 552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // login context doesn't have callback handler 554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Handler", module.handler); 555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // login context provides login module with shared state object 557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Shared state", module.sharedState); 558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // login context provides login module with module's options 560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Option references", module.options != options); 561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Option objects", module.options, options); 562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // checks initialization of specified callback handler 564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyLoginModule.reset(); 565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security 567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .setProperty("auth.login.defaultCallbackHandler", 568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyCallbackHandler.class.getName()); 569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes context = new LoginContext(moduleName, subject); 571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes context.login(); 573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // TODO how to test callback handler wrapping for LoginContext(String, Subject)? 575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // FIXME wrap a handler 577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //assertFalse("Handler", MyLoginModule.handler.getClass().equals( 578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // MyCallbackHandler.class)); 579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.setProperty("auth.login.defaultCallbackHandler", ""); 581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, Subject, CallbackHandler) 586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Parameters: are valid 588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: no exceptions 590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringSubjectCallbackHandler() throws Exception { 592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes LoginContext context = new LoginContext(moduleName, subject, handler); 594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Requested module", MyConfig.getLastAppName() == moduleName); 596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Instantiated subject", context.getSubject() == subject); 597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, Subject, CallbackHandler) 601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Parameters: invalid (null app. name) 603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: LoginException 605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringSubjectCallbackHandler_NullApp() { 608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(null, subject, handler); 610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected LoginException"); 611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (LoginException e) { 612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, Subject, CallbackHandler) 617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Parameters: invalid (null subject) 619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: LoginException 621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringSubjectCallbackHandler_NullSubject() { 623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(moduleName, null, handler); 625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected LoginException"); 626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (LoginException e) { 627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, Subject, CallbackHandler) 632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Parameters: invalid (null callback handler) 634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: LoginException 636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringSubjectCallbackHandler_NullCallbackHandler() { 638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(moduleName, subject, null); 640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected LoginException"); 641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (LoginException e) { 642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, Subject, CallbackHandler) 647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Precondition: app. name absent in the current configuration 649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: LoginException 651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringSubjectCallbackHandler_NoApp() { 653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // configuration doesn't contain requested login module 655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyConfig.resetConfiguration(); 656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext(moduleName, subject, handler); 659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected LoginException"); 660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (LoginException e) { 661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Default module", "other", MyConfig.getLastAppName()); 662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Constructor: LoginContext(String, Subject, CallbackHandler) 667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Precondition: parameters for login module initialization 669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * are created in the constructor above 670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: provided subject, wrapped default callback handler, 672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * not null shared state and not null options. 673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLC_StringSubjectCallbackHandler_LoginModuleInitialize() 676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws Exception { 677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Hashtable<String, Object> options = new Hashtable<String, Object>(); 679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // add required module to the current configuration 681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyConfig.addRequired("MyLoginModule", options); 682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // reset initialized login modules list 684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyLoginModule.reset(); 685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes LoginContext context = new LoginContext(moduleName, subject, handler); 687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes context.login(); 689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // only one module must be created 691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Number of modules", 1, MyLoginModule.list.size()); 692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyLoginModule module = MyLoginModule.list.get(0); 694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // login context has provided subject 696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Subject", module.subject == subject); 697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("getSubject", module.subject == context.getSubject()); 698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // TODO how to test callback handler wrapping for LoginContext(String, Subject, CallbackHandler)? 700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // FIXME wrap a handler 702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //assertFalse("Handler", MyLoginModule.handler.getClass().equals( 703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // handler.getClass())); 704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // login context provides login module with shared state object 706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Shared state", module.sharedState); 707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // login context provides login module with module's options 709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Option references", module.options != options); 710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Option objects", module.options, options); 711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Method: LoginContext.login() 715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Precondition: returned list of login modules is empty 717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Expected: LoginException 719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLogin_EmptyModulesList() throws Exception { 721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes LoginContext context = new LoginContext(moduleName); 723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes context.login(); 726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected LoginException"); 727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (LoginException e) { 728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Method: LoginContext.login() 733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLogin_() throws Exception { 735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Hashtable options = new Hashtable(); 737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // add required module to the current configuration 739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyConfig.addRequired("MyLoginModule", options); 740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes LoginContext context = new LoginContext(moduleName); 742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes context.login(); 744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes context.login(); 745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testLogout() { 749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //TODO Implement logout(). 750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public final void testGetSubject() { 753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //TODO Implement getSubject(). 754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test failed login 755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests javax.security.auth.login.LoginContext 759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_LoginContext_defaultConfigProvider() throws Exception { 761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test: LoginContext constructor fails because there are no config 763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // files to be read (the test is modification of test case 764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // in ConfigurationTest) 765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // no login.config.url.N security properties should be set 767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String javaSecurityFile = TestUtils 768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .createJavaPropertiesFile(new Properties()); 769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // tmp user home to avoid presence of ${user.home}/.java.login.config 771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String tmpUserHome = System.getProperty("java.io.tmpdir") 772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + File.separatorChar + "tmpUserHomeForLoginContextTest"; 773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File dir = new File(tmpUserHome); 774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (!dir.exists()) { 775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes dir.mkdirs(); 776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes dir.deleteOnExit(); 777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String javaLoginConfig = tmpUserHome + File.separatorChar 779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + ".java.login.config"; 780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("There should be no login config file: " + javaLoginConfig, 781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new File(javaLoginConfig).exists()); 782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String[] arg = new String[] { "-Duser.home=" + tmpUserHome, 784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "-Djava.security.properties=" + javaSecurityFile, 785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes NoConfigFileToBeRead.class.getName() }; 786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Exec.execJava(arg, null, true); 788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class NoConfigFileToBeRead { 791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // the test is based on assumption that security properties 793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // login.config.url.N are unset and there is no file 794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // ${user.home}/.java.login.config 795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static void main(String[] args) throws LoginException { 796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //reset path to alternative configuration file 798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes TestUtils.setSystemProperty(AUTH_LOGIN_CONFIG, null); 799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Configuration.setConfiguration(null); // reset default config 801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression for HARMONY-771 803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LoginContext("0"); 804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected SecurityException"); 805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SecurityException e) { 806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 807561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 808561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 809561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 810561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests javax.security.auth.login.LoginContext.login() 811561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 812561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_login_resourcesLeakage() throws Exception { 813561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 814561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // This is a compatibility test. 815561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // The test verifies that LoginContext allows to invoke login() method 816561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // multiple times without invoking logout() before. In testing scenario 817561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // each login() invocation adds new credentials to the passed subject. 818561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Configuration.setConfiguration(new Configuration() { 819561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 820561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 821561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public AppConfigurationEntry[] getAppConfigurationEntry(String name) { 822561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new AppConfigurationEntry[] { new AppConfigurationEntry( 823561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyModule.class.getName(), 824561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes LoginModuleControlFlag.REQUIRED, 825561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new HashMap<String, Object>()) }; 826561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 827561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 828561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 829561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void refresh() { 830561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 831561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }); 832561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 833561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes LoginContext context = new LoginContext("moduleName", new Subject()); 834561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 835561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes context.login(); 836561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes context.login(); 837561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 838561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Subject subject = context.getSubject(); 839561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 840561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(2, subject.getPrivateCredentials().size()); 841561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(2, subject.getPublicCredentials().size()); 842561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 843561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 844561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class MyModule implements LoginModule { 845561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 846561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Subject sub; 847561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 848561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean abort() throws LoginException { 849561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return false; 850561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 851561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 852561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean commit() throws LoginException { 853561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sub.getPrivateCredentials().add(new Object()); 854561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return true; 855561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 856561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 857561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void initialize(Subject arg0, CallbackHandler arg1, 858561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map<String, ?> arg2, Map<String, ?> arg3) { 859561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sub = arg0; 860561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 861561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 862561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean login() throws LoginException { 863561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sub.getPublicCredentials().add(new Object()); 864561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return true; 865561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 866561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 867561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean logout() throws LoginException { 868561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return false; 869561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 870561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 871561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 872561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static class MyConfig extends Configuration { 873561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 874561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private String appName; 875561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 876561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private ArrayList<AppConfigurationEntry> entries; 877561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 878561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public MyConfig() { 879561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes entries = new ArrayList<AppConfigurationEntry>(); 880561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 881561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 882561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 883561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public AppConfigurationEntry[] getAppConfigurationEntry(String applicationName) { 884561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes appName = applicationName; 885561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (entries != null) { 886561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (entries.size() == 0) { 887561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new AppConfigurationEntry[0]; 888561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 889561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AppConfigurationEntry[] appEntries = new AppConfigurationEntry[entries.size()]; 890561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes entries.toArray(appEntries); 891561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return appEntries; 892561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 893561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return null; 894561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 895561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 896561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 897561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void refresh() { 898561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 899561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 900561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 901561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Returns the last application name requested by LoginContext constructor 902561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 903561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @return the last application name 904561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 905561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static String getLastAppName() { 906561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return ((MyConfig) Configuration.getConfiguration()).appName; 907561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 908561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 909561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 910561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Reset configuration. 911561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 912561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * After invocation the configuration doesn't have login modules 913561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * and the method Configuration.getAppConfigurationEntry(String) 914561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * always returns null; 915561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 916561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static void resetConfiguration() { 917561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((MyConfig) Configuration.getConfiguration()).entries = null; 918561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 919561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 920561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 921561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Appends required login module to the current configuration 922561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 923561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static void addRequired(String name, Map<String, ?> options) { 924561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ArrayList<AppConfigurationEntry> list = ((MyConfig) Configuration.getConfiguration()).entries; 925561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 926561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AppConfigurationEntry entry = new AppConfigurationEntry( 927561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes LoginContextTest.class.getName() + '$' + name, 928561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, 929561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes options); 930561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 931561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes list.add(entry); 932561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 933561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 934561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 935561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class MyCallbackHandler implements CallbackHandler { 936561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 937561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static boolean initialized; 938561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 939561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public MyCallbackHandler() { 940561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes initialized = true; 941561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 942561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 943561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void handle(Callback[] callbacks) { 944561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 945561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 946561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 947561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class MyLoginModule implements LoginModule { 948561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 949561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static ArrayList<MyLoginModule> list = new ArrayList<MyLoginModule>(); 950561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 951561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static void reset() { 952561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes list = new ArrayList<MyLoginModule>(); 953561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 954561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 955561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean aborted; 956561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 957561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean commited; 958561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 959561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean initialized; 960561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 961561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean logined; 962561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 963561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean logouted; 964561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 965561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Subject subject; 966561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 967561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public CallbackHandler handler; 968561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 969561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Map<String, ?> sharedState; 970561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 971561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Map<String, ?> options; 972561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 973561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public MyLoginModule() { 974561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes list.add(this); 975561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 976561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 977561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean abort() throws LoginException { 978561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 979561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (!initialized || !logined) { 980561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new AssertionError( 981561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "MUST initialize and try to login first before abort"); 982561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 983561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes aborted = true; 984561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return true; 985561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 986561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 987561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean commit() throws LoginException { 988561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 989561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (!initialized || !logined) { 990561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new AssertionError( 991561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "MUST initialize and try to login first before abort"); 992561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 993561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes commited = true; 994561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return true; 995561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 996561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 997561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void initialize(Subject subject, CallbackHandler handler, 998561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map<String, ?> sharedState, Map<String, ?> options) { 999561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1000561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (logined || commited || aborted) { 1001561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new AssertionError("MUST be initialized first"); 1002561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1003561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1004561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.subject = subject; 1005561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.handler = handler; 1006561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.sharedState = sharedState; 1007561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.options = options; 1008561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1009561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes initialized = true; 1010561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1011561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1012561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean login() throws LoginException { 1013561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1014561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (!initialized) { 1015561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new AssertionError("MUST be initialized first"); 1016561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1017561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (commited || aborted) { 1018561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new AssertionError( 1019561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "MUST try to login first before commit/abort"); 1020561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1021561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes logined = true; 1022561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return true; 1023561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1024561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1025561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean logout() throws LoginException { 1026561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes logouted = true; 1027561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return true; 1028561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1029561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1030561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1031561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class TestLoginModule implements LoginModule { 1032561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1033561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean abort() throws LoginException { 1034561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return false; 1035561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1036561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1037561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean commit() throws LoginException { 1038561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return false; 1039561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1040561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1041561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void initialize(Subject arg0, CallbackHandler arg1, Map<String, ?> arg2, 1042561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map<String, ?> arg3) { 1043561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1044561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1045561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean login() throws LoginException { 1046561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return false; 1047561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1048561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1049561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean logout() throws LoginException { 1050561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return false; 1051561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1052561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1053561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 1054