blob: 6ab56ad213d8cb9dea767b0c66f28799f1cc4d18 [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=""
Dan Ruea12a8382018-03-05 12:03:15 -060016# List of test cases to be skipped in yaml/skipgen format
17SKIPFILE_YAML=""
18BOARD=""
19BRANCH=""
20ENVIRONMENT=""
Naresh Kamboju687ede42017-05-30 15:02:23 +053021SKIPLIST=""
Naresh Kamboju92375fe2017-06-27 17:16:21 +053022TESTPROG_URL=""
Naresh Kamboju687ede42017-05-30 15:02:23 +053023
Riku Voipio85cdee42017-05-15 16:01:06 +030024if [ "$(uname -m)" = "aarch64" ]
25then
26 TESTPROG="kselftest_aarch64.tar.gz"
27fi
Naresh Kambojuc6462732017-01-11 16:26:30 +053028
29usage() {
Naresh Kamboju687ede42017-05-30 15:02:23 +053030 echo "Usage: $0 [-t kselftest_aarch64.tar.gz | kselftest_armhf.tar.gz]
31 [-s True|False]
Naresh Kamboju92375fe2017-06-27 17:16:21 +053032 [-u url]
Milosz Wasilewski597e24c2017-09-04 14:06:36 +010033 [-p path]
Naresh Kamboju687ede42017-05-30 15:02:23 +053034 [-L List of skip test cases]
Dan Ruea12a8382018-03-05 12:03:15 -060035 [-S kselftest-skipfile]
36 [-b board]
37 [-g branch]
38 [-e environment]" 1>&2
Naresh Kambojuc6462732017-01-11 16:26:30 +053039 exit 1
40}
41
Naresh Kambojue87b37e2018-11-23 10:15:00 +053042while getopts "t:s:u:p:L:S:b:g:e:h" opt; do
Naresh Kambojuc6462732017-01-11 16:26:30 +053043 case "${opt}" in
44 t) TESTPROG="${OPTARG}" ;;
45 s) SKIP_INSTALL="${OPTARG}" ;;
Naresh Kamboju92375fe2017-06-27 17:16:21 +053046 # Download kselftest tarball from given URL
47 u) TESTPROG_URL="${OPTARG}" ;;
Naresh Kamboju687ede42017-05-30 15:02:23 +053048 # List of known unsupported test cases to be skipped
49 L) SKIPLIST="${OPTARG}" ;;
Milosz Wasilewski597e24c2017-09-04 14:06:36 +010050 p) KSELFTEST_PATH="${OPTARG}" ;;
Naresh Kamboju687ede42017-05-30 15:02:23 +053051 S)
Dan Ruea12a8382018-03-05 12:03:15 -060052
53 #OPT=$(echo "${OPTARG}" | grep "http")
54 #if [ -z "${OPT}" ] ; then
55 ## kselftest skipfile
56 # SKIPFILE="${SCRIPTPATH}/${OPTARG}"
57 #else
58 ## Download kselftest skipfile from speficied URL
59 # wget "${OPTARG}" -O "skipfile"
60 # SKIPFILE="skipfile"
61 # SKIPFILE="${SCRIPTPATH}/${SKIPFILE}"
62 #fi
63
64 if [ -z "${OPTARG##*http*}" ]; then
65 if [ -z "${OPTARG##*yaml*}" ]; then
66 # Skipfile is of type yaml
67 SKIPFILE_TMP="http-skipfile.yaml"
68 SKIPFILE_YAML="${SCRIPTPATH}/${SKIPFILE_TMP}"
69 else
70 # Skipfile is normal skipfile
71 SKIPFILE_TMP="http-skipfile"
72 SKIPFILE="${SCRIPTPATH}/${SKIPFILE_TMP}"
73 fi
74 # Download LTP skipfile from specified URL
75 if ! wget "${OPTARG}" -O "${SKIPFILE_TMP}"; then
76 error_msg "Failed to fetch ${OPTARG}"
77 exit 1
78 fi
79 elif [ "${OPTARG##*.}" = "yaml" ]; then
80 # yaml skipfile; use skipgen to generate a skipfile
81 SKIPFILE_YAML="${SCRIPTPATH}/${OPTARG}"
Naresh Kamboju687ede42017-05-30 15:02:23 +053082 else
Dan Ruea12a8382018-03-05 12:03:15 -060083 # Regular LTP skipfile
84 SKIPFILE="${SCRIPTPATH}/${OPTARG}"
Naresh Kamboju687ede42017-05-30 15:02:23 +053085 fi
86 ;;
Dan Ruea12a8382018-03-05 12:03:15 -060087
88 b)
89 export BOARD="${OPTARG}"
90 ;;
91 g)
92 export BRANCH="${OPTARG}"
93 ;;
94 e)
95 export ENVIRONMENT="${OPTARG}"
96 ;;
Naresh Kambojuc6462732017-01-11 16:26:30 +053097 h|*) usage ;;
98 esac
99done
100
Dan Ruea12a8382018-03-05 12:03:15 -0600101if [ -n "${SKIPFILE_YAML}" ]; then
102 export SKIPFILE_PATH="${SCRIPTPATH}/generated_skipfile"
103 generate_skipfile
104 if [ ! -f "${SKIPFILE_PATH}" ]; then
105 error_msg "Skipfile ${SKIPFILE} does not exist";
106 exit 1
107 fi
108 SKIPFILE="${SKIPFILE_PATH}"
109fi
110
111
Naresh Kambojuc6462732017-01-11 16:26:30 +0530112parse_output() {
Anders Roxellaaa753d2019-06-01 13:29:58 +0200113 grep "^selftests:" "${LOGFILE}" > "${RESULT_FILE}"
Naresh Kambojuc6462732017-01-11 16:26:30 +0530114}
115
116install() {
117 dist_name
118 # shellcheck disable=SC2154
119 case "${dist}" in
Kevin Hilmanbe7b6f52020-07-15 11:28:39 -0700120 debian|ubuntu) install_deps "sed wget xz-utils iproute2" "${SKIP_INSTALL}" ;;
121 centos|fedora) install_deps "sed wget xz iproute" "${SKIP_INSTALL}" ;;
Naresh Kambojuc6462732017-01-11 16:26:30 +0530122 unknown) warn_msg "Unsupported distro: package install skipped" ;;
123 esac
124}
125
126! check_root && error_msg "You need to be root to run this script."
127create_out_dir "${OUTPUT}"
128# shellcheck disable=SC2164
129cd "${OUTPUT}"
130
131install
132
133if [ -d "${KSELFTEST_PATH}" ]; then
134 echo "kselftests found on rootfs"
135 # shellcheck disable=SC2164
136 cd "${KSELFTEST_PATH}"
137else
Naresh Kamboju92375fe2017-06-27 17:16:21 +0530138 if [ -n "${TESTPROG_URL}" ]; then
139 # Download kselftest tarball from given URL
140 wget "${TESTPROG_URL}" -O kselftest.tar.gz
141 elif [ -n "${TESTPROG}" ]; then
142 # Download and extract kselftest tarball.
143 wget http://testdata.validation.linaro.org/tests/kselftest/"${TESTPROG}" -O kselftest.tar.gz
144 fi
Patryk Mungaidf44aed2019-03-14 13:14:15 +0000145 tar zxf "kselftest.tar.gz"
Naresh Kambojuc6462732017-01-11 16:26:30 +0530146 # shellcheck disable=SC2164
Kevin Hilman96efe162020-07-14 11:59:30 -0700147 if [ ! -e "run_kselftest.sh" ]; then cd "kselftest"; fi
Naresh Kambojuc6462732017-01-11 16:26:30 +0530148fi
149
Naresh Kamboju687ede42017-05-30 15:02:23 +0530150if [ -n "${SKIPLIST}" ]; then
151 # shellcheck disable=SC2086
152 for test_name in ${SKIPLIST}; do
153 # shellcheck disable=SC2086
Anders Roxell5c160f72019-05-14 13:38:36 +0200154 sed -e ':a;N;$!ba;s/\n/@/g' -e 's/\t\\\@\t\"'${test_name}'\"//' -e 's/@/\n/g' -i run_kselftest.sh
155 echo "selftests: tmpskipdir: ${test_name}" >> target_skipfile.txt
Naresh Kamboju687ede42017-05-30 15:02:23 +0530156 done
157fi
158
159# Ignore SKIPFILE when SKIPLIST provided
160if [ -f "${SKIPFILE}" ] && [ -z "${SKIPLIST}" ]; then
161 while read -r test_name; do
Milosz Wasilewskib4e37e92017-12-04 11:55:26 +0000162 case "${test_name}" in \#*) continue ;; esac
Naresh Kamboju687ede42017-05-30 15:02:23 +0530163 # shellcheck disable=SC2086
Anders Roxell5c160f72019-05-14 13:38:36 +0200164 sed -e ':a;N;$!ba;s/\n/@/g' -e 's/\t\\\@\t\"'${test_name}'\"//' -e 's/@/\n/g' -i run_kselftest.sh
165 echo "selftests: tmpskipdir: ${test_name}" >> target_skipfile.txt
Naresh Kamboju687ede42017-05-30 15:02:23 +0530166 done < "${SKIPFILE}"
167fi
168
Anders Roxell5c160f72019-05-14 13:38:36 +0200169echo "========================================"
170echo "skiplist:"
171cat target_skipfile.txt
172echo ""
173echo "========================================"
Naresh Kambojuc6462732017-01-11 16:26:30 +0530174# run_kselftest.sh file generated by kselftest Makefile and included in tarball
Anders Roxellaaa753d2019-06-01 13:29:58 +0200175./run_kselftest.sh 2>&1 | tee "${LOGFILE}" | sed 's/^not ok/[FAIL]/'|sed 's/^ok/[PASS]/'|sed 's/://g'|awk '{if ($0 ~ "# SKIP") {$1 = "[SKIP]"} print $0"\n"$3 ": " $4"_"$5 " " $1}'
Naresh Kambojuc6462732017-01-11 16:26:30 +0530176parse_output