/** * */ package org.identityconnectors.oracle; import java.sql.Connection; import java.sql.SQLException; import org.identityconnectors.common.CollectionUtil; import org.identityconnectors.dbcommon.SQLUtil; import org.identityconnectors.framework.api.ConnectorFacade; 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.AttributeUtil; 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.annotations.Test; /** * @author kitko * */ @Test(groups = { "integration" }) public class OracleOperationDeleteTest extends OracleConnectorAbstractTest { /** * Test method for * {@link org.identityconnectors.oracle.OracleConnector#delete(ObjectClass, Uid, org.identityconnectors.framework.common.objects.OperationOptions)} * * @throws SQLException */ @Test public void testDelete() throws SQLException { String newUser = "newUser"; try { facade.delete(ObjectClass.ACCOUNT, new Uid(testConf.getCSSetup().normalizeToken( OracleUserAttribute.USER, newUser)), null); try { facade.delete(ObjectClass.ACCOUNT, new Uid(testConf.getCSSetup().normalizeToken( OracleUserAttribute.USER, newUser)), null); Assert.fail("Delete should fail for unexistent user"); } catch (UnknownUidException e) { } } catch (UnknownUidException e) { } Attribute authentication = AttributeBuilder.build(OracleConstants.ORACLE_AUTHENTICATION_ATTR_NAME, OracleConstants.ORACLE_AUTH_LOCAL); Attribute name = new Name(newUser); Attribute password = AttributeBuilder.buildPassword("password".toCharArray()); Uid uid = facade.create(ObjectClass.ACCOUNT, CollectionUtil.newSet(authentication, name, password), null); facade.delete(ObjectClass.ACCOUNT, uid, null); try { facade.delete(ObjectClass.ACCOUNT, uid, null); Assert.fail("Delete should fail for unexistent user, previous delete was not successful"); } catch (UnknownUidException e) { } try { facade.delete(ObjectClass.GROUP, uid, null); Assert.fail("Delete must fail for invalid object class"); } catch (IllegalArgumentException e) { } // try cascade Attribute privileges = AttributeBuilder.build(OracleConstants.ORACLE_PRIVS_ATTR_NAME, "CREATE SESSION", "CREATE VIEW"); uid = facade.create(ObjectClass.ACCOUNT, CollectionUtil.newSet(authentication, name, password, privileges), null); OracleConfiguration cfg = OracleConfigurationTest.createSystemConfiguration(); cfg.setDropCascade(false); Connection conn = cfg.createUserConnection(uid.getUidValue(), AttributeUtil .getGuardedStringValue(password)); SQLUtil.executeUpdateStatement(conn, "create view mydual as (select * from dual)"); conn.close(); ConnectorFacade testFacade = createFacade(cfg); try { testFacade.delete(ObjectClass.ACCOUNT, uid, null); Assert.fail("Delete must fail withou cascade"); } catch (RuntimeException e) { } cfg.setDropCascade(true); testFacade = createFacade(cfg); testFacade.delete(ObjectClass.ACCOUNT, uid, null); } /** * Test that delete will fail for sql error, e.g killed connection * * @throws SQLException */ @Test public void testDeleteFail() throws SQLException { OracleConnector testConnector = createTestConnector(); String newUser = "newUser"; try { testConnector.delete(ObjectClass.ACCOUNT, new Uid(newUser), null); } catch (UnknownUidException e) { } Attribute authentication = AttributeBuilder.build(OracleConstants.ORACLE_AUTHENTICATION_ATTR_NAME, OracleConstants.ORACLE_AUTH_LOCAL); Attribute name = new Name(newUser); Attribute password = AttributeBuilder.buildPassword("password".toCharArray()); Uid uid = testConnector.create(ObjectClass.ACCOUNT, CollectionUtil.newSet(authentication, name, password), null); testConnector.delete(ObjectClass.ACCOUNT, uid, null); uid = testConnector.create(ObjectClass.ACCOUNT, CollectionUtil.newSet(authentication, name, password), null); OracleSpecifics.killConnection(connector.getOrCreateAdminConnection(), testConnector .getOrCreateAdminConnection()); try { testConnector.delete(ObjectClass.ACCOUNT, uid, null); Assert.fail("Delete must fail for killed connection"); } catch (UnknownUidException e) { Assert.fail("Should not throw UnknownUidException for killed connection"); } catch (RuntimeException e) { } testConnector.dispose(); connector.delete(ObjectClass.ACCOUNT, uid, null); // delete group must fail try { connector.delete(ObjectClass.GROUP, uid, null); Assert.fail("Delete must fail group"); } catch (UnknownUidException e) { Assert.fail("Should not throw UnknownUidException for group"); } catch (RuntimeException e) { } } }