Initial commit
Change-Id: I6a4444e3c193dae437cd7929f4c39aba7b749efa
diff --git a/contrib/nightly_tests/runtests.sh b/contrib/nightly_tests/runtests.sh
new file mode 100644
index 0000000..e339b9b
--- /dev/null
+++ b/contrib/nightly_tests/runtests.sh
@@ -0,0 +1,133 @@
+#!/bin/bash -x
+
+# This script will retrieve the list of tests to run from the freediameter website,
+# and execute them one by one.
+
+ROOTDIR=$HOME/fDtests
+if [ ! -d $ROOTDIR ]; then
+ echo "The working directory $ROOTDIR does not exist. Please create it or edit the script."
+ exit 1;
+fi
+
+WORKDIR=$ROOTDIR/data
+
+# The script requires a local.cmake file to exist and define the following:
+# CTEST_SITE=
+# the name of the build slave.
+# Example: SET(CTEST_SITE "Ubuntu-Lucid-64b")
+if [ ! -e $ROOTDIR/local.cmake ]; then
+ echo "Missing $ROOTDIR/local.cmake file, generating one (edit as needed, and run the script again)";
+ echo "SET(CTEST_SITE \""`hostname --fqdn`"\")" > $ROOTDIR/local.cmake
+ exit 1;
+fi
+
+# Now, cleanup any previous built data, but keep the sources (to get the diffs)
+if [ ! -d $WORKDIR ]; then
+ mkdir $WORKDIR
+else
+ rm -rf $WORKDIR/*/build
+fi
+
+echo "Starting Nightly tests, time: "`date`
+
+# Retrieve the default parameters.
+wget "http://www.freediameter.net/hg/freeDiameter/raw-file/tip/CTestConfig.cmake" -O $WORKDIR/1_default.cmake
+if [ ! -e $WORKDIR/1_default.cmake ]; then
+ echo "Error retrieving CTestConfig.cmake file";
+ exit 1;
+fi
+
+# Retrieve the list of build names
+wget "http://www.freediameter.net/hg/freeDiameter/raw-file/tip/contrib/nightly_tests/tests.list" -O $WORKDIR/2_tests.list
+if [ ! -e $WORKDIR/2_tests.list ]; then
+ echo "Error retrieving tests.list file";
+ exit 1;
+fi
+
+# Now, for each test in the list
+for t in $(cat $WORKDIR/2_tests.list | grep -v -e "^#"); do
+ # Create the work environment if needed
+ if [ ! -d $WORKDIR/$t ]; then
+ mkdir $WORKDIR/$t
+ fi
+
+ #### Create the script
+
+ # Project name, nightly time
+ cp $WORKDIR/1_default.cmake $WORKDIR/$t/CTestScript.cmake
+
+ # Create path names, default build configuration, ...
+ cat >> $WORKDIR/$t/CTestScript.cmake << EOF
+ ##########################
+ SET(CTEST_SOURCE_DIRECTORY "$WORKDIR/$t/source")
+ SET(CTEST_BINARY_DIRECTORY "$WORKDIR/$t/build")
+
+ set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
+
+ set(CTEST_BUILD_CONFIGURATION "Profiling")
+ set(WITH_MEMCHECK FALSE)
+ set(WITH_COVERAGE FALSE)
+
+ set(CTEST_BUILD_OPTIONS "")
+ set(CTEST_BUILD_NAME "Unnamed")
+
+ ##########################
+EOF
+
+ wget "http://www.freediameter.net/hg/freeDiameter/raw-file/tip/contrib/nightly_tests/$t.conf" -O $WORKDIR/$t/params.conf
+ if [ ! -e $WORKDIR/$t/params.conf ]; then
+ echo "Error retrieving $t.conf file";
+ continue;
+ fi
+
+ # The retrieved parameters will overwrite the defaults
+ cat $WORKDIR/$t/params.conf >> $WORKDIR/$t/CTestScript.cmake
+
+ # Overwrite with all the local data (site name, ...)
+ echo "######## Local site data: " >> $WORKDIR/$t/CTestScript.cmake
+ cat $ROOTDIR/local.cmake >> $WORKDIR/$t/CTestScript.cmake
+
+ # Now, the remaining of the script
+ cat >> $WORKDIR/$t/CTestScript.cmake << EOF
+ #######################################################################
+
+ # ctest_empty_binary_directory(\${CTEST_BINARY_DIRECTORY})
+
+ find_program(CTEST_HG_COMMAND NAMES hg)
+ find_program(CTEST_COVERAGE_COMMAND NAMES gcov)
+ find_program(CTEST_MEMORYCHECK_COMMAND NAMES valgrind)
+
+ # set(CTEST_MEMORYCHECK_SUPPRESSIONS_FILE \${CTEST_SOURCE_DIRECTORY}/tests/valgrind.supp)
+
+ if(NOT EXISTS "\${CTEST_SOURCE_DIRECTORY}")
+ set(CTEST_CHECKOUT_COMMAND "\${CTEST_HG_COMMAND} clone http://www.freediameter.net/hg/freeDiameter \${CTEST_SOURCE_DIRECTORY}")
+ endif()
+
+ set(CTEST_UPDATE_COMMAND "\${CTEST_HG_COMMAND}")
+
+ set(CTEST_CONFIGURE_COMMAND "\${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE:STRING=\${CTEST_BUILD_CONFIGURATION}")
+ set(CTEST_CONFIGURE_COMMAND "\${CTEST_CONFIGURE_COMMAND} -DBUILD_TESTING:BOOL=ON -DOPT_TEST_ARGUMENTS:STRING=-d \${CTEST_BUILD_OPTIONS}")
+ set(CTEST_CONFIGURE_COMMAND "\${CTEST_CONFIGURE_COMMAND} \\"-G\${CTEST_CMAKE_GENERATOR}\\"")
+ set(CTEST_CONFIGURE_COMMAND "\${CTEST_CONFIGURE_COMMAND} \\"\${CTEST_SOURCE_DIRECTORY}\\"")
+
+ ctest_start("Nightly")
+ ctest_update()
+ ctest_configure()
+ ctest_build()
+ ctest_test()
+ if (WITH_COVERAGE AND CTEST_COVERAGE_COMMAND)
+ ctest_coverage()
+ endif (WITH_COVERAGE AND CTEST_COVERAGE_COMMAND)
+ if (WITH_MEMCHECK AND CTEST_MEMORYCHECK_COMMAND)
+ ctest_memcheck()
+ endif (WITH_MEMCHECK AND CTEST_MEMORYCHECK_COMMAND)
+ ctest_submit()
+EOF
+
+ # OK, now run this test, it will submit its results.
+ ctest -S $WORKDIR/$t/CTestScript.cmake -V
+done
+
+echo "Completed Nightly tests, time: "`date`
+
+