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`
+
+