/** * */ package org.identityconnectors.oracle; import static org.testng.AssertJUnit.assertSame; import java.sql.SQLException; import org.identityconnectors.common.CollectionUtil; import org.identityconnectors.common.security.GuardedString; import org.identityconnectors.framework.common.exceptions.ConnectorException; import org.identityconnectors.framework.common.exceptions.UnknownUidException; import org.identityconnectors.framework.common.objects.Attribute; import org.identityconnectors.framework.common.objects.AttributeBuilder; import org.identityconnectors.framework.common.objects.Name; import org.identityconnectors.framework.common.objects.ObjectClass; import org.identityconnectors.framework.common.objects.Uid; import org.testng.Assert; import org.testng.AssertJUnit; import org.testng.annotations.Test; /** * Tests for OracleConnector except tests for concrete SPI operation * * @author kitko * */ public class OracleConnectorTest extends OracleConnectorAbstractTest { /** * Test method for * {@link org.identityconnectors.oracle.OracleConnector#checkAlive()}. */ @Test(groups = { "integration" }) public void testCheckAlive() { OracleConnector oc = createTestConnector(); oc.checkAlive(); oc.dispose(); OracleConnector con = new OracleConnector(); try { con.checkAlive(); Assert.fail("Must fail for not initialized"); } catch (RuntimeException e) { } } /** * Test method for * {@link org.identityconnectors.oracle.OracleConnector#getConfiguration()}. */ @Test(groups = { "integration" }) public void testGetConfiguration() { OracleConnector oc = createTestConnector(); OracleConfiguration cfg2 = oc.getConfiguration(); assertSame(testConf, cfg2); oc.dispose(); } /** * Test method for * {@link org.identityconnectors.oracle.OracleConnector#init(org.identityconnectors.framework.spi.Configuration)} * . */ @Test(groups = { "integration" }) public void testInit() { OracleConnector oc = createTestConnector(); oc.dispose(); oc = new OracleConnector(); OracleConfiguration cfg = new OracleConfiguration(); try { oc.init(cfg); Assert.fail("Init should fail for uncomplete cfg"); } catch (RuntimeException e) { } } @Test(groups = { "integration" }) public void testTest() { OracleConnector c = new OracleConnector(); try { c.test(); Assert.fail("Test must fail if init was not called"); } catch (RuntimeException e) { } c.init(testConf); c.test(); c.dispose(); // Now test with UseDriverForAuthentication c = new OracleConnector(); OracleConfiguration cfg = DataSourceMockHelper.createDataSourceConfiguration(); cfg.setUseDriverForAuthentication(true); c.init(cfg); c.test(); c.dispose(); } /** Test that connection is kept open when using driver */ @Test(groups = { "integration" }) public void testConnectionDirectDriver() throws SQLException { final OracleConnector c = new OracleConnector(); // First use driver connection c.init(OracleConfigurationTest.createThinConfiguration()); AssertJUnit.assertNull("Admin connection should be initialized lazy", c .getAdminConnection()); c.test(); AssertJUnit.assertNotNull("Admin connection should not be null after SPI OP", c .getAdminConnection()); // We should be able to use the connection c.getAdminConnection().createStatement().close(); // Try to run contract runSimpleContract(c, new Runnable() { public void run() { Assert.assertNotNull(c.getAdminConnection()); try { AssertJUnit.assertFalse(c.getAdminConnection().isClosed()); } catch (SQLException e) { throw ConnectorException.wrap(e); } } }); c.dispose(); } /** Test that connection is kept open when using driver */ @Test(groups = { "integration" }) public void testConnectionDataSource() throws SQLException { final OracleConnector c = new OracleConnector(); // First use driver connection c.init(OracleConfigurationTest.createDataSourceConfiguration()); AssertJUnit.assertNull("Admin connection should be initialized lazy", c .getAdminConnection()); c.test(); AssertJUnit.assertNull("Admin connection should be null after SPI OP", c .getAdminConnection()); // Try to run contract runSimpleContract(c, new Runnable() { public void run() { Assert.assertNull(c.getAdminConnection()); } }); c.dispose(); // Here close the thread local connection OracleConfigurationTest.tearDownClass(); } private void runSimpleContract(OracleConnector connector, Runnable after) throws SQLException { // First create the user Uid uid = new Uid("testUser"); try { connector.delete(ObjectClass.ACCOUNT, uid, null); } catch (UnknownUidException e) { } uid = connector.create(ObjectClass.ACCOUNT, CollectionUtil.<Attribute> newSet(new Name( uid.getUidValue())), null); after.run(); // Update the user connector.update(ObjectClass.ACCOUNT, uid, CollectionUtil.newSet(AttributeBuilder .buildPassword("newPassword".toCharArray())), null); after.run(); // Add privilege to authenticate connector.addAttributeValues(ObjectClass.ACCOUNT, uid, CollectionUtil .newSet(AttributeBuilder.build(OracleConstants.ORACLE_PRIVS_ATTR_NAME, "create session")), null); after.run(); // authenticate connector.authenticate(ObjectClass.ACCOUNT, uid.getUidValue(), new GuardedString( "newPassword".toCharArray()), null); after.run(); // Remove privilege connector.removeAttributeValues(ObjectClass.ACCOUNT, uid, CollectionUtil .newSet(AttributeBuilder.build(OracleConstants.ORACLE_PRIVS_ATTR_NAME, "create session")), null); after.run(); // Delete the user connector.delete(ObjectClass.ACCOUNT, uid, null); after.run(); // Create schema AssertJUnit.assertNotNull(connector.schema()); after.run(); } }