From 64701e785c0e75f120a0125d949be663df8a7044 Mon Sep 17 00:00:00 2001 From: Joerg Heffner <56156750+gitgoodjhe@users.noreply.github.com> Date: Tue, 11 Aug 2020 08:33:21 +0200 Subject: [PATCH] TSK-1358: Added Wildflytests, renamed history module --- history/taskana-loghistory-provider/pom.xml | 8 +- ...er.java => LogfileHistoryServiceImpl.java} | 4 +- ...pro.taskana.spi.history.api.TaskanaHistory | 2 +- ...ava => LogfileHistoryServiceImplTest.java} | 8 +- .../src/{main => test}/resources/log4j2.xml | 4 +- .../src/test/resources/taskana.properties | 1 + ...pro.taskana.spi.history.api.TaskanaHistory | 2 +- .../pom.xml | 10 ++ .../java/pro/taskana/AbstractAccTest.java | 132 ++++++++++++++++++ .../java/pro/taskana/TaskanaWildflyTest.java | 48 +------ ...askanaWildflyWithHistoryLoggerEnabled.java | 84 +++++++++++ ...hSimpleHistoryAndHistoryLoggerEnabled.java | 118 ++++++++++++++++ ...askanaWildflyWithSimpleHistoryEnabled.java | 103 ++++++++++++++ .../src/test/resources/taskana.properties | 1 + 14 files changed, 464 insertions(+), 61 deletions(-) rename history/taskana-loghistory-provider/src/main/java/pro/taskana/loghistory/impl/{LogfileHistoryServiceProvider.java => LogfileHistoryServiceImpl.java} (97%) rename history/taskana-loghistory-provider/src/test/java/pro/taskana/loghistory/impl/{LogfileHistoryServiceProviderTest.java => LogfileHistoryServiceImplTest.java} (88%) rename history/taskana-loghistory-provider/src/{main => test}/resources/log4j2.xml (97%) create mode 100644 rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/AbstractAccTest.java create mode 100644 rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/TaskanaWildflyWithHistoryLoggerEnabled.java create mode 100644 rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/TaskanaWildflyWithSimpleHistoryAndHistoryLoggerEnabled.java create mode 100644 rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/TaskanaWildflyWithSimpleHistoryEnabled.java diff --git a/history/taskana-loghistory-provider/pom.xml b/history/taskana-loghistory-provider/pom.xml index 7c3e940d3..17cb7e8de 100644 --- a/history/taskana-loghistory-provider/pom.xml +++ b/history/taskana-loghistory-provider/pom.xml @@ -32,6 +32,10 @@ jackson-databind ${version.jackson-databind} + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + @@ -40,10 +44,6 @@ ${version.slf4j-test} test - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - org.assertj assertj-core diff --git a/history/taskana-loghistory-provider/src/main/java/pro/taskana/loghistory/impl/LogfileHistoryServiceProvider.java b/history/taskana-loghistory-provider/src/main/java/pro/taskana/loghistory/impl/LogfileHistoryServiceImpl.java similarity index 97% rename from history/taskana-loghistory-provider/src/main/java/pro/taskana/loghistory/impl/LogfileHistoryServiceProvider.java rename to history/taskana-loghistory-provider/src/main/java/pro/taskana/loghistory/impl/LogfileHistoryServiceImpl.java index 4d447e622..a1a68611e 100644 --- a/history/taskana-loghistory-provider/src/main/java/pro/taskana/loghistory/impl/LogfileHistoryServiceProvider.java +++ b/history/taskana-loghistory-provider/src/main/java/pro/taskana/loghistory/impl/LogfileHistoryServiceImpl.java @@ -20,9 +20,9 @@ import pro.taskana.common.api.exceptions.SystemException; import pro.taskana.spi.history.api.TaskanaHistory; import pro.taskana.spi.history.api.events.TaskanaHistoryEvent; -public class LogfileHistoryServiceProvider implements TaskanaHistory { +public class LogfileHistoryServiceImpl implements TaskanaHistory { - private static final Logger LOGGER = LoggerFactory.getLogger(LogfileHistoryServiceProvider.class); + private static final Logger LOGGER = LoggerFactory.getLogger(LogfileHistoryServiceImpl.class); private static final String TASKANA_PROPERTIES = "/taskana.properties"; private static final String TASKANA_HISTORYLOGGER_NAME = "taskana.historylogger.name"; private static Logger historyLogger; diff --git a/history/taskana-loghistory-provider/src/main/resources/META-INF/services/pro.taskana.spi.history.api.TaskanaHistory b/history/taskana-loghistory-provider/src/main/resources/META-INF/services/pro.taskana.spi.history.api.TaskanaHistory index e36bde0e9..0d09d1cd6 100644 --- a/history/taskana-loghistory-provider/src/main/resources/META-INF/services/pro.taskana.spi.history.api.TaskanaHistory +++ b/history/taskana-loghistory-provider/src/main/resources/META-INF/services/pro.taskana.spi.history.api.TaskanaHistory @@ -1 +1 @@ -pro.taskana.loghistory.impl.LogfileHistoryServiceProvider \ No newline at end of file +pro.taskana.loghistory.impl.LogfileHistoryServiceImpl diff --git a/history/taskana-loghistory-provider/src/test/java/pro/taskana/loghistory/impl/LogfileHistoryServiceProviderTest.java b/history/taskana-loghistory-provider/src/test/java/pro/taskana/loghistory/impl/LogfileHistoryServiceImplTest.java similarity index 88% rename from history/taskana-loghistory-provider/src/test/java/pro/taskana/loghistory/impl/LogfileHistoryServiceProviderTest.java rename to history/taskana-loghistory-provider/src/test/java/pro/taskana/loghistory/impl/LogfileHistoryServiceImplTest.java index f55ca7b43..4a15ac84c 100644 --- a/history/taskana-loghistory-provider/src/test/java/pro/taskana/loghistory/impl/LogfileHistoryServiceProviderTest.java +++ b/history/taskana-loghistory-provider/src/test/java/pro/taskana/loghistory/impl/LogfileHistoryServiceImplTest.java @@ -15,10 +15,10 @@ import uk.org.lidalia.slf4jtest.TestLoggerFactory; import pro.taskana.common.api.TaskanaEngine; import pro.taskana.spi.history.api.events.TaskanaHistoryEvent; -class LogfileHistoryServiceProviderTest { +class LogfileHistoryServiceImplTest { static ObjectMapper objectMapper = new ObjectMapper(); - LogfileHistoryServiceProvider logfileHistoryServiceProvider = new LogfileHistoryServiceProvider(); + LogfileHistoryServiceImpl logfileHistoryServiceImpl = new LogfileHistoryServiceImpl(); TestLogger logger = TestLoggerFactory.getTestLogger("AUDIT"); @Mock TaskanaEngine taskanaEngine; @@ -35,7 +35,7 @@ class LogfileHistoryServiceProviderTest { @Test void should_LogEventAsJson_When_CreateIsCalled() throws Exception { - logfileHistoryServiceProvider.initialize(taskanaEngine); + logfileHistoryServiceImpl.initialize(taskanaEngine); TaskanaHistoryEvent eventToBeLogged = new TaskanaHistoryEvent(); eventToBeLogged.setId("someId"); eventToBeLogged.setUserId("someUser"); @@ -50,7 +50,7 @@ class LogfileHistoryServiceProviderTest { eventToBeLogged.setTaskClassificationCategory("someTaskClassificationCategory"); eventToBeLogged.setDetails("someDetails"); - logfileHistoryServiceProvider.create(eventToBeLogged); + logfileHistoryServiceImpl.create(eventToBeLogged); String logMessage = logger.getLoggingEvents().asList().get(0).getMessage(); diff --git a/history/taskana-loghistory-provider/src/main/resources/log4j2.xml b/history/taskana-loghistory-provider/src/test/resources/log4j2.xml similarity index 97% rename from history/taskana-loghistory-provider/src/main/resources/log4j2.xml rename to history/taskana-loghistory-provider/src/test/resources/log4j2.xml index f10ac77a2..ff8db73e0 100644 --- a/history/taskana-loghistory-provider/src/main/resources/log4j2.xml +++ b/history/taskana-loghistory-provider/src/test/resources/log4j2.xml @@ -20,7 +20,7 @@ @@ -58,4 +58,4 @@ - \ No newline at end of file + diff --git a/history/taskana-loghistory-provider/src/test/resources/taskana.properties b/history/taskana-loghistory-provider/src/test/resources/taskana.properties index bfe1c7474..8f740b321 100644 --- a/history/taskana-loghistory-provider/src/test/resources/taskana.properties +++ b/history/taskana-loghistory-provider/src/test/resources/taskana.properties @@ -18,3 +18,4 @@ taskana.german.holidays.enabled=true taskana.german.holidays.corpus-christi.enabled=true taskana.historylogger.name=AUDIT + diff --git a/history/taskana-simplehistory-provider/src/main/resources/META-INF/services/pro.taskana.spi.history.api.TaskanaHistory b/history/taskana-simplehistory-provider/src/main/resources/META-INF/services/pro.taskana.spi.history.api.TaskanaHistory index 0d415ff5a..8dd76f1bc 100644 --- a/history/taskana-simplehistory-provider/src/main/resources/META-INF/services/pro.taskana.spi.history.api.TaskanaHistory +++ b/history/taskana-simplehistory-provider/src/main/resources/META-INF/services/pro.taskana.spi.history.api.TaskanaHistory @@ -1 +1 @@ -pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl \ No newline at end of file +pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl diff --git a/rest/taskana-rest-spring-example-wildfly/pom.xml b/rest/taskana-rest-spring-example-wildfly/pom.xml index f3c65e3fd..4d7e11e2f 100644 --- a/rest/taskana-rest-spring-example-wildfly/pom.xml +++ b/rest/taskana-rest-spring-example-wildfly/pom.xml @@ -42,6 +42,10 @@ org.springframework.boot spring-boot-starter-tomcat + + org.springframework.boot + spring-boot-starter-logging + @@ -73,6 +77,12 @@ + + pro.taskana.simplehistory + taskana-simplehistory-rest-spring + ${project.version} + test + org.assertj assertj-core diff --git a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/AbstractAccTest.java b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/AbstractAccTest.java new file mode 100644 index 000000000..eba0c1982 --- /dev/null +++ b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/AbstractAccTest.java @@ -0,0 +1,132 @@ +package pro.taskana; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.util.Collections; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.hateoas.MediaTypes; +import org.springframework.hateoas.mediatype.hal.Jackson2HalModule; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.client.RestTemplate; + +import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel; +import pro.taskana.simplehistory.rest.models.TaskHistoryEventListResource; +import pro.taskana.task.api.models.ObjectReference; +import pro.taskana.task.rest.models.TaskRepresentationModel; +import pro.taskana.workbasket.rest.models.WorkbasketSummaryRepresentationModel; + +public class AbstractAccTest { + + protected static final String DEPENDENCY_VERSION = "3.2.1-SNAPSHOT"; + private static final String AUTHORIZATION_TEAMLEAD_1 = "Basic dGVhbWxlYWQtMTp0ZWFtbGVhZC0x"; + + /** + * Return a REST template which is capable of dealing with responses in HAL format. + * + * @return RestTemplate + */ + protected static RestTemplate getRestTemplate() { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + mapper.registerModule(new Jackson2HalModule()); + mapper + .registerModule(new ParameterNamesModule()) + .registerModule(new Jdk8Module()) + .registerModule(new JavaTimeModule()); + + MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); + converter.setSupportedMediaTypes(Collections.singletonList(MediaTypes.HAL_JSON)); + converter.setObjectMapper(mapper); + + RestTemplate template = new RestTemplate(); + // important to add first to ensure priority + template.getMessageConverters().add(0, converter); + return template; + } + + protected HttpHeaders getHeadersTeamlead_1() { + HttpHeaders headers = new HttpHeaders(); + headers.add("Authorization", AUTHORIZATION_TEAMLEAD_1); + headers.add("Content-Type", "application/json"); + return headers; + } + + protected TaskRepresentationModel getTaskResourceSample() { + ClassificationSummaryRepresentationModel classificationResource = + new ClassificationSummaryRepresentationModel(); + classificationResource.setKey("L11010"); + WorkbasketSummaryRepresentationModel workbasketSummary = + new WorkbasketSummaryRepresentationModel(); + workbasketSummary.setWorkbasketId("WBI:100000000000000000000000000000000004"); + + ObjectReference objectReference = new ObjectReference(); + objectReference.setCompany("MyCompany1"); + objectReference.setSystem("MySystem1"); + objectReference.setSystemInstance("MyInstance1"); + objectReference.setType("MyType1"); + objectReference.setValue("00000001"); + + TaskRepresentationModel taskRepresentationModel = new TaskRepresentationModel(); + taskRepresentationModel.setClassificationSummary(classificationResource); + taskRepresentationModel.setWorkbasketSummary(workbasketSummary); + taskRepresentationModel.setPrimaryObjRef(objectReference); + return taskRepresentationModel; + } + + protected ResponseEntity performGetHistoryEventsRestCall() { + + HttpEntity httpEntity = new HttpEntity<>(getHeadersTeamlead_1()); + + ResponseEntity response = + getRestTemplate() + .exchange( + "http://127.0.0.1:" + "8080" + "/taskana/api/v1/task-history-event", + HttpMethod.GET, + httpEntity, + ParameterizedTypeReference.forType(TaskHistoryEventListResource.class)); + + return response; + } + + protected ResponseEntity performCreateTaskRestCall() { + + TaskRepresentationModel taskRepresentationModel = getTaskResourceSample(); + ResponseEntity responseCreateTask = + getRestTemplate() + .exchange( + "http://127.0.0.1:" + "8080" + "/taskana/api/v1/tasks", + HttpMethod.POST, + new HttpEntity<>(taskRepresentationModel, getHeadersTeamlead_1()), + ParameterizedTypeReference.forType(TaskRepresentationModel.class)); + + return responseCreateTask; + } + + protected String parseServerLog() throws Exception { + + // TO-DO: make log4j log into rollingFile from log4j.xml + File file = new File("target/wildfly-13.0.0.Final/standalone/log/server.log"); + + BufferedReader br = new BufferedReader(new FileReader(file)); + + String str; + StringBuilder stringBuilder = new StringBuilder(); + while ((str = br.readLine()) != null) { + stringBuilder.append(str); + } + return stringBuilder.toString(); + } + +} diff --git a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/TaskanaWildflyTest.java b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/TaskanaWildflyTest.java index a4f81b648..2577b3f0c 100644 --- a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/TaskanaWildflyTest.java +++ b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/TaskanaWildflyTest.java @@ -3,15 +3,8 @@ package pro.taskana; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; import java.io.File; import java.util.ArrayList; -import java.util.Collections; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.RunAsClient; import org.jboss.arquillian.junit.Arquillian; @@ -24,15 +17,10 @@ import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.ParameterizedTypeReference; -import org.springframework.hateoas.MediaTypes; -import org.springframework.hateoas.mediatype.hal.Jackson2HalModule; import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.web.client.RestTemplate; import pro.taskana.common.rest.models.AccessIdRepresentationModel; import pro.taskana.common.rest.models.TaskanaUserInfoRepresentationModel; @@ -43,12 +31,10 @@ import pro.taskana.task.rest.models.TaskRepresentationModel; * to change data source configuration at project-defaults.yml. */ @RunWith(Arquillian.class) -public class TaskanaWildflyTest { +public class TaskanaWildflyTest extends AbstractAccTest { private static final Logger LOGGER = LoggerFactory.getLogger(TaskanaWildflyTest.class); - public static final String AUTHORIZATION_TEAMLEAD_1 = "Basic dGVhbWxlYWQtMTp0ZWFtbGVhZC0x"; - @Deployment(testable = false) public static Archive createTestArchive() { @@ -128,38 +114,6 @@ public class TaskanaWildflyTest { assertThat(response.getBody()).isNotNull(); } - /** - * Return a REST template which is capable of dealing with responses in HAL format. - * - * @return RestTemplate - */ - private static RestTemplate getRestTemplate() { - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); - mapper.registerModule(new Jackson2HalModule()); - mapper - .registerModule(new ParameterNamesModule()) - .registerModule(new Jdk8Module()) - .registerModule(new JavaTimeModule()); - - MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); - converter.setSupportedMediaTypes(Collections.singletonList(MediaTypes.HAL_JSON)); - converter.setObjectMapper(mapper); - - RestTemplate template = new RestTemplate(); - // important to add first to ensure priority - template.getMessageConverters().add(0, converter); - return template; - } - - private HttpHeaders getHeadersTeamlead_1() { - HttpHeaders headers = new HttpHeaders(); - headers.add("Authorization", AUTHORIZATION_TEAMLEAD_1); - headers.add("Content-Type", "application/json"); - return headers; - } - static class AccessIdListResource extends ArrayList { private static final long serialVersionUID = 1L; } diff --git a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/TaskanaWildflyWithHistoryLoggerEnabled.java b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/TaskanaWildflyWithHistoryLoggerEnabled.java new file mode 100644 index 000000000..f8c7074ed --- /dev/null +++ b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/TaskanaWildflyWithHistoryLoggerEnabled.java @@ -0,0 +1,84 @@ +package pro.taskana; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.File; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.container.test.api.RunAsClient; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import org.jboss.shrinkwrap.resolver.api.maven.PackagingType; +import org.jboss.shrinkwrap.resolver.api.maven.ScopeType; +import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenCoordinate; +import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenCoordinates; +import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; +import org.jboss.shrinkwrap.resolver.impl.maven.coordinate.MavenDependencyImpl; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * This test class is configured to run with postgres DB if you want to run it with h2 it is needed. + * to change data source configuration at project-defaults.yml. + */ +@RunWith(Arquillian.class) +public class TaskanaWildflyWithHistoryLoggerEnabled extends AbstractAccTest { + + private static final Logger LOGGER = + LoggerFactory.getLogger(TaskanaWildflyWithHistoryLoggerEnabled.class); + + @Deployment(testable = false) + public static Archive createTestArchive() { + + String applicationPropertyFile = "application.properties"; + String dbType = System.getProperty("db.type"); + if (dbType != null && !dbType.isEmpty()) { + applicationPropertyFile = "application-" + dbType + ".properties"; + } + + LOGGER.info( + "Running with db.type '{}' and using property file '{}'", dbType, applicationPropertyFile); + + MavenCoordinate historyLoggerCoordinate = + MavenCoordinates.createCoordinate( + "pro.taskana.simplehistory", + "taskana-loghistory-provider", + DEPENDENCY_VERSION, + PackagingType.JAR, + null); + + MavenDependency historyLoggerDependency = + new MavenDependencyImpl(historyLoggerCoordinate, ScopeType.TEST, false); + + File[] files = + Maven.resolver() + .loadPomFromFile("pom.xml") + .importRuntimeDependencies() + .addDependency(historyLoggerDependency) + .resolve() + .withTransitivity() + .asFile(); + + return ShrinkWrap.create(WebArchive.class, "taskana.war") + .addPackages(true, "pro.taskana") + .addAsResource("taskana.properties") + .addAsResource(applicationPropertyFile, "application.properties") + .addAsResource("taskana-test.ldif") + .addAsWebInfResource("int-test-web.xml", "web.xml") + .addAsWebInfResource("int-test-jboss-web.xml", "jboss-web.xml") + .addAsLibraries(files); + } + + @Test + @RunAsClient + public void should_WriteHistoryEventIntoDatabase_And_LogEventToFile() throws Exception { + + String log = parseServerLog(); + + assertThat(log).contains("AUDIT"); + } +} diff --git a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/TaskanaWildflyWithSimpleHistoryAndHistoryLoggerEnabled.java b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/TaskanaWildflyWithSimpleHistoryAndHistoryLoggerEnabled.java new file mode 100644 index 000000000..7fafc31ea --- /dev/null +++ b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/TaskanaWildflyWithSimpleHistoryAndHistoryLoggerEnabled.java @@ -0,0 +1,118 @@ +package pro.taskana; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.File; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.container.test.api.RunAsClient; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import org.jboss.shrinkwrap.resolver.api.maven.PackagingType; +import org.jboss.shrinkwrap.resolver.api.maven.ScopeType; +import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenCoordinate; +import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenCoordinates; +import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; +import org.jboss.shrinkwrap.resolver.impl.maven.coordinate.MavenDependencyImpl; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.hateoas.IanaLinkRelations; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import pro.taskana.simplehistory.rest.models.TaskHistoryEventListResource; +import pro.taskana.task.rest.models.TaskRepresentationModel; + +/** + * This test class is configured to run with postgres DB if you want to run it with h2 it is needed. + * to change data source configuration at project-defaults.yml. + */ +@RunWith(Arquillian.class) +public class TaskanaWildflyWithSimpleHistoryAndHistoryLoggerEnabled extends AbstractAccTest { + + private static final Logger LOGGER = + LoggerFactory.getLogger(TaskanaWildflyWithSimpleHistoryAndHistoryLoggerEnabled.class); + + @Deployment(testable = false) + public static Archive createTestArchive() { + + String applicationPropertyFile = "application.properties"; + String dbType = System.getProperty("db.type"); + if (dbType != null && !dbType.isEmpty()) { + applicationPropertyFile = "application-" + dbType + ".properties"; + } + + LOGGER.info( + "Running with db.type '{}' and using property file '{}'", dbType, applicationPropertyFile); + + MavenCoordinate simpleHistoryCoordinate = + MavenCoordinates.createCoordinate( + "pro.taskana.simplehistory", + "taskana-simplehistory-rest-spring", + DEPENDENCY_VERSION, + PackagingType.JAR, + null); + + MavenDependency simpleHistoryDependency = + new MavenDependencyImpl(simpleHistoryCoordinate, ScopeType.TEST, false); + + MavenCoordinate historyLoggerCoordinate = + MavenCoordinates.createCoordinate( + "pro.taskana.simplehistory", + "taskana-loghistory-provider", + DEPENDENCY_VERSION, + PackagingType.JAR, + null); + + MavenDependency historyLoggerDependency = + new MavenDependencyImpl(historyLoggerCoordinate, ScopeType.TEST, false); + + File[] files = + Maven.resolver() + .loadPomFromFile("pom.xml") + .importRuntimeDependencies() + .addDependency(simpleHistoryDependency) + .addDependency(historyLoggerDependency) + .resolve() + .withTransitivity() + .asFile(); + + return ShrinkWrap.create(WebArchive.class, "taskana.war") + .addPackages(true, "pro.taskana") + .addAsResource("taskana.properties") + .addAsResource(applicationPropertyFile, "application.properties") + .addAsResource("taskana-test.ldif") + .addAsWebInfResource("int-test-web.xml", "web.xml") + .addAsWebInfResource("int-test-jboss-web.xml", "jboss-web.xml") + .addAsLibraries(files); + } + + @Test + @RunAsClient + public void should_WriteHistoryEventIntoDatabase_And_LogEventToFile() throws Exception { + + ResponseEntity getHistoryEventsResponse = + performGetHistoryEventsRestCall(); + assertThat(getHistoryEventsResponse.getBody()).isNotNull(); + assertThat(getHistoryEventsResponse.getBody().getLink(IanaLinkRelations.SELF)).isNotNull(); + assertThat(getHistoryEventsResponse.getBody().getContent()).hasSize(0); + + ResponseEntity responseCreateTask = performCreateTaskRestCall(); + assertThat(HttpStatus.CREATED).isEqualTo(responseCreateTask.getStatusCode()); + assertThat(responseCreateTask.getBody()).isNotNull(); + + getHistoryEventsResponse = performGetHistoryEventsRestCall(); + + assertThat(getHistoryEventsResponse.getBody()).isNotNull(); + assertThat(getHistoryEventsResponse.getBody().getLink(IanaLinkRelations.SELF)).isNotNull(); + assertThat(getHistoryEventsResponse.getBody().getContent()).hasSize(1); + + String log = parseServerLog(); + + assertThat(log).contains("AUDIT"); + } +} diff --git a/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/TaskanaWildflyWithSimpleHistoryEnabled.java b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/TaskanaWildflyWithSimpleHistoryEnabled.java new file mode 100644 index 000000000..e139fd9a5 --- /dev/null +++ b/rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/TaskanaWildflyWithSimpleHistoryEnabled.java @@ -0,0 +1,103 @@ +package pro.taskana; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.File; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.container.test.api.RunAsClient; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import org.jboss.shrinkwrap.resolver.api.maven.PackagingType; +import org.jboss.shrinkwrap.resolver.api.maven.ScopeType; +import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenCoordinate; +import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenCoordinates; +import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; +import org.jboss.shrinkwrap.resolver.impl.maven.coordinate.MavenDependencyImpl; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.hateoas.IanaLinkRelations; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import pro.taskana.simplehistory.rest.models.TaskHistoryEventListResource; +import pro.taskana.task.rest.models.TaskRepresentationModel; + +/** + * This test class is configured to run with postgres DB if you want to run it with h2 it is needed. + * to change data source configuration at project-defaults.yml. + */ +@RunWith(Arquillian.class) +public class TaskanaWildflyWithSimpleHistoryEnabled extends AbstractAccTest { + + private static final Logger LOGGER = + LoggerFactory.getLogger(TaskanaWildflyWithSimpleHistoryEnabled.class); + + @Deployment(testable = false) + public static Archive createTestArchive() { + + String applicationPropertyFile = "application.properties"; + String dbType = System.getProperty("db.type"); + if (dbType != null && !dbType.isEmpty()) { + applicationPropertyFile = "application-" + dbType + ".properties"; + } + + LOGGER.info( + "Running with db.type '{}' and using property file '{}'", dbType, applicationPropertyFile); + + MavenCoordinate simpleHistoryCoordinate = + MavenCoordinates.createCoordinate( + "pro.taskana.simplehistory", + "taskana-simplehistory-rest-spring", + DEPENDENCY_VERSION, + PackagingType.JAR, + null); + + MavenDependency simpleHistoryDependency = + new MavenDependencyImpl(simpleHistoryCoordinate, ScopeType.TEST, false); + + File[] files = + Maven.resolver() + .loadPomFromFile("pom.xml") + .importRuntimeDependencies() + .addDependency(simpleHistoryDependency) + .resolve() + .withTransitivity() + .asFile(); + + return ShrinkWrap.create(WebArchive.class, "taskana.war") + .addPackages(true, "pro.taskana") + .addAsResource("taskana.properties") + .addAsResource(applicationPropertyFile, "application.properties") + .addAsResource("taskana-test.ldif") + .addAsWebInfResource("int-test-web.xml", "web.xml") + .addAsWebInfResource("int-test-jboss-web.xml", "jboss-web.xml") + .addAsLibraries(files); + } + + @Test + @RunAsClient + public void should_WriteHistoryEventIntoDatabase() { + + ResponseEntity getHistoryEventsResponse = + performGetHistoryEventsRestCall(); + assertThat(getHistoryEventsResponse.getBody()).isNotNull(); + assertThat(getHistoryEventsResponse.getBody().getLink(IanaLinkRelations.SELF)).isNotNull(); + assertThat(getHistoryEventsResponse.getBody().getContent()).hasSize(0); + + ResponseEntity responseCreateTask = performCreateTaskRestCall(); + assertThat(HttpStatus.CREATED).isEqualTo(responseCreateTask.getStatusCode()); + assertThat(responseCreateTask.getBody()).isNotNull(); + + getHistoryEventsResponse = performGetHistoryEventsRestCall(); + + assertThat(getHistoryEventsResponse.getBody()).isNotNull(); + assertThat(getHistoryEventsResponse.getBody().getLink(IanaLinkRelations.SELF)).isNotNull(); + assertThat(getHistoryEventsResponse.getBody().getContent()).hasSize(1); + } + +} diff --git a/rest/taskana-rest-spring-example-wildfly/src/test/resources/taskana.properties b/rest/taskana-rest-spring-example-wildfly/src/test/resources/taskana.properties index a96fecaf1..60973f58a 100644 --- a/rest/taskana-rest-spring-example-wildfly/src/test/resources/taskana.properties +++ b/rest/taskana-rest-spring-example-wildfly/src/test/resources/taskana.properties @@ -15,3 +15,4 @@ taskana.jobs.cleanup.runEvery=P1D taskana.jobs.cleanup.firstRunAt=2018-07-25T08:00:00Z taskana.jobs.cleanup.minimumAge=P14D taskana.german.holidays.enabled=true +taskana.historylogger.name=AUDIT