| #!/usr/bin/env bash |
| |
| # Copyright 2021 The Android KVM Authors |
| # |
| # Licensed 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. |
| |
| set -eufo pipefail |
| |
| KSFT_TEST="$(sed -E 's/.*ksft=([^ ]*).*/\1/' /proc/cmdline)" |
| |
| PASS() { echo -e "\e[32mPASS\e[0m ${KSFT_TEST} ${1-}"; } |
| SKIP() { echo -e "\e[33mSKIP\e[0m ${KSFT_TEST} ${1-}"; } |
| FAIL() { echo -e "\e[31mFAIL\e[0m ${KSFT_TEST} ${1-}"; } |
| |
| KSFT_LOG=/tmp/output.log |
| KSFT_DIR=/mnt |
| MODULES_DIR=/lib/modules |
| RUN_KSFT=${KSFT_DIR}/run_kselftest.sh |
| |
| mount -t 9p -o trans=virtio,version=9p2000.L kselftest "${KSFT_DIR}" |
| mount -t 9p -o trans=virtio,version=9p2000.L modules "${MODULES_DIR}" |
| |
| # Run kselftests. |
| "${RUN_KSFT}" -t "${KSFT_TEST}" | tee "${KSFT_LOG}" || true |
| |
| # Count test results for summary. |
| OK_TEST=$(egrep -c '^ok ' "${KSFT_LOG}" || test $? -eq 1) |
| SKIPPED=$(egrep -c '^ok .* # SKIP$' "${KSFT_LOG}" || test $? -eq 1) |
| PASSED=$(expr ${OK_TEST} - ${SKIPPED} || test $? -eq 1) |
| FAILED=$(egrep -c '^not ok ' "${KSFT_LOG}" || test $? -eq 1) |
| TOTAL=$(expr ${PASSED} + ${SKIPPED} + ${FAILED} || test $? -eq 1) |
| |
| MSG="${TOTAL} tests" |
| if [ "${FAILED}" -ne 0 ]; then |
| MSG+=", ${FAILED} failed" |
| fi |
| if [ "${SKIPPED}" -ne 0 ]; then |
| MSG+=", ${SKIPPED} skipped" |
| fi |
| |
| if [ "${TOTAL}" -eq 0 ]; then |
| FAIL "(no tests found)" |
| exit 1 |
| elif [ "${FAILED}" -ne 0 ]; then |
| FAIL "(${MSG})" |
| exit 1 |
| elif [ "${PASSED}" -eq 0 ]; then |
| SKIP "(${MSG})" |
| exit 0 |
| else |
| PASS "(${MSG})" |
| exit 0 |
| fi |