diff --git a/archetypes/alfresco-allinone-archetype/src/main/resources/archetype-resources/run.bat b/archetypes/alfresco-allinone-archetype/src/main/resources/archetype-resources/run.bat index 582c521d..0d40a2fc 100644 --- a/archetypes/alfresco-allinone-archetype/src/main/resources/archetype-resources/run.bat +++ b/archetypes/alfresco-allinone-archetype/src/main/resources/archetype-resources/run.bat @@ -3,6 +3,14 @@ SET COMPOSE_FILE_PATH=%CD%\target\classes\docker\docker-compose.yml +IF [%M2_HOME%]==[] ( + SET MVN_EXEC=mvn +) + +IF NOT [%M2_HOME%]==[] ( + SET MVN_EXEC=%M2_HOME%\bin\mvn +) + IF [%1]==[] ( echo "Usage: %0 {build_start|start|stop|purge|tail|reload_share|reload_acs|build_test|test}" GOTO END @@ -50,6 +58,7 @@ IF %1==build_test ( CALL :build CALL :start CALL :test + CALL :tail_all CALL :down GOTO END ) @@ -79,25 +88,28 @@ EXIT /B 0 :build docker rmi alfresco-content-services-${rootArtifactId}:development docker rmi alfresco-share-${rootArtifactId}:development - call mvn clean install -DskipTests + call %MVN_EXEC% clean install -DskipTests EXIT /B 0 :build_share docker-compose -f "%COMPOSE_FILE_PATH%" kill ${rootArtifactId}-share docker-compose -f "%COMPOSE_FILE_PATH%" rm -f ${rootArtifactId}-share docker rmi alfresco-share-${rootArtifactId}:development - call mvn clean install -DskipTests -pl ${rootArtifactId}-share-jar + call %MVN_EXEC% clean install -DskipTests -pl ${rootArtifactId}-share-jar EXIT /B 0 :build_acs docker-compose -f "%COMPOSE_FILE_PATH%" kill ${rootArtifactId}-acs docker-compose -f "%COMPOSE_FILE_PATH%" rm -f ${rootArtifactId}-acs docker rmi alfresco-content-services-${rootArtifactId}:development - call mvn clean install -DskipTests -pl ${rootArtifactId}-platform-jar + call %MVN_EXEC% clean install -DskipTests -pl ${rootArtifactId}-platform-jar EXIT /B 0 :tail docker-compose -f "%COMPOSE_FILE_PATH%" logs -f EXIT /B 0 +:tail_all + docker-compose -f "%COMPOSE_FILE_PATH%" logs --tail="all" +EXIT /B 0 :test - call mvn verify -pl integration-tests + call %MVN_EXEC% verify -pl integration-tests EXIT /B 0 :purge docker volume rm ${rootArtifactId}-acs-volume diff --git a/archetypes/alfresco-allinone-archetype/src/main/resources/archetype-resources/run.sh b/archetypes/alfresco-allinone-archetype/src/main/resources/archetype-resources/run.sh index 7659621f..86a1ab0d 100755 --- a/archetypes/alfresco-allinone-archetype/src/main/resources/archetype-resources/run.sh +++ b/archetypes/alfresco-allinone-archetype/src/main/resources/archetype-resources/run.sh @@ -3,6 +3,12 @@ export COMPOSE_FILE_PATH=${symbol_dollar}{PWD}/target/classes/docker/docker-compose.yml +if [ -z "${symbol_dollar}{M2_HOME}" ]; then + export MVN_EXEC="mvn" +else + export MVN_EXEC="${symbol_dollar}{M2_HOME}/bin/mvn" +fi + start() { docker volume create ${rootArtifactId}-acs-volume docker volume create ${rootArtifactId}-db-volume @@ -31,29 +37,33 @@ purge() { build() { docker rmi alfresco-content-services-${rootArtifactId}:development docker rmi alfresco-share-${rootArtifactId}:development - mvn clean install -DskipTests=true + ${symbol_dollar}MVN_EXEC clean install -DskipTests=true } build_share() { docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH kill ${rootArtifactId}-share yes | docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH rm -f ${rootArtifactId}-share docker rmi alfresco-share-${rootArtifactId}:development - mvn clean install -DskipTests=true -pl ${rootArtifactId}-share-jar + ${symbol_dollar}MVN_EXEC clean install -DskipTests=true -pl ${rootArtifactId}-share-jar } build_acs() { docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH kill ${rootArtifactId}-acs yes | docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH rm -f ${rootArtifactId}-acs docker rmi alfresco-content-services-${rootArtifactId}:development - mvn clean install -DskipTests=true -pl ${rootArtifactId}-platform-jar + ${symbol_dollar}MVN_EXEC clean install -DskipTests=true -pl ${rootArtifactId}-platform-jar } tail() { docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH logs -f } +tail_all() { + docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH logs --tail="all" +} + test() { - mvn verify -pl integration-tests + ${symbol_dollar}MVN_EXEC verify -pl integration-tests } case "${symbol_dollar}1" in @@ -92,6 +102,7 @@ case "${symbol_dollar}1" in build start test + tail_all down ;; test) diff --git a/archetypes/alfresco-platform-jar-archetype/src/main/resources/archetype-resources/run.bat b/archetypes/alfresco-platform-jar-archetype/src/main/resources/archetype-resources/run.bat index 0c1ee408..4e07e284 100644 --- a/archetypes/alfresco-platform-jar-archetype/src/main/resources/archetype-resources/run.bat +++ b/archetypes/alfresco-platform-jar-archetype/src/main/resources/archetype-resources/run.bat @@ -3,6 +3,14 @@ SET COMPOSE_FILE_PATH=%CD%\target\classes\docker\docker-compose.yml +IF [%M2_HOME%]==[] ( + SET MVN_EXEC=mvn +) + +IF NOT [%M2_HOME%]==[] ( + SET MVN_EXEC=%M2_HOME%\bin\mvn +) + IF [%1]==[] ( echo "Usage: %0 {build_start|start|stop|purge|tail|build_test|test}" GOTO END @@ -38,6 +46,7 @@ IF %1==build_test ( CALL :build CALL :start CALL :test + CALL :tail_all CALL :down GOTO END ) @@ -60,13 +69,16 @@ EXIT /B 0 EXIT /B 0 :build docker rmi alfresco-content-services-${rootArtifactId}:development - call mvn clean install -DskipTests + call %MVN_EXEC% clean install -DskipTests EXIT /B 0 :tail docker-compose -f "%COMPOSE_FILE_PATH%" logs -f EXIT /B 0 +:tail_all + docker-compose -f "%COMPOSE_FILE_PATH%" logs --tail="all" +EXIT /B 0 :test - call mvn verify + call %MVN_EXEC% verify EXIT /B 0 :purge docker volume rm ${rootArtifactId}-acs-volume diff --git a/archetypes/alfresco-platform-jar-archetype/src/main/resources/archetype-resources/run.sh b/archetypes/alfresco-platform-jar-archetype/src/main/resources/archetype-resources/run.sh index 3789d951..7192937a 100755 --- a/archetypes/alfresco-platform-jar-archetype/src/main/resources/archetype-resources/run.sh +++ b/archetypes/alfresco-platform-jar-archetype/src/main/resources/archetype-resources/run.sh @@ -3,6 +3,12 @@ export COMPOSE_FILE_PATH=${symbol_dollar}{PWD}/target/classes/docker/docker-compose.yml +if [ -z "${symbol_dollar}{M2_HOME}" ]; then + export MVN_EXEC="mvn" +else + export MVN_EXEC="${symbol_dollar}{M2_HOME}/bin/mvn" +fi + start() { docker volume create ${rootArtifactId}-acs-volume docker volume create ${rootArtifactId}-db-volume @@ -22,15 +28,19 @@ purge() { build() { docker rmi alfresco-content-services-${rootArtifactId}:development - mvn clean install -DskipTests=true + ${symbol_dollar}MVN_EXEC clean install -DskipTests=true } tail() { docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH logs -f } +tail_all() { + docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH logs --tail="all" +} + test() { - mvn verify + ${symbol_dollar}MVN_EXEC verify } case "${symbol_dollar}1" in @@ -59,6 +69,7 @@ case "${symbol_dollar}1" in build start test + tail_all down ;; test) diff --git a/archetypes/alfresco-share-jar-archetype/src/main/resources/archetype-resources/run.bat b/archetypes/alfresco-share-jar-archetype/src/main/resources/archetype-resources/run.bat index 43a3da73..b7d79d74 100644 --- a/archetypes/alfresco-share-jar-archetype/src/main/resources/archetype-resources/run.bat +++ b/archetypes/alfresco-share-jar-archetype/src/main/resources/archetype-resources/run.bat @@ -3,6 +3,14 @@ SET COMPOSE_FILE_PATH=%CD%\target\classes\docker\docker-compose.yml +IF [%M2_HOME%]==[] ( + SET MVN_EXEC=mvn +) + +IF NOT [%M2_HOME%]==[] ( + SET MVN_EXEC=%M2_HOME%\bin\mvn +) + IF [%1]==[] ( echo "Usage: %0 {build_start|start|stop|purge|tail|reload_share|build_test|test}" GOTO END @@ -44,6 +52,7 @@ IF %1==build_test ( CALL :build CALL :start CALL :test + CALL :tail_all CALL :down GOTO END ) @@ -70,19 +79,22 @@ EXIT /B 0 :build docker rmi alfresco-content-services-${rootArtifactId}:development docker rmi alfresco-share-${rootArtifactId}:development - call mvn clean install -DskipTests + call %MVN_EXEC% clean install -DskipTests EXIT /B 0 :build_share docker-compose -f "%COMPOSE_FILE_PATH%" kill ${rootArtifactId}-share docker-compose -f "%COMPOSE_FILE_PATH%" rm -f ${rootArtifactId}-share docker rmi alfresco-share-${rootArtifactId}:development - call mvn clean install -DskipTests + call %MVN_EXEC% clean install -DskipTests EXIT /B 0 :tail docker-compose -f "%COMPOSE_FILE_PATH%" logs -f EXIT /B 0 +:tail_all + docker-compose -f "%COMPOSE_FILE_PATH%" logs --tail="all" +EXIT /B 0 :test - call mvn verify + call %MVN_EXEC% verify EXIT /B 0 :purge docker volume rm ${rootArtifactId}-acs-volume diff --git a/archetypes/alfresco-share-jar-archetype/src/main/resources/archetype-resources/run.sh b/archetypes/alfresco-share-jar-archetype/src/main/resources/archetype-resources/run.sh index 8702f69c..86ac8474 100755 --- a/archetypes/alfresco-share-jar-archetype/src/main/resources/archetype-resources/run.sh +++ b/archetypes/alfresco-share-jar-archetype/src/main/resources/archetype-resources/run.sh @@ -3,6 +3,12 @@ export COMPOSE_FILE_PATH=${symbol_dollar}{PWD}/target/classes/docker/docker-compose.yml +if [ -z "${symbol_dollar}{M2_HOME}" ]; then + export MVN_EXEC="mvn" +else + export MVN_EXEC="${symbol_dollar}{M2_HOME}/bin/mvn" +fi + start() { docker volume create ${rootArtifactId}-acs-volume docker volume create ${rootArtifactId}-db-volume @@ -26,22 +32,26 @@ purge() { build() { docker rmi alfresco-share-${rootArtifactId}:development - mvn clean install -DskipTests=true + ${symbol_dollar}MVN_EXEC clean install -DskipTests=true } build_share() { docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH kill ${rootArtifactId}-share yes | docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH rm -f ${rootArtifactId}-share docker rmi alfresco-share-${rootArtifactId}:development - mvn clean install -DskipTests=true + ${symbol_dollar}MVN_EXEC clean install -DskipTests=true } tail() { docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH logs -f } +tail_all() { + docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH logs --tail="all" +} + test() { - mvn verify + ${symbol_dollar}MVN_EXEC verify } case "${symbol_dollar}1" in @@ -75,6 +85,7 @@ case "${symbol_dollar}1" in build start test + tail_all down ;; test) diff --git a/archetypes/archetypes-it/pom.xml b/archetypes/archetypes-it/pom.xml index e27bd223..75419f6f 100644 --- a/archetypes/archetypes-it/pom.xml +++ b/archetypes/archetypes-it/pom.xml @@ -9,6 +9,12 @@ Archetypes IT Archetypes Integration Tests + + 1.7.12 + 1.8 + 1.8 + + org.alfresco.maven alfresco-sdk-aggregator @@ -29,6 +35,18 @@ 4.8.1 test + + org.slf4j + slf4j-api + ${slf4j.version} + test + + + org.slf4j + slf4j-simple + ${slf4j.version} + test + @@ -55,6 +73,14 @@ + + + DEBUG + false + false + false + + diff --git a/archetypes/archetypes-it/src/test/java/org/alfresco/maven/archetype/AbstractArchetypeIT.java b/archetypes/archetypes-it/src/test/java/org/alfresco/maven/archetype/AbstractArchetypeIT.java index 0a1d9bcd..c5f89ded 100644 --- a/archetypes/archetypes-it/src/test/java/org/alfresco/maven/archetype/AbstractArchetypeIT.java +++ b/archetypes/archetypes-it/src/test/java/org/alfresco/maven/archetype/AbstractArchetypeIT.java @@ -3,6 +3,8 @@ package org.alfresco.maven.archetype; import org.apache.maven.it.VerificationException; import org.apache.maven.it.Verifier; import org.junit.Before; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; @@ -14,6 +16,8 @@ import java.io.IOException; */ public abstract class AbstractArchetypeIT { + private static final Logger LOG = LoggerFactory.getLogger(AbstractArchetypeIT.class); + protected static final File ROOT = new File("target/test-classes/"); protected static final String LOG_FILENAME = "log.txt"; protected static final String ERROR_FILENAME = "error.txt"; @@ -46,11 +50,16 @@ public abstract class AbstractArchetypeIT { /** * Generate a new project from an archetype and verify the generation was successful. */ - protected void generateProjectFromArchetype() throws Exception { + protected void generateProjectFromArchetype(final Logger logger) throws Exception { + LOG.info("---------------------------------------------------------------------"); + LOG.info("Generating a new project from the archetype {}:{}:{}", archetypeProperties.getArchetypeGroupId(), archetypeProperties.getArchetypeArtifactId(), + archetypeProperties.getArchetypeVersion()); + LOG.info("---------------------------------------------------------------------"); Verifier verifier = new Verifier(ROOT.getAbsolutePath()); verifier.setSystemProperties(archetypeProperties.getSystemProperties()); verifier.setAutoclean(false); verifier.executeGoal("archetype:generate"); + printVerifierLog("PROJECT GENERATION", verifier, logger); verifier.verifyErrorFreeLog(); } @@ -62,12 +71,27 @@ public abstract class AbstractArchetypeIT { */ protected ProcessBuilder getProcessBuilder(final String goalToExecute) { ProcessBuilder pb = new ProcessBuilder(getCommand(), goalToExecute); + LOG.trace("ProcessBuilder environment: {}", pb.environment().toString()); pb.directory(new File(projectPath)); pb.redirectOutput(new File(projectPath + File.separator + LOG_FILENAME)); pb.redirectError(new File(projectPath + File.separator + ERROR_FILENAME)); return pb; } + /** + * Print the content of the log file of a {@link Verifier} into a specific {@link Logger}. + * + * @param prefix the prefix to print before each line + * @param verifier the {@link Verifier} to print its log file content + * @param logger the {@link Logger} to print the log content + */ + protected void printVerifierLog(final String prefix, final Verifier verifier, final Logger logger) throws Exception { + logger.info("[{}] - {}", prefix, "Standard output"); + verifier.loadFile(verifier.getBasedir(), verifier.getLogFileName(), false).forEach(line -> logger.info("[{}] - {}", prefix, line)); + logger.info("[{}] - {}", prefix, "Error output"); + verifier.loadFile(verifier.getBasedir(), ERROR_FILENAME, false).forEach(line -> logger.info("[{}] - {}", prefix, line)); + } + private String getCommand() { return projectPath + File.separator + (System.getProperty("os.name").startsWith("Windows") ? WINDOWS_EXEC : LINUX_EXEC); } diff --git a/archetypes/archetypes-it/src/test/java/org/alfresco/maven/archetype/AllInOneArchetypeIT.java b/archetypes/archetypes-it/src/test/java/org/alfresco/maven/archetype/AllInOneArchetypeIT.java index db0a5cdc..d4e40f00 100644 --- a/archetypes/archetypes-it/src/test/java/org/alfresco/maven/archetype/AllInOneArchetypeIT.java +++ b/archetypes/archetypes-it/src/test/java/org/alfresco/maven/archetype/AllInOneArchetypeIT.java @@ -2,12 +2,16 @@ package org.alfresco.maven.archetype; import org.apache.maven.it.Verifier; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Integration tests for the all-in-one archetype. */ public class AllInOneArchetypeIT extends AbstractArchetypeIT { + private static final Logger LOGGER = LoggerFactory.getLogger(AllInOneArchetypeIT.class); + @Override protected ArchetypeProperties createArchetypeProperties() { return ArchetypeProperties.builder() @@ -23,7 +27,11 @@ public class AllInOneArchetypeIT extends AbstractArchetypeIT { @Test public void whenGenerateProjectFromArchetypeThenAProperProjectIsCreated() throws Exception { - generateProjectFromArchetype(); + generateProjectFromArchetype(LOGGER); + + LOGGER.info("---------------------------------------------------------------------"); + LOGGER.info("Building the generated project {}", archetypeProperties.getProjectArtifactId()); + LOGGER.info("---------------------------------------------------------------------"); // Since creating the archetype was successful, we now want to actually build the generated project executing the integration tests // Execute a purge to ensure old data don't make the test fail @@ -36,6 +44,7 @@ public class AllInOneArchetypeIT extends AbstractArchetypeIT { Verifier verifier = new Verifier(projectPath); verifier.setAutoclean(false); verifier.setLogFileName(LOG_FILENAME); + printVerifierLog("PROJECT BUILD", verifier, LOGGER); verifier.verifyErrorFreeLog(); verifier.verifyTextInLog("Tests run: 5, Failures: 0, Errors: 0, Skipped: 0"); } diff --git a/archetypes/archetypes-it/src/test/java/org/alfresco/maven/archetype/PlatformJarArchetypeIT.java b/archetypes/archetypes-it/src/test/java/org/alfresco/maven/archetype/PlatformJarArchetypeIT.java index 4f824ef7..1aee782f 100644 --- a/archetypes/archetypes-it/src/test/java/org/alfresco/maven/archetype/PlatformJarArchetypeIT.java +++ b/archetypes/archetypes-it/src/test/java/org/alfresco/maven/archetype/PlatformJarArchetypeIT.java @@ -2,12 +2,16 @@ package org.alfresco.maven.archetype; import org.apache.maven.it.Verifier; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Integration tests for the platform jar archetype. */ public class PlatformJarArchetypeIT extends AbstractArchetypeIT { + private static final Logger LOGGER = LoggerFactory.getLogger(PlatformJarArchetypeIT.class); + @Override protected ArchetypeProperties createArchetypeProperties() { return ArchetypeProperties.builder() @@ -22,12 +26,17 @@ public class PlatformJarArchetypeIT extends AbstractArchetypeIT { @Test public void whenGenerateProjectFromArchetypeThenAProperProjectIsCreated() throws Exception { - generateProjectFromArchetype(); + generateProjectFromArchetype(LOGGER); + + LOGGER.info("---------------------------------------------------------------------"); + LOGGER.info("Building the generated project {}", archetypeProperties.getProjectArtifactId()); + LOGGER.info("---------------------------------------------------------------------"); // Since creating the archetype was successful, we now want to actually build the generated project Verifier verifier = new Verifier(projectPath); verifier.setAutoclean(false); verifier.executeGoal("install"); + printVerifierLog("PROJECT BUILD", verifier, LOGGER); verifier.verifyErrorFreeLog(); } } diff --git a/archetypes/archetypes-it/src/test/java/org/alfresco/maven/archetype/ShareJarArchetypeIT.java b/archetypes/archetypes-it/src/test/java/org/alfresco/maven/archetype/ShareJarArchetypeIT.java index 063d39d4..fbdfdb30 100644 --- a/archetypes/archetypes-it/src/test/java/org/alfresco/maven/archetype/ShareJarArchetypeIT.java +++ b/archetypes/archetypes-it/src/test/java/org/alfresco/maven/archetype/ShareJarArchetypeIT.java @@ -2,12 +2,16 @@ package org.alfresco.maven.archetype; import org.apache.maven.it.Verifier; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Integration tests for the share jar archetype. */ public class ShareJarArchetypeIT extends AbstractArchetypeIT { + private static final Logger LOGGER = LoggerFactory.getLogger(ShareJarArchetypeIT.class); + @Override protected ArchetypeProperties createArchetypeProperties() { return ArchetypeProperties.builder() @@ -22,12 +26,17 @@ public class ShareJarArchetypeIT extends AbstractArchetypeIT { @Test public void whenGenerateProjectFromArchetypeThenAProperProjectIsCreated() throws Exception { - generateProjectFromArchetype(); + generateProjectFromArchetype(LOGGER); + + LOGGER.info("---------------------------------------------------------------------"); + LOGGER.info("Building the generated project {}", archetypeProperties.getProjectArtifactId()); + LOGGER.info("---------------------------------------------------------------------"); // Since creating the archetype was successful, we now want to actually build the generated project Verifier verifier = new Verifier(projectPath); verifier.setAutoclean(false); verifier.executeGoal("install"); + printVerifierLog("PROJECT BUILD", verifier, LOGGER); verifier.verifyErrorFreeLog(); } }