blob: ee8902ff1180cc135829ebefdd4e5c8f382885ec [file] [log] [blame]
Naresh Kambojuad19d882016-09-20 19:31:00 +05301#!/bin/bash
2
Dan Rue9e11dcd2017-10-04 11:29:04 -05003set -x
4
Chase Qi890c1202017-06-19 16:09:27 +08005# shellcheck disable=SC1091
Naresh Kambojuad19d882016-09-20 19:31:00 +05306. ../../lib/sh-test-lib
7OUTPUT="$(pwd)/output"
8RESULT_FILE="${OUTPUT}/result.txt"
9# Absolute path to this script. /home/user/bin/foo.sh
Naresh Kamboju43e80742017-01-18 15:51:02 +053010SCRIPT="$(readlink -f "${0}")"
Naresh Kambojuad19d882016-09-20 19:31:00 +053011# Absolute path this script is in. /home/user/bin
Naresh Kamboju43e80742017-01-18 15:51:02 +053012SCRIPTPATH="$(dirname "${SCRIPT}")"
13echo "Script path is: ${SCRIPTPATH}"
Naresh Kambojuad19d882016-09-20 19:31:00 +053014# List of test cases
15TST_CMDFILES=""
16# List of test cases to be skipped
17SKIPFILE=""
Dan Ruef4970552018-01-26 17:28:35 -060018# List of test cases to be skipped in yaml/skipgen format
19SKIPFILE_YAML=""
20BOARD=""
21BRANCH=""
22ENVIRONMENT=""
Naresh Kambojuad19d882016-09-20 19:31:00 +053023# LTP version
Naresh Kamboju52f02572018-11-20 19:52:18 +053024LTP_VERSION="20180926"
Anders Roxell67acee62020-10-21 08:52:24 +020025TEST_PROGRAM=ltp
26# https://github.com/linux-test-project/ltp.git
27TEST_GIT_URL=""
28TEST_DIR="$(pwd)/${TEST_PROGRAM}"
29BUILD_FROM_TAR="false"
30
Naresh Kamboju9bce9162017-07-13 12:56:27 +053031LTP_TMPDIR=/ltp-tmp
Naresh Kambojuad19d882016-09-20 19:31:00 +053032
Anders Roxell67acee62020-10-21 08:52:24 +020033LTP_INSTALL_PATH=/opt/ltp
Naresh Kambojuad19d882016-09-20 19:31:00 +053034
35usage() {
Naresh Kamboju3a427952017-07-06 16:56:59 +053036 echo "Usage: ${0} [-T mm,math,syscalls]
37 [-S skipfile-lsk-juno]
Dan Ruef4970552018-01-26 17:28:35 -060038 [-b board]
Anders Roxell05c1e172019-04-02 05:08:34 +020039 [-d temp directory]
Dan Ruef4970552018-01-26 17:28:35 -060040 [-g branch]
41 [-e environment]
Rémi Durafforte08fea42021-01-04 14:31:02 +010042 [-i install path]
Naresh Kamboju3a427952017-07-06 16:56:59 +053043 [-s True|False]
44 [-v LTP_VERSION]
Dan Rue58d3a882017-07-11 16:30:30 -050045 [-M Timeout_Multiplier]
Anders Roxell67acee62020-10-21 08:52:24 +020046 [-R root_password]
47 [-u git url]
48 [-p build directory]
49 [-t build from tarfile ]
50" 1>&2
Naresh Kambojuad19d882016-09-20 19:31:00 +053051 exit 0
52}
53
Rémi Durafforte08fea42021-01-04 14:31:02 +010054while getopts "M:T:S:b:d:g:e:i:s:v:R:u:p:t:" arg; do
Naresh Kambojuad19d882016-09-20 19:31:00 +053055 case "$arg" in
56 T)
57 TST_CMDFILES="${OPTARG}"
Naresh Kamboju43e80742017-01-18 15:51:02 +053058 # shellcheck disable=SC2001
Naresh Kambojuad19d882016-09-20 19:31:00 +053059 LOG_FILE=$(echo "${OPTARG}"| sed 's,\/,_,')
60 ;;
61 S)
Dan Ruef4970552018-01-26 17:28:35 -060062 if [ -z "${OPTARG##*http*}" ]; then
63 if [ -z "${OPTARG##*yaml*}" ]; then
64 # Skipfile is of type yaml
65 SKIPFILE_TMP="http-skipfile.yaml"
66 SKIPFILE_YAML="${SCRIPTPATH}/${SKIPFILE_TMP}"
67 else
68 # Skipfile is normal skipfile
69 SKIPFILE_TMP="http-skipfile"
70 SKIPFILE="-S ${SCRIPTPATH}/${SKIPFILE_TMP}"
71 fi
72 # Download LTP skipfile from specified URL
73 if ! wget "${OPTARG}" -O "${SKIPFILE_TMP}"; then
74 error_msg "Failed to fetch ${OPTARG}"
Dan Ruef4970552018-01-26 17:28:35 -060075 fi
76 elif [ "${OPTARG##*.}" = "yaml" ]; then
77 # yaml skipfile; use skipgen to generate a skipfile
78 SKIPFILE_YAML="${SCRIPTPATH}/${OPTARG}"
Naresh Kambojuad19d882016-09-20 19:31:00 +053079 else
Rémi Durafforte7cc8a22021-01-05 14:04:03 +010080 # Regular LTP skipfile. Absolute or relative path?
81 if [ "${OPTARG:0:1}" == "/" ]; then
82 SKIPFILE="-S ${OPTARG}"
83 else
84 SKIPFILE="-S ${SCRIPTPATH}/${OPTARG}"
85 fi
Naresh Kambojuad19d882016-09-20 19:31:00 +053086 fi
87 ;;
Dan Ruef4970552018-01-26 17:28:35 -060088 b)
89 export BOARD="${OPTARG}"
90 ;;
Anders Roxell05c1e172019-04-02 05:08:34 +020091 d)
92 export LTP_TMPDIR="${OPTARG}"
93 ;;
Dan Ruef4970552018-01-26 17:28:35 -060094 g)
95 export BRANCH="${OPTARG}"
96 ;;
97 e)
98 export ENVIRONMENT="${OPTARG}"
99 ;;
Rémi Durafforte08fea42021-01-04 14:31:02 +0100100 i)
101 export LTP_INSTALL_PATH="${OPTARG}"
102 ;;
Naresh Kambojuad19d882016-09-20 19:31:00 +0530103 # SKIP_INSTALL is true in case of Open Embedded builds
104 # SKIP_INSTALL is flase in case of Debian builds
105 s) SKIP_INSTALL="${OPTARG}";;
106 v) LTP_VERSION="${OPTARG}";;
Naresh Kamboju3bff06b2017-05-24 14:46:37 +0530107 # Slow machines need more timeout Default is 5min and multiply * MINUTES
108 M) export LTP_TIMEOUT_MUL="${OPTARG}";;
Dan Rue58d3a882017-07-11 16:30:30 -0500109 R) export PASSWD="${OPTARG}";;
Anders Roxell67acee62020-10-21 08:52:24 +0200110 u)
111 if [[ "$OPTARG" != '' ]]; then
112 TEST_GIT_URL="$OPTARG"
113 TEST_TARFILE=""
114 fi
115 ;;
116 p)
117 if [[ "$OPTARG" != '' ]]; then
118 TEST_DIR="$OPTARG"
119 fi
120 ;;
121 t)
122 BUILD_FROM_TAR="$OPTARG"
123 ;;
Anders Roxell446b84f2019-04-03 05:30:21 +0200124 *)
125 usage
126 error_msg "No flag ${OPTARG}"
127 ;;
Naresh Kambojuad19d882016-09-20 19:31:00 +0530128 esac
129done
130
Anders Roxell67acee62020-10-21 08:52:24 +0200131TEST_TARFILE=https://github.com/linux-test-project/ltp/releases/download/"${LTP_VERSION}"/ltp-full-"${LTP_VERSION}".tar.xz
132
Dan Ruef4970552018-01-26 17:28:35 -0600133if [ -n "${SKIPFILE_YAML}" ]; then
134 export SKIPFILE_PATH="${SCRIPTPATH}/generated_skipfile"
135 generate_skipfile
136 if [ ! -f "${SKIPFILE_PATH}" ]; then
137 error_msg "Skipfile ${SKIPFILE} does not exist";
Dan Ruef4970552018-01-26 17:28:35 -0600138 fi
139 SKIPFILE="-S ${SKIPFILE_PATH}"
140fi
141
Naresh Kambojuad19d882016-09-20 19:31:00 +0530142# Parse LTP output
143parse_ltp_output() {
Chase Qi3308d6b2017-08-07 15:19:35 +0800144 grep -E "PASS|FAIL|CONF" "$1" \
145 | awk '{print $1" "$2}' \
146 | sed 's/PASS/pass/; s/FAIL/fail/; s/CONF/skip/' >> "${RESULT_FILE}"
Naresh Kambojuad19d882016-09-20 19:31:00 +0530147}
148
149# Run LTP test suite
150run_ltp() {
Naresh Kamboju43e80742017-01-18 15:51:02 +0530151 # shellcheck disable=SC2164
Anders Roxell67acee62020-10-21 08:52:24 +0200152 cd "${LTP_INSTALL_PATH}"
Naresh Kambojuff5f6c32017-07-11 14:50:32 +0530153 # shellcheck disable=SC2174
154 mkdir -m 777 -p "${LTP_TMPDIR}"
Naresh Kambojuad19d882016-09-20 19:31:00 +0530155
Naresh Kamboju3a427952017-07-06 16:56:59 +0530156 pipe0_status "./runltp -p -q -f ${TST_CMDFILES} \
157 -l ${OUTPUT}/LTP_${LOG_FILE}.log \
158 -C ${OUTPUT}/LTP_${LOG_FILE}.failed \
159 -d ${LTP_TMPDIR} \
160 ${SKIPFILE}" "tee ${OUTPUT}/LTP_${LOG_FILE}.out"
Naresh Kambojue1880532018-10-02 15:17:34 +0530161# check_return "runltp_${LOG_FILE}"
Naresh Kambojuad19d882016-09-20 19:31:00 +0530162
Naresh Kambojuad19d882016-09-20 19:31:00 +0530163 parse_ltp_output "${OUTPUT}/LTP_${LOG_FILE}.log"
Naresh Kamboju3a427952017-07-06 16:56:59 +0530164 # Cleanup
Milosz Wasilewskicacf7382017-11-01 11:25:55 +0000165 # don't fail the whole test job if rm fails
166 rm -rf "${LTP_TMPDIR}" || true
Naresh Kambojuad19d882016-09-20 19:31:00 +0530167}
168
Dan Ruea7e86c42017-11-07 14:55:58 -0600169# Prepare system
170prep_system() {
171 # Stop systemd-timesyncd if running
172 if systemctl is-active systemd-timesyncd 2>/dev/null; then
173 info_msg "Stopping systemd-timesyncd"
174 systemctl stop systemd-timesyncd
175 fi
Dan Ruef07393e2017-11-13 09:55:43 -0600176 # userns07 requires kernel.unprivileged_userns_clone
Shawn Guoe7f9f1c2019-06-12 10:40:47 +0800177 if [ -f "/proc/sys/kernel/unprivileged_userns_clone" ]; then
Dan Ruef07393e2017-11-13 09:55:43 -0600178 info_msg "Enabling kernel.unprivileged_userns_clone"
179 sysctl -w kernel.unprivileged_userns_clone=1
Shawn Guoe7f9f1c2019-06-12 10:40:47 +0800180 else
181 info_msg "Kernel has no support of unprivileged_userns_clone"
Dan Ruef07393e2017-11-13 09:55:43 -0600182 fi
Dan Ruea7e86c42017-11-07 14:55:58 -0600183}
184
Anders Roxell67acee62020-10-21 08:52:24 +0200185get_tarfile() {
186 local test_tarfile="$1"
187 mkdir "${TEST_DIR}"
188 pushd "${TEST_DIR}" || exit 1
Naresh Kambojuad19d882016-09-20 19:31:00 +0530189
Anders Roxell67acee62020-10-21 08:52:24 +0200190 wget "${test_tarfile}"
191 tar --strip-components=1 -Jxf "$(basename "${test_tarfile}")"
192 popd || exit 1
193}
Naresh Kambojuad19d882016-09-20 19:31:00 +0530194
Anders Roxell67acee62020-10-21 08:52:24 +0200195build_install_tests() {
196 rm -rf "${LTP_INSTALL_PATH}"
197 pushd "${TEST_DIR}" || exit 1
198 [[ -n "${TEST_GIT_URL}" ]] && make autotools
199 ./configure
200 make -j"$(proc)" all
201 make SKIP_IDCHECK=1 install
202 popd || exit 1
203}
204
205install() {
206 dist=
Naresh Kambojuad19d882016-09-20 19:31:00 +0530207 dist_name
Naresh Kamboju43e80742017-01-18 15:51:02 +0530208 # shellcheck disable=SC2154
Naresh Kambojuad19d882016-09-20 19:31:00 +0530209 case "${dist}" in
Nicolas Dechesneb7e38762017-01-25 12:07:08 +0100210 debian|ubuntu)
Anders Roxell67acee62020-10-21 08:52:24 +0200211 [[ -n "${TEST_GIT_URL}" ]] && pkgs="git"
212 pkgs="${pkgs} xz-utils flex bison build-essential wget curl net-tools quota genisoimage sudo libaio-dev libattr1-dev libcap-dev expect automake acl autotools-dev autoconf m4 pkgconf"
Naresh Kamboju43e80742017-01-18 15:51:02 +0530213 install_deps "${pkgs}" "${SKIP_INSTALL}"
Naresh Kambojuad19d882016-09-20 19:31:00 +0530214 ;;
Nicolas Dechesneb7e38762017-01-25 12:07:08 +0100215 centos|fedora)
Anders Roxell67acee62020-10-21 08:52:24 +0200216 [[ -n "${TEST_GIT_URL}" ]] && pkgs="git-core"
Anders Roxell1c0eeb32022-01-20 12:05:32 +0100217 pkgs="${pkgs} xz flex bison make automake gcc gcc-c++ kernel-devel wget curl net-tools quota genisoimage sudo libaio-devel libattr-devel libcap-devel m4 expect acl pkgconf"
Naresh Kamboju43e80742017-01-18 15:51:02 +0530218 install_deps "${pkgs}" "${SKIP_INSTALL}"
Naresh Kambojuad19d882016-09-20 19:31:00 +0530219 ;;
220 *)
Naresh Kamboju43e80742017-01-18 15:51:02 +0530221 warn_msg "Unsupported distribution: package install skipped"
Naresh Kambojuad19d882016-09-20 19:31:00 +0530222 esac
Chase Qifee992c2017-06-19 17:02:50 +0800223
224 # Check if mkisofs or genisoimage installed for isofs test.
225 if echo "${TST_CMDFILES}" | grep 'fs'; then
226 # link mkisofs to genisoimage on distributions that have replaced mkisofs with genisoimage.
227 if ! which mkisofs; then
228 if which genisoimage; then
229 ln -s "$(which genisoimage)" /usr/bin/mkisofs
230 else
231 warn_msg "Neither mkisofs nor genisoimage found! Either of them is required by isofs test."
232 fi
233 fi
234 fi
Anders Roxell67acee62020-10-21 08:52:24 +0200235}
Chase Qifee992c2017-06-19 17:02:50 +0800236
Anders Roxell67acee62020-10-21 08:52:24 +0200237# Test run.
238! check_root && error_msg "This script must be run as root"
239create_out_dir "${OUTPUT}"
240
241info_msg "About to run ltp test..."
242info_msg "Output directory: ${OUTPUT}"
243
244if [ "${SKIP_INSTALL}" = "true" ] || [ "${SKIP_INSTALL}" = "True" ]; then
245 info_msg "${TEST_PROGRAM} installation skipped altogether"
246else
247 install
248fi
249
Rémi Durafforte7cc8a22021-01-05 14:04:03 +0100250if [ ! -d "${LTP_INSTALL_PATH}" ]; then
Anders Roxell67acee62020-10-21 08:52:24 +0200251 if [ "${BUILD_FROM_TAR}" = "true" ] || [ "${BUILD_FROM_TAR}" = "True" ]; then
252 get_tarfile "${TEST_TARFILE}"
253 elif [ -n "${TEST_GIT_URL}" ]; then
254 get_test_program "${TEST_GIT_URL}" "${TEST_DIR}" "${LTP_VERSION}" "${TEST_PROGRAM}"
255 else
256 error_msg "I'm confused, get me out of here, can't fetch tar or test version."
257 fi
258 build_install_tests
Naresh Kambojuad19d882016-09-20 19:31:00 +0530259fi
Dan Ruea7e86c42017-11-07 14:55:58 -0600260info_msg "Running prep_system"
261prep_system
Naresh Kambojuad19d882016-09-20 19:31:00 +0530262info_msg "Running run_ltp"
263run_ltp