blob: c575f8535147b55060a227c327253c49450b103c [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=""
Naresh Kamboju92375fe2017-06-27 17:16:21 +053017TESTPROG_URL=""
Naresh Kamboju687ede42017-05-30 15:02:23 +053018
Riku Voipio85cdee42017-05-15 16:01:06 +030019if [ "$(uname -m)" = "aarch64" ]
20then
21 TESTPROG="kselftest_aarch64.tar.gz"
22fi
Naresh Kambojuc6462732017-01-11 16:26:30 +053023
24usage() {
Naresh Kamboju687ede42017-05-30 15:02:23 +053025 echo "Usage: $0 [-t kselftest_aarch64.tar.gz | kselftest_armhf.tar.gz]
26 [-s True|False]
Naresh Kamboju92375fe2017-06-27 17:16:21 +053027 [-u url]
Naresh Kamboju687ede42017-05-30 15:02:23 +053028 [-L List of skip test cases]
29 [-S kselftest-skipfile]" 1>&2
Naresh Kambojuc6462732017-01-11 16:26:30 +053030 exit 1
31}
32
Naresh Kamboju92375fe2017-06-27 17:16:21 +053033while getopts "t:s:u:L:S:h" opt; do
Naresh Kambojuc6462732017-01-11 16:26:30 +053034 case "${opt}" in
35 t) TESTPROG="${OPTARG}" ;;
36 s) SKIP_INSTALL="${OPTARG}" ;;
Naresh Kamboju92375fe2017-06-27 17:16:21 +053037 # Download kselftest tarball from given URL
38 u) TESTPROG_URL="${OPTARG}" ;;
Naresh Kamboju687ede42017-05-30 15:02:23 +053039 # List of known unsupported test cases to be skipped
40 L) SKIPLIST="${OPTARG}" ;;
41 S)
42 OPT=$(echo "${OPTARG}" | grep "http")
43 if [ -z "${OPT}" ] ; then
44 # kselftest skipfile
45 SKIPFILE="${SCRIPTPATH}/${OPTARG}"
46 else
47 # Download kselftest skipfile from speficied URL
48 wget "${OPTARG}" -O "skipfile"
49 SKIPFILE="skipfile"
50 SKIPFILE="${SCRIPTPATH}/${SKIPFILE}"
51 fi
52 ;;
Naresh Kambojuc6462732017-01-11 16:26:30 +053053 h|*) usage ;;
54 esac
55done
56
57parse_output() {
Naresh Kambojua9927162017-06-06 14:58:33 +053058 grep "selftests:" "${LOGFILE}" > "${RESULT_FILE}"
Naresh Kambojuc6462732017-01-11 16:26:30 +053059 sed -i -e 's/: /-/g' "${RESULT_FILE}"
60 sed -i -e 's/\[//g' "${RESULT_FILE}"
61 sed -i -e 's/]//g' "${RESULT_FILE}"
Naresh Kamboju2345e582017-04-21 16:34:52 +053062 sed -i -e 's/selftests-//g' "${RESULT_FILE}"
Naresh Kambojuc6462732017-01-11 16:26:30 +053063}
64
65install() {
66 dist_name
67 # shellcheck disable=SC2154
68 case "${dist}" in
69 debian|ubuntu) install_deps "sed wget xz-utils" "${SKIP_INSTALL}" ;;
70 centos|fedora) install_deps "sed wget xz" "${SKIP_INSTALL}" ;;
71 unknown) warn_msg "Unsupported distro: package install skipped" ;;
72 esac
73}
74
75! check_root && error_msg "You need to be root to run this script."
76create_out_dir "${OUTPUT}"
77# shellcheck disable=SC2164
78cd "${OUTPUT}"
79
80install
81
82if [ -d "${KSELFTEST_PATH}" ]; then
83 echo "kselftests found on rootfs"
84 # shellcheck disable=SC2164
85 cd "${KSELFTEST_PATH}"
86else
Naresh Kamboju92375fe2017-06-27 17:16:21 +053087 if [ -n "${TESTPROG_URL}" ]; then
88 # Download kselftest tarball from given URL
89 wget "${TESTPROG_URL}" -O kselftest.tar.gz
90 elif [ -n "${TESTPROG}" ]; then
91 # Download and extract kselftest tarball.
92 wget http://testdata.validation.linaro.org/tests/kselftest/"${TESTPROG}" -O kselftest.tar.gz
93 fi
Naresh Kambojuc6462732017-01-11 16:26:30 +053094 tar xf "kselftest.tar.gz"
95 # shellcheck disable=SC2164
96 cd "kselftest"
97fi
98
Naresh Kamboju687ede42017-05-30 15:02:23 +053099if [ -n "${SKIPLIST}" ]; then
100 # shellcheck disable=SC2086
101 for test_name in ${SKIPLIST}; do
102 # shellcheck disable=SC2086
103 sed -i "/.\/${test_name}/c\echo \"selftests: ${test_name} [SKIP]\"" run_kselftest.sh
104 done
105fi
106
107# Ignore SKIPFILE when SKIPLIST provided
108if [ -f "${SKIPFILE}" ] && [ -z "${SKIPLIST}" ]; then
109 while read -r test_name; do
110 # shellcheck disable=SC2086
111 sed -i "/.\/${test_name}/c\echo \"selftests: ${test_name} [SKIP]\"" run_kselftest.sh
112 done < "${SKIPFILE}"
113fi
114
Naresh Kambojuc6462732017-01-11 16:26:30 +0530115# run_kselftest.sh file generated by kselftest Makefile and included in tarball
116./run_kselftest.sh 2>&1 | tee "${LOGFILE}"
117parse_output