blob: f06fc8d7b9526b029c0b4d17ec29b2ba0adea90f [file] [log] [blame]
Naresh Kambojuc6462732017-01-11 16:26:30 +05301#!/bin/sh
2# Linux kernel self test
Dan Ruea12a8382018-03-05 12:03:15 -06003set -x
Naresh Kambojuc6462732017-01-11 16:26:30 +05304
5# shellcheck disable=SC1091
6. ../../lib/sh-test-lib
7OUTPUT="$(pwd)/output"
8RESULT_FILE="${OUTPUT}/result.txt"
9LOGFILE="${OUTPUT}/kselftest.txt"
10TESTPROG="kselftest_armhf.tar.gz"
Milosz Wasilewski597e24c2017-09-04 14:06:36 +010011KSELFTEST_PATH="/opt/kselftests/mainline/"
Naresh Kamboju687ede42017-05-30 15:02:23 +053012
13SCRIPT="$(readlink -f "${0}")"
14SCRIPTPATH="$(dirname "${SCRIPT}")"
15# List of known unsupported test cases to be skipped
16SKIPFILE=""
Dan Ruea12a8382018-03-05 12:03:15 -060017# List of test cases to be skipped in yaml/skipgen format
18SKIPFILE_YAML=""
19BOARD=""
20BRANCH=""
21ENVIRONMENT=""
Naresh Kamboju687ede42017-05-30 15:02:23 +053022SKIPLIST=""
Naresh Kamboju92375fe2017-06-27 17:16:21 +053023TESTPROG_URL=""
Naresh Kamboju687ede42017-05-30 15:02:23 +053024
Riku Voipio85cdee42017-05-15 16:01:06 +030025if [ "$(uname -m)" = "aarch64" ]
26then
27 TESTPROG="kselftest_aarch64.tar.gz"
28fi
Naresh Kambojuc6462732017-01-11 16:26:30 +053029
30usage() {
Naresh Kamboju687ede42017-05-30 15:02:23 +053031 echo "Usage: $0 [-t kselftest_aarch64.tar.gz | kselftest_armhf.tar.gz]
32 [-s True|False]
Naresh Kamboju92375fe2017-06-27 17:16:21 +053033 [-u url]
Milosz Wasilewski597e24c2017-09-04 14:06:36 +010034 [-p path]
Naresh Kamboju687ede42017-05-30 15:02:23 +053035 [-L List of skip test cases]
Dan Ruea12a8382018-03-05 12:03:15 -060036 [-S kselftest-skipfile]
37 [-b board]
38 [-g branch]
39 [-e environment]" 1>&2
Naresh Kambojuc6462732017-01-11 16:26:30 +053040 exit 1
41}
42
Dan Ruea12a8382018-03-05 12:03:15 -060043while getopts "t:s:u:p:L:S:b:g:e:h" opt; do
Naresh Kambojuc6462732017-01-11 16:26:30 +053044 case "${opt}" in
45 t) TESTPROG="${OPTARG}" ;;
46 s) SKIP_INSTALL="${OPTARG}" ;;
Naresh Kamboju92375fe2017-06-27 17:16:21 +053047 # Download kselftest tarball from given URL
48 u) TESTPROG_URL="${OPTARG}" ;;
Naresh Kamboju687ede42017-05-30 15:02:23 +053049 # List of known unsupported test cases to be skipped
50 L) SKIPLIST="${OPTARG}" ;;
Milosz Wasilewski597e24c2017-09-04 14:06:36 +010051 p) KSELFTEST_PATH="${OPTARG}" ;;
Naresh Kamboju687ede42017-05-30 15:02:23 +053052 S)
Dan Ruea12a8382018-03-05 12:03:15 -060053
54 #OPT=$(echo "${OPTARG}" | grep "http")
55 #if [ -z "${OPT}" ] ; then
56 ## kselftest skipfile
57 # SKIPFILE="${SCRIPTPATH}/${OPTARG}"
58 #else
59 ## Download kselftest skipfile from speficied URL
60 # wget "${OPTARG}" -O "skipfile"
61 # SKIPFILE="skipfile"
62 # SKIPFILE="${SCRIPTPATH}/${SKIPFILE}"
63 #fi
64
65 if [ -z "${OPTARG##*http*}" ]; then
66 if [ -z "${OPTARG##*yaml*}" ]; then
67 # Skipfile is of type yaml
68 SKIPFILE_TMP="http-skipfile.yaml"
69 SKIPFILE_YAML="${SCRIPTPATH}/${SKIPFILE_TMP}"
70 else
71 # Skipfile is normal skipfile
72 SKIPFILE_TMP="http-skipfile"
73 SKIPFILE="${SCRIPTPATH}/${SKIPFILE_TMP}"
74 fi
75 # Download LTP skipfile from specified URL
76 if ! wget "${OPTARG}" -O "${SKIPFILE_TMP}"; then
77 error_msg "Failed to fetch ${OPTARG}"
78 exit 1
79 fi
80 elif [ "${OPTARG##*.}" = "yaml" ]; then
81 # yaml skipfile; use skipgen to generate a skipfile
82 SKIPFILE_YAML="${SCRIPTPATH}/${OPTARG}"
Naresh Kamboju687ede42017-05-30 15:02:23 +053083 else
Dan Ruea12a8382018-03-05 12:03:15 -060084 # Regular LTP skipfile
85 SKIPFILE="${SCRIPTPATH}/${OPTARG}"
Naresh Kamboju687ede42017-05-30 15:02:23 +053086 fi
87 ;;
Dan Ruea12a8382018-03-05 12:03:15 -060088
89 b)
90 export BOARD="${OPTARG}"
91 ;;
92 g)
93 export BRANCH="${OPTARG}"
94 ;;
95 e)
96 export ENVIRONMENT="${OPTARG}"
97 ;;
Naresh Kambojuc6462732017-01-11 16:26:30 +053098 h|*) usage ;;
99 esac
100done
101
Dan Ruea12a8382018-03-05 12:03:15 -0600102if [ -n "${SKIPFILE_YAML}" ]; then
103 export SKIPFILE_PATH="${SCRIPTPATH}/generated_skipfile"
104 generate_skipfile
105 if [ ! -f "${SKIPFILE_PATH}" ]; then
106 error_msg "Skipfile ${SKIPFILE} does not exist";
107 exit 1
108 fi
109 SKIPFILE="${SKIPFILE_PATH}"
110fi
111
112
Naresh Kambojuc6462732017-01-11 16:26:30 +0530113parse_output() {
Naresh Kambojua9927162017-06-06 14:58:33 +0530114 grep "selftests:" "${LOGFILE}" > "${RESULT_FILE}"
Naresh Kambojuc6462732017-01-11 16:26:30 +0530115 sed -i -e 's/: /-/g' "${RESULT_FILE}"
116 sed -i -e 's/\[//g' "${RESULT_FILE}"
117 sed -i -e 's/]//g' "${RESULT_FILE}"
Naresh Kamboju2345e582017-04-21 16:34:52 +0530118 sed -i -e 's/selftests-//g' "${RESULT_FILE}"
Naresh Kambojuc6462732017-01-11 16:26:30 +0530119}
120
121install() {
122 dist_name
123 # shellcheck disable=SC2154
124 case "${dist}" in
125 debian|ubuntu) install_deps "sed wget xz-utils" "${SKIP_INSTALL}" ;;
126 centos|fedora) install_deps "sed wget xz" "${SKIP_INSTALL}" ;;
127 unknown) warn_msg "Unsupported distro: package install skipped" ;;
128 esac
129}
130
131! check_root && error_msg "You need to be root to run this script."
132create_out_dir "${OUTPUT}"
133# shellcheck disable=SC2164
134cd "${OUTPUT}"
135
136install
137
138if [ -d "${KSELFTEST_PATH}" ]; then
139 echo "kselftests found on rootfs"
140 # shellcheck disable=SC2164
141 cd "${KSELFTEST_PATH}"
142else
Naresh Kamboju92375fe2017-06-27 17:16:21 +0530143 if [ -n "${TESTPROG_URL}" ]; then
144 # Download kselftest tarball from given URL
145 wget "${TESTPROG_URL}" -O kselftest.tar.gz
146 elif [ -n "${TESTPROG}" ]; then
147 # Download and extract kselftest tarball.
148 wget http://testdata.validation.linaro.org/tests/kselftest/"${TESTPROG}" -O kselftest.tar.gz
149 fi
Naresh Kambojuc6462732017-01-11 16:26:30 +0530150 tar xf "kselftest.tar.gz"
151 # shellcheck disable=SC2164
152 cd "kselftest"
153fi
154
Naresh Kamboju687ede42017-05-30 15:02:23 +0530155if [ -n "${SKIPLIST}" ]; then
156 # shellcheck disable=SC2086
157 for test_name in ${SKIPLIST}; do
158 # shellcheck disable=SC2086
159 sed -i "/.\/${test_name}/c\echo \"selftests: ${test_name} [SKIP]\"" run_kselftest.sh
160 done
161fi
162
163# Ignore SKIPFILE when SKIPLIST provided
164if [ -f "${SKIPFILE}" ] && [ -z "${SKIPLIST}" ]; then
165 while read -r test_name; do
Milosz Wasilewskib4e37e92017-12-04 11:55:26 +0000166 case "${test_name}" in \#*) continue ;; esac
Naresh Kamboju687ede42017-05-30 15:02:23 +0530167 # shellcheck disable=SC2086
168 sed -i "/.\/${test_name}/c\echo \"selftests: ${test_name} [SKIP]\"" run_kselftest.sh
169 done < "${SKIPFILE}"
170fi
171
Naresh Kambojuc6462732017-01-11 16:26:30 +0530172# run_kselftest.sh file generated by kselftest Makefile and included in tarball
173./run_kselftest.sh 2>&1 | tee "${LOGFILE}"
174parse_output