|
Packit |
345191 |
#!/bin/bash
|
|
Packit Service |
7f3b24 |
# SPDX-License-Identifier: BSD-2-Clause
|
|
Packit Service |
7f3b24 |
# Copyright (C) 2019 - 2020 Intel Corporation.
|
|
Packit |
345191 |
|
|
Packit |
345191 |
basedir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
Packit |
345191 |
PROGNAME=`basename $0`
|
|
Packit |
345191 |
|
|
Packit |
345191 |
# Default path (to installation dir of memkind-tests RPM)
|
|
Packit |
345191 |
TEST_PATH="$basedir/"
|
|
Packit |
345191 |
|
|
Packit |
345191 |
# Gtest binaries
|
|
Packit |
345191 |
GTEST_BINARIES=(dax_kmem_test)
|
|
Packit |
345191 |
|
|
Packit |
345191 |
# Pytest files
|
|
Packit |
345191 |
PYTEST_FILES=(dax_kmem_env_var_test.py)
|
|
Packit |
345191 |
|
|
Packit |
345191 |
red=`tput setaf 1`
|
|
Packit |
345191 |
green=`tput setaf 2`
|
|
Packit |
345191 |
yellow=`tput setaf 3`
|
|
Packit |
345191 |
default=`tput sgr0`
|
|
Packit |
345191 |
|
|
Packit |
345191 |
err=0
|
|
Packit |
345191 |
|
|
Packit |
345191 |
function usage () {
|
|
Packit |
345191 |
cat <
|
|
Packit |
345191 |
|
|
Packit |
345191 |
Usage: $PROGNAME [-h]
|
|
Packit |
345191 |
|
|
Packit |
345191 |
OPTIONS
|
|
Packit |
345191 |
-h,
|
|
Packit |
345191 |
display script usage
|
|
Packit |
345191 |
EOF
|
|
Packit |
345191 |
}
|
|
Packit |
345191 |
|
|
Packit |
345191 |
function emit() {
|
|
Packit |
345191 |
if [ "$LOG_FILE" != "" ]; then
|
|
Packit |
345191 |
echo "$@" 2>&1 | tee -a $LOG_FILE;
|
|
Packit |
345191 |
else
|
|
Packit |
345191 |
echo "$@"
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
}
|
|
Packit |
345191 |
|
|
Packit |
345191 |
function normalize_path {
|
|
Packit |
345191 |
local PATH=$1
|
|
Packit |
345191 |
if [ ! -d $PATH ];
|
|
Packit |
345191 |
then
|
|
Packit |
345191 |
echo "Not a directory: '$PATH'"
|
|
Packit |
345191 |
usage
|
|
Packit |
345191 |
exit 1
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
if [[ $PATH != /* ]]; then
|
|
Packit |
345191 |
PATH=`pwd`/$PATH
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
echo $PATH
|
|
Packit |
345191 |
}
|
|
Packit |
345191 |
|
|
Packit |
345191 |
function show_skipped_tests()
|
|
Packit |
345191 |
{
|
|
Packit |
345191 |
SKIP_PATTERN=$1
|
|
Packit |
345191 |
DEFAULT_IFS=$IFS
|
|
Packit |
345191 |
|
|
Packit |
345191 |
# Search for gtests that match given pattern
|
|
Packit |
345191 |
for i in ${!GTEST_BINARIES[*]}; do
|
|
Packit |
345191 |
GTEST_BINARY_PATH=$TEST_PATH${GTEST_BINARIES[$i]}
|
|
Packit |
345191 |
for LINE in $($GTEST_BINARY_PATH --gtest_list_tests); do
|
|
Packit |
345191 |
if [[ $LINE == *. ]]; then
|
|
Packit |
345191 |
TEST_SUITE=$LINE;
|
|
Packit |
345191 |
else
|
|
Packit |
345191 |
if [[ "$TEST_SUITE$LINE" == *"$SKIP_PATTERN"* ]]; then
|
|
Packit |
345191 |
emit "$TEST_SUITE$LINE,${yellow}SKIPPED${default}"
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
done
|
|
Packit |
345191 |
done
|
|
Packit |
345191 |
|
|
Packit |
345191 |
# Search for pytests that match given pattern
|
|
Packit |
345191 |
for i in ${!PYTEST_FILES[*]}; do
|
|
Packit |
345191 |
PTEST_BINARY_PATH=$TEST_PATH${PYTEST_FILES[$i]}
|
|
Packit |
345191 |
IFS=$'\n'
|
|
Packit |
345191 |
for LINE in $(py.test $PTEST_BINARY_PATH --collect-only); do
|
|
Packit |
345191 |
if [[ $LINE == *"
|
|
Packit |
345191 |
TEST_SUITE=$(sed "s/^.*'\(.*\)'.*$/\1/" <<< $LINE)
|
|
Packit |
345191 |
elif [[ $LINE == *"
|
|
Packit |
345191 |
LINE=$(sed "s/^.*'\(.*\)'.*$/\1/" <<< $LINE)
|
|
Packit |
345191 |
if [[ "$TEST_SUITE.$LINE" == *"$SKIP_PATTERN"* ]]; then
|
|
Packit |
345191 |
emit "$TEST_SUITE.$LINE,${yellow}SKIPPED${default}"
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
done
|
|
Packit |
345191 |
done
|
|
Packit |
345191 |
|
|
Packit |
345191 |
IFS=$DEFAULT_IFS
|
|
Packit |
345191 |
emit ""
|
|
Packit |
345191 |
}
|
|
Packit |
345191 |
|
|
Packit |
345191 |
function execute_gtest()
|
|
Packit |
345191 |
{
|
|
Packit |
345191 |
ret_val=1
|
|
Packit |
345191 |
TESTCMD=$1
|
|
Packit |
345191 |
TEST=$2
|
|
Packit |
345191 |
# Apply filter (if provided)
|
|
Packit |
345191 |
if [ "$TEST_FILTER" != "" ]; then
|
|
Packit |
345191 |
if [[ $TEST != $TEST_FILTER ]]; then
|
|
Packit |
345191 |
return
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
# Concatenate test command
|
|
Packit |
345191 |
TESTCMD=$(printf "$TESTCMD" "$TEST""$SKIPPED_GTESTS""$RUN_DISABLED_GTEST")
|
|
Packit |
345191 |
# And test prefix if applicable
|
|
Packit |
345191 |
if [ "$TEST_PREFIX" != "" ]; then
|
|
Packit |
345191 |
TESTCMD=$(printf "$TEST_PREFIX" "$TESTCMD")
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
OUTPUT=`eval $TESTCMD`
|
|
Packit |
345191 |
PATOK='.*OK ].*'
|
|
Packit |
345191 |
PATFAILED='.*FAILED ].*'
|
|
Packit |
345191 |
PATSKIPPED='.*PASSED ] 0.*'
|
|
Packit |
345191 |
if [[ $OUTPUT =~ $PATOK ]]; then
|
|
Packit |
345191 |
RESULT="$TEST,${green}PASSED${default}"
|
|
Packit |
345191 |
ret_val=0
|
|
Packit |
345191 |
elif [[ $OUTPUT =~ $PATFAILED ]]; then
|
|
Packit |
345191 |
RESULT="$TEST,${red}FAILED${default}"
|
|
Packit |
345191 |
elif [[ $OUTPUT =~ $PATSKIPPED ]]; then
|
|
Packit |
345191 |
RESULT="$TEST,${yellow}SKIPPED${default}"
|
|
Packit |
345191 |
ret_val=0
|
|
Packit |
345191 |
else
|
|
Packit |
345191 |
RESULT="$TEST,${red}CRASH${default}"
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
if [ "$CSV" != "" ]; then
|
|
Packit |
345191 |
emit "$OUTPUT"
|
|
Packit |
345191 |
echo $RESULT >> $CSV
|
|
Packit |
345191 |
else
|
|
Packit |
345191 |
echo $RESULT
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
return $ret_val
|
|
Packit |
345191 |
}
|
|
Packit |
345191 |
|
|
Packit |
345191 |
function execute_pytest()
|
|
Packit |
345191 |
{
|
|
Packit |
345191 |
ret=1
|
|
Packit |
345191 |
TESTCMD=$1
|
|
Packit |
345191 |
TEST_SUITE=$2
|
|
Packit |
345191 |
TEST=$3
|
|
Packit |
345191 |
# Apply filter (if provided)
|
|
Packit |
345191 |
if [ "$TEST_FILTER" != "" ]; then
|
|
Packit |
345191 |
if [[ $TEST_SUITE.$TEST != $TEST_FILTER ]]; then
|
|
Packit |
345191 |
return
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
# Concatenate test command
|
|
Packit |
345191 |
TESTCMD=$(printf "$TESTCMD" "$TEST$SKIPPED_PYTESTS")
|
|
Packit |
345191 |
# And test prefix if applicable
|
|
Packit |
345191 |
if [ "$TEST_PREFIX" != "" ]; then
|
|
Packit |
345191 |
TESTCMD=$(printf "$TEST_PREFIX" "$TESTCMD")
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
OUTPUT=`eval $TESTCMD`
|
|
Packit |
345191 |
PATOK='.*1 passed.*'
|
|
Packit |
345191 |
PATFAILED='.*1 failed.*'
|
|
Packit |
345191 |
PATSKIPPED='.*deselected.*'
|
|
Packit |
345191 |
if [[ $OUTPUT =~ $PATOK ]]; then
|
|
Packit |
345191 |
RESULT="$TEST_SUITE.$TEST,${green}PASSED${default}"
|
|
Packit |
345191 |
ret=0
|
|
Packit |
345191 |
elif [[ $OUTPUT =~ $PATFAILED ]]; then
|
|
Packit |
345191 |
RESULT="$TEST_SUITE.$TEST,${red}FAILED${default}"
|
|
Packit |
345191 |
elif [[ $OUTPUT =~ $PATSKIPPED ]]; then
|
|
Packit |
345191 |
return 0
|
|
Packit |
345191 |
else
|
|
Packit |
345191 |
RESULT="$TEST_SUITE.$TEST,${red}CRASH${default}"
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
if [ "$CSV" != "" ]; then
|
|
Packit |
345191 |
emit "$OUTPUT"
|
|
Packit |
345191 |
echo $RESULT >> $CSV
|
|
Packit |
345191 |
else
|
|
Packit |
345191 |
echo $RESULT
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
return $ret
|
|
Packit |
345191 |
}
|
|
Packit |
345191 |
|
|
Packit |
345191 |
#Check support for numa nodes (at least two)
|
|
Packit |
345191 |
function check_numa()
|
|
Packit |
345191 |
{
|
|
Packit |
345191 |
numactl --hardware | grep "^node 1" > /dev/null
|
|
Packit |
345191 |
if [ $? -ne 0 ]; then
|
|
Packit |
345191 |
echo "ERROR: $0 requires a NUMA enabled system with more than one node."
|
|
Packit |
345191 |
exit 1
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
}
|
|
Packit |
345191 |
|
|
Packit |
345191 |
#Check automatic support for persistent memory NUMA node - simulate one if no one was found
|
|
Packit |
345191 |
function check_auto_dax_kmem_nodes()
|
|
Packit |
345191 |
{
|
|
Packit |
345191 |
if [ ! -f /usr/bin/memkind-auto-dax-kmem-nodes ]; then
|
|
Packit |
345191 |
if [ -x ./memkind-auto-dax-kmem-nodes ]; then
|
|
Packit |
345191 |
export PATH=$PATH:$PWD
|
|
Packit |
345191 |
else
|
|
Packit |
345191 |
echo "Cannot find 'memkind-auto-dax-kmem-nodes' in $PWD. Did you run 'make'?"
|
|
Packit |
345191 |
exit 1
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
|
|
Packit |
345191 |
ret=$(memkind-auto-dax-kmem-nodes)
|
|
Packit |
345191 |
emit "The binary memkind-auto-dax-kmem-nodes returned code $ret."
|
|
Packit |
345191 |
if [[ $ret == "" ]]; then
|
|
Packit |
345191 |
export MEMKIND_DAX_KMEM_NODES=1
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
}
|
|
Packit |
345191 |
|
|
Packit |
345191 |
#begin of main script
|
|
Packit |
345191 |
|
|
Packit |
345191 |
check_numa
|
|
Packit |
345191 |
|
|
Packit |
345191 |
check_auto_dax_kmem_nodes
|
|
Packit |
345191 |
|
|
Packit |
345191 |
OPTIND=1
|
|
Packit |
345191 |
|
|
Packit |
345191 |
while getopts ":h" opt; do
|
|
Packit |
345191 |
case "$opt" in
|
|
Packit |
345191 |
h)
|
|
Packit |
345191 |
usage;
|
|
Packit |
345191 |
exit 0;
|
|
Packit |
345191 |
;;
|
|
Packit |
345191 |
esac
|
|
Packit |
345191 |
done
|
|
Packit |
345191 |
|
|
Packit |
345191 |
TEST_PATH=`normalize_path "$TEST_PATH"`
|
|
Packit |
345191 |
|
|
Packit |
345191 |
# Clear any remnants of previous execution(s)
|
|
Packit |
345191 |
rm -rf $CSV
|
|
Packit |
345191 |
rm -rf $LOG_FILE
|
|
Packit |
345191 |
|
|
Packit |
345191 |
# Run tests written in gtest
|
|
Packit |
345191 |
for i in ${!GTEST_BINARIES[*]}; do
|
|
Packit |
345191 |
GTEST_BINARY_PATH=$TEST_PATH${GTEST_BINARIES[$i]}
|
|
Packit |
345191 |
emit
|
|
Packit |
345191 |
emit "### Processing gtest binary '$GTEST_BINARY_PATH' ###"
|
|
Packit |
345191 |
for LINE in $($GTEST_BINARY_PATH --gtest_list_tests); do
|
|
Packit |
345191 |
if [[ $LINE == *. ]]; then
|
|
Packit |
345191 |
TEST_SUITE=$LINE;
|
|
Packit |
345191 |
else
|
|
Packit |
345191 |
TEST_CMD="$GTEST_BINARY_PATH --gtest_filter=%s 2>&1"
|
|
Packit |
345191 |
execute_gtest "$TEST_CMD" "$TEST_SUITE$LINE"
|
|
Packit |
345191 |
ret=$?
|
|
Packit |
345191 |
if [ $err -eq 0 ]; then err=$ret; fi
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
done
|
|
Packit |
345191 |
done
|
|
Packit |
345191 |
|
|
Packit |
345191 |
# Run tests written in pytest
|
|
Packit |
345191 |
for i in ${!PYTEST_FILES[*]}; do
|
|
Packit |
345191 |
PTEST_BINARY_PATH=$TEST_PATH${PYTEST_FILES[$i]}
|
|
Packit |
345191 |
emit
|
|
Packit |
345191 |
emit "### Processing pytest file '$PTEST_BINARY_PATH' ###"
|
|
Packit |
345191 |
IFS=$'\n'
|
|
Packit |
345191 |
for LINE in $(py.test $PTEST_BINARY_PATH --collect-only); do
|
|
Packit |
345191 |
if [[ $LINE == *"
|
|
Packit |
345191 |
TEST_SUITE=$(sed "s/^.*'\(.*\)'.*$/\1/" <<< $LINE)
|
|
Packit |
345191 |
elif [[ $LINE == *"
|
|
Packit |
345191 |
LINE=$(sed "s/^.*'\(.*\)'.*$/\1/" <<< $LINE)
|
|
Packit |
345191 |
TEST_CMD="py.test $PTEST_BINARY_PATH -k='%s' 2>&1"
|
|
Packit |
345191 |
execute_pytest "$TEST_CMD" "$TEST_SUITE" "$LINE"
|
|
Packit |
345191 |
ret=$?
|
|
Packit |
345191 |
if [ $err -eq 0 ]; then err=$ret; fi
|
|
Packit |
345191 |
fi
|
|
Packit |
345191 |
done
|
|
Packit |
345191 |
done
|
|
Packit |
345191 |
|
|
Packit |
345191 |
exit $err
|