Add sanity tests
Resolves: rhbz#2027150 Signed-off-by: Čestmír Kalina <ckalina@redhat.com>
This commit is contained in:
parent
bfad2a4a9e
commit
2ac7fb665a
7
gating.yaml
Normal file
7
gating.yaml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
--- !Policy
|
||||||
|
product_versions:
|
||||||
|
- rhel-9
|
||||||
|
decision_context: osci_compose_gate
|
||||||
|
rules:
|
||||||
|
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}
|
||||||
|
|
93
tests/sanity/Makefile
Normal file
93
tests/sanity/Makefile
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
#
|
||||||
|
# Makefile of kabi-dw/sanity
|
||||||
|
# Description: kabi-dw test
|
||||||
|
#
|
||||||
|
# 2019-04-01
|
||||||
|
# Author: Čestmír Kalina <ckalina@redhat.com>
|
||||||
|
#
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
#
|
||||||
|
# Copyright (c) 2019 Red Hat, Inc.
|
||||||
|
#
|
||||||
|
# This copyrighted material is made available to anyone wishing
|
||||||
|
# to use, modify, copy, or redistribute it subject to the terms
|
||||||
|
# and conditions of the GNU General Public License version 2.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be
|
||||||
|
# useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||||
|
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
# PURPOSE. See the GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public
|
||||||
|
# License along with this program; if not, write to the Free
|
||||||
|
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||||
|
# Boston, MA 02110-1301, USA.
|
||||||
|
#
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
TENV=_env
|
||||||
|
ifeq ($(PKG_TOP_DIR),)
|
||||||
|
export PKG_TOP_DIR := $(shell p=$$PWD; while :; do \
|
||||||
|
[ -e $$p/env.mk -o -z "$$p" ] && { echo $$p; break; }; p=$${p%/*}; done)
|
||||||
|
export _TOP_DIR := $(shell p=$$PWD; while :; do \
|
||||||
|
[ -d $$p/.git -o -z "$$p" ] && { echo $$p; break; }; p=$${p%/*}; done)
|
||||||
|
-include $(PKG_TOP_DIR)/env.mk
|
||||||
|
endif
|
||||||
|
include $(TENV)
|
||||||
|
ifeq ($(_TOP_DIR),)
|
||||||
|
_TOP_DIR=/mnt/tests/$(TOPLEVEL_NAMESPACE)
|
||||||
|
endif
|
||||||
|
|
||||||
|
export TESTVERSION=1.0
|
||||||
|
|
||||||
|
BUILT_FILES=
|
||||||
|
|
||||||
|
FILES=$(TENV) $(METADATA) Makefile common-tests.sh runtest.sh test-kabi-dw.sh testsuite.tar
|
||||||
|
|
||||||
|
.PHONY: all install download clean
|
||||||
|
|
||||||
|
run: $(FILES) build
|
||||||
|
( set +o posix; . /usr/bin/rhts_environment.sh; \
|
||||||
|
. /usr/share/beakerlib/beakerlib.sh; \
|
||||||
|
. runtest.sh )
|
||||||
|
|
||||||
|
build: $(BUILT_FILES)
|
||||||
|
test -x runtest.sh || chmod a+x runtest.sh
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -fr *~ $(BUILT_FILES)
|
||||||
|
|
||||||
|
include /usr/share/rhts/lib/rhts-make.include
|
||||||
|
|
||||||
|
$(METADATA): Makefile
|
||||||
|
@echo "Owner: Čestmír Kalina <ckalina@redhat.com>" > $(METADATA)
|
||||||
|
@echo "Name: $(TEST)" >> $(METADATA)
|
||||||
|
@echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
|
||||||
|
@echo "Path: $(TEST_DIR)" >> $(METADATA)
|
||||||
|
@echo "Description: kabi-dw tests">> $(METADATA)
|
||||||
|
@echo "Type: Regression" >> $(METADATA)
|
||||||
|
@echo "TestTime: 1h" >> $(METADATA)
|
||||||
|
@echo "RunFor: kabi-dw" >> $(METADATA)
|
||||||
|
@echo "Requires: bash" >> $(METADATA)
|
||||||
|
@echo "Requires: coreutils" >> $(METADATA)
|
||||||
|
@echo "Requires: make" >> $(METADATA)
|
||||||
|
@echo "Requires: kernel" >> $(METADATA)
|
||||||
|
@echo "Requires: kmod" >> $(METADATA)
|
||||||
|
@echo "Requires: grep" >> $(METADATA)
|
||||||
|
@echo "Requires: tar" >> $(METADATA)
|
||||||
|
@echo "Requires: findutils" >> $(METADATA)
|
||||||
|
@echo "Requires: kernel-devel" >> $(METADATA)
|
||||||
|
@echo "Requires: kernel-modules" >> $(METADATA)
|
||||||
|
@echo "Requires: kernel-abi-whitelists" >> $(METADATA)
|
||||||
|
@echo "Requires: xz" >> $(METADATA)
|
||||||
|
@echo "Requires: bzip2" >> $(METADATA)
|
||||||
|
@echo "Requires: gzip" >> $(METADATA)
|
||||||
|
@echo "Requires: $(PACKAGE_NAME) rpm wget" >> $(METADATA)
|
||||||
|
@echo "Priority: Normal" >> $(METADATA)
|
||||||
|
@echo "License: GPLv2" >> $(METADATA)
|
||||||
|
@echo "Confidential: no" >> $(METADATA)
|
||||||
|
@echo "Destructive: no" >> $(METADATA)
|
||||||
|
rhts-lint $(METADATA)
|
||||||
|
|
||||||
|
|
9
tests/sanity/_env
Normal file
9
tests/sanity/_env
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#This file was generated automatically,do not manually change it.
|
||||||
|
export TOPLEVEL_NAMESPACE=kernel
|
||||||
|
export PKG_NAMESPACE=kernel/general
|
||||||
|
export RELATIVE_PATH=kabi-dw/sanity
|
||||||
|
export PACKAGE=general
|
||||||
|
export PACKAGE_NAME=general
|
||||||
|
export PKG_LIST=
|
||||||
|
export TEST=/kernel/general/kabi-dw/sanity
|
||||||
|
|
148
tests/sanity/common-tests.sh
Normal file
148
tests/sanity/common-tests.sh
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
if test -z "$MANUAL"
|
||||||
|
then
|
||||||
|
export COLOR_NC=
|
||||||
|
export COLOR_WHITE=
|
||||||
|
export COLOR_BLACK=
|
||||||
|
export COLOR_BLUE=
|
||||||
|
export COLOR_LIGHT_BLUE=
|
||||||
|
export COLOR_GREEN=
|
||||||
|
export COLOR_LIGHT_GREEN=
|
||||||
|
export COLOR_CYAN=
|
||||||
|
export COLOR_LIGHT_CYAN=
|
||||||
|
export COLOR_RED=
|
||||||
|
export COLOR_LIGHT_RED=
|
||||||
|
export COLOR_PURPLE=
|
||||||
|
export COLOR_LIGHT_PURPLE=
|
||||||
|
export COLOR_BROWN=
|
||||||
|
export COLOR_YELLOW=
|
||||||
|
export COLOR_GRAY=
|
||||||
|
export COLOR_LIGHT_GRAY=
|
||||||
|
else
|
||||||
|
export COLOR_NC='\e[0m'
|
||||||
|
export COLOR_WHITE='\e[1;37m'
|
||||||
|
export COLOR_BLACK='\e[0;30m'
|
||||||
|
export COLOR_BLUE='\e[0;34m'
|
||||||
|
export COLOR_LIGHT_BLUE='\e[1;34m'
|
||||||
|
export COLOR_GREEN='\e[0;32m'
|
||||||
|
export COLOR_LIGHT_GREEN='\e[1;32m'
|
||||||
|
export COLOR_CYAN='\e[0;36m'
|
||||||
|
export COLOR_LIGHT_CYAN='\e[1;36m'
|
||||||
|
export COLOR_RED='\e[0;31m'
|
||||||
|
export COLOR_LIGHT_RED='\e[1;31m'
|
||||||
|
export COLOR_PURPLE='\e[0;35m'
|
||||||
|
export COLOR_LIGHT_PURPLE='\e[1;35m'
|
||||||
|
export COLOR_BROWN='\e[0;33m'
|
||||||
|
export COLOR_YELLOW='\e[1;33m'
|
||||||
|
export COLOR_GRAY='\e[0;30m'
|
||||||
|
export COLOR_LIGHT_GRAY='\e[0;37m'
|
||||||
|
fi
|
||||||
|
|
||||||
|
function pass()
|
||||||
|
{
|
||||||
|
if ! test -z "$MANUAL"
|
||||||
|
then
|
||||||
|
echo -en " $COLOR_GRAY$(printf "%0.s-" {1..35})"
|
||||||
|
echo -en "[ ${COLOR_GREEN}PASS ]"
|
||||||
|
echo -e "$COLOR_GRAY$(printf "%0.s-" {1..36})$COLOR_NC"
|
||||||
|
else
|
||||||
|
rlPass
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function fail()
|
||||||
|
{
|
||||||
|
if ! test -z "$MANUAL"
|
||||||
|
then
|
||||||
|
echo -en " $COLOR_GRAY$(printf "%0.s-" {1..35})"
|
||||||
|
echo -en "[ ${COLOR_RED}FAIL ]"
|
||||||
|
echo -e "$COLOR_GRAY$(printf "%0.s-" {1..36})$COLOR_NC"
|
||||||
|
else
|
||||||
|
rlFail
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function print_test_case()
|
||||||
|
{
|
||||||
|
if test -z "$MANUAL"
|
||||||
|
then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
local msg=" $COLOR_GRAY[${COLOR_BLUE}TEST $1$COLOR_GRAY]"
|
||||||
|
eval msg="\$msg\$(printf "%0.s-" {1..$[80-${#msg}+${#COLOR_BLUE}+2*${#COLOR_GRAY}]})"
|
||||||
|
echo -e "$msg$COLOR_NC"
|
||||||
|
}
|
||||||
|
|
||||||
|
function print_description()
|
||||||
|
{
|
||||||
|
desc=()
|
||||||
|
eval desc=\(\"\${DESCRIPTION_$1[@]}\"\)
|
||||||
|
for desc_line in "${desc[@]}"
|
||||||
|
do
|
||||||
|
echo " $desc_line"
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Perform a test
|
||||||
|
#
|
||||||
|
# $1 test function
|
||||||
|
#
|
||||||
|
function run_test()
|
||||||
|
{
|
||||||
|
rlPhaseStartTest "$1"
|
||||||
|
|
||||||
|
if test $# -eq 0 -o -z $1
|
||||||
|
then
|
||||||
|
rlFail "ERROR: Expected test name to be passed to run_test" \
|
||||||
|
"function." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local stdout_log="$2"
|
||||||
|
local stderr_log="$3"
|
||||||
|
|
||||||
|
if test -z $stdout_log -o ! -e $stdout_log
|
||||||
|
then
|
||||||
|
rlFail "ERROR: Test inconsistency, STDOUT log file missing or" \
|
||||||
|
"non-existent." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z $stderr_log -o ! -e $stderr_log
|
||||||
|
then
|
||||||
|
rlFail "ERROR: Test inconsistency, STDERR log file missing or" \
|
||||||
|
"non-existent." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo > $stdout_log
|
||||||
|
echo > $stderr_log
|
||||||
|
|
||||||
|
print_test_case "$1"
|
||||||
|
|
||||||
|
$1 "$stdout_log" "$stderr_log"
|
||||||
|
ret=$?
|
||||||
|
|
||||||
|
print_description "$1"
|
||||||
|
|
||||||
|
if test $ret -eq 0
|
||||||
|
then
|
||||||
|
pass
|
||||||
|
else
|
||||||
|
fail
|
||||||
|
|
||||||
|
echo "STDOUT {"
|
||||||
|
cat $stdout_log
|
||||||
|
echo "}"
|
||||||
|
|
||||||
|
echo "STDERR {"
|
||||||
|
cat $stderr_log
|
||||||
|
echo "}"
|
||||||
|
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
rlPhaseEnd
|
||||||
|
}
|
131
tests/sanity/runtest.sh
Executable file
131
tests/sanity/runtest.sh
Executable file
@ -0,0 +1,131 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
function cleanup()
|
||||||
|
{
|
||||||
|
rlPhaseStartCleanup
|
||||||
|
rm -rf "${TEMPFILES[@]}"
|
||||||
|
rlPhaseEnd
|
||||||
|
}
|
||||||
|
trap cleanup 0 1 9 15
|
||||||
|
|
||||||
|
# --- Globals -----------------------------------------------------------------
|
||||||
|
|
||||||
|
SCRIPT_ROOT="$(dirname "$(realpath "${BASH_SOURCE[0]}")")"
|
||||||
|
|
||||||
|
# A list of temporary files; used by cleanup to delete on signals 0 1 9 15.
|
||||||
|
TEMPFILES=()
|
||||||
|
|
||||||
|
# A list of dependencies to include.
|
||||||
|
INCLUDES=()
|
||||||
|
|
||||||
|
# A list of files containing test definitions.
|
||||||
|
# These are auto-discovered using test-*.sh pattern.
|
||||||
|
TESTS_FILES=()
|
||||||
|
|
||||||
|
# A list of tests to run.
|
||||||
|
# These are automatically added by test files.
|
||||||
|
TESTS=()
|
||||||
|
|
||||||
|
# --- Initialization ----------------------------------------------------------
|
||||||
|
|
||||||
|
# Requires: restraint-rhts
|
||||||
|
. /usr/bin/rhts-environment.sh || exit 1
|
||||||
|
# Requires: beakerlib
|
||||||
|
. /usr/share/beakerlib/beakerlib.sh || exit 1
|
||||||
|
|
||||||
|
INCLUDES+=("$SCRIPT_ROOT/common-tests.sh")
|
||||||
|
|
||||||
|
TESTS_FILES+=("$SCRIPT_ROOT/test-"*".sh")
|
||||||
|
|
||||||
|
# --- bkr journal -------------------------------------------------------------
|
||||||
|
|
||||||
|
rlJournalStart
|
||||||
|
|
||||||
|
rlPhaseStartSetup
|
||||||
|
|
||||||
|
# --- Load dependencies -------------------------------------------------------
|
||||||
|
|
||||||
|
for path in ${INCLUDES[@]} ${TESTS_FILES[@]}
|
||||||
|
do
|
||||||
|
if ! test -r $path
|
||||||
|
then
|
||||||
|
rlFail "Path \`$path' does not exist or is not readable"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
source $path && {
|
||||||
|
rlPass "File \`$(basename "$path")' loaded."
|
||||||
|
} || {
|
||||||
|
rlFail "Unable to load \`$path'."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
done
|
||||||
|
|
||||||
|
# --- Temporary files ---------------------------------------------------------
|
||||||
|
|
||||||
|
echo ":: Initialization: Temporary files."
|
||||||
|
|
||||||
|
__stdout_log=$(mktemp -p /tmp kabidw-test-stdout.XXXXX)
|
||||||
|
TEMPFILES+=("$__stdout_log")
|
||||||
|
|
||||||
|
__stderr_log=$(mktemp -p /tmp kabidw-test-stderr.XXXXX)
|
||||||
|
TEMPFILES+=("$__stderr_log")
|
||||||
|
|
||||||
|
# --- Evaluate RPM-specific macros --------------------------------------------
|
||||||
|
# This is required not to hardcode kabidw install location should %{_bindir} and
|
||||||
|
# %{_datadir} be changed.
|
||||||
|
|
||||||
|
echo ":: Initialization: Evaluating RPM macros."
|
||||||
|
|
||||||
|
if test -z "$RPM_BIN_DIR"
|
||||||
|
then
|
||||||
|
RPM_BIN_DIR="$(rpm --eval '%{_bindir}')"
|
||||||
|
echo " * RPM %{_bindir} determined as: $RPM_BIN_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z "$RPM_DATA_DIR"
|
||||||
|
then
|
||||||
|
RPM_DATA_DIR="$(rpm --eval '%{_datadir}')"
|
||||||
|
echo " * RPM %{_datadir} determined as: $RPM_DATA_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Determine kabidw location --------------------------------------------------
|
||||||
|
|
||||||
|
if test -z "$KABI_DW_BIN"
|
||||||
|
then
|
||||||
|
KABI_DW_BIN="$RPM_BIN_DIR/kabi-dw"
|
||||||
|
echo ":: kabidw path determined as: $KABI_DW_BIN"
|
||||||
|
fi
|
||||||
|
|
||||||
|
rlPass "Initialization passed."
|
||||||
|
|
||||||
|
rlPhaseEnd
|
||||||
|
|
||||||
|
# --- Run tests ---------------------------------------------------------------
|
||||||
|
|
||||||
|
overall_status=0
|
||||||
|
for test in ${TESTS[@]}
|
||||||
|
do
|
||||||
|
run_test $test "$__stdout_log" "$__stderr_log"
|
||||||
|
if test $? -gt 0
|
||||||
|
then
|
||||||
|
overall_status=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
rlPhaseStartTest
|
||||||
|
|
||||||
|
if test $overall_status -gt 0
|
||||||
|
then
|
||||||
|
rlFail "Some tests failed."
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
rlPass "All tests passed."
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
|
||||||
|
rlPhaseEnd
|
||||||
|
|
||||||
|
rlJournalPrintText
|
||||||
|
|
||||||
|
rlJournalEnd
|
||||||
|
|
49
tests/sanity/test-kabi-dw.sh
Normal file
49
tests/sanity/test-kabi-dw.sh
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
TESTS+=(test_kabidw)
|
||||||
|
|
||||||
|
DESCRIPTION_test_kabidw=(
|
||||||
|
"Invoke kabi-dw test suite."
|
||||||
|
)
|
||||||
|
|
||||||
|
function test_kabidw()
|
||||||
|
{
|
||||||
|
local stdout_log="$1"
|
||||||
|
local stderr_log="$2"
|
||||||
|
shift 2
|
||||||
|
|
||||||
|
OLDCWD="$(pwd)"
|
||||||
|
|
||||||
|
tar xf testsuite.tar
|
||||||
|
cd testsuite
|
||||||
|
|
||||||
|
make clean all KABI_DW="$KABI_DW_BIN" 2> $stderr_log | tee $stdout_log
|
||||||
|
|
||||||
|
# Strip away paths
|
||||||
|
sed -i 's/^File:.*$//' $(find . -path "*/output/*" -type f -iname "*.txt")
|
||||||
|
|
||||||
|
comm -12 \
|
||||||
|
<(find . -type d -iname "output" -exec dirname {} \; | sort | uniq) \
|
||||||
|
<(find . -type d -iname "reference" -exec dirname {} \; | sort | uniq) \
|
||||||
|
| xargs -I% bash -c '[[ $(grep -rh "^Version:" %/{output,reference}/ | sort | uniq | wc -l) != 1 ]] && { echo "[VERSION MISMATCH] Test Case: $(basename %)"; exit; } ; diff -qr %/{output,reference}/ || false'
|
||||||
|
|
||||||
|
if test $? -gt 0
|
||||||
|
then
|
||||||
|
echo
|
||||||
|
echo "$? ERROR: failed with non-zero code."
|
||||||
|
|
||||||
|
echo "STDOUT {"
|
||||||
|
cat $stdout_log
|
||||||
|
echo "}"
|
||||||
|
|
||||||
|
echo "STDERR {"
|
||||||
|
cat $stderr_log
|
||||||
|
echo "}"
|
||||||
|
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "$CWD"
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
BIN
tests/sanity/testsuite.tar
Normal file
BIN
tests/sanity/testsuite.tar
Normal file
Binary file not shown.
18
tests/tests.yml
Normal file
18
tests/tests.yml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
- hosts: localhost
|
||||||
|
tags:
|
||||||
|
- classic
|
||||||
|
roles:
|
||||||
|
- role: standard-test-beakerlib
|
||||||
|
tests:
|
||||||
|
- sanity
|
||||||
|
required_packages:
|
||||||
|
- bash
|
||||||
|
- coreutils
|
||||||
|
- kernel
|
||||||
|
- kernel-devel
|
||||||
|
- kernel-modules
|
||||||
|
- kernel-abi-whitelists
|
||||||
|
- xz
|
||||||
|
- bzip2
|
||||||
|
- gzip
|
||||||
|
|
Loading…
Reference in New Issue
Block a user