Initial QSfera import
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
log_error() {
|
||||
if [ -n "${PLAIN_OUTPUT}" ]
|
||||
then
|
||||
echo -e "$1"
|
||||
else
|
||||
echo -e "\e[31m$1\e[0m"
|
||||
fi
|
||||
}
|
||||
|
||||
log_info() {
|
||||
if [ -n "${PLAIN_OUTPUT}" ]
|
||||
then
|
||||
echo -e "$1"
|
||||
else
|
||||
echo -e "\e[34m$1\e[0m"
|
||||
fi
|
||||
}
|
||||
|
||||
log_success() {
|
||||
if [ -n "${PLAIN_OUTPUT}" ]
|
||||
then
|
||||
echo -e "$1"
|
||||
else
|
||||
echo -e "\e[32m$1\e[0m"
|
||||
fi
|
||||
}
|
||||
|
||||
declare -A scenarioLines
|
||||
|
||||
if [ -n "${EXPECTED_FAILURES_FILE}" ]
|
||||
then
|
||||
if [ -f "${EXPECTED_FAILURES_FILE}" ]
|
||||
then
|
||||
log_info "Checking expected failures in ${EXPECTED_FAILURES_FILE}"
|
||||
else
|
||||
log_error "Expected failures file ${EXPECTED_FAILURES_FILE} not found"
|
||||
log_error "Check the setting of EXPECTED_FAILURES_FILE environment variable"
|
||||
exit 1
|
||||
fi
|
||||
FINAL_EXIT_STATUS=0
|
||||
# If the last line of the expected-failures file ends without a newline character
|
||||
# then that line may not get processed by some of the bash code in this script
|
||||
# So check that the last character in the file is a newline
|
||||
if [ "$(tail -c1 "${EXPECTED_FAILURES_FILE}" | wc -l)" -eq 0 ]
|
||||
then
|
||||
log_error "Expected failures file ${EXPECTED_FAILURES_FILE} must end with a newline"
|
||||
log_error "Put a newline at the end of the last line and try again"
|
||||
FINAL_EXIT_STATUS=1
|
||||
fi
|
||||
# Check the expected-failures file to ensure that the lines are self-consistent
|
||||
LINE_NUMBER=0
|
||||
while read -r INPUT_LINE
|
||||
do
|
||||
LINE_NUMBER=$(("$LINE_NUMBER" + 1))
|
||||
|
||||
# Ignore comment lines (starting with hash)
|
||||
if [[ "${INPUT_LINE}" =~ ^# ]]
|
||||
then
|
||||
continue
|
||||
fi
|
||||
# Match lines that have "- [someSuite/someName.feature:n]" pattern on start
|
||||
# the part inside the brackets is the suite, feature and line number of the expected failure.
|
||||
if [[ "${INPUT_LINE}" =~ ^-[[:space:]]\[([a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+\.feature:[0-9]+)] ]]; then
|
||||
SUITE_SCENARIO_LINE="${BASH_REMATCH[1]}"
|
||||
elif [[
|
||||
# report for lines like: " - someSuite/someName.feature:n"
|
||||
"${INPUT_LINE}" =~ ^[[:space:]]*-[[:space:]][a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+\.feature:[0-9]+[[:space:]]*$ ||
|
||||
# report for lines starting with: "[someSuite/someName.feature:n]"
|
||||
"${INPUT_LINE}" =~ ^[[:space:]]*\[([a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+\.feature:[0-9]+)]
|
||||
]]; then
|
||||
log_error "> Line ${LINE_NUMBER}: Not in the correct format."
|
||||
log_error " + Actual Line : '${INPUT_LINE}'"
|
||||
log_error " - Expected Format : '- [suite/scenario.feature:line_number](scenario_line_url)'"
|
||||
FINAL_EXIT_STATUS=1
|
||||
continue
|
||||
else
|
||||
# otherwise, ignore the line
|
||||
continue
|
||||
fi
|
||||
# Find the link in round-brackets that should be after the SUITE_SCENARIO_LINE
|
||||
if [[ "${INPUT_LINE}" =~ \(([a-zA-Z0-9:/.#_-]+)\) ]]; then
|
||||
ACTUAL_LINK="${BASH_REMATCH[1]}"
|
||||
else
|
||||
log_error "Line ${LINE_NUMBER}: ${INPUT_LINE} : Link is empty"
|
||||
FINAL_EXIT_STATUS=1
|
||||
continue
|
||||
fi
|
||||
if [[ -n "${scenarioLines[${SUITE_SCENARIO_LINE}]:-}" ]];
|
||||
then
|
||||
log_error "> Line ${LINE_NUMBER}: Scenario line ${SUITE_SCENARIO_LINE} is duplicated"
|
||||
FINAL_EXIT_STATUS=1
|
||||
fi
|
||||
scenarioLines[${SUITE_SCENARIO_LINE}]="exists"
|
||||
OLD_IFS=${IFS}
|
||||
IFS=':'
|
||||
read -ra FEATURE_PARTS <<< "${SUITE_SCENARIO_LINE}"
|
||||
IFS=${OLD_IFS}
|
||||
SUITE_FEATURE="${FEATURE_PARTS[0]}"
|
||||
FEATURE_LINE="${FEATURE_PARTS[1]}"
|
||||
EXPECTED_LINK="https://github.com/qsfera/server/blob/main/tests/acceptance/features/${SUITE_FEATURE}#L${FEATURE_LINE}"
|
||||
if [[ "${ACTUAL_LINK}" != "${EXPECTED_LINK}" ]]; then
|
||||
log_error "> Line ${LINE_NUMBER}: Link is not correct for ${SUITE_SCENARIO_LINE}"
|
||||
log_error " + Actual link : ${ACTUAL_LINK}"
|
||||
log_error " - Expected link : ${EXPECTED_LINK}"
|
||||
FINAL_EXIT_STATUS=1
|
||||
fi
|
||||
|
||||
done < "${EXPECTED_FAILURES_FILE}"
|
||||
else
|
||||
log_error "Environment variable EXPECTED_FAILURES_FILE must be defined to be the file to check"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ${FINAL_EXIT_STATUS} == 1 ]
|
||||
then
|
||||
log_error "\nErrors were found in the expected failures file - see the messages above!"
|
||||
else
|
||||
log_success "\nNo problems were found in the expected failures file."
|
||||
fi
|
||||
exit ${FINAL_EXIT_STATUS}
|
||||
Reference in New Issue
Block a user