Enable JUnit tests to run on DB2

This commit is contained in:
BerndBreier 2017-11-14 14:29:39 +01:00
parent 683a65dc5c
commit aac8abdcad
9 changed files with 369 additions and 131 deletions

View File

@ -42,6 +42,12 @@
<version>1.4.194</version> <version>1.4.194</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>com.ibm.db2.jcc</groupId>
<artifactId>db2jcc4</artifactId>
<version>11.1.1.1</version>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>org.apache.logging.log4j</groupId> <groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId> <artifactId>log4j-slf4j-impl</artifactId>
@ -93,4 +99,15 @@
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
<!--
this repository is needed to fetch com.ibm.db2.jcc
-->
<repositories>
<repository>
<id>camunda public</id>
<name>camunda</name>
<url>https://app.camunda.com/nexus/content/groups/public/</url>
</repository>
</repositories>
</project> </project>

View File

@ -18,6 +18,7 @@ public class TaskanaEngineConfiguration {
private static final Logger LOGGER = LoggerFactory.getLogger(TaskanaEngineConfiguration.class); private static final Logger LOGGER = LoggerFactory.getLogger(TaskanaEngineConfiguration.class);
private static final String USER_NAME = "sa";
private static final String USER_PASSWORD = "sa"; private static final String USER_PASSWORD = "sa";
private static final String JDBC_H2_MEM_TASKANA = "jdbc:h2:mem:taskana"; private static final String JDBC_H2_MEM_TASKANA = "jdbc:h2:mem:taskana";
private static final String H2_DRIVER = "org.h2.Driver"; private static final String H2_DRIVER = "org.h2.Driver";
@ -57,7 +58,7 @@ public class TaskanaEngineConfiguration {
public DataSource createDefaultDataSource() { public DataSource createDefaultDataSource() {
LOGGER.warn("No datasource is provided. A inmemory db is used: " LOGGER.warn("No datasource is provided. A inmemory db is used: "
+ "'org.h2.Driver', 'jdbc:h2:mem:taskana', 'sa', 'sa'"); + "'org.h2.Driver', 'jdbc:h2:mem:taskana', 'sa', 'sa'");
return createDatasource(H2_DRIVER, JDBC_H2_MEM_TASKANA, USER_PASSWORD, USER_PASSWORD); return createDatasource(H2_DRIVER, JDBC_H2_MEM_TASKANA, USER_NAME, USER_PASSWORD);
} }
/** /**

View File

@ -44,7 +44,7 @@ public interface QueryMapper {
+ "<if test='classificationQuery.category != null'>AND c.CATEGORY IN(<foreach item='item' collection='classificationQuery.category' separator=',' >#{item}</foreach>)</if> " + "<if test='classificationQuery.category != null'>AND c.CATEGORY IN(<foreach item='item' collection='classificationQuery.category' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.type != null'>AND c.TYPE IN(<foreach item='item' collection='classificationQuery.type' separator=',' >#{item}</foreach>)</if> " + "<if test='classificationQuery.type != null'>AND c.TYPE IN(<foreach item='item' collection='classificationQuery.type' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.domain != null'>AND c.DOMAIN IN(<foreach item='item' collection='classificationQuery.domain' separator=',' >#{item}</foreach>)</if> " + "<if test='classificationQuery.domain != null'>AND c.DOMAIN IN(<foreach item='item' collection='classificationQuery.domain' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.validInDomain != null'>AND c.VALID_IN_DOMAIN like #{classificationQuery.validInDomain}</if> " + "<if test='classificationQuery.validInDomain != null'>AND c.VALID_IN_DOMAIN = #{classificationQuery.validInDomain}</if> "
+ "<if test='classificationQuery.created != null'>AND c.CREATED IN(<foreach item='item' collection='classificationQuery.created' separator=',' >#{item}</foreach>)</if> " + "<if test='classificationQuery.created != null'>AND c.CREATED IN(<foreach item='item' collection='classificationQuery.created' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.name != null'>AND c.NAME IN(<foreach item='item' collection='classificationQuery.name' separator=',' >#{item}</foreach>)</if> " + "<if test='classificationQuery.name != null'>AND c.NAME IN(<foreach item='item' collection='classificationQuery.name' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.description != null'>AND c.DESCRIPTION like #{classificationQuery.description}</if> " + "<if test='classificationQuery.description != null'>AND c.DESCRIPTION like #{classificationQuery.description}</if> "
@ -102,7 +102,7 @@ public interface QueryMapper {
+ "<if test='category != null'>AND CATEGORY IN(<foreach item='item' collection='category' separator=',' >#{item}</foreach>)</if> " + "<if test='category != null'>AND CATEGORY IN(<foreach item='item' collection='category' separator=',' >#{item}</foreach>)</if> "
+ "<if test='type != null'>AND TYPE IN(<foreach item='item' collection='type' separator=',' >#{item}</foreach>)</if> " + "<if test='type != null'>AND TYPE IN(<foreach item='item' collection='type' separator=',' >#{item}</foreach>)</if> "
+ "<if test='domain != null'>AND DOMAIN IN(<foreach item='item' collection='domain' separator=',' >#{item}</foreach>)</if> " + "<if test='domain != null'>AND DOMAIN IN(<foreach item='item' collection='domain' separator=',' >#{item}</foreach>)</if> "
+ "<if test='validInDomain != null'>AND VALID_IN_DOMAIN like #{validInDomain}</if> " + "<if test='validInDomain != null'>AND VALID_IN_DOMAIN = #{validInDomain}</if> "
+ "<if test='created != null'>AND CREATED IN(<foreach item='item' collection='created' separator=',' >#{item}</foreach>)</if> " + "<if test='created != null'>AND CREATED IN(<foreach item='item' collection='created' separator=',' >#{item}</foreach>)</if> "
+ "<if test='name != null'>AND NAME IN(<foreach item='item' collection='name' separator=',' >#{item}</foreach>)</if> " + "<if test='name != null'>AND NAME IN(<foreach item='item' collection='name' separator=',' >#{item}</foreach>)</if> "
+ "<if test='description != null'>AND DESCRIPTION like #{description}</if> " + "<if test='description != null'>AND DESCRIPTION like #{description}</if> "

View File

@ -0,0 +1,51 @@
package org.taskana.impl.configuration;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.ibatis.jdbc.ScriptRunner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.taskana.configuration.DbScriptRunner;
/**
* This class cleans the complete database. Only to be used in Unittest
*/
public class DBCleaner {
private static final Logger LOGGER = LoggerFactory.getLogger(DbScriptRunner.class);
private static final String DB_CLEAR_SCRIPT = "/sql/clear-db.sql";
private StringWriter outWriter = new StringWriter();
private PrintWriter logWriter = new PrintWriter(outWriter);
private StringWriter errorWriter = new StringWriter();
private PrintWriter errorLogWriter = new PrintWriter(errorWriter);
/**
* Clears the db.
* @throws SQLException
*/
public void clearDb(DataSource dataSource) throws SQLException {
ScriptRunner runner = new ScriptRunner(dataSource.getConnection());
LOGGER.debug(dataSource.getConnection().getMetaData().toString());
runner.setStopOnError(true);
runner.setLogWriter(logWriter);
runner.setErrorLogWriter(errorLogWriter);
runner.runScript(new InputStreamReader(this.getClass().getResourceAsStream(DB_CLEAR_SCRIPT)));
runner.closeConnection();
LOGGER.debug(outWriter.toString());
if (!errorWriter.toString().trim().isEmpty()) {
LOGGER.error(errorWriter.toString());
}
}
}

View File

@ -1,13 +1,22 @@
package org.taskana.impl.configuration; package org.taskana.impl.configuration;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Properties;
import javax.security.auth.login.LoginException; import javax.security.auth.login.LoginException;
import javax.sql.DataSource;
import org.apache.ibatis.datasource.unpooled.UnpooledDataSource;
import org.h2.jdbcx.JdbcDataSource; import org.h2.jdbcx.JdbcDataSource;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.taskana.TaskanaEngine; import org.taskana.TaskanaEngine;
import org.taskana.configuration.TaskanaEngineConfiguration; import org.taskana.configuration.TaskanaEngineConfiguration;
/** /**
@ -15,17 +24,114 @@ import org.taskana.configuration.TaskanaEngineConfiguration;
* @author EH * @author EH
*/ */
public class TaskanaEngineConfigurationTest { public class TaskanaEngineConfigurationTest {
private static DataSource dataSource = null;
private static final Logger LOGGER = LoggerFactory.getLogger(TaskanaEngineConfigurationTest.class);
@Test @Test
public void testCreateTaskEngine() throws FileNotFoundException, SQLException, LoginException { public void testCreateTaskEngine() throws FileNotFoundException, SQLException, LoginException {
JdbcDataSource ds = new JdbcDataSource(); DataSource ds = getDataSource();
ds.setURL("jdbc:h2:mem:workbasket-test-db");
ds.setPassword("sa");
ds.setUser("sa");
TaskanaEngineConfiguration taskEngineConfiguration = new TaskanaEngineConfiguration(ds, false); TaskanaEngineConfiguration taskEngineConfiguration = new TaskanaEngineConfiguration(ds, false);
TaskanaEngine te = taskEngineConfiguration.buildTaskanaEngine(); TaskanaEngine te = taskEngineConfiguration.buildTaskanaEngine();
Assert.assertNotNull(te); Assert.assertNotNull(te);
} }
/**
* returns the Datasource used for Junit test.
* If the file {user.home}/taskanaUnitTest.properties is present, the Datasource is created according to the
* properties jdbcDriver, jdbcUrl, dbUserName and dbPassword.
* Assuming, the database has the name tskdb, a sample properties file for DB2 looks as follows:
*
* jdbcDriver=com.ibm.db2.jcc.DB2Driver
* jdbcUrl=jdbc:db2://localhost:50000/tskdb
* dbUserName=db2user
* dbPassword=db2password
*
* If any of these properties is missing, or the file doesn't exist, the default Datasource for h2 in-memory db is created.
*
* @return dataSource for unit test
*/
public static DataSource getDataSource() {
if (dataSource == null) {
String userHomeDirectroy = System.getProperty("user.home");
String propertiesFileName = userHomeDirectroy + "/taskanaUnitTest.properties";
File f = new File(propertiesFileName);
if (f.exists() && !f.isDirectory()) {
dataSource = createDataSourceFromProperties(propertiesFileName);
} else {
dataSource = createDefaultDataSource();
}
}
return dataSource;
}
/**
* create Default Datasource for in-memory database.
* @return
*/
private static DataSource createDefaultDataSource() {
JdbcDataSource ds = new JdbcDataSource();
ds.setURL("jdbc:h2:mem:taskana");
ds.setPassword("sa");
ds.setUser("sa");
return ds;
}
/**
* create data source from properties file.
* @param propertiesFileName
* @return
*/
private static DataSource createDataSourceFromProperties(String propertiesFileName) {
DataSource ds = null;
try (InputStream input = new FileInputStream(propertiesFileName)) {
Properties prop = new Properties();
prop.load(input);
boolean propertiesFileIsComplete = true;
String warningMessage = "";
String jdbcDriver = prop.getProperty("jdbcDriver");
if (jdbcDriver == null || jdbcDriver.length() == 0) {
propertiesFileIsComplete = false;
warningMessage += ", jdbcDriver property missing";
}
String jdbcUrl = prop.getProperty("jdbcUrl");
if (jdbcUrl == null || jdbcUrl.length() == 0) {
propertiesFileIsComplete = false;
warningMessage += ", jdbcUrl property missing";
}
String dbUserName = prop.getProperty("dbUserName");
if (dbUserName == null || dbUserName.length() == 0) {
propertiesFileIsComplete = false;
warningMessage += ", dbUserName property missing";
}
String dbPassword = prop.getProperty("dbPassword");
if (dbPassword == null || dbPassword.length() == 0) {
propertiesFileIsComplete = false;
warningMessage += ", dbPassword property missing";
}
if (propertiesFileIsComplete) {
ds = new UnpooledDataSource(Thread.currentThread().getContextClassLoader(), jdbcDriver,
jdbcUrl, dbUserName, dbPassword);
} else {
LOGGER.warn("propertiesFile " + propertiesFileName + " is incomplete" + warningMessage);
LOGGER.warn("Using default Datasource for Test");
ds = createDefaultDataSource();
}
} catch (FileNotFoundException e) {
LOGGER.warn("createDataSourceFromProperties caught Exception " + e);
LOGGER.warn("Using default Datasource for Test");
ds = createDefaultDataSource();
} catch (IOException e) {
LOGGER.warn("createDataSourceFromProperties caught Exception " + e);
LOGGER.warn("Using default Datasource for Test");
ds = createDefaultDataSource();
}
return ds;
}
} }

View File

@ -1,7 +1,16 @@
package org.taskana.impl.integration; package org.taskana.impl.integration;
import org.h2.jdbcx.JdbcDataSource; import java.io.FileNotFoundException;
import java.sql.Date;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.List;
import javax.security.auth.login.LoginException;
import javax.sql.DataSource;
import org.h2.store.fs.FileUtils; import org.h2.store.fs.FileUtils;
import org.junit.After;
import org.junit.AfterClass; import org.junit.AfterClass;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
@ -10,33 +19,34 @@ import org.taskana.ClassificationService;
import org.taskana.TaskanaEngine; import org.taskana.TaskanaEngine;
import org.taskana.configuration.TaskanaEngineConfiguration; import org.taskana.configuration.TaskanaEngineConfiguration;
import org.taskana.exceptions.NotAuthorizedException; import org.taskana.exceptions.NotAuthorizedException;
import org.taskana.impl.TaskanaEngineImpl;
import org.taskana.impl.configuration.DBCleaner;
import org.taskana.impl.configuration.TaskanaEngineConfigurationTest;
import org.taskana.model.Classification; import org.taskana.model.Classification;
import javax.security.auth.login.LoginException;
import java.io.FileNotFoundException;
import java.sql.Date;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.List;
/** /**
* Integration Test for ClassificationServiceImpl. * Integration Test for ClassificationServiceImpl.
* @author EH * @author EH
*/ */
public class ClassificationServiceImplIntTest { public class ClassificationServiceImplIntTest {
static int counter = 0; static int counter = 0;
private DataSource dataSource;
private ClassificationService classificationService; private ClassificationService classificationService;
private TaskanaEngineConfiguration taskanaEngineConfiguration;
private TaskanaEngine taskanaEngine;
private TaskanaEngineImpl taskanaEngineImpl;
@Before @Before
public void setup() throws FileNotFoundException, SQLException, LoginException { public void setup() throws FileNotFoundException, SQLException, LoginException {
JdbcDataSource ds = new JdbcDataSource(); dataSource = TaskanaEngineConfigurationTest.getDataSource();
ds.setURL("jdbc:h2:mem:test-db-classification" + counter++); taskanaEngineConfiguration = new TaskanaEngineConfiguration(dataSource, false);
ds.setPassword("sa"); taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
ds.setUser("sa"); classificationService = taskanaEngine.getClassificationService();
TaskanaEngineConfiguration taskEngineConfiguration = new TaskanaEngineConfiguration(ds, false); taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
DBCleaner cleaner = new DBCleaner();
TaskanaEngine te = taskEngineConfiguration.buildTaskanaEngine(); cleaner.clearDb(dataSource);
classificationService = te.getClassificationService();
} }
@Test @Test
@ -252,8 +262,14 @@ public class ClassificationServiceImplIntTest {
Assert.assertEquals(1, list.size()); Assert.assertEquals(1, list.size());
} }
@After
public void cleanUp() {
taskanaEngineImpl.closeSession();
}
@AfterClass @AfterClass
public static void cleanUp() { public static void cleanUpClass() {
FileUtils.deleteRecursive("~/data", true); FileUtils.deleteRecursive("~/data", true);
} }
} }

View File

@ -1,9 +1,17 @@
package org.taskana.impl.integration; package org.taskana.impl.integration;
import org.h2.jdbcx.JdbcDataSource; import java.io.FileNotFoundException;
import java.sql.SQLException;
import java.util.List;
import javax.security.auth.login.LoginException;
import javax.sql.DataSource;
import org.h2.store.fs.FileUtils; import org.h2.store.fs.FileUtils;
import org.junit.After;
import org.junit.AfterClass; import org.junit.AfterClass;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.taskana.TaskanaEngine; import org.taskana.TaskanaEngine;
import org.taskana.configuration.TaskanaEngineConfiguration; import org.taskana.configuration.TaskanaEngineConfiguration;
@ -11,69 +19,70 @@ import org.taskana.exceptions.NotAuthorizedException;
import org.taskana.exceptions.TaskNotFoundException; import org.taskana.exceptions.TaskNotFoundException;
import org.taskana.impl.TaskServiceImpl; import org.taskana.impl.TaskServiceImpl;
import org.taskana.impl.TaskanaEngineImpl; import org.taskana.impl.TaskanaEngineImpl;
import org.taskana.impl.configuration.DBCleaner;
import org.taskana.impl.configuration.TaskanaEngineConfigurationTest;
import org.taskana.impl.persistence.ClassificationQueryImpl; import org.taskana.impl.persistence.ClassificationQueryImpl;
import org.taskana.impl.persistence.ObjectReferenceQueryImpl; import org.taskana.impl.persistence.ObjectReferenceQueryImpl;
import org.taskana.impl.util.IdGenerator;
import org.taskana.model.Task; import org.taskana.model.Task;
import org.taskana.model.TaskState; import org.taskana.model.TaskState;
import org.taskana.persistence.ClassificationQuery; import org.taskana.persistence.ClassificationQuery;
import org.taskana.persistence.ObjectReferenceQuery; import org.taskana.persistence.ObjectReferenceQuery;
import java.io.FileNotFoundException;
import java.sql.SQLException;
import java.util.List;
/** /**
* Integration Test for TaskServiceImpl transactions. * Integration Test for TaskServiceImpl transactions.
* @author EH * @author EH
*/ */
public class TaskServiceImplTransactionTest { public class TaskServiceImplTransactionTest {
private DataSource dataSource;
private TaskServiceImpl taskServiceImpl;
private TaskanaEngineConfiguration taskanaEngineConfiguration;
private TaskanaEngine taskanaEngine;
private TaskanaEngineImpl taskanaEngineImpl;
@Before
public void setup() throws FileNotFoundException, SQLException, LoginException {
dataSource = TaskanaEngineConfigurationTest.getDataSource();
taskanaEngineConfiguration = new TaskanaEngineConfiguration(dataSource, false, false);
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
taskServiceImpl = (TaskServiceImpl) taskanaEngine.getTaskService();
DBCleaner cleaner = new DBCleaner();
cleaner.clearDb(dataSource);
}
@Test @Test
public void testStart() throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException { public void testStart() throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException {
JdbcDataSource ds = new JdbcDataSource();
ds.setURL("jdbc:h2:~/data/test-db-taskservice-int1");
ds.setPassword("sa");
ds.setUser("sa");
TaskanaEngineConfiguration taskanaEngineConfiguration = new TaskanaEngineConfiguration(ds, true, false);
TaskanaEngineImpl te = (TaskanaEngineImpl) taskanaEngineConfiguration.buildTaskanaEngine();
TaskServiceImpl taskServiceImpl = (TaskServiceImpl) te.getTaskService();
Task task = new Task(); Task task = new Task();
task.setName("Unit Test Task"); task.setName("Unit Test Task");
task.setWorkbasketId("1"); String id1 = IdGenerator.generateWithPrefix("TWB");
task.setWorkbasketId(id1);
task = taskServiceImpl.create(task); task = taskServiceImpl.create(task);
te.closeSession(); taskanaEngineImpl.getSession().commit(); // needed so that the change is visible in the other session
TaskanaEngine te2 = taskanaEngineConfiguration.buildTaskanaEngine(); TaskanaEngine te2 = taskanaEngineConfiguration.buildTaskanaEngine();
TaskServiceImpl taskServiceImpl2 = (TaskServiceImpl) te2.getTaskService(); TaskServiceImpl taskServiceImpl2 = (TaskServiceImpl) te2.getTaskService();
Task resultTask = taskServiceImpl2.getTaskById(task.getId()); Task resultTask = taskServiceImpl2.getTaskById(task.getId());
Assert.assertNotNull(resultTask); Assert.assertNotNull(resultTask);
} }
@Test(expected = TaskNotFoundException.class) @Test(expected = TaskNotFoundException.class)
public void testStartTransactionFail() public void testStartTransactionFail()
throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException { throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException {
JdbcDataSource ds = new JdbcDataSource();
ds.setURL("jdbc:h2:~/data/test-db-taskservice-trans2");
ds.setPassword("sa");
ds.setUser("sa");
TaskanaEngineConfiguration taskanaEngineConfiguration = new TaskanaEngineConfiguration(ds, false, false);
TaskanaEngineImpl te = (TaskanaEngineImpl) taskanaEngineConfiguration.buildTaskanaEngine();
TaskServiceImpl taskServiceImpl = (TaskServiceImpl) te.getTaskService();
Task task = new Task(); Task task = new Task();
task.setName("Unit Test Task"); task.setName("Unit Test Task");
task.setWorkbasketId("1"); String id1 = IdGenerator.generateWithPrefix("TWB");
task.setWorkbasketId("id1");
task = taskServiceImpl.create(task); task = taskServiceImpl.create(task);
taskServiceImpl.getTaskById("1"); taskServiceImpl.getTaskById(id1);
te.closeSession();
TaskanaEngineImpl te2 = (TaskanaEngineImpl) taskanaEngineConfiguration.buildTaskanaEngine(); TaskanaEngineImpl te2 = (TaskanaEngineImpl) taskanaEngineConfiguration.buildTaskanaEngine();
TaskServiceImpl taskServiceImpl2 = (TaskServiceImpl) te2.getTaskService(); TaskServiceImpl taskServiceImpl2 = (TaskServiceImpl) te2.getTaskService();
taskServiceImpl2.getTaskById("1"); taskServiceImpl2.getTaskById(id1);
} }
@Test @Test
@ -85,7 +94,8 @@ public class TaskServiceImplTransactionTest {
Task task = new Task(); Task task = new Task();
task.setName("Unit Test Task"); task.setName("Unit Test Task");
task.setWorkbasketId("1"); String id1 = IdGenerator.generateWithPrefix("TWB");
task.setWorkbasketId(id1);
task = taskServiceImpl.create(task); task = taskServiceImpl.create(task);
Assert.assertNotNull(task); Assert.assertNotNull(task);
@ -94,25 +104,19 @@ public class TaskServiceImplTransactionTest {
@Test @Test
public void should_ReturnList_when_BuilderIsUsed() throws SQLException, NotAuthorizedException { public void should_ReturnList_when_BuilderIsUsed() throws SQLException, NotAuthorizedException {
JdbcDataSource ds = new JdbcDataSource();
ds.setURL("jdbc:h2:~/data/test-db-taskservice-int2");
ds.setPassword("sa");
ds.setUser("sa");
TaskanaEngineConfiguration taskanaEngineConfiguration = new TaskanaEngineConfiguration(ds, true, false);
TaskanaEngineImpl te = (TaskanaEngineImpl) taskanaEngineConfiguration.buildTaskanaEngine();
TaskServiceImpl taskServiceImpl = (TaskServiceImpl) te.getTaskService();
Task task = new Task(); Task task = new Task();
task.setName("Unit Test Task"); task.setName("Unit Test Task");
task.setWorkbasketId("1"); String id1 = IdGenerator.generateWithPrefix("TWB");
task.setWorkbasketId(id1);
task = taskServiceImpl.create(task); task = taskServiceImpl.create(task);
ClassificationQuery classificationQuery = new ClassificationQueryImpl(te).tenantId("asdasdasd") TaskanaEngineImpl taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
ClassificationQuery classificationQuery = new ClassificationQueryImpl(taskanaEngineImpl).tenantId("asdasdasd")
.parentClassification("pId1", "pId2").category("cat1", "cat2").type("oneType").name("1Name", "name2") .parentClassification("pId1", "pId2").category("cat1", "cat2").type("oneType").name("1Name", "name2")
.descriptionLike("my desc").priority(1, 2, 1).serviceLevel("me", "and", "you"); .descriptionLike("my desc").priority(1, 2, 1).serviceLevel("me", "and", "you");
ObjectReferenceQuery objectReferenceQuery = new ObjectReferenceQueryImpl(te).tenantId("tenant1") ObjectReferenceQuery objectReferenceQuery = new ObjectReferenceQueryImpl(taskanaEngineImpl).tenantId("tenant1")
.company("first comp", "sonstwo gmbh").system("sys").type("type1", "type2") .company("first comp", "sonstwo gmbh").system("sys").type("type1", "type2")
.systemInstance("sysInst1", "sysInst2").value("val1", "val2", "val3"); .systemInstance("sysInst1", "sysInst2").value("val1", "val2", "val3");
@ -125,8 +129,13 @@ public class TaskServiceImplTransactionTest {
} }
@After
public void cleanUp() {
taskanaEngineImpl.closeSession();
}
@AfterClass @AfterClass
public static void cleanUp() { public static void cleanUpClass() {
FileUtils.deleteRecursive("~/data", true); FileUtils.deleteRecursive("~/data", true);
} }
} }

View File

@ -1,7 +1,15 @@
package org.taskana.impl.integration; package org.taskana.impl.integration;
import org.h2.jdbcx.JdbcDataSource; import java.io.FileNotFoundException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.security.auth.login.LoginException;
import javax.sql.DataSource;
import org.h2.store.fs.FileUtils; import org.h2.store.fs.FileUtils;
import org.junit.After;
import org.junit.AfterClass; import org.junit.AfterClass;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
@ -11,15 +19,13 @@ import org.taskana.WorkbasketService;
import org.taskana.configuration.TaskanaEngineConfiguration; import org.taskana.configuration.TaskanaEngineConfiguration;
import org.taskana.exceptions.NotAuthorizedException; import org.taskana.exceptions.NotAuthorizedException;
import org.taskana.exceptions.WorkbasketNotFoundException; import org.taskana.exceptions.WorkbasketNotFoundException;
import org.taskana.impl.TaskanaEngineImpl;
import org.taskana.impl.configuration.DBCleaner;
import org.taskana.impl.configuration.TaskanaEngineConfigurationTest;
import org.taskana.impl.util.IdGenerator;
import org.taskana.model.Workbasket; import org.taskana.model.Workbasket;
import org.taskana.model.WorkbasketAccessItem; import org.taskana.model.WorkbasketAccessItem;
import javax.security.auth.login.LoginException;
import java.io.FileNotFoundException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/** /**
* Integration Test for workbasketServiceImpl. * Integration Test for workbasketServiceImpl.
@ -30,160 +36,185 @@ public class WorkbasketServiceImplIntTest {
private static final int SLEEP_TIME = 100; private static final int SLEEP_TIME = 100;
private static final int THREE = 3; private static final int THREE = 3;
WorkbasketService workbasketServiceImpl;
static int counter = 0; static int counter = 0;
private DataSource dataSource;
private TaskanaEngineConfiguration taskanaEngineConfiguration;
private TaskanaEngine taskanaEngine;
private TaskanaEngineImpl taskanaEngineImpl;
private WorkbasketService workBasketService;
@Before @Before
public void setup() throws FileNotFoundException, SQLException, LoginException { public void setup() throws FileNotFoundException, SQLException, LoginException {
JdbcDataSource ds = new JdbcDataSource(); dataSource = TaskanaEngineConfigurationTest.getDataSource();
ds.setURL("jdbc:h2:mem:test-db-workbasket" + counter++); taskanaEngineConfiguration = new TaskanaEngineConfiguration(dataSource, false);
ds.setPassword("sa"); taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
ds.setUser("sa"); taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
TaskanaEngineConfiguration taskEngineConfiguration = new TaskanaEngineConfiguration(ds, false); workBasketService = taskanaEngine.getWorkbasketService();
DBCleaner cleaner = new DBCleaner();
TaskanaEngine te = taskEngineConfiguration.buildTaskanaEngine(); cleaner.clearDb(dataSource);
workbasketServiceImpl = te.getWorkbasketService();
} }
@Test @Test
public void testInsertWorkbasket() throws NotAuthorizedException { public void testInsertWorkbasket() throws NotAuthorizedException {
int before = workbasketServiceImpl.getWorkbaskets().size(); int before = workBasketService.getWorkbaskets().size();
Workbasket workbasket = new Workbasket(); Workbasket workbasket = new Workbasket();
workbasket.setId("1"); String id1 = IdGenerator.generateWithPrefix("TWB");
workbasket.setId(id1);
workbasket.setName("Megabasket"); workbasket.setName("Megabasket");
workbasketServiceImpl.createWorkbasket(workbasket); workBasketService.createWorkbasket(workbasket);
Assert.assertEquals(before + 1, workbasketServiceImpl.getWorkbaskets().size()); Assert.assertEquals(before + 1, workBasketService.getWorkbaskets().size());
} }
@Test @Test
public void testSelectAllWorkbaskets() throws NotAuthorizedException { public void testSelectAllWorkbaskets() throws NotAuthorizedException {
int before = workbasketServiceImpl.getWorkbaskets().size(); int before = workBasketService.getWorkbaskets().size();
Workbasket workbasket0 = new Workbasket(); Workbasket workbasket0 = new Workbasket();
workbasket0.setId("0"); String id0 = IdGenerator.generateWithPrefix("TWB");
workbasket0.setId(id0);
workbasket0.setName("Superbasket"); workbasket0.setName("Superbasket");
workbasketServiceImpl.createWorkbasket(workbasket0); workBasketService.createWorkbasket(workbasket0);
Workbasket workbasket1 = new Workbasket(); Workbasket workbasket1 = new Workbasket();
workbasket1.setId("1"); String id1 = IdGenerator.generateWithPrefix("TWB");
workbasket1.setId(id1);
workbasket1.setName("Megabasket"); workbasket1.setName("Megabasket");
workbasketServiceImpl.createWorkbasket(workbasket1); workBasketService.createWorkbasket(workbasket1);
Workbasket workbasket2 = new Workbasket(); Workbasket workbasket2 = new Workbasket();
workbasket2.setId("2"); String id2 = IdGenerator.generateWithPrefix("TWB");
workbasket2.setId(id2);
workbasket2.setName("Hyperbasket"); workbasket2.setName("Hyperbasket");
workbasketServiceImpl.createWorkbasket(workbasket2); workBasketService.createWorkbasket(workbasket2);
Assert.assertEquals(before + THREE, workbasketServiceImpl.getWorkbaskets().size()); Assert.assertEquals(before + THREE, workBasketService.getWorkbaskets().size());
} }
@Test @Test
public void testSelectWorkbasket() throws WorkbasketNotFoundException, NotAuthorizedException { public void testSelectWorkbasket() throws WorkbasketNotFoundException, NotAuthorizedException {
Workbasket workbasket0 = new Workbasket(); Workbasket workbasket0 = new Workbasket();
workbasket0.setId("0"); String id0 = IdGenerator.generateWithPrefix("TWB");
workbasket0.setId(id0);
workbasket0.setName("Superbasket"); workbasket0.setName("Superbasket");
workbasketServiceImpl.createWorkbasket(workbasket0); workBasketService.createWorkbasket(workbasket0);
Workbasket workbasket1 = new Workbasket(); Workbasket workbasket1 = new Workbasket();
workbasket1.setId("1"); String id1 = IdGenerator.generateWithPrefix("TWB");
workbasket1.setId(id1);
workbasket1.setName("Megabasket"); workbasket1.setName("Megabasket");
workbasketServiceImpl.createWorkbasket(workbasket1); workBasketService.createWorkbasket(workbasket1);
Workbasket workbasket2 = new Workbasket(); Workbasket workbasket2 = new Workbasket();
workbasket2.setId("2"); String id2 = IdGenerator.generateWithPrefix("TWB");
workbasket2.setId(id2);
workbasket2.setName("Hyperbasket"); workbasket2.setName("Hyperbasket");
workbasketServiceImpl.createWorkbasket(workbasket2); workBasketService.createWorkbasket(workbasket2);
Workbasket foundWorkbasket = workbasketServiceImpl.getWorkbasket("2"); Workbasket foundWorkbasket = workBasketService.getWorkbasket(id2);
Assert.assertEquals("2", foundWorkbasket.getId()); Assert.assertEquals(id2, foundWorkbasket.getId());
} }
@Test(expected = WorkbasketNotFoundException.class) @Test(expected = WorkbasketNotFoundException.class)
public void testGetWorkbasketFail() throws WorkbasketNotFoundException { public void testGetWorkbasketFail() throws WorkbasketNotFoundException {
workbasketServiceImpl.getWorkbasket("fail"); workBasketService.getWorkbasket("fail");
} }
@Test @Test
public void testSelectWorkbasketWithDistribution() throws WorkbasketNotFoundException, NotAuthorizedException { public void testSelectWorkbasketWithDistribution() throws WorkbasketNotFoundException, NotAuthorizedException {
Workbasket workbasket0 = new Workbasket(); Workbasket workbasket0 = new Workbasket();
workbasket0.setId("0"); String id0 = IdGenerator.generateWithPrefix("TWB");
workbasket0.setId(id0);
workbasket0.setName("Superbasket"); workbasket0.setName("Superbasket");
Workbasket workbasket1 = new Workbasket(); Workbasket workbasket1 = new Workbasket();
workbasket1.setId("1"); String id1 = IdGenerator.generateWithPrefix("TWB");
workbasket1.setId(id1);
workbasket1.setName("Megabasket"); workbasket1.setName("Megabasket");
Workbasket workbasket2 = new Workbasket(); Workbasket workbasket2 = new Workbasket();
workbasket2.setId("2"); String id2 = IdGenerator.generateWithPrefix("TWB");
workbasket2.setId(id2);
workbasket2.setName("Hyperbasket"); workbasket2.setName("Hyperbasket");
workbasket2.setDistributionTargets(new ArrayList<>()); workbasket2.setDistributionTargets(new ArrayList<>());
workbasket2.getDistributionTargets().add(workbasket0); workbasket2.getDistributionTargets().add(workbasket0);
workbasket2.getDistributionTargets().add(workbasket1); workbasket2.getDistributionTargets().add(workbasket1);
workbasketServiceImpl.createWorkbasket(workbasket2); workBasketService.createWorkbasket(workbasket2);
Workbasket foundWorkbasket = workbasketServiceImpl.getWorkbasket("2"); Workbasket foundWorkbasket = workBasketService.getWorkbasket(id2);
Assert.assertEquals("2", foundWorkbasket.getId()); Assert.assertEquals(id2, foundWorkbasket.getId());
Assert.assertEquals(2, foundWorkbasket.getDistributionTargets().size()); Assert.assertEquals(2, foundWorkbasket.getDistributionTargets().size());
} }
@Test @Test
public void testUpdateWorkbasket() throws Exception { public void testUpdateWorkbasket() throws Exception {
Workbasket workbasket0 = new Workbasket(); Workbasket workbasket0 = new Workbasket();
workbasket0.setId("0"); String id0 = IdGenerator.generateWithPrefix("TWB");
workbasket0.setId(id0);
workbasket0.setName("Superbasket"); workbasket0.setName("Superbasket");
Workbasket workbasket1 = new Workbasket(); Workbasket workbasket1 = new Workbasket();
workbasket1.setId("1"); String id1 = IdGenerator.generateWithPrefix("TWB");
workbasket1.setId(id1);
workbasket1.setName("Megabasket"); workbasket1.setName("Megabasket");
Workbasket workbasket2 = new Workbasket(); Workbasket workbasket2 = new Workbasket();
workbasket2.setId("2"); String id2 = IdGenerator.generateWithPrefix("TWB");
workbasket2.setId(id2);
workbasket2.setName("Hyperbasket"); workbasket2.setName("Hyperbasket");
workbasket2.getDistributionTargets().add(workbasket0); workbasket2.getDistributionTargets().add(workbasket0);
workbasket2.getDistributionTargets().add(workbasket1); workbasket2.getDistributionTargets().add(workbasket1);
workbasketServiceImpl.createWorkbasket(workbasket2); workBasketService.createWorkbasket(workbasket2);
Workbasket workbasket3 = new Workbasket(); Workbasket workbasket3 = new Workbasket();
workbasket3.setId("3"); String id3 = IdGenerator.generateWithPrefix("TWB");
workbasket3.setId(id3);
workbasket3.setName("hm ... irgend ein basket"); workbasket3.setName("hm ... irgend ein basket");
workbasket2.getDistributionTargets().clear(); workbasket2.getDistributionTargets().clear();
workbasket2.getDistributionTargets().add(workbasket3); workbasket2.getDistributionTargets().add(workbasket3);
Thread.sleep(SLEEP_TIME); Thread.sleep(SLEEP_TIME);
workbasketServiceImpl.updateWorkbasket(workbasket2); workBasketService.updateWorkbasket(workbasket2);
Workbasket foundBasket = workbasketServiceImpl.getWorkbasket(workbasket2.getId()); Workbasket foundBasket = workBasketService.getWorkbasket(workbasket2.getId());
List<Workbasket> distributionTargets = foundBasket.getDistributionTargets(); List<Workbasket> distributionTargets = foundBasket.getDistributionTargets();
Assert.assertEquals(1, distributionTargets.size()); Assert.assertEquals(1, distributionTargets.size());
Assert.assertEquals("3", distributionTargets.get(0).getId()); Assert.assertEquals(id3, distributionTargets.get(0).getId());
Assert.assertNotEquals(workbasketServiceImpl.getWorkbasket("2").getCreated(), Assert.assertNotEquals(workBasketService.getWorkbasket(id2).getCreated(),
workbasketServiceImpl.getWorkbasket("2").getModified()); workBasketService.getWorkbasket(id2).getModified());
Assert.assertEquals(workbasketServiceImpl.getWorkbasket("1").getCreated(), Assert.assertEquals(workBasketService.getWorkbasket(id1).getCreated(),
workbasketServiceImpl.getWorkbasket("1").getModified()); workBasketService.getWorkbasket(id1).getModified());
Assert.assertEquals(workbasketServiceImpl.getWorkbasket("3").getCreated(), Assert.assertEquals(workBasketService.getWorkbasket(id3).getCreated(),
workbasketServiceImpl.getWorkbasket("3").getModified()); workBasketService.getWorkbasket(id3).getModified());
} }
@Test @Test
public void testInsertWorkbasketAccessUser() throws NotAuthorizedException { public void testInsertWorkbasketAccessUser() throws NotAuthorizedException {
WorkbasketAccessItem accessItem = new WorkbasketAccessItem(); WorkbasketAccessItem accessItem = new WorkbasketAccessItem();
accessItem.setWorkbasketId("1"); String id1 = IdGenerator.generateWithPrefix("TWB");
accessItem.setWorkbasketId(id1);
accessItem.setUserId("Arthur Dent"); accessItem.setUserId("Arthur Dent");
accessItem.setOpen(true); accessItem.setOpen(true);
accessItem.setRead(true); accessItem.setRead(true);
workbasketServiceImpl.createWorkbasketAuthorization(accessItem); workBasketService.createWorkbasketAuthorization(accessItem);
Assert.assertEquals(1, workbasketServiceImpl.getAllAuthorizations().size()); Assert.assertEquals(1, workBasketService.getAllAuthorizations().size());
} }
@Test @Test
public void testUpdateWorkbasketAccessUser() throws NotAuthorizedException { public void testUpdateWorkbasketAccessUser() throws NotAuthorizedException {
WorkbasketAccessItem accessItem = new WorkbasketAccessItem(); WorkbasketAccessItem accessItem = new WorkbasketAccessItem();
accessItem.setWorkbasketId("1"); String id1 = IdGenerator.generateWithPrefix("TWB");
accessItem.setWorkbasketId(id1);
accessItem.setUserId("Arthur Dent"); accessItem.setUserId("Arthur Dent");
accessItem.setOpen(true); accessItem.setOpen(true);
accessItem.setRead(true); accessItem.setRead(true);
workbasketServiceImpl.createWorkbasketAuthorization(accessItem); workBasketService.createWorkbasketAuthorization(accessItem);
Assert.assertEquals(1, workbasketServiceImpl.getAllAuthorizations().size()); Assert.assertEquals(1, workBasketService.getAllAuthorizations().size());
accessItem.setUserId("Zaphod Beeblebrox"); accessItem.setUserId("Zaphod Beeblebrox");
workbasketServiceImpl.updateWorkbasketAuthorization(accessItem); workBasketService.updateWorkbasketAuthorization(accessItem);
Assert.assertEquals("Zaphod Beeblebrox", Assert.assertEquals("Zaphod Beeblebrox",
workbasketServiceImpl.getWorkbasketAuthorization(accessItem.getId()).getUserId()); workBasketService.getWorkbasketAuthorization(accessItem.getId()).getUserId());
}
@After
public void cleanUp() {
taskanaEngineImpl.closeSession();
} }
@AfterClass @AfterClass
public static void cleanUp() { public static void cleanUpClass() {
FileUtils.deleteRecursive("~/data", true); FileUtils.deleteRecursive("~/data", true);
} }
} }

View File

@ -0,0 +1,7 @@
DELETE FROM TASK;
DELETE FROM WORKBASKET;
DELETE FROM DISTRIBUTION_TARGETS;
DELETE FROM CLASSIFICATION;
DELETE FROM WORKBASKET_ACCESS_LIST;
DELETE FROM OBJECT_REFERENCE;
COMMIT;