/**
*
*/
package org.identityconnectors.oracle;
import static org.identityconnectors.oracle.OracleConnectorAbstractTest.assertEqualsIgnoreCase;
import static org.identityconnectors.oracle.OracleUserAttribute.USER;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertTrue;
import java.sql.Connection;
import java.sql.SQLException;
import org.identityconnectors.dbcommon.SQLUtil;
import org.identityconnectors.test.common.TestHelpers;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
/**
* Tests related to OracleUserReader
*
* @author kitko
*
*/
@Test(groups = { "integration" })
public class OracleUserReaderTest {
private static Connection conn;
private static OracleUserReader userReader;
private static OracleConfiguration cfg;
/**
* Setup connection
*/
@BeforeClass
public static void beforeClass() {
cfg = OracleConfigurationTest.createSystemConfiguration();
conn = cfg.createAdminConnection();
userReader = new OracleUserReader(conn, TestHelpers.createDummyMessages());
}
/**
* Close connection
*/
@AfterClass
public static void afterClass() {
SQLUtil.closeQuietly(conn);
}
/**
* Test method for
* {@link org.identityconnectors.oracle.OracleConnectorHelper#userExist(java.sql.Connection, java.lang.String)}
* .
*
* @throws SQLException
*/
@Test
public void testUserExist() throws SQLException {
String user = "testUser";
boolean userExist = userReader.userExist(user);
final String formatUserName = cfg.getCSSetup().formatToken(USER, user);
if (userExist) {
SQLUtil.executeUpdateStatement(conn, "drop user " + formatUserName + " cascade");
assertFalse("User should not exist after delete", userReader.userExist(user));
} else {
SQLUtil.executeUpdateStatement(conn, "create user " + formatUserName
+ " identified by password");
assertTrue("User should exist after create", userReader.userExist(user));
SQLUtil.executeUpdateStatement(conn, "drop user " + formatUserName + " cascade");
assertFalse("User should not exist after delete", userReader.userExist(user));
}
}
@Test
public void testReadUserRecord() throws SQLException {
final OracleCaseSensitivitySetup cs = cfg.getCSSetup();
try {
SQLUtil.executeUpdateStatement(conn, "drop user " + cs.formatToken(USER, "user1"));
} catch (SQLException e) {
}
try {
SQLUtil.executeUpdateStatement(conn, "drop user " + cs.formatToken(USER, "user2"));
} catch (SQLException e) {
}
SQLUtil.executeUpdateStatement(conn, "create user " + cs.formatToken(USER, "user1")
+ " identified by password");
SQLUtil.executeUpdateStatement(conn, "create user " + cs.formatToken(USER, "user2")
+ " identified by password");
UserRecord record1 = userReader.readUserRecord("user1");
assertNotNull(record1);
assertEqualsIgnoreCase("user1", record1.getUserName());
assertNotNull(record1.getUserId());
assertNotNull(record1.getDefaultTableSpace());
assertNotNull(record1.getTemporaryTableSpace());
assertNotNull(record1.getCreatedDate());
assertNull(record1.getLockDate());
assertEquals("OPEN", record1.getStatus());
SQLUtil.executeUpdateStatement(conn, "alter user " + cs.formatToken(USER, "user1")
+ " password expire account lock");
record1 = userReader.readUserRecord("user1");
assertNotNull(record1);
assertNotNull(record1.getExpireDate());
assertNotNull(record1.getLockDate());
assertEquals("EXPIRED & LOCKED", record1.getStatus());
SQLUtil.executeUpdateStatement(conn, "drop user " + cs.formatToken(USER, "user1"));
SQLUtil.executeUpdateStatement(conn, "drop user " + cs.formatToken(USER, "user2"));
assertNull(userReader.readUserRecord("dummyUser"));
}
@Test
public void testReadUserQuota() throws SQLException {
final OracleCaseSensitivitySetup cs = cfg.getCSSetup();
String user = "user1";
if (!userReader.userExist(cs.normalizeToken(USER, user))) {
SQLUtil.executeUpdateStatement(conn, "create user "
+ cs.normalizeAndFormatToken(USER, user) + " identified by password");
}
UserRecord readUserRecord = userReader.readUserRecord(cs.normalizeToken(USER, user));
SQLUtil.executeUpdateStatement(conn, "alter user " + cs.normalizeAndFormatToken(USER, user)
+ " quota 30k on " + readUserRecord.getDefaultTableSpace());
Long quota = userReader.readUserDefTSQuota(cs.normalizeToken(USER, user));
assertTrue("Quota must be set at least to 30k", new Long(30000).compareTo(quota) < 0);
try {
userReader.readUserDefTSQuota("dummyUser");
Assert.fail("Should not be able to return quota for unknown user");
} catch (IllegalArgumentException e) {
}
// For 10.2 , not working
quota = userReader.readUserTempTSQuota(cs.normalizeToken(USER, user));
assertNull("Quota for tem ts must be null", quota);
SQLUtil.executeUpdateStatement(conn, "drop user "
+ cs.normalizeAndFormatToken(USER, "user1"));
}
}