blob: d0c25966cd73404e80231807ce046e95d19f1b72 [file] [log] [blame]
Naresh Kambojuc6462732017-01-11 16:26:30 +05301#!/bin/sh
2# Linux kernel self test
3
4# shellcheck disable=SC1091
5. ../../lib/sh-test-lib
6OUTPUT="$(pwd)/output"
7RESULT_FILE="${OUTPUT}/result.txt"
8LOGFILE="${OUTPUT}/kselftest.txt"
9TESTPROG="kselftest_armhf.tar.gz"
10KSELFTEST_PATH="/usr/bin/kselftests"
Naresh Kamboju687ede42017-05-30 15:02:23 +053011
12SCRIPT="$(readlink -f "${0}")"
13SCRIPTPATH="$(dirname "${SCRIPT}")"
14# List of known unsupported test cases to be skipped
15SKIPFILE=""
16SKIPLIST=""
17
Riku Voipio85cdee42017-05-15 16:01:06 +030018if [ "$(uname -m)" = "aarch64" ]
19then
20 TESTPROG="kselftest_aarch64.tar.gz"
21fi
Naresh Kambojuc6462732017-01-11 16:26:30 +053022
23usage() {
Naresh Kamboju687ede42017-05-30 15:02:23 +053024 echo "Usage: $0 [-t kselftest_aarch64.tar.gz | kselftest_armhf.tar.gz]
25 [-s True|False]
26 [-L List of skip test cases]
27 [-S kselftest-skipfile]" 1>&2
Naresh Kambojuc6462732017-01-11 16:26:30 +053028 exit 1
29}
30
Naresh Kamboju687ede42017-05-30 15:02:23 +053031while getopts "t:s:L:S:h" opt; do
Naresh Kambojuc6462732017-01-11 16:26:30 +053032 case "${opt}" in
33 t) TESTPROG="${OPTARG}" ;;
34 s) SKIP_INSTALL="${OPTARG}" ;;
Naresh Kamboju687ede42017-05-30 15:02:23 +053035 # List of known unsupported test cases to be skipped
36 L) SKIPLIST="${OPTARG}" ;;
37 S)
38 OPT=$(echo "${OPTARG}" | grep "http")
39 if [ -z "${OPT}" ] ; then
40 # kselftest skipfile
41 SKIPFILE="${SCRIPTPATH}/${OPTARG}"
42 else
43 # Download kselftest skipfile from speficied URL
44 wget "${OPTARG}" -O "skipfile"
45 SKIPFILE="skipfile"
46 SKIPFILE="${SCRIPTPATH}/${SKIPFILE}"
47 fi
48 ;;
Naresh Kambojuc6462732017-01-11 16:26:30 +053049 h|*) usage ;;
50 esac
51done
52
53parse_output() {
54 grep "selftests:" "${LOGFILE}" 2>&1 | tee -a "${RESULT_FILE}"
55 sed -i -e 's/: /-/g' "${RESULT_FILE}"
56 sed -i -e 's/\[//g' "${RESULT_FILE}"
57 sed -i -e 's/]//g' "${RESULT_FILE}"
Naresh Kamboju2345e582017-04-21 16:34:52 +053058 sed -i -e 's/selftests-//g' "${RESULT_FILE}"
Naresh Kambojuc6462732017-01-11 16:26:30 +053059}
60
61install() {
62 dist_name
63 # shellcheck disable=SC2154
64 case "${dist}" in
65 debian|ubuntu) install_deps "sed wget xz-utils" "${SKIP_INSTALL}" ;;
66 centos|fedora) install_deps "sed wget xz" "${SKIP_INSTALL}" ;;
67 unknown) warn_msg "Unsupported distro: package install skipped" ;;
68 esac
69}
70
71! check_root && error_msg "You need to be root to run this script."
72create_out_dir "${OUTPUT}"
73# shellcheck disable=SC2164
74cd "${OUTPUT}"
75
76install
77
78if [ -d "${KSELFTEST_PATH}" ]; then
79 echo "kselftests found on rootfs"
80 # shellcheck disable=SC2164
81 cd "${KSELFTEST_PATH}"
82else
83 # Download and extract kselftest tarball.
84 wget http://testdata.validation.linaro.org/tests/kselftest/"${TESTPROG}" -O kselftest.tar.gz
85 tar xf "kselftest.tar.gz"
86 # shellcheck disable=SC2164
87 cd "kselftest"
88fi
89
Naresh Kamboju687ede42017-05-30 15:02:23 +053090if [ -n "${SKIPLIST}" ]; then
91 # shellcheck disable=SC2086
92 for test_name in ${SKIPLIST}; do
93 # shellcheck disable=SC2086
94 sed -i "/.\/${test_name}/c\echo \"selftests: ${test_name} [SKIP]\"" run_kselftest.sh
95 done
96fi
97
98# Ignore SKIPFILE when SKIPLIST provided
99if [ -f "${SKIPFILE}" ] && [ -z "${SKIPLIST}" ]; then
100 while read -r test_name; do
101 # shellcheck disable=SC2086
102 sed -i "/.\/${test_name}/c\echo \"selftests: ${test_name} [SKIP]\"" run_kselftest.sh
103 done < "${SKIPFILE}"
104fi
105
Naresh Kambojuc6462732017-01-11 16:26:30 +0530106# run_kselftest.sh file generated by kselftest Makefile and included in tarball
107./run_kselftest.sh 2>&1 | tee "${LOGFILE}"
108parse_output