Files
datawave/docker/scripts/testAll.sh
foster33andalerman b83c9ef871 Improve Docker testAll.sh Script (#2640)
* Improve Docker testAll.sh Script

---------

Co-authored-by: alerman <[email protected]>
2024-12-09 19:55:23 -05:00

201 lines
6.5 KiB
Bash
Executable File

#!/usr/bin/env bash
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
source ${SCRIPT_DIR}/common/common.sh
WEBSERVICE="${WEBSERVICE:-false}"
MAX_ATTEMPTS=30
QUERY_TIMEOUT=2m
# Amount of time to wait after a failed test attempt
TIMEOUT=10
# Amount of time to wait for services to be ready
SERVICES_INTERVAL=4
TEST_COUNTER=0
# First argument is the script to run
# Second argument is the expected number of events
# Third argument is the expected number of pages/files
runTest () {
ATTEMPTS=3
ATTEMPT=1
TEST_COUNTER=$((TEST_COUNTER + 1))
test_start_time=$(date +%s%N)
while [ $ATTEMPT -le $ATTEMPTS ]; do
echo
echo -n "Running test (Attempt ${ATTEMPT}/${ATTEMPTS}): $1 - "
echo
attempt_start_time=$(date +%s%N)
QUERY_RESPONSE="$(timeout ${QUERY_TIMEOUT} ${SCRIPT_DIR}/$1)"
attempt_end_time=$(date +%s%N)
EXIT_CODE=$?
if [[ "$QUERY_RESPONSE" == *"Returned $2 events"* ]] ; then
if [ ! -z "$3" ] ; then
if [[ "$QUERY_RESPONSE" == *"Returned $3 pages"* ]] ; then
TEST_STATUS="${LABEL_PASS} -> Returned $2 events and $3 pages" && TESTS_PASSED="${TESTS_PASSED} $1"
printTestStatus "$attempt_start_time" "$attempt_end_time" "$TEST_STATUS"
printLine
return 0
elif [[ "$QUERY_RESPONSE" == *"Returned $3 files"* ]] ; then
TEST_STATUS="${LABEL_PASS} -> Returned $2 events and $3 files" && TESTS_PASSED="${TESTS_PASSED} $1"
printTestStatus "$attempt_start_time" "$attempt_end_time" "$TEST_STATUS"
printLine
return 0
else
TEST_STATUS="${LABEL_FAIL} -> Unexpected number of pages/files returned: Expected $2 events and $3 files."
echo "Query Response:"
echo "$QUERY_RESPONSE"
echo "----------------"
if [ $ATTEMPT == $ATTEMPTS ] ; then
TEST_STATUS="${LABEL_FAIL} -> Failed to succeed after ${ATTEMPT} attempts"
TEST_FAILURES="${TEST_FAILURES},${1}: ${TEST_STATUS}"
printTestStatus "$test_start_time" "$(date +%s%N)" "$TEST_STATUS"
printLine
return 1
else
sleep ${TIMEOUT}
fi
fi
else
TEST_STATUS="${LABEL_PASS} -> Returned $2 events" && TESTS_PASSED="${TESTS_PASSED} $1"
printTestStatus "$attempt_start_time" "$attempt_end_time" "$TEST_STATUS"
printLine
return 0
fi
else
if [ $EXIT_CODE == 124 ] ; then
TEST_STATUS="${LABEL_FAIL} -> Query timed out after ${QUERY_TIMEOUT}"
printTestStatus "$attempt_start_time" "$attempt_end_time" "$TEST_STATUS"
else
TEST_STATUS="${LABEL_FAIL} -> Unexpected number of events returned: Expected $2 events."
printTestStatus "$attempt_start_time" "$attempt_end_time" "$TEST_STATUS"
echo "Query Response:"
echo "$QUERY_RESPONSE"
echo "----------------"
fi
if [ $ATTEMPT == $ATTEMPTS ] ; then
TEST_STATUS="${LABEL_FAIL} -> Failed to succeed after ${ATTEMPT} attempts"
TEST_FAILURES="${TEST_FAILURES},${1}: ${TEST_STATUS}"
printTestStatus "$test_start_time" "$(date +%s%N)" "$TEST_STATUS"
printLine
return 1
else
sleep ${TIMEOUT}
fi
fi
((ATTEMPT++))
done
}
printTestSummary() {
echo " Overall Summary"
printLine
echo
echo " Test Count: ${TEST_COUNTER}"
echo
if [ -z "${TESTS_PASSED}" ] ; then
echo " Tests Passed: 0"
else
local passed=(${TESTS_PASSED})
echo "$( printGreen " Tests Passed: ${#passed[@]}" )"
for p in "${passed[@]}" ; do
echo " ${p}"
done
fi
echo
if [ -z "${TEST_FAILURES}" ] ; then
echo " Failed Tests: 0"
else
(
IFS=","
local failed=(${TEST_FAILURES})
echo "$( printRed " Tests Failed: $(( ${#failed[@]} - 1 ))" )"
for f in "${failed[@]}" ; do
echo " ${f}"
done
)
fi
echo
printLine
}
setPrintColors
setTestLabels
if [ "$WEBSERVICE" = true ]; then
echo "Waiting for webservice to be ready..."
else
echo "Waiting for services to be ready..."
fi
attempt=0
while [ $attempt -lt $MAX_ATTEMPTS ]; do
if [ "$WEBSERVICE" = true ]; then
echo "Checking webservice status (${attempt}/${MAX_ATTEMPTS})"
WEBSERVICE_STATUS=$(curl -s -m 5 -k https://localhost:9443/DataWave/Common/Health/health | grep Status)
if [[ "${WEBSERVICE_STATUS}" =~ \"Status\":\"ready\" ]] ; then
echo "Webservice ready"
break
fi
else
echo "Checking query and executor status (${attempt}/${MAX_ATTEMPTS})"
QUERY_STATUS=$(curl -s -m 5 http://localhost:8080/query/mgmt/health | grep UP)
EXEC_STATUS=$(curl -s -m 5 http://localhost:8380/executor/mgmt/health | grep UP)
if [ "${QUERY_STATUS}" == "{\"status\":\"UP\"}" ] && [ "${EXEC_STATUS}" == "{\"status\":\"UP\"}" ] ; then
echo "Query and Executor Services ready"
break
fi
fi
sleep ${SERVICES_INTERVAL}
((attempt++))
done
if [ $attempt == $MAX_ATTEMPTS ]; then
if [ "$WEBSERVICE" = true ]; then
echo "$( printRed "FAILURE" ) - Webservice never became ready"
else
echo "$( printRed "FAILURE" ) - Query and/or Executor Services never became ready"
fi
exit 1
fi
echo "Running tests..."
echo
runTest batchLookup.sh 2
runTest batchLookupContent.sh 4
runTest count.sh 12 1
runTest discovery.sh 2 1
# runTest edge.sh 0 0
# runTest edgeEvent.sh 1 1
runTest errorCount.sh 1 1
runTest errorDiscovery.sh 1 1
runTest errorFieldIndexCount.sh 1 1
runTest errorQuery.sh 1 1
runTest fieldIndexCount.sh 12 2
runTest hitHighlights.sh 12 2
runTest lookup.sh 1
runTest lookupContent.sh 2
# runTest metrics.sh 0 0
runTest query.sh 12 2
#runTest mapReduceQuery.sh 12 2
#runTest oozieQuery.sh 0 0
# Gives option to skip the cleanup stage
if [ "${1}" == "-noCleanup" ] ; then
printTestSummary
exit 0
fi
printTestSummary
# The cleanup script will only delete the logs for tests that passed. Failed test logs will remain.
"$SCRIPT_DIR"/cleanup.sh "${TESTS_PASSED}"