From ac0be2f36a41e13f90b177e3837922ae325d540f Mon Sep 17 00:00:00 2001 From: jensp Date: Mon, 27 Feb 2017 20:22:35 +0000 Subject: [PATCH] CCM NG: Shell script has now subcommands for running tests git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4604 8810af33-2d31-482b-a856-94f89814c4df Former-commit-id: 557a24121a0b82f548f9777f2f47a87edc892373 --- ccm-readme.txt | 94 +++++++++++++++-- ccm.sh | 272 +++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 325 insertions(+), 41 deletions(-) diff --git a/ccm-readme.txt b/ccm-readme.txt index 9c5f11496..1988b69f8 100644 --- a/ccm-readme.txt +++ b/ccm-readme.txt @@ -2,15 +2,22 @@ ccm.sh is a helper script for building and running LibreCCM in a development environment. It provides shortcuts for several Maven goals. The available subcommands are: -build-site [PROFILE] : Builds the Maven project site. -build [PROFILE] : Builds LibreCCM using the provided profile -build-module MODULE [PROFILE]: Build a specific LibreCCM module. -testccm [PROFILE] : Run tests for all modules. -test-module MODULE [PROFILE] : Run tests for a specific LibreCCM module. -install-runtime [RUNTIME] : Download and install a runtime (application - server) into ./runtime -run [-r RUNTIME] [BUNDLE] : Run a runtime (application server) -help : Show this help message. +build-site [PROFILE] : Builds the Maven project site. +build [PROFILE] : Builds LibreCCM using the + provided profile +build-module MODULE [PROFILE] : Build a specific LibreCCM + module. +test-all [-s [-r RUNTIME]] [PROFILE] : Run tests for all modules. +test-module [-s [-r RUNTIME]] MODULE [PROFILE] : Run tests for a specific + LibreCCM module. +run-test [-s [-r RUNTIME]] MODULE TEST [PROFILE]: Run a specific testsuite or + a single test. +install-runtime [RUNTIME] : Download and install a + runtime (application server) + into ./runtime. +run [-r RUNTIME] [BUNDLE] : Run a runtime + (application server) +help : Show this help message. build-site [PROFILE] ==================== @@ -50,6 +57,75 @@ without a profile and to with a profile. +test-all [-s [-r RUNTIME]] [PROFILE] +==================================== + +Run all tests for all modules. If the -s flag is set a application server is +started in the background before the tests are run and stopped afterwards. +If no runtime is provided using -r RUNTIME Wildfly is used as runtime. See +the section "run" for Wildfly specific details. + +If a profile is provided the profile is used to run the tests. + +test-module [-s [-r RUNTIME]] MODULE [PROFILE] +============================================== + +Runs the tests for a specific module. If the -s flag is set a application +server is started in the background before the tests are run and stopped +afterwards. If no runtime is provided using -r RUNTIME Wildfly is used as +runtime. See the section "run" for Wildfly specific details. + +This subcommand has one mandatory parameter: The module which tests are run. +Optionally a profile can be provided. + +run-test [-s [-r RUNTIME]] MODULE TEST [PROFILE] +================================================ + +Runs the a specific testsuite or a single test. +If the -s flag is set a application +server is started in the background before the tests are run and stopped +afterwards. If no runtime is provided using -r RUNTIME Wildfly is used as +runtime. See the section "run" for Wildfly specific details. + +This subcommand has two mandatory parameter: +The module which contains the test(suite) to run and the test to run. The test +to run must be provided in the following syntax: + +fully.qualified.classname.of.testclass[#test-method] + +Optionally are profile can be provided. + +Some examples: + +Run all tests in the class org.libreccm.configuration.EqualsAndHashCodeTest in +the ccm-core module: + +ccm.sh runtest ccm-core org.libreccm.configuration.EqualsAndHashCodeTest + +Run all tests in the class org.libreccm.core.CcmObjectRepositoryTest in the +ccm-core module. This tests is run using Arquillian and requires a runtime and +is only run when an integration test profile is used: + +ccm.sh runtest -s ccm-core org.libreccm.core.CcmObjectRepositoryTest +wildfly-remote-h2-mem + +Or if you only want to run the saveChangedCcmObject test: + +ccm.sh runtest -s ccm-core +org.libreccm.core.CcmObjectRepositoryTest#saveChangedCcmObject wildfly-remote-h2-mem + +The last two examples used the default runtime (Wildfly). Invoking without a +specific runtime is equivalent to + +ccm.sh runtest -s -r wildfly ccm-core org.libreccm.core.CcmObjectRepositoryTest wildfly-remote-h2-mem + +ccm.sh runtest -s -r wildfly ccm-core org.libreccm.core.CcmObjectRepositoryTest#saveChangedCcmObject wildfly-remote-h2-mem + + + + + + install-runtime [RUNTIME] ========================= diff --git a/ccm.sh b/ccm.sh index 18eb1adb5..820748729 100755 --- a/ccm.sh +++ b/ccm.sh @@ -1,15 +1,26 @@ #!/bin/bash -wildflyversion="10.1.0.Final" +# Provides shortcuts for working with LibreCCM +wildflyversion="10.1.0.Final" +wildflypidfile="./WILDFLY_PID" + +# Build the project site. +# +# @param $1 (optional): Maven profile to use. +# buildsite() { if [ -d "$1" ]; then - mvn clean package site site:stage -Dmaven.test.failure.ignore=true -P$2 + mvn clean package site site:stage -Dmaven.test.failure.ignore=true -P$1 else mvn clean package site site:stage -Dmaven.test.failure.ignore=true fi } +# Build all modules +# +# @param $1 (optional): Maven profile to use. +# build() { if [ -d "$1" ]; then mvn clean package -P$1 @@ -18,6 +29,11 @@ build() { fi } +# Build a module +# +# @param $1 (mandantory): The artifact ID of the module to build. +# @param $2 (optional) : The profile to use. +# buildmodule() { if [ -n "$1" ]; then if [ -n "$2" ]; then @@ -26,32 +42,216 @@ buildmodule() { mvn clean package -pl $1 -am fi else - echo "Usage: ccm.sh build-module PROFILE [MODULE]" + echo "Usage: ccm.sh build-module MODULE [PROFILE]" exit 1 fi } -testccm() { - if [ -n "$1" ]; then - mvn clean test -P$1 - else - mvn clean test - fi -} - -testmodule() { - if [ -n "$1" ]; then - if [ -n "$2" ]; then - mvn clean test -P$2 -pl $1 -am - else - mvn clean test -pl $1 -am +# Helper method for starting runtime for integration tests +# @param $1 (mandantory): Runtime to start +# +starttestruntime() { + if [ "$1"="wildfly" ]; then + echo "Starting Wildfly $wildversion for running tests..." + wildflyhome="" + if [ -n "$JBOSS_HOME" ]; then + echo "Setting wildflyhome to JBOSS_HOME" + wildflyhome=$JBOSS_HOME + elif [ -d "./runtime/wildfly-$wildflyversion" ]; then + echo "Setting wildflyhome..." + wildflyhome="./runtime/wildfly-$wildflyversion" + else + echo "There is not Wildfly in ./runtime/ and JBOSS_HOME is not set." + echo "Please call install-runtime or set JBOSS_HOME" + exit 1 fi - else - echo "Usage: ccm.sh test-module MODULE [PROFILE]" + + pushd $wildflyhome + sh "LAUNCH_JBOSS_IN_BACKGROUND=1 JBOSS_PID_FILE=$wildflypidfile ./bin/standalone.sh" + popd + echo "Waiting 120s for Wildfly to start up..." + sleep 120 + + if [ -n "$profile" ]; then + mvn clean test -P$profile + else + mvn clean test + fi + + echo "Stopping Wildfly..." + pushd $wildflyhome + kill $(<"$wildflypidfile") + popd + + elif [ "$1"="tomee" ]; then + echo "Not implemented yet." + exit 1 + else + echo "Unsupported runtime $1. Supported runtimes are wildfly and tomee." exit 1 fi + } +# Helper method for stopping the test runtime +# +# @param $1 (mandantory): Runtime to stop +# +stoptestruntime() { + if [ "$1" = "wildfly" ]; then + echo "Stopping Wildfly..." + + wildflyhome="" + if [ -n "$JBOSS_HOME" ]; then + echo "Setting wildflyhome to JBOSS_HOME" + wildflyhome=$JBOSS_HOME + elif [ -d "./runtime/wildfly-$wildflyversion" ]; then + echo "Setting wildflyhome..." + wildflyhome="./runtime/wildfly-$wildflyversion" + else + echo "There is not Wildfly in ./runtime/ and JBOSS_HOME is not set." + echo "Please call install-runtime or set JBOSS_HOME" + exit 1 + fi + + pushd $wildflyhome + kill $(<"$wildflypidfile") + popd + elif [ "$1" = "tomee" ]; then + echo "Not implemented yet." + exit 1 + else + echo "Unsupported runtime $1. Supported runtime are wildfly and tomee." + exit 1 + fi + +} + +# Run all tests +testall() { + + startruntime=false + runtime="wildfly" + profile="" + + if [ "$1" = "-s" ]; then + startruntime=true + if [ "$2" = "-r" ]; then + runtime=$3 + profile=$4 + else + profile=$2 + fi + fi + + if [ $startruntime ]; then + starttestruntime $runtime + fi + + if [ -n "$profile" ]; then + echo "Running tests for all modules with profile $profile..." + mvn clean test -P$profile + else + echo "Running tests for all modules..." + mvn clean test + fi + + if [ $startruntime ]; then + stoptestruntime $runtime + fi +} + +# Run tests for a module +testmodule() { + + startruntime=false + runtime="wildfly" + module="" + profile="" + + if [ "$1" = "-r" ]; then + startruntime=true + if [ "$2" = "-r" ]; then + runtime=$3 + module=$4 + profile=$5 + else + module=$2 + profile=$3 + fi + fi + + if [ -z "$module" ]; then + echo "Error: No module to test. Exiting." + exit 1 + fi + + if [ $startruntime ]; then + starttestruntime $runtime + fi + + if [ -n "$profile" ]; then + echo "Running tests for module $module with profile $profile..." + mvn clean test -P$profile -pl $module -am + else + echo "Running tests for module $module..." + mvn clean test -pl $module $am + fi + + if [ $startruntime ]; then + stoptestruntime $runtime + fi +} + +# Run a single testsuite or test +runtest() { + + startruntime=false + runtime="wildfly" + module="" + testtorun="" + profile="" + + if [ "$1" = "-r" ]; then + startruntime=true + if [ "$2" = "-r" ]; then + runtime=$3 + module=$4 + profile=$5 + else + module=$2 + profile=$3 + fi + fi + + if [ -z module ]; then + echo "No module provided. Please provide the module which contains the test to run. Exiting." + exit 1 + fi + + if [ -z testtorun ]; then + echo "No test to run provided. Exiting." + exit 1 + fi + + if [ $startruntime ]; then + starttestruntime $runtime + fi + + if [ -n "$profile" ]; then + echo "Running tests for module $module with profile $profile..." + mvn clean test -Dtest=$testtorun -DfailIfNoTests=false -P$profile -pl $module -am + else + echo "Runnign tests for module $module..." + mvn clean test -D$testtorun -pl $module $am + fi + + if [ $startruntime ]; then + stoptestruntime $runtime + fi +} + + installruntime() { runtime="" @@ -177,7 +377,7 @@ run() { else echo "There is not Wildfly in ./runtime/ and JBOSS_HOME is not set." echo "Please call install-runtime or set JBOSS_HOME" - echo 1 + exit 1 fi echo "Starting Wildfly in $wildflyhome..." @@ -233,16 +433,23 @@ showhelp() { development environment. It provides shortcuts for several Maven goals. The available subcommands are: - build-site [PROFILE] : Builds the Maven project site. - build [PROFILE] : Build all LibreCCM modules. - build-module MODULE [PROFILE] : Build a specific LibreCCM module. - testccm [PROFILE] [RUNTIME] : Run tests for all modules. - test-module MODULE [PROFILE] [RUNTIME] : Run tests for a specific LibreCCM - module. - install-runtime [RUNTIME] : Download and install a runtime - (application server) into ./runtime - run [-r RUNTIME] [BUNDLE] : Run a runtime (application server) - help : Show this help message. + build-site [PROFILE] : Builds the Maven project + site. + build [PROFILE] : Build all LibreCCM + modules. + build-module MODULE [PROFILE] : Build a specific LibreCCM + module. + test-all [-s [-r RUNTIME]] [PROFILE] : Run tests for all modules. + test-module [-s [-r RUNTIME]] MODULE [PROFILE] : Run tests for a specific + LibreCCM module. + run-test [-s [-r RUNTIME]] MODULE TEST [PROFILE]: Run a specific testsuite + or a single test. + install-runtime [RUNTIME] : Download and install a + runtime (application + server) into ./runtime + run [-r RUNTIME] [BUNDLE] : Run a runtime + (application server) + help : Show this help message. A detailed description of the subcommands is provided in ccm-readme.txt" @@ -255,8 +462,9 @@ case $1 in build-site) buildsite $2 ;; build) build $2 ;; build-module) buildmodule $2 ;; - testccm) testccm $2 $3 ;; - test-module) testmodule $2 $3 $4 ;; + test-all) testall $2 $3 $4 ;; + test-module) testmodule $2 $3 $4 $5 ;; + run-test) runtest $2 $3 $4 $5 $6 ;; install-runtime) installruntime $2 ;; run) run $2 $3 $4 ;; stop-runtime) stopruntime $2 ;;