package liquibase.dbtest.oracle;
import liquibase.database.jvm.JdbcConnection;
import liquibase.dbtest.AbstractIntegrationTest;
import liquibase.Liquibase;
import liquibase.exception.ValidationFailedException;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.sql.Statement;
import java.sql.ResultSet;
import java.util.Date;
/**
* create tablespace liquibase2 datafile 'C:\ORACLEXE\ORADATA\XE\LIQUIBASE2.DBF' SIZE 5M autoextend on next 5M
*/
public class OracleIntegrationTest extends AbstractIntegrationTest {
private String indexOnSchemaChangeLog;
private String viewOnSchemaChangeLog;
public OracleIntegrationTest() throws Exception {
super("oracle", "jdbc:oracle:thin:@" + getDatabaseServerHostname("Oracle") + ":1521:XE");
this.indexOnSchemaChangeLog = "changelogs/oracle/complete/indexOnSchema.xml";
this.viewOnSchemaChangeLog = "changelogs/oracle/complete/viewOnSchema.xml";
}
@Override
@Test
public void testRunChangeLog() throws Exception {
super.testRunChangeLog(); //To change body of overridden methods use File | Settings | File Templates.
}
@Test
public void indexCreatedOnCorrectSchema() throws Exception {
if (this.getDatabase() == null) {
return;
}
Liquibase liquibase = createLiquibase(this.indexOnSchemaChangeLog);
clearDatabase(liquibase);
try {
liquibase.update(this.contexts);
} catch (ValidationFailedException e) {
e.printDescriptiveError(System.out);
throw e;
}
Statement queryIndex = ((JdbcConnection) this.getDatabase().getConnection()).getUnderlyingConnection().createStatement();
ResultSet indexOwner = queryIndex.executeQuery("SELECT owner FROM ALL_INDEXES WHERE index_name = 'IDX_BOOK_ID'");
assertTrue(indexOwner.next());
String owner = indexOwner.getString("owner");
assertEquals("LIQUIBASEB",owner);
// check that the automatically rollback now works too
try {
liquibase.rollback( new Date(0),this.contexts);
} catch (ValidationFailedException e) {
e.printDescriptiveError(System.out);
throw e;
}
}
@Test
public void viewCreatedOnCorrectSchema() throws Exception {
if (this.getDatabase() == null) {
return;
}
Liquibase liquibase = createLiquibase(this.viewOnSchemaChangeLog);
clearDatabase(liquibase);
try {
liquibase.update(this.contexts);
} catch (ValidationFailedException e) {
e.printDescriptiveError(System.out);
throw e;
}
Statement queryIndex = ((JdbcConnection) this.getDatabase().getConnection()).getUnderlyingConnection().createStatement();
ResultSet indexOwner = queryIndex.executeQuery("SELECT owner FROM ALL_VIEWS WHERE view_name = 'V_BOOK2'");
assertTrue(indexOwner.next());
String owner = indexOwner.getString("owner");
assertEquals("LIQUIBASEB",owner);
// check that the automatically rollback now works too
try {
liquibase.rollback( new Date(0),this.contexts);
} catch (ValidationFailedException e) {
e.printDescriptiveError(System.out);
throw e;
}
}
@Test
public void smartDataLoad() throws Exception {
if (this.getDatabase() == null) {
return;
}
Liquibase liquibase = createLiquibase("changelogs/common/smartDataLoad.changelog.xml");
clearDatabase(liquibase);
try {
liquibase.update(this.contexts);
} catch (ValidationFailedException e) {
e.printDescriptiveError(System.out);
throw e;
}
// check that the automatically rollback now works too
try {
liquibase.rollback( new Date(0),this.contexts);
} catch (ValidationFailedException e) {
e.printDescriptiveError(System.out);
throw e;
}
}
@Override
@Test
public void testDiffExternalForeignKeys() throws Exception {
//cross-schema security for oracle is a bother, ignoring test for now
}
}