blob: 1e265b31d27f244731f3f33c9daf350a94e7d786 [file] [log] [blame]
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
PROJECT_NAME="$1"
echo "The Project Name = ${PROJECT_NAME}"
if [ -z "${HOP_LOCATION}" ]; then
HOP_LOCATION=/opt/hop
fi
if [ -z "${SUREFIRE_REPORT}" ]; then
SUREFIRE_REPORT="true"
fi
# Get kafka parameters
if [ -z "${BOOTSTRAP_SERVERS}" ]; then
BOOTSTRAP_SERVERS=kafka:9092
fi
# Get database parameters
if [ -z "${POSTGRES_HOST}" ]; then
POSTGRES_HOST=postgres
fi
if [ -z "${POSTGRES_DATABASE}" ]; then
POSTGRES_DATABASE=hop_database
fi
if [ -z "${POSTGRES_PORT}" ]; then
POSTGRES_PORT=5432
fi
if [ -z "${POSTGRES_USER}" ]; then
POSTGRES_USER=hop_user
fi
if [ -z "${POSTGRES_PASSWORD}" ]; then
POSTGRES_PASSWORD=hop_password
fi
if [ -z "${PROJECT_NAME}" ]; then
PROJECT_NAME="*"
fi
#set global variables
SPACER="==========================================="
# Set up a temporary folder
export TMP_FOLDER=/tmp/hop-it-$$
rm -rf "${TMP_FOLDER}"
mkdir -p "${TMP_FOLDER}"
#cleanup Temp
export TMP_TESTCASES="${TMP_FOLDER}"/testcases.xml
rm -f "${TMP_TESTCASES}"
# Set up auditing
# Start with a new blank slate every time
# This means it's not needed to delete a project
#
export HOP_AUDIT_FOLDER="${TMP_FOLDER}"/audit
rm -rf "${HOP_AUDIT_FOLDER}"
mkdir -p "${HOP_AUDIT_FOLDER}"
# Store current HOP_CONFIG_FOLDER
TMP_CONFIG_FOLDER="${HOP_CONFIG_FOLDER}"
#Loop over project folders
for d in "${CURRENT_DIR}"/../${PROJECT_NAME}/ ; do
#cleanup project testcases
rm -f "${TMP_TESTCASES}"
if [[ "$d" != *"scripts/" ]] && [[ "$d" != *"surefire-reports/" ]] && [[ "$d" != *"hopweb/" ]]; then
#set test variables
start_time=$SECONDS
test_counter=0
errors_counter=0
skipped_counter=0
failures_counter=0
PROJECT_NAME=$(basename $d)
echo ${SPACER}
echo "Starting Tests in project: ${PROJECT_NAME}"
echo ${SPACER}
# Increment timer and set test start time
test_counter=$((test_counter+1))
# Create New Project
export HOP_CONFIG_FOLDER="$d"
# Find main hwf files in the test sub-folder
#
# TODO: add hpl support when result is returned correctly
#
find $d -name 'main*.hwf' | sort | while read f ; do
#cleanup temp files
rm -f /tmp/test_output
rm -f /tmp/test_output_err
#set file and test name
hop_file="$(realpath $f)"
test_name=$(basename $f)
test_name=${test_name//'main_'/}
test_name=${test_name//'main-'/}
test_name=${test_name//'.hwf'/}
#Starting Test
echo ${SPACER}
echo "Starting Test: $test_name"
echo ${SPACER}
#Start time test
start_time_test=$SECONDS
#Run Test
$HOP_LOCATION/hop-run.sh \
-r "local" \
-e "dev" \
-p POSTGRES_HOST=${POSTGRES_HOST} \
-p POSTGRES_DATABASE=${POSTGRES_DATABASE} \
-p POSTGRES_PORT=${POSTGRES_PORT} \
-p POSTGRES_USER=${POSTGRES_USER} \
-p POSTGRES_PASSWORD=${POSTGRES_PASSWORD} \
-p BOOTSTRAP_SERVERS=${BOOTSTRAP_SERVERS} \
-f $hop_file > >(tee /tmp/test_output) 2> >(tee /tmp/test_output_err >&1)
#Capture exit code
exit_code=${PIPESTATUS[0]}
#Test time duration
test_duration=$(( SECONDS - start_time_test ))
if (( $exit_code >= 1 )) ;
then
errors_counter=$((errors_counter+1))
failures_counter=$((failures_counter+1))
#Create surefire xml failure
echo "<testcase name=\"$test_name\" time=\"$test_duration\">" >> ${TMP_TESTCASES}
echo "<failure type=\"$test_name\"></failure>" >> ${TMP_TESTCASES}
echo "<system-out>" >> ${TMP_TESTCASES}
echo "<![CDATA[" >> ${TMP_TESTCASES}
cat /tmp/test_output >> ${TMP_TESTCASES}
echo "]]>" >> ${TMP_TESTCASES}
echo "</system-out>" >> ${TMP_TESTCASES}
echo "<system-err>" >> ${TMP_TESTCASES}
echo "<![CDATA[" >> ${TMP_TESTCASES}
cat /tmp/test_output_err >> ${TMP_TESTCASES}
echo "]]>" >> ${TMP_TESTCASES}
echo "</system-err>" >> ${TMP_TESTCASES}
echo "</testcase>" >> ${TMP_TESTCASES}
else
#Create surefire xml success
echo "<testcase name=\"$test_name\" time=\"$test_duration\">" >> ${TMP_TESTCASES}
echo "<system-out>" >> ${TMP_TESTCASES}
echo "<![CDATA[" >> ${TMP_TESTCASES}
cat /tmp/test_output >> ${TMP_TESTCASES}
echo "]]>" >> ${TMP_TESTCASES}
echo "</system-out>" >> ${TMP_TESTCASES}
echo "</testcase>" >> ${TMP_TESTCASES}
fi
#Print results to console
echo ${SPACER}
echo "Test Result"
echo ${SPACER}
echo "Test duration: $test_duration"
echo "Test Exit Code: $exit_code"
done
total_duration=$(( SECONDS - start_time ))
#Print End results
echo ${SPACER}
echo "Final Report"
echo ${SPACER}
echo "Number of Tests: $test_counter"
echo "Total errors: $errors_counter"
echo "Total faliures: $failures_counter"
echo "Total duration: $total_duration"
#create final report
if [ "${SUREFIRE_REPORT}" == "true" ]
then
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > "${CURRENT_DIR}"/../surefire-reports/surefile_${PROJECT_NAME}.xml
echo "<testsuite xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report-3.0.xsd\" version=\"3.0\" name=\"${PROJECT_NAME}\" time=\"$total_duration\" tests=\"$test_counter\" errors=\"$errors_counter\" skipped=\"$skipped_counter\" failures=\"$failures_counter\">" >> "${CURRENT_DIR}"/../surefire-reports/surefile_${PROJECT_NAME}.xml
cat ${TMP_TESTCASES} >> "${CURRENT_DIR}"/../surefire-reports/surefile_${PROJECT_NAME}.xml
echo "</testsuite>" >> "${CURRENT_DIR}"/../surefire-reports/surefile_${PROJECT_NAME}.xml
fi
fi
done
# Cleanup config and audit folders
#
rm -rf "${HOP_AUDIT_FOLDER}"
rm -rf "${TMP_FOLDER}"
# Set back to old config folder
export HOP_CONFIG_FOLDER="${TMP_CONFIG_FOLDER}"