package liquibase.maven;
import java.io.IOException;
import java.io.File;
import org.apache.maven.it.VerificationException;
import org.apache.maven.it.Verifier;
import org.apache.maven.it.util.ResourceExtractor;
import org.junit.Test;
import liquibase.database.Database;
import liquibase.database.DatabaseConnection;
import liquibase.database.DatabaseFactory;
import liquibase.test.DatabaseTestContext;
import org.junit.Before;
import static org.junit.Assert.*;
/**
* Maven integration test. Run an update executing maven as if it was ran by the user
* @author lujop
*/
public class MavenIntegrationTest {
private static final String URL="jdbc:hsqldb:file:target/test-classes/maven/liquibase;shutdown=true";
@Before
public void cleanDatabase() throws Exception {
DatabaseConnection connection = DatabaseTestContext.getInstance().getConnection(URL);
assertNotNull(connection);
Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(connection);
database.dropDatabaseObjects(null);
database.close();
DatabaseFactory.reset();
}
@Test
public void testUpdate() throws Exception{
Verifier verifier=createVerifier();
verifier.executeGoal( "clean" );
verifier.executeGoal( "install" );
//Verify everithing has gone well.
verifier.verifyErrorFreeLog();
//Reset the streams before executing the verifier
verifier.resetStreams();
}
@Test
public void testRollbackTag() throws Exception {
Verifier verifier= createVerifier();
verifier.executeGoal("clean");
verifier.executeGoal("liquibase:tag");
verifier.executeGoal("package"); //runs update that is bound to test phase
verifier.executeGoal("liquibase:rollback");
//If we can reupdate rollback has succeded
verifier.executeGoal("liquibase:update");
//Verify everithing has gone well.
verifier.verifyErrorFreeLog();
//Reset the streams before executing the verifier
verifier.resetStreams();
}
private Verifier createVerifier() throws IOException, VerificationException {
File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/maven" );
//Clear any artifact created by the test project to avoid unstable test results
Verifier verifier = new Verifier(testDir.getAbsolutePath());
verifier.setAutoclean(false); //Don't do clean automatically in each executeGoal
verifier.deleteArtifact("org.liquibase", "liquibase-maven-integration-tests", "1.0-SNAPSHOT", "jar");
return verifier;
}
}