/** * */ package org.identityconnectors.oracle; import static org.testng.AssertJUnit.assertEquals; import org.identityconnectors.common.security.GuardedString; import org.identityconnectors.framework.common.objects.ConnectorMessages; import org.identityconnectors.framework.spi.operations.CreateOp; import org.identityconnectors.test.common.TestHelpers; import org.testng.Assert; import org.testng.annotations.Test; /** * @author kitko * */ public class OracleCreateOrAlterStBuilderTest { /** * Test method for * {@link org.identityconnectors.oracle.OracleCreateOrAlterStBuilder#buildCreateUserSt(java.lang.StringBuilder, org.identityconnectors.oracle.OracleUserAttributes)} * . */ @Test public void testCreateLocalUserSt() { try { createDefaultBuilder().buildCreateUserSt(new OracleUserAttributes.Builder().build()); Assert.fail("Not enough info, create must fail"); } catch (Exception e) { } OracleUserAttributes.Builder local = new OracleUserAttributes.Builder(); local.setUserName("user1"); local.setAuth(OracleAuthentication.LOCAL); assertEquals("create user \"user1\" identified by \"user1\"", createDefaultBuilder() .buildCreateUserSt(local.build()).toString()); local.setPassword(new GuardedString("password".toCharArray())); assertEquals("create user \"user1\" identified by \"password\"", createDefaultBuilder() .buildCreateUserSt(local.build()).toString()); local.setGlobalName("myGlobalName"); try { createDefaultBuilder().buildCreateUserSt(local.build()); Assert.fail("Must fail for extra globa name"); } catch (Exception e) { } } /** Test create table space */ @Test public void testCreateTableSpace() { OracleUserAttributes.Builder attributes = new OracleUserAttributes.Builder(); attributes.setUserName("user1"); attributes.setDefaultTableSpace("users"); attributes.setTempTableSpace("temp"); attributes.setAuth(OracleAuthentication.LOCAL); attributes.setPassword(new GuardedString("password".toCharArray())); assertEquals( "create user \"user1\" identified by \"password\" default tablespace \"users\" temporary tablespace \"temp\"", createDefaultBuilder().buildCreateUserSt(attributes.build()).toString()); attributes.setProfile("MyProfile"); assertEquals( "create user \"user1\" identified by \"password\" default tablespace \"users\" temporary tablespace \"temp\" profile \"MyProfile\"", createDefaultBuilder().buildCreateUserSt(attributes.build()).toString()); } /** Test quotas */ @Test public void testCreateQuota() { OracleUserAttributes.Builder attributes = new OracleUserAttributes.Builder(); attributes.setAuth(OracleAuthentication.LOCAL); attributes.setUserName("user1"); attributes.setDefaultTableSpace("users"); attributes.setTempTableSpace("temp"); attributes.setPassword(new GuardedString("password".toCharArray())); attributes.setDefaultTSQuota("-1"); assertEquals( "create user \"user1\" identified by \"password\" default tablespace \"users\" temporary tablespace \"temp\" quota unlimited on \"users\"", createDefaultBuilder().buildCreateUserSt(attributes.build()).toString()); attributes.setDefaultTSQuota("32K"); assertEquals( "create user \"user1\" identified by \"password\" default tablespace \"users\" temporary tablespace \"temp\" quota 32K on \"users\"", createDefaultBuilder().buildCreateUserSt(attributes.build()).toString()); attributes.setDefaultTSQuota(null); attributes.setTempTSQuota("-1"); assertEquals( "create user \"user1\" identified by \"password\" default tablespace \"users\" temporary tablespace \"temp\" quota unlimited on \"temp\"", createDefaultBuilder().buildCreateUserSt(attributes.build()).toString()); attributes.setTempTSQuota("32M"); assertEquals( "create user \"user1\" identified by \"password\" default tablespace \"users\" temporary tablespace \"temp\" quota 32M on \"temp\"", createDefaultBuilder().buildCreateUserSt(attributes.build()).toString()); } private OracleCreateOrAlterStBuilder createDefaultBuilder() { return new OracleCreateOrAlterStBuilder(new OracleCaseSensitivityBuilder(TestHelpers .createDummyMessages()).build(), TestHelpers.createDummyMessages(), new ExtraAttributesPolicySetupBuilder(TestHelpers.createDummyMessages()).build()); } private OracleCreateOrAlterStBuilder createIgnorePasswordBuilder() { return new OracleCreateOrAlterStBuilder(new OracleCaseSensitivityBuilder(TestHelpers .createDummyMessages()).build(), TestHelpers.createDummyMessages(), new ExtraAttributesPolicySetupBuilder(TestHelpers.createDummyMessages()) .definePolicy(OracleUserAttribute.PASSWORD, CreateOp.class, ExtraAttributesPolicy.IGNORE).build()); } /** Test create external */ @Test public void testCreateExternallUserSt() { OracleUserAttributes.Builder external = new OracleUserAttributes.Builder(); external.setUserName("user1"); external.setAuth(OracleAuthentication.EXTERNAL); assertEquals("create user \"user1\" identified externally", createDefaultBuilder() .buildCreateUserSt(external.build()).toString()); external.setPassword(new GuardedString("myPassword".toCharArray())); try { createDefaultBuilder().buildCreateUserSt(external.build()); Assert.fail("Build for external authentication must fail when password is sent"); } catch (Exception e) { } // When ignoring password, we should not fail createIgnorePasswordBuilder().buildCreateUserSt(external.build()); } /** Test create global */ @Test public void testCreateGlobalUserSt() { OracleUserAttributes.Builder global = new OracleUserAttributes.Builder(); global.setUserName("user1"); global.setAuth(OracleAuthentication.GLOBAL); try { createDefaultBuilder().buildCreateUserSt(global.build()); Assert.fail("Must fail for missing global name"); } catch (Exception e) { } global.setGlobalName("global"); assertEquals("create user \"user1\" identified globally as 'global'", createDefaultBuilder().buildCreateUserSt(global.build()).toString()); global.setPassword(new GuardedString("myPassword".toCharArray())); try { createDefaultBuilder().buildCreateUserSt(global.build()); Assert.fail("Build for global authentication must fail when password is sent"); } catch (Exception e) { } // When ignoring password, we should not fail createIgnorePasswordBuilder().buildCreateUserSt(global.build()); } /** Test expire password */ @Test public void testCreateExpirePassword() { OracleUserAttributes.Builder attributes = new OracleUserAttributes.Builder(); attributes.setAuth(OracleAuthentication.LOCAL); attributes.setUserName("user1"); attributes.setExpirePassword(true); assertEquals("create user \"user1\" identified by \"user1\" password expire", createDefaultBuilder().buildCreateUserSt(attributes.build()).toString()); attributes.setExpirePassword(false); assertEquals("create user \"user1\" identified by \"user1\"", createDefaultBuilder() .buildCreateUserSt(attributes.build()).toString()); attributes.setExpirePassword(null); assertEquals("create user \"user1\" identified by \"user1\"", createDefaultBuilder() .buildCreateUserSt(attributes.build()).toString()); } /** Test lock/unlock */ @Test public void testCreateLock() { OracleUserAttributes.Builder attributes = new OracleUserAttributes.Builder(); attributes.setAuth(OracleAuthentication.LOCAL); attributes.setUserName("user1"); attributes.setEnable(true); assertEquals("create user \"user1\" identified by \"user1\" account unlock", createDefaultBuilder().buildCreateUserSt(attributes.build()).toString()); attributes.setEnable(false); assertEquals("create user \"user1\" identified by \"user1\" account lock", createDefaultBuilder().buildCreateUserSt(attributes.build()).toString()); } /** Test alter user */ @Test public void testAlterUser() { OracleUserAttributes.Builder attributes = new OracleUserAttributes.Builder(); attributes.setAuth(null); attributes.setUserName("user1"); attributes.setExpirePassword(true); attributes.setEnable(true); attributes.setDefaultTSQuota("-1"); UserRecord record = new UserRecord.Builder().setDefaultTableSpace("users").build(); assertEquals( "alter user \"user1\" quota unlimited on \"users\" password expire account unlock", createDefaultBuilder().buildAlterUserSt(attributes.build(), record).toString()); attributes.setEnable(null); attributes.setExpirePassword(null); attributes.setTempTableSpace("tempTS"); record = new UserRecord.Builder().setDefaultTableSpace("defTS").build(); assertEquals( "alter user \"user1\" temporary tablespace \"tempTS\" quota unlimited on \"defTS\"", createDefaultBuilder().buildAlterUserSt(attributes.build(), record).toString()); attributes = new OracleUserAttributes.Builder(); attributes.setUserName("user1"); attributes.setExpirePassword(true); assertEquals("alter user \"user1\" password expire", createDefaultBuilder() .buildAlterUserSt(attributes.build(), record).toString()); attributes = new OracleUserAttributes.Builder(); attributes.setUserName("user1"); Assert.assertNull(createDefaultBuilder().buildAlterUserSt(attributes.build(), record)); // try to unexpire password. That means just set any new password attributes = new OracleUserAttributes.Builder(); attributes.setUserName("user1"); attributes.setExpirePassword(false); attributes.setPassword(new GuardedString("newPassword".toCharArray())); assertEquals("alter user \"user1\" identified by \"newPassword\"", createDefaultBuilder() .buildAlterUserSt(attributes.build(), record).toString()); attributes.setPassword(null); record = new UserRecord.Builder().setDefaultTableSpace("users").setStatus("EXPIRED").build(); try { createDefaultBuilder().buildAlterUserSt(attributes.build(), record); Assert.fail("Must require password for unexpire"); } catch (RuntimeException e) { } record = new UserRecord.Builder().setDefaultTableSpace("users").setStatus("OPEN").build(); // When already unexpired, ignore unexpire attribute createDefaultBuilder().buildAlterUserSt(attributes.build(), record); } /** Test that builder properly formats tokens */ @Test public void testCaseSensitivity() { ConnectorMessages cm = TestHelpers.createDummyMessages(); OracleCaseSensitivitySetup ocs = new OracleCaseSensitivityBuilder(cm).defineFormattersAndNormalizers( new CSAttributeFormatterAndNormalizer.Builder(cm).setAttribute( OracleUserAttribute.USER).setQuatesChar("").build(), new CSAttributeFormatterAndNormalizer.Builder(cm).setAttribute( OracleUserAttribute.PROFILE).setQuatesChar("'").build()).build(); OracleCreateOrAlterStBuilder builder = new OracleCreateOrAlterStBuilder(ocs, TestHelpers.createDummyMessages(), new ExtraAttributesPolicySetupBuilder(TestHelpers.createDummyMessages()) .build()); OracleUserAttributes.Builder attributes = new OracleUserAttributes.Builder(); attributes.setAuth(null); attributes.setUserName("user1"); attributes.setProfile("profile"); Assert.assertEquals("create user user1 identified by \"user1\" profile 'profile'", builder .buildCreateUserSt(attributes.build())); UserRecord record = new UserRecord.Builder().build(); Assert.assertEquals("alter user user1 profile 'profile'", builder.buildAlterUserSt( attributes.build(), record)); } }