Add a bunch of integration tests of publish and clean -nightly

This bunch of tests gave the ability to refactored a lot the scripts.
diff --git a/hudson-scripts/clean-nightly.sh b/hudson-scripts/clean-nightly.sh
index 5446801..481102a 100755
--- a/hudson-scripts/clean-nightly.sh
+++ b/hudson-scripts/clean-nightly.sh
@@ -10,119 +10,65 @@
 #    Obeo - initial API and implementation
 # ====================================================================
 
-[  -z "${UPDATE_SITE__UNQUALIFIED_VERSION}" ] && {
-    echo "Execution aborted.
+if [ $# -lt 1 ]; then
+     echo "Execution aborted. One or more of the required parameters is not set. 
 
-One or more of the required variables is not set. They are normally
-provided by the Hudson build.
+Usage: $0 unqualifiedVersion [nbBuildToKeep]
 
- - UPDATE_SITE__UNQUALIFIED_VERSION: the unqualified version of the update site to publish.
+- unqualifiedVersion: the unqualified version of the update sites to clean.
+- nbBuildToKeep: the number of build to keep. 0 to remove all streams related to the unqualifiedVersion
 "
-    exit 1
-}
+exit 1
+fi
+
+unqualifiedVersion="${1}"
+nbBuildToKeep="${2:-5}"
 
 source "$(dirname "${0}")/init.sh"
 
-NB_BUILDS_TO_KEEP=${NB_BUILDS_TO_KEEP:-"5"}
+currentPwd=$(pwd)
 
-CURRENT_PWD=$(pwd)
+LSDEBUG "unqualifiedVersion is '${unqualifiedVersion}'"
+minorVersion="$(echo ${unqualifiedVersion} | sed-regex 's/^([0-9]+\.[0-9]+)\.[0-9]+$/\1/')"
+LSDEBUG "Minor stream name is '${minorVersion}.x'"
+majorVersion="$(echo ${unqualifiedVersion} | sed-regex 's/^([0-9]+)\.[0-9]+\.[0-9]+$/\1/')"
+LSDEBUG "Major stream name is '${majorVersion}.x'"
 
-STREAM="$(echo ${UPDATE_SITE__UNQUALIFIED_VERSION} | sed-regex 's/^([0-9]+\.[0-9]+)\.[0-9]+$/\1/').x"
-LSDEBUG "Stream name is '${STREAM}'"
+LSINFO "== Clean up '${unqualifiedVersion}' nightly builds (will keep the ${nbBuildToKeep} most recent) =="
 
-LSINFO "Clean up nightly builds (will keep the ${NB_BUILDS_TO_KEEP} most recent builds of stream ${STREAM}')"
+cd "${UPDATE_NIGHTLY_HOME}"
+foldersWithUnqualifiedVersionPrefix=( "${unqualifiedVersion}"* )
+cd "${currentPwd}"
 
-cd ${UPDATE_NIGHTLY_HOME}
-ALL_FOLDERS_WITH_UNQUALIFIED_VERSION_PREFIX=( ${UPDATE_SITE__UNQUALIFIED_VERSION}* )
-cd ${CURRENT_PWD}
-
-if [ ${#ALL_FOLDERS_WITH_UNQUALIFIED_VERSION_PREFIX[@]} -eq 0 ]; then
-    LSINFO "No build found for stream '${STREAM}' in '${UPDATE_NIGHTLY_HOME}'"
+if [ ${#foldersWithUnqualifiedVersionPrefix[@]} -eq 0 ]; then
+    LSINFO "No build '${unqualifiedVersion}' found in '${UPDATE_NIGHTLY_HOME}, nothing to clean'"
     exit 0
 fi
 
-if [ ${NB_BUILDS_TO_KEEP} -gt 0 ]; then
-    UPDATE_SITE_TO_KEEP=( $(echo ${ALL_FOLDERS_WITH_UNQUALIFIED_VERSION_PREFIX[@]} | tr ' ' '\n' | sort -r | head -n ${NB_BUILDS_TO_KEEP}) )
-    UNION=( ${UPDATE_SITE_TO_KEEP[@]} ${ALL_FOLDERS_WITH_UNQUALIFIED_VERSION_PREFIX[@]} )
-    UPDATE_SITES__TO_CLEAN=( $(echo ${UNION[@]} | tr ' ' '\n' | sort | uniq -u) )
+if [ ${nbBuildToKeep} -gt 0 ]; then
+    updateSiteToKeep=( $(echo ${foldersWithUnqualifiedVersionPrefix[@]} | tr ' ' '\n' | sort -r | head -n ${nbBuildToKeep}) )
+    UNION=( ${updateSiteToKeep[@]} ${foldersWithUnqualifiedVersionPrefix[@]} )
+    updateSitesToClean=( $(echo ${UNION[@]} | tr ' ' '\n' | sort | uniq -u) )
 else
-    UPDATE_SITES__TO_CLEAN=( $(echo ${ALL_FOLDERS_WITH_UNQUALIFIED_VERSION_PREFIX[@]} | tr ' ' '\n' | sort) )
+    updateSitesToClean=( $(echo ${foldersWithUnqualifiedVersionPrefix[@]} | tr ' ' '\n' | sort) )
 fi
 
-if [ ${#UPDATE_SITES__TO_CLEAN[@]} -eq 0 ]; then
-    LSINFO "No build to clean for stream ${STREAM} (there are '${NB_BUILDS_TO_KEEP}' or less builds in this stream in '${UPDATE_NIGHTLY_HOME}'"
+if [ ${#updateSitesToClean[@]} -eq 0 ]; then
+    LSINFO "There are ${#foldersWithUnqualifiedVersionPrefix[@]} '${unqualifiedVersion}' builds, nothing to clean as we are keeping the ${nbBuildToKeep} most recent builds."
 else
-    LATEST_UPDATE_SITE__IN_STREAM=( $(composite-repository -location "${UPDATE_NIGHTLY_HOME}/${STREAM}/latest" -list) )
-    LSDEBUG "Current latest update site in stream '${STREAM}' is '${LATEST_UPDATE_SITE__IN_STREAM[@]}'"
+    for updateSiteToClean in ${updateSitesToClean[@]}; do
+        cleanNightly ${updateSiteToClean} "${UPDATE_NIGHTLY_HOME}/streams/${unqualifiedVersion}.x" "${UPDATE_NIGHTLY_HOME}/streams/${unqualifiedVersion}.x/latest"
+        cleanNightly ${updateSiteToClean} "${UPDATE_NIGHTLY_HOME}/streams/${minorVersion}.x"       "${UPDATE_NIGHTLY_HOME}/streams/${minorVersion}.x/latest"
+        cleanNightly ${updateSiteToClean} "${UPDATE_NIGHTLY_HOME}/streams/${majorVersion}.x"       "${UPDATE_NIGHTLY_HOME}/streams/${majorVersion}.x/latest"
+        cleanNightly ${updateSiteToClean} "${UPDATE_NIGHTLY_HOME}"                                 "${UPDATE_NIGHTLY_HOME}/latest"
 
-    LATEST_UPDATE_SITE__ALL_NIGHTLIES=( $(composite-repository -location "${UPDATE_NIGHTLY_HOME}/latest" -list) )
-    LSDEBUG "Current latest update site is '${LATEST_UPDATE_SITE__ALL_NIGHTLIES[@]}'"
-
-    for UPDATE_SITE__TO_CLEAN in ${UPDATE_SITES__TO_CLEAN[@]}
-    do
-        UPDATE_SITE_URL__TO_CLEAN="${UPDATE_NIGHTLY_URL}/${UPDATE_SITE__TO_CLEAN}"
-        LSINFO "Removing '${UPDATE_SITE__TO_CLEAN}' from '${UPDATE_NIGHTLY_HOME}/${STREAM}'"
-        composite-repository -location "${UPDATE_NIGHTLY_HOME}/${STREAM}" -remove "${UPDATE_SITE_URL__TO_CLEAN}"
-        
-        LSINFO "Removing '${UPDATE_SITE__TO_CLEAN}' from '${UPDATE_NIGHTLY_HOME}'"
-        composite-repository -location "${UPDATE_NIGHTLY_HOME}" -remove "${UPDATE_SITE_URL__TO_CLEAN}"
-
-        if [ ${#LATEST_UPDATE_SITE__IN_STREAM[@]} -gt 0 ]; then
-            if [ ${#LATEST_UPDATE_SITE__IN_STREAM[@]} -gt 1 ]; then
-                LSCRITICAL "There are more than a single update site referenced in the repository ${UPDATE_NIGHTLY_HOME}/${STREAM}/latest"
-                exit 1
-            elif [ "${UPDATE_SITE_URL__TO_CLEAN}" = "${LATEST_UPDATE_SITE__IN_STREAM[0]}" ]; then
-                LSINFO "Removing '${UPDATE_SITE__TO_CLEAN}' from '${UPDATE_NIGHTLY_HOME}/${STREAM}/latest'"
-                composite-repository -location "${UPDATE_NIGHTLY_HOME}/${STREAM}/latest" -remove "${UPDATE_SITE_URL__TO_CLEAN}"
-            fi
-        fi
-
-        if [ ${#LATEST_UPDATE_SITE__ALL_NIGHTLIES[@]} -gt 0 ]; then
-            if [ ${#LATEST_UPDATE_SITE__ALL_NIGHTLIES[@]} -gt 1 ]; then
-                LSCRITICAL "There are more than a single update site referenced in the repository ${UPDATE_NIGHTLY_HOME}/latest"
-                exit 1
-            elif [ "${UPDATE_SITE_URL__TO_CLEAN}" = "${LATEST_UPDATE_SITE__ALL_NIGHTLIES[0]}" ]; then
-                LSINFO "Removing '${UPDATE_SITE__TO_CLEAN}' from '${UPDATE_NIGHTLY_HOME}/latest'"
-                composite-repository -location "${UPDATE_NIGHTLY_HOME}/latest" -remove "${UPDATE_SITE_URL__TO_CLEAN}"
-            fi
-        fi
-
-        LSINFO "Removing folder '${UPDATE_NIGHTLY_HOME}/${UPDATE_SITE__TO_CLEAN}'"
-        rm -rf "${UPDATE_NIGHTLY_HOME}/${UPDATE_SITE__TO_CLEAN}"
+        LSINFO "Removing folder '${UPDATE_NIGHTLY_HOME}/${updateSiteToClean}'"
+        rm -rf "${UPDATE_NIGHTLY_HOME}/${updateSiteToClean}"
     done
 
-    LATEST_UPDATE_SITE__IN_STREAM=( $(composite-repository -location "${UPDATE_NIGHTLY_HOME}/${STREAM}/latest" -list) )
-    if [ ${#LATEST_UPDATE_SITE__IN_STREAM[@]} -eq 0 ]; then
-        cd ${UPDATE_NIGHTLY_HOME}
-        ALL_FILES_IN_STREAM=( $(echo "${UPDATE_SITE__UNQUALIFIED_VERSION}")* )
-        cd ${CURRENT_PWD}
-        if [ ${#ALL_FILES_IN_STREAM[@]} -gt 0 ]; then
-            LASTEST_UPDATE_SITE=$( echo ${ALL_FILES_IN_STREAM[@]} | tr ' ' '\n' | sort | tail -n 1 )
-            LSINFO "Redirecting '${UPDATE_NIGHTLY_HOME}/${STREAM}/latest' to '${UPDATE_NIGHTLY_URL}/${LASTEST_UPDATE_SITE}"
-            createRedirect "${UPDATE_NIGHTLY_HOME}/${STREAM}/latest" "${UPDATE_NIGHTLY_URL}/${LASTEST_UPDATE_SITE}" "${PROJECT_NAME} ${STREAM} latest nightly build"
-        else
-            LSINFO "There is no more builds in '${STREAM}', removing folder '${UPDATE_NIGHTLY_HOME}/${STREAM}'"
-            rm -rf "${UPDATE_NIGHTLY_HOME}/${STREAM}"
-        fi
-    else 
-        LSDEBUG "After clean up, latest update site in stream '${STREAM}' is '${LATEST_UPDATE_SITE__IN_STREAM[@]}'"
-    fi
+    updateLatest "${UPDATE_NIGHTLY_HOME}/streams/${unqualifiedVersion}.x/latest" "${unqualifiedVersion}" "${PROJECT_NAME} ${unqualifiedVersion}.x latest nightly build"
+    updateLatest "${UPDATE_NIGHTLY_HOME}/streams/${minorVersion}.x/latest"       "${minorVersion}"       "${PROJECT_NAME} ${minorVersion}.x latest nightly build"
+    updateLatest "${UPDATE_NIGHTLY_HOME}/streams/${majorVersion}.x/latest"       "${majorVersion}"       "${PROJECT_NAME} ${majorVersion}.x latest nightly build"
+    updateLatest "${UPDATE_NIGHTLY_HOME}/latest"                                 ""                      "${PROJECT_NAME} latest nightly build"
 
-    LATEST_UPDATE_SITE__ALL_NIGHTLIES=( $(composite-repository -location "${UPDATE_NIGHTLY_HOME}/latest" -list) )
-    if [ ${#LATEST_UPDATE_SITE__ALL_NIGHTLIES[@]} -eq 0 ]; then
-        cd ${UPDATE_NIGHTLY_HOME}
-        ALL_FILES=( $(echo * | tr ' ' '\n' | grep -E '[0-9]+\.[0-9]+\.[0-9]+.*' || true) )
-        cd ${CURRENT_PWD}
-        if [ ${#ALL_FILES[@]} -gt 0 ]; then
-            LASTEST_UPDATE_SITE=$( echo ${ALL_FILES[@]} | tr ' ' '\n' | sort | tail -n 1 )
-            LSINFO "Redirecting '${UPDATE_NIGHTLY_HOME}/latest' to '${UPDATE_NIGHTLY_URL}/${LASTEST_UPDATE_SITE}"
-            createRedirect "${UPDATE_NIGHTLY_HOME}/latest" "${UPDATE_NIGHTLY_URL}/${LASTEST_UPDATE_SITE}" "${PROJECT_NAME} latest nightly build"
-        else
-            LSINFO "There is no nightly builds in '${UPDATE_NIGHTLY_HOME}'"
-            LSDEBUG "Removing all files from '${UPDATE_NIGHTLY_HOME}'"
-            rm -rf "${UPDATE_NIGHTLY_HOME}/"*
-        fi
-    else
-        LSDEBUG "After clean up, latest update site is '${LATEST_UPDATE_SITE__ALL_NIGHTLIES[@]}'"
-    fi
 fi
diff --git a/hudson-scripts/init.sh b/hudson-scripts/init.sh
index a2c329f..9062d60 100644
--- a/hudson-scripts/init.sh
+++ b/hudson-scripts/init.sh
@@ -17,22 +17,25 @@
 
 shopt -s nullglob 
 shopt -s extglob
+shopt -s expand_aliases
 
-DIRNAME=$(dirname "${0}")
+SCRIPT_PATH="$(dirname "${0}")"
+INIT_PATH="${INIT_PATH:-${SCRIPT_PATH}/init}"
 
 # load bootstrap scripts (starting with _) in order
-for S in $(ls -1 "${DIRNAME}/init/_"* | sort -t '.' -k1n);
+for S in $( echo "${INIT_PATH}/_"* | tr ' ' '\n' | sort -t '.' -k1n );
 do
-	if [ ! -z ${DEBUG_BOOTSTRAP:-} ]; then
+	if [ ! -z "${DEBUG_BOOTSTRAP:-}" ]; then
 		echo "[DEBUG]    Loading bootstrap '${S}'"
 	fi
 	source ${S}
 done
 
 # load scripts (not starting with _) in order
-for S in $( (ls -1 "${DIRNAME}/init/"*;ls -1 "${DIRNAME}/init/_"*) | sort -t '.' -k1n | uniq -u );
+for S in $( ( echo "${INIT_PATH}/"* ; echo "${INIT_PATH}/_"*) | tr ' ' '\n' | sort -t '.' -k1n | uniq -u );
 do
 	LSDEBUG "Loading '${S}'"
 	source ${S}
 	LSDEBUG "'${S}' has been loaded"
 done
+
diff --git a/hudson-scripts/init/0_constants.sh b/hudson-scripts/init/0_constants.sh
index ff527d6..fec7282 100644
--- a/hudson-scripts/init/0_constants.sh
+++ b/hudson-scripts/init/0_constants.sh
@@ -11,48 +11,48 @@
 # ====================================================================
 
 # Project specific
-export PROJECT_NAME="EMF Compare"
-__DOWNLOAD_PATH="download.eclipse.org/modeling/emf/compare"
-__ECLIPSE_DOCUMENT_ROOT="/home/data/httpd"
+export PROJECT_NAME="${PROJECT_NAME:-EMF Compare}"
+export DOWNLOAD_PATH="${DOWNLOAD_PATH:-download.eclipse.org/modeling/emf/compare}"
+export ECLIPSE_DOCUMENT_ROOT="${ECLIPSE_DOCUMENT_ROOT:-/home/data/httpd}"
 
 # Private constants
-__UPDATE_FOLDER="updates"
-__NIGHTLY_FOLDER="nightly"
-__INTEGRATION_FOLDER="integration"
-__RELEASES_FOLDER="releases"
-__SIMREL_FOLDER="simrel"
-__STAGING_FOLDER="${__SIMREL_FOLDER}/staging"
-__MAINTENANCE_FOLDER="${__SIMREL_FOLDER}/maintenance"
-__MILESTONES_FOLDER="${__SIMREL_FOLDER}/milestones"
+export UPDATE_FOLDER="${UPDATE_FOLDER:-updates}"
+export NIGHTLY_FOLDER="${NIGHTLY_FOLDER:-nightly}"
+export INTEGRATION_FOLDER="${INTEGRATION_FOLDER:-integration}"
+export RELEASES_FOLDER="${RELEASES_FOLDER:-releases}"
+export SIMREL_FOLDER="${SIMREL_FOLDER:-simrel}"
+export STAGING_FOLDER="${STAGING_FOLDER:-${SIMREL_FOLDER}/staging}"
+export MAINTENANCE_FOLDER="${MAINTENANCE_FOLDER:-${SIMREL_FOLDER}/maintenance}"
+export MILESTONES_FOLDER="${MILESTONES_FOLDER:-${SIMREL_FOLDER}/milestones}"
 
-export DOWNLOAD_HOME="${__ECLIPSE_DOCUMENT_ROOT}/${__DOWNLOAD_PATH}"
-export DOWNLOAD_URL="http://${__DOWNLOAD_PATH}"
+export DOWNLOAD_HOME="${DOWNLOAD_HOME:-${ECLIPSE_DOCUMENT_ROOT}/${DOWNLOAD_PATH}}"
+export DOWNLOAD_URL="${DOWNLOAD_URL:-http://${DOWNLOAD_PATH}}"
 
 # Computed from above
-export UPDATE_PATH="${__DOWNLOAD_PATH}/${__UPDATE_FOLDER}"
-export UPDATE_HOME="${DOWNLOAD_HOME}/${__UPDATE_FOLDER}"
-export UPDATE_URL="${DOWNLOAD_URL}/${__UPDATE_FOLDER}"
+export UPDATE_PATH="${UPDATE_PATH:-${DOWNLOAD_PATH}/${UPDATE_FOLDER}}"
+export UPDATE_HOME="${UPDATE_HOME:-${DOWNLOAD_HOME}/${UPDATE_FOLDER}}"
+export UPDATE_URL="${UPDATE_URL:-${DOWNLOAD_URL}/${UPDATE_FOLDER}}"
 
-export UPDATE_NIGHTLY_PATH="${UPDATE_PATH}/${__NIGHTLY_FOLDER}"
-export UPDATE_NIGHTLY_HOME="${UPDATE_HOME}/${__NIGHTLY_FOLDER}"
-export UPDATE_NIGHTLY_URL="${UPDATE_URL}/${__NIGHTLY_FOLDER}"
+export UPDATE_NIGHTLY_PATH="${UPDATE_NIGHTLY_PATH:-${UPDATE_PATH}/${NIGHTLY_FOLDER}}"
+export UPDATE_NIGHTLY_HOME="${UPDATE_NIGHTLY_HOME:-${UPDATE_HOME}/${NIGHTLY_FOLDER}}"
+export UPDATE_NIGHTLY_URL="${UPDATE_NIGHTLY_URL:-${UPDATE_URL}/${NIGHTLY_FOLDER}}"
 
-export UPDATE_INTEGRATION_PATH="${UPDATE_PATH}/${__INTEGRATION_FOLDER}"
-export UPDATE_INTEGRATION_HOME="${UPDATE_HOME}/${__INTEGRATION_FOLDER}"
-export UPDATE_INTEGRATION_URL="${UPDATE_URL}/${__INTEGRATION_FOLDER}"
+export UPDATE_INTEGRATION_PATH="${UPDATE_INTEGRATION_PATH:-${UPDATE_PATH}/${INTEGRATION_FOLDER}}"
+export UPDATE_INTEGRATION_HOME="${UPDATE_INTEGRATION_HOME:-${UPDATE_HOME}/${INTEGRATION_FOLDER}}"
+export UPDATE_INTEGRATION_URL="${UPDATE_INTEGRATION_URL:-${UPDATE_URL}/${INTEGRATION_FOLDER}}"
 
-export UPDATE_RELEASES_PATH="${UPDATE_PATH}/${__RELEASES_FOLDER}"
-export UPDATE_RELEASES_HOME="${UPDATE_HOME}/${__RELEASES_FOLDER}"
-export UPDATE_RELEASES_URL="${UPDATE_URL}/${__RELEASES_FOLDER}"
+export UPDATE_RELEASES_PATH="${UPDATE_RELEASES_PATH:-${UPDATE_PATH}/${RELEASES_FOLDER}}"
+export UPDATE_RELEASES_HOME="${UPDATE_RELEASES_HOME:-${UPDATE_HOME}/${RELEASES_FOLDER}}"
+export UPDATE_RELEASES_URL="${UPDATE_RELEASES_URL:-${UPDATE_URL}/${RELEASES_FOLDER}}"
 
-export UPDATE_STAGING_PATH="${UPDATE_PATH}/${__STAGING_FOLDER}"
-export UPDATE_STAGING_HOME="${UPDATE_HOME}/${__STAGING_FOLDER}"
-export UPDATE_STAGING_URL="${UPDATE_URL}/${__STAGING_FOLDER}"
+export UPDATE_STAGING_PATH="${UPDATE_STAGING_PATH:-${UPDATE_PATH}/${STAGING_FOLDER}}"
+export UPDATE_STAGING_HOME="${UPDATE_STAGING_HOME:-${UPDATE_HOME}/${STAGING_FOLDER}}"
+export UPDATE_STAGING_URL="${UPDATE_STAGING_URL:-${UPDATE_URL}/${STAGING_FOLDER}}"
 
-export UPDATE_MAINTENANCE_PATH="${UPDATE_PATH}/${__MAINTENANCE_FOLDER}"
-export UPDATE_MAINTENANCE_HOME="${UPDATE_HOME}/${__MAINTENANCE_FOLDER}"
-export UPDATE_MAINTENANCE_URL="${UPDATE_URL}/${__MAINTENANCE_FOLDER}"
+export UPDATE_MAINTENANCE_PATH="${UPDATE_MAINTENANCE_PATH:-${UPDATE_PATH}/${MAINTENANCE_FOLDER}}"
+export UPDATE_MAINTENANCE_HOME="${UPDATE_MAINTENANCE_HOME:-${UPDATE_HOME}/${MAINTENANCE_FOLDER}}"
+export UPDATE_MAINTENANCE_URL="${UPDATE_MAINTENANCE_URL:-${UPDATE_URL}/${MAINTENANCE_FOLDER}}"
 
-export UPDATE_MILESTONES_PATH="${UPDATE_PATH}/${__MILESTONES_FOLDER}"
-export UPDATE_MILESTONES_HOME="${UPDATE_HOME}/${__MILESTONES_FOLDER}"
-export UPDATE_MILESTONES_URL="${UPDATE_URL}/${__MILESTONES_FOLDER}"
+export UPDATE_MILESTONES_PATH="${UPDATE_MILESTONES_PATH:-${UPDATE_PATH}/${MILESTONES_FOLDER}}"
+export UPDATE_MILESTONES_HOME="${UPDATE_MILESTONES_HOME:-${UPDATE_HOME}/${MILESTONES_FOLDER}}"
+export UPDATE_MILESTONES_URL="${UPDATE_MILESTONES_URL:-${UPDATE_URL}/${MILESTONES_FOLDER}}"
diff --git a/hudson-scripts/init/1_p2.sh b/hudson-scripts/init/1_p2.sh
index 5240dd9..e0b8a9d 100644
--- a/hudson-scripts/init/1_p2.sh
+++ b/hudson-scripts/init/1_p2.sh
@@ -37,34 +37,37 @@
 P2_ADMIN_ARCHIVE="p2-admin-${P2_ADMIN_VERSION}-${PLATFORM_SPECIFIER}.${FILE_EXT}"
 P2_ADMIN_URL="https://github.com/mbarbero/p2-admin/releases/download/v${P2_ADMIN_VERSION}/${P2_ADMIN_ARCHIVE}"
 
-if [ -d 'p2-admin' ]; then
-	LSINFO "Removing previous p2-admin folder"
-	rm -rf "p2-admin"
+# prevents re-downloading the p2-admin archive each time.
+if [ ! -f "${WORKING_DIRECTORY}/${P2_ADMIN_ARCHIVE}" ]; then
+	LSDEBUG "Unable to find p2-admin archive '${WORKING_DIRECTORY}/${P2_ADMIN_ARCHIVE}'"
+	LSINFO "Downloading p2-admin '${P2_ADMIN_URL}'"
+	wget -q --no-check-certificate ${P2_ADMIN_URL} -O - > "${WORKING_DIRECTORY}/${P2_ADMIN_ARCHIVE}"
 fi
 
-if [ ! -f "${P2_ADMIN_ARCHIVE}" ]; then
-	LSDEBUG "Unable to find p2-admin archive '${P2_ADMIN_ARCHIVE}'"
-	LSINFO "Downloading p2-admin '${P2_ADMIN_URL}'"
-	wget -q --no-check-certificate ${P2_ADMIN_URL} -O - > "${P2_ADMIN_ARCHIVE}"
+# this way, we are sure to have a clean p2-admin install, without any p2-cache.
+# the p2-admin archive will be unzipped afterwards.
+if [ -d '${WORKING_DIRECTORY}/p2-admin' ]; then
+	LSDEBUG "Removing previous 'p2-admin' folder"
+	rm -rf "${WORKING_DIRECTORY}/p2-admin"
 fi
 
 LSDEBUG "Unziping '${P2_ADMIN_ARCHIVE}'"
-tar zxf "${P2_ADMIN_ARCHIVE}"
+tar zxf "${WORKING_DIRECTORY}/${P2_ADMIN_ARCHIVE}" -C "${WORKING_DIRECTORY}"
 
 LSDEBUG "Defining p2 aliases"
-shopt -s expand_aliases
-
-LSDEBUG "composite-repository='p2-admin/p2-admin -vm ${JAVA_HOME}/bin/java -application org.eclipselabs.equinox.p2.composite.repository'"
-alias composite-repository="p2-admin/p2-admin -vm ${JAVA_HOME}/bin/java -application org.eclipselabs.equinox.p2.composite.repository"
+LSDEBUG "composite-repository='${WORKING_DIRECTORY}/p2-admin/p2-admin -vm ${JAVA_HOME}/bin/java -application org.eclipselabs.equinox.p2.composite.repository'"
+alias composite-repository="${WORKING_DIRECTORY}/p2-admin/p2-admin -vm ${JAVA_HOME}/bin/java -application org.eclipselabs.equinox.p2.composite.repository"
 
 # Create a p2 index file for composite repositories
 createP2Index() {
-	LSDEBUG "Creating p2.index file in ${1}"
-	cat > "${1}/p2.index" <<EOF
+	if [ ! -f "${1}/p2.index" ]; then
+		LSDEBUG "Creating p2.index file in ${1}"
+		cat > "${1}/p2.index" <<EOF
 version = 1
 metadata.repository.factory.order = compositeContent.xml,\!
 artifact.repository.factory.order = compositeArtifacts.xml,\!
 EOF
+	fi
 }
 
 # Remove any previous file from the ${1} path and create a composite repository with a single
diff --git a/hudson-scripts/init/2_fun_updateLatestRepository.sh b/hudson-scripts/init/2_fun_updateLatestRepository.sh
deleted file mode 100644
index aa31ba1..0000000
--- a/hudson-scripts/init/2_fun_updateLatestRepository.sh
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/sh
-# ====================================================================
-# Copyright (c) 2014 Obeo
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#    Obeo - initial API and implementation
-# ====================================================================
-
-updateLatest() {
-	local latestPath=$1
-	local prefix=$2
-	local relpath=$3
-	local latestRepoName=$4
-
-	local currentPwd=$(pwd)
-	cd ${UPDATE_NIGHTLY_HOME}
-	local allFilesWithPrefix=( $(echo "${prefix}"* | tr ' ' '\n' | grep -E '[0-9]+\.[0-9]+\.[0-9]+.*' || true) )    
-	cd ${currentPwd}
-
-	if [ ${#allFilesWithPrefix[@]} -gt 0 ]; then
-		local latestUpdatePath=$( echo ${allFilesWithPrefix[@]} | tr ' ' '\n' | sort | tail -n 1 )
-		if [ ! -z "${latestUpdatePath}" ]; then
-			local latestUpdateSite_onDisk="file:${UPDATE_NIGHTLY_HOME}/${latestUpdatePath}"
-			LSDEBUG "Latest update site on disk is '${latestUpdateSite_onDisk}'"
-			if [ -d "${latestPath}" ]; then
-				local latestUpdateSite_inRepo=( $(composite-repository -location "${latestPath}" -list) )
-				if [ ${#latestUpdateSite_inRepo[@]} -gt 0 ]; then
-					LSDEBUG "Latest update site in '${latestPath}' is '${latestUpdateSite_inRepo[0]}'"
-					if [ "${latestUpdateSite_inRepo[0]}" != "${latestUpdateSite_onDisk}" ]; then
-						LSINFO "Creating redirection from '${latestPath}' to '${latestUpdatePath}'" 
-						createRedirect "${latestPath}" "${relpath}/${latestUpdatePath}" "${latestRepoName}"
-					else
-						LSINFO "'${latestPath}' is already referencing the latest update site. Do nothing"
-					fi
-				else
-					LSDEBUG "Latest update site in '${latestPath}' is empty"
-					LSINFO "Creating redirection from '${latestPath}' to '${latestUpdatePath}'" 
-					createRedirect "${latestPath}" "${relpath}/${latestUpdatePath}" "${latestRepoName}"
-				fi
-			else # folder nightly/latest does not exist
-				LSDEBUG "Folder '${latestPath}' does not exist, it will be created"
-				LSINFO "Creating redirection from '${latestPath}' to '${latestUpdatePath}'" 
-				createRedirect "${latestPath}" "${relpath}/${latestUpdatePath}" "${latestRepoName}"
-			fi
-		else 
-			LSERROR "Some files seems to be update site starting with '${prefix}' but we could not tail the list"
-		fi
-	else
-		LSDEBUG "There is no folder that seem to be an update site in '${UPDATE_NIGHTLY_HOME}'. No one have a name that start with '${prefix}' and that match the regex '[0-9]+\.[0-9]+\.[0-9]+.*'"
-	fi
-}
\ No newline at end of file
diff --git a/hudson-scripts/init/2_functions.sh b/hudson-scripts/init/2_functions.sh
new file mode 100644
index 0000000..8a2d933
--- /dev/null
+++ b/hudson-scripts/init/2_functions.sh
@@ -0,0 +1,134 @@
+#!/bin/sh
+# ====================================================================
+# Copyright (c) 2014 Obeo
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Obeo - initial API and implementation
+# ====================================================================
+
+# retrieved from http://stackoverflow.com/a/12498485
+relpath() {
+    # both $1 and $2 are absolute paths beginning with /
+    # returns relative path to $2/$targetPath from $1/$sourcePath
+    local sourcePath=$1
+    local targetPath=$2
+
+    local common_part=$sourcePath # for now
+    local result="" # for now
+ 
+    while [[ "${targetPath#$common_part}" == "${targetPath}" ]]; do
+        # no match, means that candidate common part is not correct
+        # go up one level (reduce common part)
+
+        common_part="$(dirname $common_part)"
+        # and record that we went back, with correct / handling
+        if [[ -z $result ]]; then
+            result=".."
+        else
+            result="../$result"
+        fi
+    done
+
+    if [[ $common_part == "/" ]]; then
+        # special case for root (no common path)
+        result="$result/"
+    fi
+
+    # since we now have identified the common part,
+    # compute the non-common part
+    local forward_part="${targetPath#$common_part}"
+
+    # and now stick all parts together
+    if [[ -n $result ]] && [[ -n $forward_part ]]; then
+        result="$result$forward_part"
+    elif [[ -n $forward_part ]]; then
+        # extra slash removal
+        result="${forward_part:1}"
+    fi
+
+    echo $result
+}
+
+updateLatest() {
+    local latestPath=$1
+    local prefix=$2
+    local latestRepoName=$3
+
+    local currentPwd=$(pwd)
+    cd ${UPDATE_NIGHTLY_HOME}
+    local allFilesWithPrefix=( $(echo "${prefix}"* | tr ' ' '\n' | grep -E '[0-9]+\.[0-9]+\.[0-9]+.*' || true) )    
+    cd ${currentPwd}
+
+    if [ ${#allFilesWithPrefix[@]} -gt 0 ]; then
+        local latestUpdatePath=$( echo ${allFilesWithPrefix[@]} | tr ' ' '\n' | sort | tail -n 1 )
+        if [ ! -z "${latestUpdatePath}" ]; then
+            local relpath=$( relpath ${latestPath} ${UPDATE_NIGHTLY_HOME}/${latestUpdatePath} )
+            local latestUpdateSite_onDisk="file:${UPDATE_NIGHTLY_HOME}/${latestUpdatePath}"
+            LSDEBUG "Latest update site on disk is '${latestUpdateSite_onDisk}'"
+            if [ -d "${latestPath}" ]; then
+                local latestUpdateSite_inRepo=( $(composite-repository -location "${latestPath}" -list) )
+                if [ ${#latestUpdateSite_inRepo[@]} -gt 0 ]; then
+                    LSDEBUG "Latest update site in '${latestPath}' is '${latestUpdateSite_inRepo[0]}'"
+                    if [ "${latestUpdateSite_inRepo[0]}" != "${latestUpdateSite_onDisk}" ]; then
+                        LSINFO "Creating redirection from '${latestPath}' to '${latestUpdatePath}'" 
+                        createRedirect "${latestPath}" "${relpath}" "${latestRepoName}"
+                    else
+                        LSINFO "'${latestPath}' is already referencing the latest update site. Do nothing"
+                    fi
+                else
+                    LSDEBUG "Latest update site in '${latestPath}' is empty"
+                    LSINFO "Creating redirection from '${latestPath}' to '${latestUpdatePath}'" 
+                    createRedirect "${latestPath}" "${relpath}" "${latestRepoName}"
+                fi
+            else # folder nightly/latest does not exist
+                LSDEBUG "Folder '${latestPath}' does not exist, it will be created"
+                LSINFO "Creating redirection from '${latestPath}' to '${latestUpdatePath}'" 
+                createRedirect "${latestPath}" "${relpath}" "${latestRepoName}"
+            fi
+        else 
+            LSERROR "Some files seems to be update site starting with '${prefix}' but we could not tail the list"
+        fi
+    else
+        LSDEBUG "There is no folder that seem to be an update site in '${UPDATE_NIGHTLY_HOME}'. No one have a name that start with '${prefix}' and that match the regex '[0-9]+\.[0-9]+\.[0-9]+.*'"
+    fi
+}
+
+cleanNightly() {
+    local updateSiteToClean=$1
+    local streamPath=$2
+    local latestInStreamPath=$3
+
+    local updateSiteURLToClean="${UPDATE_NIGHTLY_URL}/${updateSiteToClean}"
+    local relpath=$( relpath ${streamPath} ${UPDATE_NIGHTLY_HOME}/${updateSiteToClean} )
+
+    LSINFO "Removing '${relpath}' from '${streamPath}'"
+    composite-repository -location "${streamPath}" -remove "${relpath}"
+    
+    ##check the number of children in streamPath, if 0 remove folder (no need to check latest)
+    local streamPathChild=( $(composite-repository -location "${streamPath}" -list) )
+    if [ ${#streamPathChild[@]} -eq 0 ]; then
+        LSINFO "Removing folder '${streamPath}' as it has no children anymore"
+        if [ "${streamPath}" = "${UPDATE_NIGHTLY_HOME}" ]; then
+            rm -rf "${streamPath}/"*
+        else
+            rm -rf "${streamPath}"
+        fi
+    else
+        local latestUpdateSiteInStream=( $(composite-repository -location "${latestInStreamPath}" -list) )
+        LSDEBUG "Current latest update site in stream '${streamPath}' is '${latestUpdateSiteInStream[@]}'"
+        if [ ${#latestUpdateSiteInStream[@]} -gt 0 ]; then
+            if [ ${#latestUpdateSiteInStream[@]} -gt 1 ]; then
+                LSCRITICAL "There are more than a single update site referenced in the repository ${latestInStreamPath}"
+                exit 1
+            elif [ "${updateSiteURLToClean}" = "${latestUpdateSiteInStream[0]}" ]; then
+                relpath=$( relpath ${latestInStreamPath} ${UPDATE_NIGHTLY_HOME}/${updateSiteToClean} )
+                LSINFO "Removing '${relpath}' from '${latestInStreamPath}'"
+                composite-repository -location "${latestInStreamPath}" -remove "${relpath}"
+            fi
+        fi
+    fi
+}
diff --git a/hudson-scripts/init/_0_log.sh b/hudson-scripts/init/_0_log.sh
index 5f447ae..0fedb07 100644
--- a/hudson-scripts/init/_0_log.sh
+++ b/hudson-scripts/init/_0_log.sh
@@ -101,7 +101,7 @@
   for ((i=FRAMES-2; i>0; i--)); do
     echo '  File' \"${BASH_SOURCE[i+1]}\", line ${BASH_LINENO[i]}, in ${FUNCNAME[i+1]}
     # Grab the source code of the line
-    sed -n "${BASH_LINENO[i]}s/^[\t[:space:]]*/    /gp" "${BASH_SOURCE[i+1]}"
+    sed -n "${BASH_LINENO[i]} s/^[:space:]*/    /p" "${BASH_SOURCE[i+1]}"
     # TODO extract arugments from "${BASH_ARGC[@]}" and "${BASH_ARGV[@]}"
     # It requires `shopt -s extdebug'
   done
diff --git a/hudson-scripts/init/_1_trap.sh b/hudson-scripts/init/_1_trap.sh
index abe7e1d..981fdca 100644
--- a/hudson-scripts/init/_1_trap.sh
+++ b/hudson-scripts/init/_1_trap.sh
@@ -16,7 +16,7 @@
 	local RETURN=$?
 
 	LSDEBUG "Program will exit, saving the environment variables to a file for later debugging"
-	env | sort > env.txt
+	env | sort > "${WORKING_DIRECTORY}/env.txt"
 
 	if [ ${RETURN} -ne 0 -a ${RETURN} -lt 129 -o ${RETURN} -gt 165 ]; then
 		cd "${_ON_LOAD_PWD}"
@@ -33,5 +33,5 @@
 	exit ${RETURN}
 }
 
-trap __onInterruption INT TERM
+trap __onInterruption INT TERM #ERR #DEBUG #RETURN
 trap __onExit EXIT
diff --git a/hudson-scripts/init/_2_workdir.sh b/hudson-scripts/init/_2_workdir.sh
new file mode 100644
index 0000000..6eecfb5
--- /dev/null
+++ b/hudson-scripts/init/_2_workdir.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+# ====================================================================
+# Copyright (c) 2014 Obeo
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Obeo - initial API and implementation
+# ====================================================================
+
+export WORKING_DIRECTORY="${WORKING_DIRECTORY:-$(pwd)/target}"
+
+if [ ! -d "${WORKING_DIRECTORY}" ]; then
+	LSDEBUG "Creating '${WORKING_DIRECTORY}'"
+	mkdir -p "${WORKING_DIRECTORY}"
+fi
\ No newline at end of file
diff --git a/hudson-scripts/publish-nightly.sh b/hudson-scripts/publish-nightly.sh
index 5921f18..c57af79 100755
--- a/hudson-scripts/publish-nightly.sh
+++ b/hudson-scripts/publish-nightly.sh
@@ -10,77 +10,81 @@
 #    Obeo - initial API and implementation
 # ====================================================================
 
-[ -z "${UPDATE_SITE__ARTIFACT_URL}" -o -z "${UPDATE_SITE__ARTIFACT_NAME}" -o -z "${UPDATE_SITE__UNQUALIFIED_VERSION}" -o -z "${UPDATE_SITE__QUALIFIED_VERSION}" ] && {
-     echo "Execution aborted.
+if [ $# -ne 2 ]; then
+     echo "Execution aborted. One or more of the required parameters is not set. 
 
-One or more of the required variables is not set. They are normally
-provided by the Hudson build.
+Usage: $0 artifactURL unqualifiedVersion qualifiedVersion
 
-- UPDATE_SITE__ARTIFACT_URL: the URL where the zipped update site to publish can be donwload.
-- UPDATE_SITE__ARTIFACT_NAME: the filename of the zipped update site.
-- UPDATE_SITE__UNQUALIFIED_VERSION: the unqualified version of the update site to publish.
-- UPDATE_SITE__QUALIFIED_VERSION: the qualified version of the update site to publish.
+- artifactURL: the URL where the zipped update site to publish can be donwload.
+- qualifiedVersion: the qualified version of the update site to publish.
 "
-    exit 1
-}
+fi
+
+artifactURL="${1}"
+qualifiedVersion="${2}"
 
 source "$(dirname "${0}")/init.sh"
 
-LSINFO "== Publishing nightly build '${PROJECT_NAME} ${UPDATE_SITE__QUALIFIED_VERSION}' == "
+LSINFO "== Publishing nightly build '${PROJECT_NAME} ${qualifiedVersion}' == "
+
+unqualifiedVersion="$(echo ${qualifiedVersion} | sed-regex 's/^([0-9]+\.[0-9]+\.[0-9]+)\..+$/\1/')"
+LSDEBUG "unqualifiedVersion is '${unqualifiedVersion}'"
+minorVersion="$(echo ${qualifiedVersion} | sed-regex 's/^([0-9]+\.[0-9]+)\.[0-9]+\..+$/\1/')"
+LSDEBUG "Minor stream name is '${minorVersion}.x'"
+majorVersion="$(echo ${qualifiedVersion} | sed-regex 's/^([0-9]+)\.[0-9]+\.[0-9]+\..+$/\1/')"
+LSDEBUG "Major stream name is '${majorVersion}.x'"
 
 # the update site
 
-for zip in *".zip"; do
-	LSDEBUG "Removing previous zipped update site '${zip}'"
-	rm -f ${zip}
-done 
+LSINFO "Downloading '${artifactURL}'"
+artifactName="update-site.zip"
+if [ -f "${WORKING_DIRECTORY}/${artifactName}" ]; then
+	rm -f "${WORKING_DIRECTORY}/${artifactName}"
+fi
+curl -s -k "${artifactURL}" > "${WORKING_DIRECTORY}/${artifactName}"
 
-for folder in "${UPDATE_SITE__UNQUALIFIED_VERSION}"*; do
-	LSDEBUG "Removing previous update site folder '${folder}'"
-	rm -rf ${folder}
-done
+LSINFO "Unziping '${artifactName}'"
+if [ -d "${WORKING_DIRECTORY}/update-site" ]; then
+	rm -rf "${WORKING_DIRECTORY}/update-site"
+fi
+unzip -qq "${WORKING_DIRECTORY}/${artifactName}" -d "${WORKING_DIRECTORY}/update-site"
 
-LSINFO "Downloading '${UPDATE_SITE__ARTIFACT_URL}'"
-wget -q --no-check-certificate ${UPDATE_SITE__ARTIFACT_URL} -O - > ${UPDATE_SITE__ARTIFACT_NAME}
-
-STREAM="$(echo ${UPDATE_SITE__UNQUALIFIED_VERSION} | sed-regex 's/^([0-9]+\.[0-9]+)\.[0-9]+$/\1/').x"
-LSDEBUG "Stream name is '${STREAM}'"
-
-LSINFO "Unziping '${UPDATE_SITE__ARTIFACT_NAME}'"
-unzip -qq ${UPDATE_SITE__ARTIFACT_NAME} -d ${UPDATE_SITE__QUALIFIED_VERSION}
-
-if [ ! -d "${UPDATE_NIGHTLY_HOME}" ]; then
+if [ ! -d "${UPDATE_NIGHTLY_HOME}/${qualifiedVersion}" ]; then
 	LSINFO "Creating folder '${UPDATE_NIGHTLY_HOME}'"
-	mkdir -p ${UPDATE_NIGHTLY_HOME}
+	mkdir -p "${UPDATE_NIGHTLY_HOME}/${qualifiedVersion}"
 else
-	LSDEBUG "Folder '${UPDATE_NIGHTLY_HOME}' already exists, do nothing"
+	LSDEBUG "Folder '${WORKING_DIRECTORY}/${UPDATE_NIGHTLY_HOME}' already exists, do nothing"
 fi
 LSINFO "Copying update site to '${UPDATE_NIGHTLY_HOME}'"
-cp -rf ${UPDATE_SITE__QUALIFIED_VERSION} ${UPDATE_NIGHTLY_HOME}
+cp -rf "${WORKING_DIRECTORY}/update-site/"* "${UPDATE_NIGHTLY_HOME}/${qualifiedVersion}"
 
-## stream update
+## streams update
 
-LSINFO "Adding '../${UPDATE_SITE__QUALIFIED_VERSION}' to '${UPDATE_NIGHTLY_HOME}/${STREAM}'"
-composite-repository \
-	-location "${UPDATE_NIGHTLY_HOME}/${STREAM}" \
-	-add "../${UPDATE_SITE__QUALIFIED_VERSION}" \
-	-repositoryName "${PROJECT_NAME} ${STREAM} nightly builds" \
-	-compressed
-createP2Index "${UPDATE_NIGHTLY_HOME}/${STREAM}"
+updateStream() {
+	local pathToVersion="${1}"
+	local stream="${2}"
 
-updateLatest "${UPDATE_NIGHTLY_HOME}/${STREAM}/latest" "${UPDATE_SITE__UNQUALIFIED_VERSION}" "../.." "${PROJECT_NAME} ${STREAM} latest nightly build"
+	local streamPath="${stream:+streams/${stream}.x}"
+	local repoPrefix="${PROJECT_NAME}${stream:+ ${stream}.x}"
 
-LSINFO "Adding '${UPDATE_SITE__QUALIFIED_VERSION}' to '${UPDATE_NIGHTLY_HOME}'"
-composite-repository \
-	-location "${UPDATE_NIGHTLY_HOME}" \
-	-add "${UPDATE_SITE__QUALIFIED_VERSION}" \
-	-repositoryName "${PROJECT_NAME} nightly builds" \
-	-compressed
-createP2Index "${UPDATE_NIGHTLY_HOME}"
+	LSINFO "Adding '${pathToVersion}' to '${UPDATE_NIGHTLY_HOME}/${streamPath}'"
 
-updateLatest "${UPDATE_NIGHTLY_HOME}/latest" "" ".." "${PROJECT_NAME} latest nightly build"
+	composite-repository \
+		-location "${UPDATE_NIGHTLY_HOME}/${streamPath}" \
+		-add "${pathToVersion}" \
+		-repositoryName "${repoPrefix} nightly builds" \
+		-compressed
+		createP2Index "${UPDATE_NIGHTLY_HOME}/${streamPath}"
 
-LSINFO "== '${PROJECT_NAME} ${UPDATE_SITE__QUALIFIED_VERSION}' has been published @ '${UPDATE_NIGHTLY_URL}/${UPDATE_SITE__QUALIFIED_VERSION}' == "
+	updateLatest "${UPDATE_NIGHTLY_HOME}/${streamPath}${streamPath:+/}latest" "${stream}" "${repoPrefix} latest nightly build"
+}
+
+updateStream "../../${qualifiedVersion}" "${unqualifiedVersion}"
+updateStream "../../${qualifiedVersion}" "${minorVersion}"
+updateStream "../../${qualifiedVersion}" "${majorVersion}"
+updateStream "${qualifiedVersion}"       ""
+
+LSINFO "== '${PROJECT_NAME} ${qualifiedVersion}' has been published @ '${UPDATE_NIGHTLY_URL}/${qualifiedVersion}' == "
 
 # the javadoc
 
diff --git a/hudson-scripts/tests/data/dummy-site.zip b/hudson-scripts/tests/data/dummy-site.zip
new file mode 100644
index 0000000..39c0a9a
--- /dev/null
+++ b/hudson-scripts/tests/data/dummy-site.zip
Binary files differ
diff --git a/hudson-scripts/tests/data/sites-to-clean.tar.gz b/hudson-scripts/tests/data/sites-to-clean.tar.gz
new file mode 100644
index 0000000..918902d
--- /dev/null
+++ b/hudson-scripts/tests/data/sites-to-clean.tar.gz
Binary files differ
diff --git a/hudson-scripts/tests/test-clean-nightly.sh b/hudson-scripts/tests/test-clean-nightly.sh
new file mode 100755
index 0000000..225346e
--- /dev/null
+++ b/hudson-scripts/tests/test-clean-nightly.sh
@@ -0,0 +1,790 @@
+#!/bin/sh
+# ====================================================================
+# Copyright (c) 2014 Obeo
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Obeo - initial API and implementation
+# ====================================================================
+
+# Test specific constants
+export WORKING_DIRECTORY="$(pwd)/target"
+
+export PROJECT_NAME="Test Project"
+export DOWNLOAD_PATH="cleaner"
+export ECLIPSE_DOCUMENT_ROOT="${WORKING_DIRECTORY}/tests/documentRoot"
+export DOWNLOAD_URL="file:${ECLIPSE_DOCUMENT_ROOT}/${DOWNLOAD_PATH}"
+
+export SCRIPT_PATH="$(dirname "${0}")"
+export INIT_PATH="${SCRIPT_PATH}/../init"
+
+source "${SCRIPT_PATH}/../init.sh"
+source "${SCRIPT_PATH}/test-utils.sh"
+
+reports="${WORKING_DIRECTORY}/tests/results-clean-nightly.txt"
+beforeTest "${reports}"
+
+sitesToClean="$(pwd)/${SCRIPT_PATH}/data/sites-to-clean.tar.gz"
+
+# #zippedUpdateSiteURL="file:$(pwd)/${SCRIPT_PATH}/data/dummy-site.zip"
+# for M in "1" "2" "3"; do 
+#     for m in "0" "1" "2"; do 
+#         for u in "0" "1" "2"; do 
+#             for q in "A" "B" "C"; do 
+#                 printf '"file:${UPDATE_NIGHTLY_HOME}/'"$M.$m.$u.$q"'" '
+# #               ${SCRIPT_PATH}/../publish-nightly.sh "${zippedUpdateSiteURL}" "$M.$m.$u.$q"
+#             done 
+#             printf '\\\n'
+#         done 
+#     done 
+# done
+# exit 0
+
+test01() {
+    LSTEST "Test clean-nightly 01"
+    rm -rf "${UPDATE_NIGHTLY_HOME}/"*
+    tar zxf "${sitesToClean}" -C "${UPDATE_NIGHTLY_HOME}"
+    ${SCRIPT_PATH}/../clean-nightly.sh "1.0.0" 3
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "clean-nightly" "test01 all" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "clean-nightly" "test01 latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x" "clean-nightly" "test01 1.0.0.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x/latest" "clean-nightly" "test01 1.0.0.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x" "clean-nightly" "test01 1.0.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x/latest" "clean-nightly" "test01 1.0.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "clean-nightly" "test01 1.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "clean-nightly" "test01 1.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+}
+
+test02() {
+    LSTEST "Test clean-nightly 02"
+    rm -rf "${UPDATE_NIGHTLY_HOME}/"*
+    tar zxf "${sitesToClean}" -C "${UPDATE_NIGHTLY_HOME}"
+    ${SCRIPT_PATH}/../clean-nightly.sh "1.0.0" 2
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "clean-nightly" "test02 all" "${reports}" \
+                                              "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "clean-nightly" "test02 latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x" "clean-nightly" "test02 1.0.0.x" "${reports}" \
+                                              "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x/latest" "clean-nightly" "test02 1.0.0.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x" "clean-nightly" "test02 1.0.x" "${reports}" \
+                                              "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x/latest" "clean-nightly" "test02 1.0.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "clean-nightly" "test02 1.x" "${reports}" \
+                                              "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "clean-nightly" "test02 1.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+}
+
+test03() {
+    LSTEST "Test clean-nightly 03"
+    rm -rf "${UPDATE_NIGHTLY_HOME}/"*
+    tar zxf "${sitesToClean}" -C "${UPDATE_NIGHTLY_HOME}"
+    ${SCRIPT_PATH}/../clean-nightly.sh "1.0.0" 1
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "clean-nightly" "test03 all" "${reports}" \
+                                                                                    "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "clean-nightly" "test03 latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x" "clean-nightly" "test03 1.0.0.x" "${reports}" \
+                                                                                    "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x/latest" "clean-nightly" "test03 1.0.0.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x" "clean-nightly" "test03 1.0.x" "${reports}" \
+                                                                                    "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x/latest" "clean-nightly" "test03 1.0.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "clean-nightly" "test03 1.x" "${reports}" \
+                                                                                    "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "clean-nightly" "test03 1.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+}
+
+test04() {
+    LSTEST "Test clean-nightly 04"
+    rm -rf "${UPDATE_NIGHTLY_HOME}/"*
+    tar zxf "${sitesToClean}" -C "${UPDATE_NIGHTLY_HOME}"
+    ${SCRIPT_PATH}/../clean-nightly.sh "1.0.0" 0
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "clean-nightly" "test04 all" "${reports}" \
+                                                                                                                          \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "clean-nightly" "test04 latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    # replace with test for folder existing
+    assertFolderDoesNotExist "${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x" "clean-nightly" "test04 1.0.0.x" "${reports}"
+    assertFolderDoesNotExist "${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x/latest" "clean-nightly" "test04 1.0.0.x/latest" "${reports}"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x" "clean-nightly" "test04 1.0.x" "${reports}" \
+                                                                                                                          \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x/latest" "clean-nightly" "test04 1.0.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "clean-nightly" "test04 1.x" "${reports}" \
+                                                                                                                          \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "clean-nightly" "test04 1.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+}
+
+test05() {
+    LSTEST "Test clean-nightly 05"
+    rm -rf "${UPDATE_NIGHTLY_HOME}/"*
+    tar zxf "${sitesToClean}" -C "${UPDATE_NIGHTLY_HOME}"
+    ${SCRIPT_PATH}/../clean-nightly.sh "1.0.2" 1
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "clean-nightly" "test05 all" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+                                                                                    "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "clean-nightly" "test05 latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.2.x" "clean-nightly" "test05 1.0.2.x" "${reports}" \
+                                                                                    "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.2.x/latest" "clean-nightly" "test05 1.0.2.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x" "clean-nightly" "test05 1.0.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+                                                                                    "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x/latest" "clean-nightly" "test05 1.0.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "clean-nightly" "test05 1.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+                                                                                    "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "clean-nightly" "test05 1.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+}
+
+test06() {
+    LSTEST "Test clean-nightly 06"
+    rm -rf "${UPDATE_NIGHTLY_HOME}/"*
+    tar zxf "${sitesToClean}" -C "${UPDATE_NIGHTLY_HOME}"
+    ${SCRIPT_PATH}/../clean-nightly.sh "1.0.2" 0
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "clean-nightly" "test06 all" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+                                                                                                                          \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "clean-nightly" "test06 latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    assertFolderDoesNotExist "${UPDATE_NIGHTLY_HOME}/streams/1.0.2.x" "clean-nightly" "test06 1.0.2.x" "${reports}"
+    assertFolderDoesNotExist "${UPDATE_NIGHTLY_HOME}/streams/1.0.2.x/latest" "clean-nightly" "test06 1.0.2.x/latest" "${reports}"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x" "clean-nightly" "test06 1.0.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" 
+
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x/latest" "clean-nightly" "test06 1.0.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "clean-nightly" "test06 1.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+                                                                                                                          \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "clean-nightly" "test06 1.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+}
+
+test07() {
+    LSTEST "Test clean-nightly 07"
+    rm -rf "${UPDATE_NIGHTLY_HOME}/"*
+    tar zxf "${sitesToClean}" -C "${UPDATE_NIGHTLY_HOME}"
+    ${SCRIPT_PATH}/../clean-nightly.sh "1.2.2" 2
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "clean-nightly" "test07 all" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+                                              "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "clean-nightly" "test07 latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.2.x" "clean-nightly" "test07 1.2.2.x" "${reports}" \
+                                              "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.2.x/latest" "clean-nightly" "test07 1.2.2.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.x" "clean-nightly" "test07 1.2.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+                                              "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.x/latest" "clean-nightly" "test07 1.2.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "clean-nightly" "test07 1.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+                                              "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "clean-nightly" "test07 1.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C"
+}
+
+test08() {
+    LSTEST "Test clean-nightly 08"
+    rm -rf "${UPDATE_NIGHTLY_HOME}/"*
+    tar zxf "${sitesToClean}" -C "${UPDATE_NIGHTLY_HOME}"
+    ${SCRIPT_PATH}/../clean-nightly.sh "1.2.2" 0
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "clean-nightly" "test08 all" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+                                                                                                                          \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "clean-nightly" "test08 latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    assertFolderDoesNotExist "${UPDATE_NIGHTLY_HOME}/streams/1.2.2.x" "clean-nightly" "test08 1.2.2.x" "${reports}"
+    assertFolderDoesNotExist "${UPDATE_NIGHTLY_HOME}/streams/1.2.2.x/latest" "clean-nightly" "test08 1.2.2.x/latest" "${reports}"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.x" "clean-nightly" "test08 1.2.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.x/latest" "clean-nightly" "test08 1.2.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "clean-nightly" "test08 1.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "clean-nightly" "test08 1.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C"
+}
+
+test09() {
+    LSTEST "Test clean-nightly 09"
+    rm -rf "${UPDATE_NIGHTLY_HOME}/"*
+    tar zxf "${sitesToClean}" -C "${UPDATE_NIGHTLY_HOME}"
+    ${SCRIPT_PATH}/../clean-nightly.sh "3.2.1" 2
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "clean-nightly" "test09 all" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+                                              "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "clean-nightly" "test09 latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.2.1.x" "clean-nightly" "test09 3.2.1.x" "${reports}" \
+                                              "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C" 
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.2.1.x/latest" "clean-nightly" "test09 3.2.1.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.2.x" "clean-nightly" "test09 3.2.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+                                              "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.2.x/latest" "clean-nightly" "test09 3.2.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.x" "clean-nightly" "test09 3.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+                                              "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.x/latest" "clean-nightly" "test09 3.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+}
+
+test10() {
+    LSTEST "Test clean-nightly 10"
+    rm -rf "${UPDATE_NIGHTLY_HOME}/"*
+    tar zxf "${sitesToClean}" -C "${UPDATE_NIGHTLY_HOME}"
+    ${SCRIPT_PATH}/../clean-nightly.sh "3.2.1" 0
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "clean-nightly" "test10 all" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+                                                                                                                          \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "clean-nightly" "test10 latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    assertFolderDoesNotExist "${UPDATE_NIGHTLY_HOME}/streams/3.2.1.x" "clean-nightly" "test09 3.2.1.x" "${reports}"
+    assertFolderDoesNotExist "${UPDATE_NIGHTLY_HOME}/streams/3.2.1.x/latest" "clean-nightly" "test09 3.2.1.x/latest" "${reports}"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.2.x" "clean-nightly" "test10 3.2.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+                                                                                                                          \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.2.x/latest" "clean-nightly" "test10 3.2.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.x" "clean-nightly" "test10 3.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+                                                                                                                          \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.x/latest" "clean-nightly" "test10 3.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+}
+
+test11() {
+    LSTEST "Test clean-nightly 11"
+    rm -rf "${UPDATE_NIGHTLY_HOME}/"*
+    tar zxf "${sitesToClean}" -C "${UPDATE_NIGHTLY_HOME}"
+    ${SCRIPT_PATH}/../clean-nightly.sh "3.2.2" 2
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "clean-nightly" "test11 all" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C" \
+                                              "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "clean-nightly" "test11 latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.2.2.x" "clean-nightly" "test11 3.2.2.x" "${reports}" \
+                                              "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.2.2.x/latest" "clean-nightly" "test11 3.2.2.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.2.x" "clean-nightly" "test11 3.2.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C" \
+                                              "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.2.x/latest" "clean-nightly" "test11 3.2.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.x" "clean-nightly" "test11 3.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C" \
+                                              "file:${UPDATE_NIGHTLY_HOME}/3.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.x/latest" "clean-nightly" "test11 3.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.2.C"
+}
+
+test12() {
+    LSTEST "Test clean-nightly 12"
+    rm -rf "${UPDATE_NIGHTLY_HOME}/"*
+    tar zxf "${sitesToClean}" -C "${UPDATE_NIGHTLY_HOME}"
+    ${SCRIPT_PATH}/../clean-nightly.sh "3.2.2" 0
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "clean-nightly" "test12 all" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/1.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/2.2.2.A" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.B" "file:${UPDATE_NIGHTLY_HOME}/2.2.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "clean-nightly" "test12 latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C"
+    assertFolderDoesNotExist "${UPDATE_NIGHTLY_HOME}/streams/3.2.2.x" "clean-nightly" "test12 3.2.2.x" "${reports}"
+    assertFolderDoesNotExist "${UPDATE_NIGHTLY_HOME}/streams/3.2.2.x/latest" "clean-nightly" "test12 3.2.2.x/latest" "${reports}"    
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.2.x" "clean-nightly" "test12 3.2.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.2.x/latest" "clean-nightly" "test12 3.2.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.x" "clean-nightly" "test12 3.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.0.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.0.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.1.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.1.2.A" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.B" "file:${UPDATE_NIGHTLY_HOME}/3.1.2.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.0.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.0.C" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.A" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.B" "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.x/latest" "clean-nightly" "test12 3.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/3.2.1.C"
+}
+
+test13() {
+    LSTEST "Test clean-nightly 13"
+    local dummySite="file:$(pwd)/${SCRIPT_PATH}/data/dummy-site.zip"
+    rm -rf "${UPDATE_NIGHTLY_HOME}/"*
+    ${SCRIPT_PATH}/../publish-nightly.sh "${dummySite}" "1.0.0.A"
+    ${SCRIPT_PATH}/../publish-nightly.sh "${dummySite}" "1.0.0.B"
+    ${SCRIPT_PATH}/../clean-nightly.sh "1.0.0" 1
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "clean-nightly" "test13 all" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "clean-nightly" "test13 latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x" "clean-nightly" "test13 1.0.0.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x/latest" "clean-nightly" "test13 1.0.0.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x" "clean-nightly" "test13 1.0.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x/latest" "clean-nightly" "test13 1.0.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "clean-nightly" "test13 1.x" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+    testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "clean-nightly" "test13 1.x/latest" "${reports}" \
+        "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+}
+
+test14() {
+    LSTEST "Test clean-nightly 14"
+    local dummySite="file:$(pwd)/${SCRIPT_PATH}/data/dummy-site.zip"
+    rm -rf "${UPDATE_NIGHTLY_HOME}/"*
+    ${SCRIPT_PATH}/../publish-nightly.sh "${dummySite}" "1.0.0.A"
+    ${SCRIPT_PATH}/../publish-nightly.sh "${dummySite}" "1.0.0.B"
+    ${SCRIPT_PATH}/../clean-nightly.sh "1.0.0" 0
+    assertEmptyFolder "${UPDATE_NIGHTLY_HOME}" "clean-nightly" "test14 all" "${reports}"
+}
+
+test01
+test02
+test03
+test04
+test05
+test06
+test07
+test08
+test09
+test10
+test11
+test12
+test13
+test14
+
+afterTest "${reports}"
\ No newline at end of file
diff --git a/hudson-scripts/tests/test-publish-nightly.sh b/hudson-scripts/tests/test-publish-nightly.sh
new file mode 100755
index 0000000..b07db1c
--- /dev/null
+++ b/hudson-scripts/tests/test-publish-nightly.sh
@@ -0,0 +1,421 @@
+#!/bin/sh
+# ====================================================================
+# Copyright (c) 2014 Obeo
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Obeo - initial API and implementation
+# ====================================================================
+
+# Test specific constants
+export WORKING_DIRECTORY="$(pwd)/target"
+
+export PROJECT_NAME="Test Project"
+export DOWNLOAD_PATH="publisher"
+export ECLIPSE_DOCUMENT_ROOT="${WORKING_DIRECTORY}/tests/documentRoot"
+export DOWNLOAD_URL="file:${ECLIPSE_DOCUMENT_ROOT}/${DOWNLOAD_PATH}"
+
+export SCRIPT_PATH="$(dirname "${0}")"
+export INIT_PATH="${SCRIPT_PATH}/../init"
+
+source "${SCRIPT_PATH}/../init.sh"
+source "${SCRIPT_PATH}/test-utils.sh"
+
+reports="${WORKING_DIRECTORY}/tests/results-publish-nightly.txt"
+beforeTest "${reports}"
+
+dummySite="file:$(pwd)/${SCRIPT_PATH}/data/dummy-site.zip"
+
+test01() {
+	LSTEST "Test publish-nightly 1.0.0.A"
+	${SCRIPT_PATH}/../publish-nightly.sh "${dummySite}" "1.0.0.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "publish-nightly" "test01 all" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "publish-nightly" "test01 latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "publish-nightly" "test01 1.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "publish-nightly" "test01 1.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x" "publish-nightly" "test01 1.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x/latest" "publish-nightly" "test01 1.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x" "publish-nightly" "test01 1.0.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x/latest" "publish-nightly" "test01 1.0.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A"
+}
+
+test02() {
+	LSTEST "Test publish-nightly 1.0.0.B"
+	${SCRIPT_PATH}/../publish-nightly.sh "${dummySite}" "1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "publish-nightly" "test02 all" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "publish-nightly" "test02 latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "publish-nightly" "test02 1.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "publish-nightly" "test02 1.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x" "publish-nightly" "test02 1.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x/latest" "publish-nightly" "test02 1.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x" "publish-nightly" "test02 1.0.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x/latest" "publish-nightly" "test02 1.0.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+}
+
+test03() {
+	LSTEST "Test publish-nightly 1.0.5.A"
+	${SCRIPT_PATH}/../publish-nightly.sh "${dummySite}" "1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "publish-nightly" "test03 all" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "publish-nightly" "test03 latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "publish-nightly" "test03 1.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "publish-nightly" "test03 1.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x" "publish-nightly" "test03 1.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x/latest" "publish-nightly" "test03 1.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x" "publish-nightly" "test03 1.0.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x/latest" "publish-nightly" "test03 1.0.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.5.x" "publish-nightly" "test03 1.0.5.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.5.x/latest" "publish-nightly" "test03 1.0.5.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+}
+
+test04() {
+	LSTEST "Test publish-nightly 1.4.5.M"
+	${SCRIPT_PATH}/../publish-nightly.sh "${dummySite}" "1.4.5.M"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "publish-nightly" "test04 all" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "publish-nightly" "test04 latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "publish-nightly" "test04 1.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "publish-nightly" "test04 1.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x" "publish-nightly" "test04 1.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x/latest" "publish-nightly" "test04 1.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x" "publish-nightly" "test04 1.0.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x/latest" "publish-nightly" "test04 1.0.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.5.x" "publish-nightly" "test04 1.0.5.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.5.x/latest" "publish-nightly" "test04 1.0.5.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.x" "publish-nightly" "test04 1.4.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"	
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.x/latest" "publish-nightly" "test04 1.4.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.5.x" "publish-nightly" "test04 1.4.5.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"	
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.5.x/latest" "publish-nightly" "test04 1.4.5.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"
+}
+
+test05() {
+	LSTEST "Test publish-nightly 1.2.8.P"
+	${SCRIPT_PATH}/../publish-nightly.sh "${dummySite}" "1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "publish-nightly" "test05 all" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M" "file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "publish-nightly" "test05 latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "publish-nightly" "test05 1.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M" "file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "publish-nightly" "test05 1.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x" "publish-nightly" "test05 1.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x/latest" "publish-nightly" "test05 1.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x" "publish-nightly" "test05 1.0.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x/latest" "publish-nightly" "test05 1.0.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.5.x" "publish-nightly" "test05 1.0.5.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.5.x/latest" "publish-nightly" "test05 1.0.5.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.x" "publish-nightly" "test05 1.4.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"	
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.x/latest" "publish-nightly" "test05 1.4.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.5.x" "publish-nightly" "test05 1.4.5.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"	
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.5.x/latest" "publish-nightly" "test05 1.4.5.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.x" "publish-nightly" "test05 1.2.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.x/latest" "publish-nightly" "test05 1.2.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.8.x" "publish-nightly" "test05 1.2.8.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.8.x/latest" "publish-nightly" "test05 1.2.8.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+}
+
+test06() {
+	LSTEST "Test publish-nightly 1.4.1.A"
+	${SCRIPT_PATH}/../publish-nightly.sh "${dummySite}" "1.4.1.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "publish-nightly" "test06 all" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M" "file:${UPDATE_NIGHTLY_HOME}/1.2.8.P" "file:${UPDATE_NIGHTLY_HOME}/1.4.1.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "publish-nightly" "test06 latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "publish-nightly" "test06 1.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M" "file:${UPDATE_NIGHTLY_HOME}/1.2.8.P" "file:${UPDATE_NIGHTLY_HOME}/1.4.1.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "publish-nightly" "test06 1.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x" "publish-nightly" "test06 1.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x/latest" "publish-nightly" "test06 1.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x" "publish-nightly" "test06 1.0.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x/latest" "publish-nightly" "test06 1.0.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.5.x" "publish-nightly" "test06 1.0.5.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.5.x/latest" "publish-nightly" "test06 1.0.5.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.x" "publish-nightly" "test06 1.4.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M" "file:${UPDATE_NIGHTLY_HOME}/1.4.1.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.x/latest" "publish-nightly" "test06 1.4.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.5.x" "publish-nightly" "test06 1.4.5.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"	
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.5.x/latest" "publish-nightly" "test06 1.4.5.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.x" "publish-nightly" "test06 1.2.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.x/latest" "publish-nightly" "test06 1.2.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.8.x" "publish-nightly" "test06 1.2.8.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.8.x/latest" "publish-nightly" "test06 1.2.8.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.1.x" "publish-nightly" "test06 1.4.1.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.1.A"	
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.1.x/latest" "publish-nightly" "test06 1.4.1..x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.1.A"
+}
+
+test07() {
+	LSTEST "Test publish-nightly 3.5.25.G"
+	${SCRIPT_PATH}/../publish-nightly.sh "${dummySite}" "3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "publish-nightly" "test07 all" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M" "file:${UPDATE_NIGHTLY_HOME}/1.2.8.P" "file:${UPDATE_NIGHTLY_HOME}/1.4.1.A" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "publish-nightly" "test07 latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "publish-nightly" "test07 1.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M" "file:${UPDATE_NIGHTLY_HOME}/1.2.8.P" "file:${UPDATE_NIGHTLY_HOME}/1.4.1.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "publish-nightly" "test07 1.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x" "publish-nightly" "test07 1.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x/latest" "publish-nightly" "test07 1.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x" "publish-nightly" "test07 1.0.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x/latest" "publish-nightly" "test07 1.0.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.5.x" "publish-nightly" "test07 1.0.5.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.5.x/latest" "publish-nightly" "test07 1.0.5.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.x" "publish-nightly" "test07 1.4.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M" "file:${UPDATE_NIGHTLY_HOME}/1.4.1.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.x/latest" "publish-nightly" "test07 1.4.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.5.x" "publish-nightly" "test07 1.4.5.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"	
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.5.x/latest" "publish-nightly" "test07 1.4.5.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.x" "publish-nightly" "test07 1.2.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.x/latest" "publish-nightly" "test07 1.2.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.8.x" "publish-nightly" "test07 1.2.8.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.8.x/latest" "publish-nightly" "test07 1.2.8.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.1.x" "publish-nightly" "test07 1.4.1.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.1.A"	
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.1.x/latest" "publish-nightly" "test07 1.4.1..x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.1.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.x" "publish-nightly" "test07 3.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.x/latest" "publish-nightly" "test07 3.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.5.x" "publish-nightly" "test07 3.5.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.5.x/latest" "publish-nightly" "test07 3.5.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.5.25.x" "publish-nightly" "test07 3.5.25.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.5.25.x/latest" "publish-nightly" "test07 3.5.25.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+}
+
+test08() {
+	LSTEST "Test publish-nightly 1.4.5.Z"
+	${SCRIPT_PATH}/../publish-nightly.sh "${dummySite}" "1.4.5.Z"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "publish-nightly" "test08 all" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M" "file:${UPDATE_NIGHTLY_HOME}/1.2.8.P" "file:${UPDATE_NIGHTLY_HOME}/1.4.1.A" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G" "file:${UPDATE_NIGHTLY_HOME}/1.4.5.Z"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "publish-nightly" "test08 latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "publish-nightly" "test08 1.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M" "file:${UPDATE_NIGHTLY_HOME}/1.2.8.P" "file:${UPDATE_NIGHTLY_HOME}/1.4.1.A" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.Z"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "publish-nightly" "test08 1.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.Z"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x" "publish-nightly" "test08 1.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x/latest" "publish-nightly" "test08 1.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x" "publish-nightly" "test08 1.0.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x/latest" "publish-nightly" "test08 1.0.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.5.x" "publish-nightly" "test08 1.0.5.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.5.x/latest" "publish-nightly" "test08 1.0.5.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.x" "publish-nightly" "test08 1.4.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M" "file:${UPDATE_NIGHTLY_HOME}/1.4.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.4.5.Z"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.x/latest" "publish-nightly" "test08 1.4.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.Z"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.5.x" "publish-nightly" "test08 1.4.5.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M" "file:${UPDATE_NIGHTLY_HOME}/1.4.5.Z"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.5.x/latest" "publish-nightly" "test08 1.4.5.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.Z"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.x" "publish-nightly" "test08 1.2.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.x/latest" "publish-nightly" "test08 1.2.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.8.x" "publish-nightly" "test08 1.2.8.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.8.x/latest" "publish-nightly" "test08 1.2.8.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.1.x" "publish-nightly" "test08 1.4.1.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.1.A"	
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.1.x/latest" "publish-nightly" "test08 1.4.1..x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.1.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.x" "publish-nightly" "test07 3.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.x/latest" "publish-nightly" "test08 3.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.5.x" "publish-nightly" "test08 3.5.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.5.x/latest" "publish-nightly" "test08 3.5.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.5.25.x" "publish-nightly" "test08 3.5.25.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.5.25.x/latest" "publish-nightly" "test08 3.5.25.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+}
+
+test09() {
+	LSTEST "Test publish-nightly 1.4.6.A"
+	${SCRIPT_PATH}/../publish-nightly.sh "${dummySite}" "1.4.6.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}" "publish-nightly" "test09 all" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M" "file:${UPDATE_NIGHTLY_HOME}/1.2.8.P" "file:${UPDATE_NIGHTLY_HOME}/1.4.1.A" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G" "file:${UPDATE_NIGHTLY_HOME}/1.4.5.Z" "file:${UPDATE_NIGHTLY_HOME}/1.4.6.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/latest" "publish-nightly" "test09 latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x" "publish-nightly" "test09 1.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M" "file:${UPDATE_NIGHTLY_HOME}/1.2.8.P" "file:${UPDATE_NIGHTLY_HOME}/1.4.1.A" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.Z" "file:${UPDATE_NIGHTLY_HOME}/1.4.6.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.x/latest" "publish-nightly" "test09 1.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.6.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x" "publish-nightly" "test09 1.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B" "file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.x/latest" "publish-nightly" "test09 1.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x" "publish-nightly" "test09 1.0.0.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.A" "file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.0.x/latest" "publish-nightly" "test09 1.0.0.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.0.B"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.5.x" "publish-nightly" "test09 1.0.5.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.0.5.x/latest" "publish-nightly" "test09 1.0.5.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.0.5.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.x" "publish-nightly" "test09 1.4.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M" "file:${UPDATE_NIGHTLY_HOME}/1.4.1.A" "file:${UPDATE_NIGHTLY_HOME}/1.4.5.Z" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.6.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.x/latest" "publish-nightly" "test09 1.4.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.6.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.5.x" "publish-nightly" "test09 1.4.5.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.M" "file:${UPDATE_NIGHTLY_HOME}/1.4.5.Z"	
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.5.x/latest" "publish-nightly" "test09 1.4.5.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.5.Z"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.x" "publish-nightly" "test09 1.2.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.x/latest" "publish-nightly" "test09 1.2.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.8.x" "publish-nightly" "test09 1.2.8.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.2.8.x/latest" "publish-nightly" "test09 1.2.8.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.2.8.P"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.1.x" "publish-nightly" "test09 1.4.1.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.1.A"	
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.1.x/latest" "publish-nightly" "test09 1.4.1..x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.1.A"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.x" "publish-nightly" "test07 3.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.x/latest" "publish-nightly" "test09 3.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.5.x" "publish-nightly" "test09 3.5.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.5.x/latest" "publish-nightly" "test09 3.5.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.5.25.x" "publish-nightly" "test09 3.5.25.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/3.5.25.x/latest" "publish-nightly" "test09 3.5.25.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/3.5.25.G"
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.6.x" "publish-nightly" "test09 1.4.6.x" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.6.A"	
+	testCompositeRepositoryContent "file:${UPDATE_NIGHTLY_HOME}/streams/1.4.6.x/latest" "publish-nightly" "test09 1.4.6.x/latest" "${reports}" \
+		"file:${UPDATE_NIGHTLY_HOME}/1.4.6.A"
+}
+
+test01
+test02
+test03
+test04
+test05
+test06
+test07
+test08
+test09
+
+afterTest "${reports}"
\ No newline at end of file
diff --git a/hudson-scripts/tests/test-utils.sh b/hudson-scripts/tests/test-utils.sh
new file mode 100644
index 0000000..0111d5a
--- /dev/null
+++ b/hudson-scripts/tests/test-utils.sh
@@ -0,0 +1,157 @@
+#!/bin/sh
+# ====================================================================
+# Copyright (c) 2014 Obeo
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Obeo - initial API and implementation
+# ====================================================================
+
+LSTEST() {
+	echo "[TEST]     $@"
+}
+
+LSFAILURE() {
+	echo "[FAILURE]  $@"
+}
+
+LSPASS() {
+	echo "[PASS]     $@"
+}
+
+assertIntEquals() {
+	local expected="${1}"
+	local actual="${2}"
+	local classname="${3}"
+	local name="${4}"
+	local file="${5}"
+	shift 5
+	if [ ${expected} -ne ${actual} ]; then
+		LSFAILURE "${classname} ${name} 
+	$@
+	expected=${expected}
+	actual=${actual}"
+		echo "failure;${classname};${name};$@" >> "${file}"
+	else 
+		LSPASS "${classname} ${name}"
+		echo "success;${classname};${name}" >> "${file}"
+	fi
+}
+
+assertStringEquals() {
+	local expected="${1}"
+	local actual="${2}"
+	local classname="${3}"
+	local name="${4}"
+	local file="${5}"
+	shift 5
+	if [ "${expected}" != "${actual}" ]; then
+		LSFAILURE "${classname} ${name} 
+	$@
+	expected=${expected}
+	actual=${actual}"
+		echo "failure;${classname};${name};$@" >> "${file}"
+	else 
+		LSPASS "${classname} ${name}"
+		echo "success;${classname};${name}" >> "${file}"
+	fi
+}
+
+testCompositeRepositoryContent() {
+	local url="${1}"
+	local classname="${2}"
+	local name="${3}"
+	local file="${4}"
+	shift 4
+	local expectedContents=("$@")
+	actualContents=( $(composite-repository -location "${url}" -list) )
+	assertIntEquals ${#expectedContents[@]} ${#actualContents[@]} \
+		"${classname}" "${name} (size)" "${file}" "Contents size of composite repository '${url}' does not match"
+	for i in ${!actualContents[*]}; do
+		assertStringEquals "${expectedContents[$i]}" "${actualContents[$i]}" \
+			"${classname}" "${name} contents(${i})" "${file}" "Contents of composite repository '${url}' does not match"
+	done	
+}
+
+assertFolderDoesNotExist() {
+	local folder="${1}"
+	local classname="${2}"
+	local name="${3}"
+	local file="${4}"
+	shift 4
+	if [ -d "${folder}" ]; then
+		LSFAILURE "${classname} ${name} 
+	Folder '${folder}' should not exists"
+		echo "failure;${classname};${name};Folder '${folder}' should not exists" >> "${file}"
+	else 
+		LSPASS "${classname} ${name}"
+		echo "success;${classname};${name}" >> "${file}"
+	fi
+}
+
+assertEmptyFolder() {
+	local folder="${1}"
+	local classname="${2}"
+	local name="${3}"
+	local file="${4}"
+	shift 4
+	local folderContents=( $(echo "${folder}/"*) )
+	if [ "${#folderContents[@]}" -ne "0" ]; then
+		LSFAILURE "${classname} ${name} 
+	Folder '${folder}' should be empty"
+		echo "failure;${classname};${name};Folder '${folder}' should be empty" >> "${file}"
+	else 
+		LSPASS "${classname} ${name}"
+		echo "success;${classname};${name}" >> "${file}"
+	fi
+}
+
+toJunitXML() {
+	local file="${1}"
+	local nbTests=$(cat "${file}" | grep -v '^[ \t]*#[ \t]*' | wc -l | sed 's/ //g')
+	echo "<testsuite tests=\"${nbTests}\">"
+	IFS=$'\r\n' GLOBIGNORE='*' :; local tests=($(cat ${file} | grep -v '^[ \t]*#[ \t]*'))
+	for test in ${tests[@]}; do 
+		local result=($(echo $test | cut -f 1 -d ';'))
+		local classname=($(echo $test | cut -f 2 -d ';'))
+		local name=($(echo $test | cut -f 3 -d ';'))
+		if [ "${result}" = "success" ]; then
+			echo "\t<testcase classname=\"${classname}\" name=\"$name\"/>"
+		else
+			local error=($(echo $test | cut -f 4 -d ';'))
+			echo "\t<testcase classname=\"${classname}\" name=\"$name\">"
+			echo "\t\t<failure type=\"failure\">${error}</failure>"
+			echo "\t</testcase>"
+		fi
+	done
+	echo "</testsuite>"
+}
+
+beforeTest() {
+	local reports="${1}"
+	# cleaning test folder
+	if [ -d "${ECLIPSE_DOCUMENT_ROOT}" ]; then
+	    LSTEST "Removing test folder '${ECLIPSE_DOCUMENT_ROOT}'"
+	    rm -rf "${ECLIPSE_DOCUMENT_ROOT}"
+	fi
+	mkdir -p "${ECLIPSE_DOCUMENT_ROOT}"
+
+	timestamp="$(date)"
+	echo "# ${timestamp}" > "${reports}"
+
+	xmlReports=$(echo "${reports}" | sed 's/\.txt/\.xml/')
+	echo "<!-- ${timestamp} -->" > "${xmlReports}"
+
+	if [ ! -d "${UPDATE_NIGHTLY_HOME}" ]; then
+	    mkdir -p "${UPDATE_NIGHTLY_HOME}"
+	fi
+}
+
+afterTest() {
+	local reports="${1}"
+	xmlReports=$(echo "${reports}" | sed 's/\.txt/\.xml/')
+	toJunitXML "${reports}" >> "${xmlReports}"
+}
\ No newline at end of file