blob: 36bef5560b4763faff504c7840ae7ef59aca4300 [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"
Anders Roxella384c312022-10-25 09:02:44 +020030SHARD_NUMBER=1
31SHARD_INDEX=1
Anders Roxell67acee62020-10-21 08:52:24 +020032
Naresh Kamboju9bce9162017-07-13 12:56:27 +053033LTP_TMPDIR=/ltp-tmp
Naresh Kambojuad19d882016-09-20 19:31:00 +053034
Anders Roxell67acee62020-10-21 08:52:24 +020035LTP_INSTALL_PATH=/opt/ltp
Naresh Kambojuad19d882016-09-20 19:31:00 +053036
37usage() {
Naresh Kamboju3a427952017-07-06 16:56:59 +053038 echo "Usage: ${0} [-T mm,math,syscalls]
39 [-S skipfile-lsk-juno]
Dan Ruef4970552018-01-26 17:28:35 -060040 [-b board]
Anders Roxell05c1e172019-04-02 05:08:34 +020041 [-d temp directory]
Dan Ruef4970552018-01-26 17:28:35 -060042 [-g branch]
43 [-e environment]
Rémi Durafforte08fea42021-01-04 14:31:02 +010044 [-i install path]
Naresh Kamboju3a427952017-07-06 16:56:59 +053045 [-s True|False]
46 [-v LTP_VERSION]
Dan Rue58d3a882017-07-11 16:30:30 -050047 [-M Timeout_Multiplier]
Anders Roxell67acee62020-10-21 08:52:24 +020048 [-R root_password]
49 [-u git url]
50 [-p build directory]
51 [-t build from tarfile ]
Anders Roxella384c312022-10-25 09:02:44 +020052 [-c sharding bucket to run ]
53 [-n number of shard buckets to create ]
Anders Roxell67acee62020-10-21 08:52:24 +020054" 1>&2
Naresh Kambojuad19d882016-09-20 19:31:00 +053055 exit 0
56}
57
Anders Roxella384c312022-10-25 09:02:44 +020058while getopts "M:T:S:b:d:g:e:i:s:v:R:u:p:t:c:n:" arg; do
Naresh Kambojuad19d882016-09-20 19:31:00 +053059 case "$arg" in
60 T)
61 TST_CMDFILES="${OPTARG}"
Naresh Kamboju43e80742017-01-18 15:51:02 +053062 # shellcheck disable=SC2001
Naresh Kambojuad19d882016-09-20 19:31:00 +053063 LOG_FILE=$(echo "${OPTARG}"| sed 's,\/,_,')
64 ;;
65 S)
Dan Ruef4970552018-01-26 17:28:35 -060066 if [ -z "${OPTARG##*http*}" ]; then
67 if [ -z "${OPTARG##*yaml*}" ]; then
68 # Skipfile is of type yaml
69 SKIPFILE_TMP="http-skipfile.yaml"
70 SKIPFILE_YAML="${SCRIPTPATH}/${SKIPFILE_TMP}"
71 else
72 # Skipfile is normal skipfile
73 SKIPFILE_TMP="http-skipfile"
74 SKIPFILE="-S ${SCRIPTPATH}/${SKIPFILE_TMP}"
75 fi
76 # Download LTP skipfile from specified URL
77 if ! wget "${OPTARG}" -O "${SKIPFILE_TMP}"; then
78 error_msg "Failed to fetch ${OPTARG}"
Dan Ruef4970552018-01-26 17:28:35 -060079 fi
80 elif [ "${OPTARG##*.}" = "yaml" ]; then
81 # yaml skipfile; use skipgen to generate a skipfile
82 SKIPFILE_YAML="${SCRIPTPATH}/${OPTARG}"
Naresh Kambojuad19d882016-09-20 19:31:00 +053083 else
Rémi Durafforte7cc8a22021-01-05 14:04:03 +010084 # Regular LTP skipfile. Absolute or relative path?
85 if [ "${OPTARG:0:1}" == "/" ]; then
86 SKIPFILE="-S ${OPTARG}"
87 else
88 SKIPFILE="-S ${SCRIPTPATH}/${OPTARG}"
89 fi
Naresh Kambojuad19d882016-09-20 19:31:00 +053090 fi
91 ;;
Dan Ruef4970552018-01-26 17:28:35 -060092 b)
93 export BOARD="${OPTARG}"
94 ;;
Anders Roxell05c1e172019-04-02 05:08:34 +020095 d)
96 export LTP_TMPDIR="${OPTARG}"
97 ;;
Dan Ruef4970552018-01-26 17:28:35 -060098 g)
99 export BRANCH="${OPTARG}"
100 ;;
101 e)
102 export ENVIRONMENT="${OPTARG}"
103 ;;
Rémi Durafforte08fea42021-01-04 14:31:02 +0100104 i)
105 export LTP_INSTALL_PATH="${OPTARG}"
106 ;;
Naresh Kambojuad19d882016-09-20 19:31:00 +0530107 # SKIP_INSTALL is true in case of Open Embedded builds
108 # SKIP_INSTALL is flase in case of Debian builds
109 s) SKIP_INSTALL="${OPTARG}";;
110 v) LTP_VERSION="${OPTARG}";;
Naresh Kamboju3bff06b2017-05-24 14:46:37 +0530111 # Slow machines need more timeout Default is 5min and multiply * MINUTES
112 M) export LTP_TIMEOUT_MUL="${OPTARG}";;
Dan Rue58d3a882017-07-11 16:30:30 -0500113 R) export PASSWD="${OPTARG}";;
Anders Roxell67acee62020-10-21 08:52:24 +0200114 u)
115 if [[ "$OPTARG" != '' ]]; then
116 TEST_GIT_URL="$OPTARG"
117 TEST_TARFILE=""
118 fi
119 ;;
120 p)
121 if [[ "$OPTARG" != '' ]]; then
122 TEST_DIR="$OPTARG"
123 fi
124 ;;
125 t)
126 BUILD_FROM_TAR="$OPTARG"
127 ;;
Anders Roxella384c312022-10-25 09:02:44 +0200128 c)
129 SHARD_INDEX="$OPTARG"
130 ;;
131 n)
132 SHARD_NUMBER="$OPTARG"
133 ;;
Anders Roxell446b84f2019-04-03 05:30:21 +0200134 *)
135 usage
136 error_msg "No flag ${OPTARG}"
137 ;;
Naresh Kambojuad19d882016-09-20 19:31:00 +0530138 esac
139done
140
Anders Roxell67acee62020-10-21 08:52:24 +0200141TEST_TARFILE=https://github.com/linux-test-project/ltp/releases/download/"${LTP_VERSION}"/ltp-full-"${LTP_VERSION}".tar.xz
142
Dan Ruef4970552018-01-26 17:28:35 -0600143if [ -n "${SKIPFILE_YAML}" ]; then
144 export SKIPFILE_PATH="${SCRIPTPATH}/generated_skipfile"
145 generate_skipfile
146 if [ ! -f "${SKIPFILE_PATH}" ]; then
147 error_msg "Skipfile ${SKIPFILE} does not exist";
Dan Ruef4970552018-01-26 17:28:35 -0600148 fi
149 SKIPFILE="-S ${SKIPFILE_PATH}"
150fi
151
Naresh Kambojuad19d882016-09-20 19:31:00 +0530152# Parse LTP output
153parse_ltp_output() {
Chase Qi3308d6b2017-08-07 15:19:35 +0800154 grep -E "PASS|FAIL|CONF" "$1" \
155 | awk '{print $1" "$2}' \
156 | sed 's/PASS/pass/; s/FAIL/fail/; s/CONF/skip/' >> "${RESULT_FILE}"
Naresh Kambojuad19d882016-09-20 19:31:00 +0530157}
158
159# Run LTP test suite
160run_ltp() {
Naresh Kamboju43e80742017-01-18 15:51:02 +0530161 # shellcheck disable=SC2164
Anders Roxell67acee62020-10-21 08:52:24 +0200162 cd "${LTP_INSTALL_PATH}"
Naresh Kambojuff5f6c32017-07-11 14:50:32 +0530163 # shellcheck disable=SC2174
164 mkdir -m 777 -p "${LTP_TMPDIR}"
Naresh Kambojuad19d882016-09-20 19:31:00 +0530165
Anders Roxella384c312022-10-25 09:02:44 +0200166 for file in ${TST_CMDFILES//,/ }; do
167 cat runtest/"${file}" >>alltests
168 done
169 sed -i 's/#.*$//;/^$/d' alltests
170 split --verbose --numeric-suffixes=1 -n l/"${SHARD_INDEX}"/"${SHARD_NUMBER}" alltests >runtest/shardfile
171 echo "============== Tests to run ==============="
172 cat runtest/shardfile
173 echo "===========End Tests to run ==============="
174
175 pipe0_status "./runltp -p -q -f shardfile \
Naresh Kamboju3a427952017-07-06 16:56:59 +0530176 -l ${OUTPUT}/LTP_${LOG_FILE}.log \
177 -C ${OUTPUT}/LTP_${LOG_FILE}.failed \
178 -d ${LTP_TMPDIR} \
179 ${SKIPFILE}" "tee ${OUTPUT}/LTP_${LOG_FILE}.out"
Naresh Kambojue1880532018-10-02 15:17:34 +0530180# check_return "runltp_${LOG_FILE}"
Naresh Kambojuad19d882016-09-20 19:31:00 +0530181
Naresh Kambojuad19d882016-09-20 19:31:00 +0530182 parse_ltp_output "${OUTPUT}/LTP_${LOG_FILE}.log"
Naresh Kamboju3a427952017-07-06 16:56:59 +0530183 # Cleanup
Milosz Wasilewskicacf7382017-11-01 11:25:55 +0000184 # don't fail the whole test job if rm fails
185 rm -rf "${LTP_TMPDIR}" || true
Naresh Kambojuad19d882016-09-20 19:31:00 +0530186}
187
Dan Ruea7e86c42017-11-07 14:55:58 -0600188# Prepare system
189prep_system() {
190 # Stop systemd-timesyncd if running
191 if systemctl is-active systemd-timesyncd 2>/dev/null; then
192 info_msg "Stopping systemd-timesyncd"
193 systemctl stop systemd-timesyncd
194 fi
Dan Ruef07393e2017-11-13 09:55:43 -0600195 # userns07 requires kernel.unprivileged_userns_clone
Shawn Guoe7f9f1c2019-06-12 10:40:47 +0800196 if [ -f "/proc/sys/kernel/unprivileged_userns_clone" ]; then
Dan Ruef07393e2017-11-13 09:55:43 -0600197 info_msg "Enabling kernel.unprivileged_userns_clone"
198 sysctl -w kernel.unprivileged_userns_clone=1
Shawn Guoe7f9f1c2019-06-12 10:40:47 +0800199 else
200 info_msg "Kernel has no support of unprivileged_userns_clone"
Dan Ruef07393e2017-11-13 09:55:43 -0600201 fi
Dan Ruea7e86c42017-11-07 14:55:58 -0600202}
203
Anders Roxell67acee62020-10-21 08:52:24 +0200204get_tarfile() {
205 local test_tarfile="$1"
206 mkdir "${TEST_DIR}"
207 pushd "${TEST_DIR}" || exit 1
Naresh Kambojuad19d882016-09-20 19:31:00 +0530208
Anders Roxell67acee62020-10-21 08:52:24 +0200209 wget "${test_tarfile}"
210 tar --strip-components=1 -Jxf "$(basename "${test_tarfile}")"
211 popd || exit 1
212}
Naresh Kambojuad19d882016-09-20 19:31:00 +0530213
Anders Roxell67acee62020-10-21 08:52:24 +0200214build_install_tests() {
215 rm -rf "${LTP_INSTALL_PATH}"
216 pushd "${TEST_DIR}" || exit 1
217 [[ -n "${TEST_GIT_URL}" ]] && make autotools
218 ./configure
219 make -j"$(proc)" all
220 make SKIP_IDCHECK=1 install
221 popd || exit 1
222}
223
224install() {
225 dist=
Naresh Kambojuad19d882016-09-20 19:31:00 +0530226 dist_name
Naresh Kamboju43e80742017-01-18 15:51:02 +0530227 # shellcheck disable=SC2154
Naresh Kambojuad19d882016-09-20 19:31:00 +0530228 case "${dist}" in
Nicolas Dechesneb7e38762017-01-25 12:07:08 +0100229 debian|ubuntu)
Anders Roxell67acee62020-10-21 08:52:24 +0200230 [[ -n "${TEST_GIT_URL}" ]] && pkgs="git"
231 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 +0530232 install_deps "${pkgs}" "${SKIP_INSTALL}"
Naresh Kambojuad19d882016-09-20 19:31:00 +0530233 ;;
Nicolas Dechesneb7e38762017-01-25 12:07:08 +0100234 centos|fedora)
Anders Roxell67acee62020-10-21 08:52:24 +0200235 [[ -n "${TEST_GIT_URL}" ]] && pkgs="git-core"
Anders Roxell1c0eeb32022-01-20 12:05:32 +0100236 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 +0530237 install_deps "${pkgs}" "${SKIP_INSTALL}"
Naresh Kambojuad19d882016-09-20 19:31:00 +0530238 ;;
239 *)
Naresh Kamboju43e80742017-01-18 15:51:02 +0530240 warn_msg "Unsupported distribution: package install skipped"
Naresh Kambojuad19d882016-09-20 19:31:00 +0530241 esac
Chase Qifee992c2017-06-19 17:02:50 +0800242
243 # Check if mkisofs or genisoimage installed for isofs test.
244 if echo "${TST_CMDFILES}" | grep 'fs'; then
245 # link mkisofs to genisoimage on distributions that have replaced mkisofs with genisoimage.
246 if ! which mkisofs; then
247 if which genisoimage; then
248 ln -s "$(which genisoimage)" /usr/bin/mkisofs
249 else
250 warn_msg "Neither mkisofs nor genisoimage found! Either of them is required by isofs test."
251 fi
252 fi
253 fi
Anders Roxell67acee62020-10-21 08:52:24 +0200254}
Chase Qifee992c2017-06-19 17:02:50 +0800255
Anders Roxell67acee62020-10-21 08:52:24 +0200256# Test run.
257! check_root && error_msg "This script must be run as root"
258create_out_dir "${OUTPUT}"
259
260info_msg "About to run ltp test..."
261info_msg "Output directory: ${OUTPUT}"
262
263if [ "${SKIP_INSTALL}" = "true" ] || [ "${SKIP_INSTALL}" = "True" ]; then
264 info_msg "${TEST_PROGRAM} installation skipped altogether"
265else
266 install
267fi
268
Rémi Durafforte7cc8a22021-01-05 14:04:03 +0100269if [ ! -d "${LTP_INSTALL_PATH}" ]; then
Anders Roxell67acee62020-10-21 08:52:24 +0200270 if [ "${BUILD_FROM_TAR}" = "true" ] || [ "${BUILD_FROM_TAR}" = "True" ]; then
271 get_tarfile "${TEST_TARFILE}"
272 elif [ -n "${TEST_GIT_URL}" ]; then
273 get_test_program "${TEST_GIT_URL}" "${TEST_DIR}" "${LTP_VERSION}" "${TEST_PROGRAM}"
274 else
275 error_msg "I'm confused, get me out of here, can't fetch tar or test version."
276 fi
277 build_install_tests
Naresh Kambojuad19d882016-09-20 19:31:00 +0530278fi
Dan Ruea7e86c42017-11-07 14:55:58 -0600279info_msg "Running prep_system"
280prep_system
Naresh Kambojuad19d882016-09-20 19:31:00 +0530281info_msg "Running run_ltp"
282run_ltp