package org.jbpm.persistence.scripts; import org.jbpm.persistence.scripts.util.TestsUtil; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; /** * Contains tests that test DDL scripts. */ public class DDLScriptsTest { private static final Logger logger = LoggerFactory.getLogger(DDLScriptsTest.class); @BeforeClass public static void printHibernateVersion() { logger.info("Running with Hibernate " + org.hibernate.Version.getVersionString()); } @Before public void clearSchema() { TestsUtil.clearSchema(); } private static final String DB_DDL_SCRIPTS_RESOURCE_PATH = "/db/ddl-scripts"; /** * Tests that DB schema is created properly using DDL scripts. */ @Test public void createSchemaUsingDDLs() throws Exception { final TestPersistenceContext scriptRunnerContext = createAndInitPersistenceContext(PersistenceUnit.SCRIPT_RUNNER); try { scriptRunnerContext.executeScripts(new File(getClass().getResource(DB_DDL_SCRIPTS_RESOURCE_PATH).getFile())); } finally { scriptRunnerContext.clean(); } final TestPersistenceContext dbTestingContext = createAndInitPersistenceContext(PersistenceUnit.DB_TESTING_VALIDATE); try { dbTestingContext.startAndPersistSomeProcess("minimalProcess"); Assert.assertTrue(dbTestingContext.getStoredProcessesCount() == 1); } finally { dbTestingContext.clean(); } } /** * Simulates the default config for kie-server/kie-wb when deploying the apps for the first time (and without running the DDL scripts first) */ @Test public void runHibernateUpdateOnEmptyDB() throws Exception { final TestPersistenceContext dbTestingContext = createAndInitPersistenceContext(PersistenceUnit.DB_TESTING_UPDATE); dbTestingContext.clean(); } /** * Simulates the case when user executes DDL scripts before deploying the kie-server/kie-wb and leaves the hibernate * config untouched (thus using the default 'update') */ @Test public void createSchemaWithDDLsAndRunHibernateUpdate() throws Exception { final TestPersistenceContext scriptRunnerContext = createAndInitPersistenceContext(PersistenceUnit.SCRIPT_RUNNER); try { scriptRunnerContext.executeScripts(new File(getClass().getResource("/db/ddl-scripts").getFile())); } finally { scriptRunnerContext.clean(); } final TestPersistenceContext dbTestingContext = createAndInitPersistenceContext(PersistenceUnit.DB_TESTING_UPDATE); dbTestingContext.clean(); } private TestPersistenceContext createAndInitPersistenceContext(PersistenceUnit persistenceUnit) { TestPersistenceContext testPersistenceContext = new TestPersistenceContext(); testPersistenceContext.init(persistenceUnit); return testPersistenceContext; } }