diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index f0dd31427..bafd6bcc5 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -274,15 +274,13 @@ jobs:
with:
name: ${{ env.ARTIFACTS_TASKANA_JARS_NAME }}
path: ${{ env.ARTIFACTS_TASKANA_JARS_PATH }}
- - name: Prepare database
- run: docker-databases/prepare_db.sh ${{ matrix.database }}
- name: Generate JavaDoc for Rest Documentation
if: matrix.module == 'taskana-simplehistory-rest-spring'
run: ./mvnw -B validate -pl :taskana-rest-spring
- name: Test
run: ./mvnw -B verify -pl :${{matrix.module}} -Dcheckstyle.skip
env:
- db.type: ${{ matrix.database }}
+ DB: ${{ matrix.database }}
- name: Upload JaCoCo Report
if: matrix.database == 'H2'
uses: actions/upload-artifact@v2
diff --git a/.run/All in taskana-core DB2.run.xml b/.run/All in taskana-core DB2.run.xml
new file mode 100644
index 000000000..3e19523f9
--- /dev/null
+++ b/.run/All in taskana-core DB2.run.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/All in taskana-core POSTGRES.run.xml b/.run/All in taskana-core POSTGRES.run.xml
new file mode 100644
index 000000000..5ce665c07
--- /dev/null
+++ b/.run/All in taskana-core POSTGRES.run.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/Run ArchitectureTest.run.xml b/.run/Run ArchitectureTest.run.xml
new file mode 100644
index 000000000..0a630c7bd
--- /dev/null
+++ b/.run/Run ArchitectureTest.run.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/common/taskana-common-test/pom.xml b/common/taskana-common-test/pom.xml
index 17e7decb1..13a3d0566 100644
--- a/common/taskana-common-test/pom.xml
+++ b/common/taskana-common-test/pom.xml
@@ -106,6 +106,28 @@
org.springframework
spring-webmvc
+
+ org.testcontainers
+ db2
+ ${version.testcontainers}
+
+
+ junit
+ junit
+
+
+
+
+ org.testcontainers
+ postgresql
+ ${version.testcontainers}
+
+
+ junit
+ junit
+
+
+
diff --git a/lib/taskana-core/src/test/java/testapi/util/DockerContainerCreator.java b/common/taskana-common-test/src/main/java/pro/taskana/common/test/DockerContainerCreator.java
similarity index 98%
rename from lib/taskana-core/src/test/java/testapi/util/DockerContainerCreator.java
rename to common/taskana-common-test/src/main/java/pro/taskana/common/test/DockerContainerCreator.java
index 6f03cac78..630655c3c 100644
--- a/lib/taskana-core/src/test/java/testapi/util/DockerContainerCreator.java
+++ b/common/taskana-common-test/src/main/java/pro/taskana/common/test/DockerContainerCreator.java
@@ -1,4 +1,4 @@
-package testapi.util;
+package pro.taskana.common.test;
import static java.time.temporal.ChronoUnit.SECONDS;
diff --git a/common/taskana-common-test/src/main/java/pro/taskana/common/test/config/DataSourceGenerator.java b/common/taskana-common-test/src/main/java/pro/taskana/common/test/config/DataSourceGenerator.java
index 8e88f270c..a6c63d7aa 100644
--- a/common/taskana-common-test/src/main/java/pro/taskana/common/test/config/DataSourceGenerator.java
+++ b/common/taskana-common-test/src/main/java/pro/taskana/common/test/config/DataSourceGenerator.java
@@ -1,14 +1,12 @@
package pro.taskana.common.test.config;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
+import java.util.Optional;
import javax.sql.DataSource;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.JdbcDatabaseContainer;
+
+import pro.taskana.common.internal.configuration.DB;
+import pro.taskana.common.test.DockerContainerCreator;
/**
* The DataSourceGenerator provides the proper {@linkplain DataSource} for all Integration tests.
@@ -23,22 +21,22 @@ import org.slf4j.LoggerFactory;
*/
public final class DataSourceGenerator {
- private static final Logger LOGGER = LoggerFactory.getLogger(DataSourceGenerator.class);
private static final DataSource DATA_SOURCE;
private static final String SCHEMA_NAME;
- private static final String DEFAULT_SCHEMA_NAME = "TASKANA";
private static final int POOL_TIME_TO_WAIT = 50;
static {
- String propertiesFileName = System.getProperty("user.home") + "/taskanaUnitTest.properties";
- File f = new File(propertiesFileName);
- if (f.exists() && !f.isDirectory()) {
- DATA_SOURCE = createDataSourceFromProperties(propertiesFileName);
- SCHEMA_NAME = getSchemaNameFromPropertiesObject(propertiesFileName);
+ DB db = retrieveDatabaseFromEnv();
+ Optional> dockerContainer =
+ DockerContainerCreator.createDockerContainer(db);
+
+ SCHEMA_NAME = determineSchemaName(db);
+ if (dockerContainer.isPresent()) {
+ dockerContainer.get().start();
+ DATA_SOURCE = DockerContainerCreator.createDataSource(dockerContainer.get());
} else {
DATA_SOURCE = createDataSourceForH2();
- SCHEMA_NAME = DEFAULT_SCHEMA_NAME;
}
}
@@ -52,84 +50,19 @@ public final class DataSourceGenerator {
return SCHEMA_NAME;
}
- private static DataSource createDataSourceFromProperties(String propertiesFileName) {
- DataSource ds;
- 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 PooledDataSource(
- Thread.currentThread().getContextClassLoader(),
- jdbcDriver,
- jdbcUrl,
- dbUserName,
- dbPassword);
- ((PooledDataSource) ds)
- .forceCloseAll(); // otherwise, the MyBatis pool is not initialized correctly
- } else {
- LOGGER.warn("propertiesFile {} is incomplete {}", propertiesFileName, warningMessage);
- LOGGER.warn("Using default Datasource for Test");
- ds = createDataSourceForH2();
- }
-
- } catch (IOException e) {
- LOGGER.warn("createDataSourceFromProperties caught Exception ", e);
- LOGGER.warn("Using default Datasource for Test");
- ds = createDataSourceForH2();
- }
-
- return ds;
+ private static String determineSchemaName(DB db) {
+ return db == DB.POSTGRES ? "taskana" : "TASKANA";
}
- private static String getSchemaNameFromPropertiesObject(String propertiesFileName) {
- String schemaName = DEFAULT_SCHEMA_NAME;
- try (InputStream input = new FileInputStream(propertiesFileName)) {
- Properties prop = new Properties();
- prop.load(input);
- boolean propertiesFileIsComplete = true;
- String warningMessage = "";
- schemaName = prop.getProperty("schemaName");
- if (schemaName == null || schemaName.length() == 0) {
- propertiesFileIsComplete = false;
- warningMessage += ", schemaName property missing";
- }
-
- if (!propertiesFileIsComplete) {
- LOGGER.warn("propertiesFile {} is incomplete {}", propertiesFileName, warningMessage);
- LOGGER.warn("Using default Datasource for Test");
- schemaName = DEFAULT_SCHEMA_NAME;
- }
-
- } catch (IOException e) {
- LOGGER.warn("getSchemaNameFromPropertiesObject caught Exception ", e);
- LOGGER.warn("Using default schemaName for Test");
+ private static DB retrieveDatabaseFromEnv() {
+ String property = System.getenv("DB");
+ DB db;
+ try {
+ db = DB.valueOf(property);
+ } catch (Exception ex) {
+ db = DB.H2;
}
-
- return schemaName;
+ return db;
}
private static DataSource createDataSourceForH2() {
diff --git a/lib/taskana-core/pom.xml b/lib/taskana-core/pom.xml
index 6c865ed41..9a5e862e7 100644
--- a/lib/taskana-core/pom.xml
+++ b/lib/taskana-core/pom.xml
@@ -111,7 +111,7 @@
${version.archunit}
test
-
+
org.testcontainers
db2
${version.testcontainers}
diff --git a/lib/taskana-core/src/test/java/acceptance/jobs/helper/TaskUpdatePriorityWorkerAccTest.java b/lib/taskana-core/src/test/java/acceptance/jobs/helper/TaskUpdatePriorityWorkerAccTest.java
index 4cfe1da82..1394d0ae3 100644
--- a/lib/taskana-core/src/test/java/acceptance/jobs/helper/TaskUpdatePriorityWorkerAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/jobs/helper/TaskUpdatePriorityWorkerAccTest.java
@@ -28,8 +28,10 @@ import pro.taskana.task.api.models.TaskSummary;
import pro.taskana.task.internal.builder.TaskBuilder;
import pro.taskana.task.internal.jobs.helper.TaskUpdatePriorityWorker;
import pro.taskana.task.internal.models.TaskImpl;
+import pro.taskana.workbasket.api.WorkbasketPermission;
import pro.taskana.workbasket.api.WorkbasketService;
import pro.taskana.workbasket.api.models.WorkbasketSummary;
+import pro.taskana.workbasket.internal.builder.WorkbasketAccessItemBuilder;
@TaskanaIntegrationTest
class TaskUpdatePriorityWorkerAccTest {
@@ -42,18 +44,29 @@ class TaskUpdatePriorityWorkerAccTest {
TaskSummary task1;
TaskSummary task2;
Task completedTask;
+ ClassificationSummary classificationSummary;
+ WorkbasketSummary workbasketSummary;
@WithAccessId(user = "admin")
@BeforeAll
void setUp(ClassificationService classificationService, WorkbasketService workbasketService)
throws Exception {
- ClassificationSummary classificationSummary =
+ classificationSummary =
DefaultTestEntities.defaultTestClassification()
.buildAndStore(classificationService)
.asSummary();
- WorkbasketSummary workbasketSummary =
+ workbasketSummary =
DefaultTestEntities.defaultTestWorkbasket().buildAndStore(workbasketService).asSummary();
+ // Currently, we have a bug: TSK-1736
+ // Because of that we need at least one WorkbasketAccessItem with the correct permissions.
+ // Otherwise, the DB2 will not work.
+ WorkbasketAccessItemBuilder.newWorkbasketAccessItem()
+ .workbasketId(workbasketSummary.getId())
+ .accessId("whatever")
+ .permission(WorkbasketPermission.READ)
+ .buildAndStore(workbasketService);
+
TaskBuilder taskBuilder =
TaskBuilder.newTask()
.classificationSummary(classificationSummary)
@@ -127,16 +140,8 @@ class TaskUpdatePriorityWorkerAccTest {
@Test
@WithAccessId(user = "admin")
- void should_executeBatch(
- WorkbasketService workbasketService, ClassificationService classificationService)
- throws Exception {
+ void should_executeBatch() throws Exception {
// given
- ClassificationSummary classificationSummary =
- DefaultTestEntities.defaultTestClassification()
- .buildAndStore(classificationService)
- .asSummary();
- WorkbasketSummary workbasketSummary =
- DefaultTestEntities.defaultTestWorkbasket().buildAndStore(workbasketService).asSummary();
Task oldTask =
TaskBuilder.newTask()
.classificationSummary(classificationSummary)
diff --git a/lib/taskana-core/src/test/java/testapi/extensions/TestContainerExtension.java b/lib/taskana-core/src/test/java/testapi/extensions/TestContainerExtension.java
index 9c43437a4..b2e451414 100644
--- a/lib/taskana-core/src/test/java/testapi/extensions/TestContainerExtension.java
+++ b/lib/taskana-core/src/test/java/testapi/extensions/TestContainerExtension.java
@@ -1,7 +1,8 @@
package testapi.extensions;
import static org.junit.platform.commons.support.AnnotationSupport.isAnnotated;
-import static testapi.util.DockerContainerCreator.createDockerContainer;
+import static pro.taskana.common.test.DockerContainerCreator.createDataSource;
+import static pro.taskana.common.test.DockerContainerCreator.createDockerContainer;
import static testapi.util.ExtensionCommunicator.getClassLevelStore;
import static testapi.util.ExtensionCommunicator.isTopLevelClass;
@@ -21,7 +22,6 @@ import org.testcontainers.containers.JdbcDatabaseContainer;
import testapi.CleanTaskanaContext;
import testapi.TaskanaEngineConfigurationModifier;
import testapi.WithServiceProvider;
-import testapi.util.DockerContainerCreator;
import pro.taskana.common.internal.configuration.DB;
@@ -47,7 +47,7 @@ public class TestContainerExtension implements AfterAllCallback, InvocationInter
.ifPresentOrElse(
container -> {
container.start();
- store.put(STORE_DATA_SOURCE, DockerContainerCreator.createDataSource(container));
+ store.put(STORE_DATA_SOURCE, createDataSource(container));
store.put(STORE_CONTAINER, container);
},
() -> store.put(STORE_DATA_SOURCE, createDataSourceForH2()));
@@ -87,7 +87,7 @@ public class TestContainerExtension implements AfterAllCallback, InvocationInter
}
private static DB retrieveDatabaseFromEnv() {
- String property = System.getenv("db.type");
+ String property = System.getenv("DB");
DB db;
try {
db = DB.valueOf(property);