blob: 33f678c47eee00b2f8c1c3c598a97bd5688dbb50 [file] [log] [blame]
#!/usr/bin/env bash
# Copyright 2020 The Android KVM Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
TIMEOUT=180s
# QEMU CPUs to use for VHE and nVHE runs
VHE_CPU="max"
NVHE_CPU="cortex-a53"
TEST_FILE=$1
LINUX_KERNEL=$2
ROOTFS=$3
QEMU=$4
VHE=$5
LOG_FILE=$6
TEST_NAME=$7
CPU=""
# Assume that the roms are located with the disk image.
ROM_PATH=$(dirname "${ROOTFS}")
if [ ! -f "${TEST_FILE}" ]; then
echo "Standalone kvmunittest file not found"
echo "Run make standalone first to generate the standalone test files."
exit 1
fi
if [ ! -f "${LINUX_KERNEL}" ]; then
echo "Linux kernel image file not found."
exit 1
fi
if [ ! -f "${ROOTFS}" ]; then
echo "Root filesystem image file not found."
exit 1
fi
if [ ! -x "${QEMU}" ]; then
echo "QEMU executable not found."
exit 1
fi
if [ "${VHE}" = 1 ]; then
CPU=${VHE_CPU}
else
CPU=${NVHE_CPU}
fi
timeout -k 1s --foreground "${TIMEOUT}" "${QEMU}" \
-M virt \
-machine virtualization=true -machine virt,gic-version=3 \
-cpu "${CPU}" \
-nographic -nodefaults -serial stdio \
-smp 2 \
-m 512 \
-kernel "${LINUX_KERNEL}" \
-L "${ROM_PATH}" \
-append "rootwait root=/dev/vda" \
-drive file="${ROOTFS}",readonly,if=virtio,format=raw \
-drive file="${TEST_FILE}",readonly,if=virtio,format=raw \
-object rng-random,filename=/dev/urandom,id=rng0 \
-device virtio-rng-pci,rng=rng0 &> "${LOG_FILE}"
EXIT_STATUS=$?
RESULT=$(grep -E -h --color=never "[^ ](PASS|FAIL|SKIP)[^:]" "${LOG_FILE}")
if [ -z "${RESULT}" ]; then
RESULT="\e[31;1mTIMEOUT/CRASH\e[0m"
EXIT_STATUS=1
fi
echo -e "${TEST_NAME}: ${RESULT}"
exit ${EXIT_STATUS}