blob: 212ebc58ca2ad97f0a2cbf9e39e6511bf52aa0c7 [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"
Milosz Wasilewski597e24c2017-09-04 14:06:36 +010010KSELFTEST_PATH="/opt/kselftests/mainline/"
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]
Milosz Wasilewski597e24c2017-09-04 14:06:36 +010028 [-p path]
Naresh Kamboju687ede42017-05-30 15:02:23 +053029 [-L List of skip test cases]
30 [-S kselftest-skipfile]" 1>&2
Naresh Kambojuc6462732017-01-11 16:26:30 +053031 exit 1
32}
33
Milosz Wasilewski597e24c2017-09-04 14:06:36 +010034while getopts "t:s:u:p:L:S:h" opt; do
Naresh Kambojuc6462732017-01-11 16:26:30 +053035 case "${opt}" in
36 t) TESTPROG="${OPTARG}" ;;
37 s) SKIP_INSTALL="${OPTARG}" ;;
Naresh Kamboju92375fe2017-06-27 17:16:21 +053038 # Download kselftest tarball from given URL
39 u) TESTPROG_URL="${OPTARG}" ;;
Naresh Kamboju687ede42017-05-30 15:02:23 +053040 # List of known unsupported test cases to be skipped
41 L) SKIPLIST="${OPTARG}" ;;
Milosz Wasilewski597e24c2017-09-04 14:06:36 +010042 p) KSELFTEST_PATH="${OPTARG}" ;;
Naresh Kamboju687ede42017-05-30 15:02:23 +053043 S)
44 OPT=$(echo "${OPTARG}" | grep "http")
45 if [ -z "${OPT}" ] ; then
46 # kselftest skipfile
47 SKIPFILE="${SCRIPTPATH}/${OPTARG}"
48 else
49 # Download kselftest skipfile from speficied URL
50 wget "${OPTARG}" -O "skipfile"
51 SKIPFILE="skipfile"
52 SKIPFILE="${SCRIPTPATH}/${SKIPFILE}"
53 fi
54 ;;
Naresh Kambojuc6462732017-01-11 16:26:30 +053055 h|*) usage ;;
56 esac
57done
58
59parse_output() {
Naresh Kambojua9927162017-06-06 14:58:33 +053060 grep "selftests:" "${LOGFILE}" > "${RESULT_FILE}"
Naresh Kambojuc6462732017-01-11 16:26:30 +053061 sed -i -e 's/: /-/g' "${RESULT_FILE}"
62 sed -i -e 's/\[//g' "${RESULT_FILE}"
63 sed -i -e 's/]//g' "${RESULT_FILE}"
Naresh Kamboju2345e582017-04-21 16:34:52 +053064 sed -i -e 's/selftests-//g' "${RESULT_FILE}"
Naresh Kambojuc6462732017-01-11 16:26:30 +053065}
66
67install() {
68 dist_name
69 # shellcheck disable=SC2154
70 case "${dist}" in
71 debian|ubuntu) install_deps "sed wget xz-utils" "${SKIP_INSTALL}" ;;
72 centos|fedora) install_deps "sed wget xz" "${SKIP_INSTALL}" ;;
73 unknown) warn_msg "Unsupported distro: package install skipped" ;;
74 esac
75}
76
77! check_root && error_msg "You need to be root to run this script."
78create_out_dir "${OUTPUT}"
79# shellcheck disable=SC2164
80cd "${OUTPUT}"
81
82install
83
84if [ -d "${KSELFTEST_PATH}" ]; then
85 echo "kselftests found on rootfs"
86 # shellcheck disable=SC2164
87 cd "${KSELFTEST_PATH}"
88else
Naresh Kamboju92375fe2017-06-27 17:16:21 +053089 if [ -n "${TESTPROG_URL}" ]; then
90 # Download kselftest tarball from given URL
91 wget "${TESTPROG_URL}" -O kselftest.tar.gz
92 elif [ -n "${TESTPROG}" ]; then
93 # Download and extract kselftest tarball.
94 wget http://testdata.validation.linaro.org/tests/kselftest/"${TESTPROG}" -O kselftest.tar.gz
95 fi
Naresh Kambojuc6462732017-01-11 16:26:30 +053096 tar xf "kselftest.tar.gz"
97 # shellcheck disable=SC2164
98 cd "kselftest"
99fi
100
Naresh Kamboju687ede42017-05-30 15:02:23 +0530101if [ -n "${SKIPLIST}" ]; then
102 # shellcheck disable=SC2086
103 for test_name in ${SKIPLIST}; do
104 # shellcheck disable=SC2086
105 sed -i "/.\/${test_name}/c\echo \"selftests: ${test_name} [SKIP]\"" run_kselftest.sh
106 done
107fi
108
109# Ignore SKIPFILE when SKIPLIST provided
110if [ -f "${SKIPFILE}" ] && [ -z "${SKIPLIST}" ]; then
111 while read -r test_name; do
112 # shellcheck disable=SC2086
113 sed -i "/.\/${test_name}/c\echo \"selftests: ${test_name} [SKIP]\"" run_kselftest.sh
114 done < "${SKIPFILE}"
115fi
116
Naresh Kambojuc6462732017-01-11 16:26:30 +0530117# run_kselftest.sh file generated by kselftest Makefile and included in tarball
118./run_kselftest.sh 2>&1 | tee "${LOGFILE}"
119parse_output