/******************************************************************************* * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Oracle - initial API and implementation from Oracle TopLink * Andrei Ilitchev May 28, 2008. Bug 224964: Provide support for Proxy Authentication through JPA. * Changed the was Proxy Authentication supported in case of thin driver, but support for oci case remains the same. * That caused re-arranging of the tests: before the fix all the tests were directly in proxiauthentication package; * now the old tests (minus thin-specific setup) were moved into the new proxyauthentication.oci package, * and the new tests defined in the new proxyauthentication.thin package. ******************************************************************************/ package org.eclipse.persistence.testing.tests.proxyauthentication.oci; import java.util.HashMap; import java.util.Properties; import java.sql.SQLException; import org.eclipse.persistence.internal.sessions.AbstractSession; import org.eclipse.persistence.sessions.*; import org.eclipse.persistence.testing.framework.*; /** * Test Database change notification using JMS on top of Oracle AQ. */ public class ProxyAuthenticationOCITestModel extends TestModel { public ProxyAuthenticationOCITestModel() { super(); this.proxyTestHelperClassName = "org.eclipse.persistence.testing.tests.proxyauthentication.oci.OCIProxyTestHelper"; } protected Session oldSession; // Proxy Authentication user through which the session will be connected public static String connUser = "PA_CONN"; public static String connPassword = "PA_CONN"; // Proxy Authentication proxy user public static String proxyUser = "PA_PROXY"; // static protected String proxyPassword = "PA_PROXY"; protected static HashMap proxyTestHelperMap = new HashMap(); protected String proxyTestHelperClassName; protected ProxyTestHelper proxyTestHelper; public void addTests() { Properties prop = proxyTestHelper.createProxyProperties(proxyUser); // Properties prop = proxyTestHelper.createProxyProperties(proxyUser, proxyPassword); addTest(new NonPooledConnectionTestCase(prop, false)); addTest(new NonPooledConnectionTestCase(prop, true)); addTest(new PooledConnectionTestCase(prop)); addTest(new ExternalConnectionPoolTestCase(prop, false)); addTest(new ExternalConnectionPoolTestCase(prop, true)); addTest(new MainLoginTestCase(prop)); } public void addRequiredSystems() { setupUser(); /* addRequiredSystem( new TestSystemAdapted( new EmployeeSystem(), new DbChangeNotificationAdapter(queueName, queueTableName, useMultipleConsumers)));*/ } protected void setupUser() { if (!getSession().getPlatform().isOracle()) { throw new TestWarningException("Supports Oracle platform only"); } oldSession = getSession(); try { if (!((AbstractSession)getSession()).getAccessor().getConnection().getMetaData().getUserName().equalsIgnoreCase(connUser)) { /** to setup Proxy Authentication users in Oracle db, need to execute in sqlPlus or EnterpriseManager 1 - Connect as sysdba connect sys/password as sysdba 2 - Create connUser create user PA_CONN identified by PA_CONN grant connect to PA_CONN 3 - Create proxyUser create user PA_PROXY identified by PA_PROXY grant connect to PA_PROXY 4. Grant proxyUser connection through connUser alter user PA_PROXY grant connect through PA_CONN */ DatabaseLogin login = (DatabaseLogin)oldSession.getLogin().clone(); login.setUserName(connUser); login.setPassword(connPassword); DatabaseSession session = new Project(login).createServerSession(); session.setSessionLog(getSession().getSessionLog()); session.setLogLevel(getSession().getLogLevel()); // get the specified proxyTestHelper, instantiate if not already exists. proxyTestHelper = (ProxyTestHelper)proxyTestHelperMap.get(proxyTestHelperClassName); if (proxyTestHelper == null) { try { proxyTestHelper = (ProxyTestHelper)Class.forName(proxyTestHelperClassName).newInstance(); } catch (Exception ex) { throw new TestProblemException("Failed to instantiate proxyTestHelperClass " + proxyTestHelperClassName, ex); } proxyTestHelperMap.put(proxyTestHelperClassName, proxyTestHelper); } // normally user would set ProxyConnector into the login in preLogin event try { proxyTestHelper.setProxyConnectorIntoLogin(login, oldSession); } catch (SQLException sqlException) { throw new TestProblemException("Failed to create ProxyConnector ", sqlException); } try { session.login(); } catch (Exception exception) { throw new TestProblemException("Database needs to be setup for ProxyAuthentication, needs PA_CONN, PA_PROXY users. See comments in ProxyAuthenticationInternalTestModel", exception); } getExecutor().setSession(session); } } catch (java.sql.SQLException se) { se.printStackTrace(); throw new TestErrorException("There is SQLException"); } } public void reset() { if (oldSession != getExecutor().getSession()) { ((DatabaseSession)getSession()).logout(); getExecutor().setSession(oldSession); try { proxyTestHelper.close(); } catch (SQLException sqlException) { throw new TestErrorException("Failed to close ProxyConnector's adataSource ", sqlException); } } } }