191fe48d5SPhilipp Schuster#!/usr/bin/env bash 22b2d0065SRuslan Mstoi# shellcheck disable=SC2048,SC2086 3a1a0bc85SBo Chenset -x 4a1a0bc85SBo Chen 52b2d0065SRuslan Mstoi# shellcheck source=/dev/null 62b2d0065SRuslan Mstoisource "$HOME"/.cargo/env 72b2d0065SRuslan Mstoisource "$(dirname "$0")"/test-util.sh 8a1a0bc85SBo Chen 9a1a0bc85SBo ChenWORKLOADS_DIR="$HOME/workloads" 10a1a0bc85SBo Chenmkdir -p "$WORKLOADS_DIR" 11a1a0bc85SBo Chen 12a1a0bc85SBo Chenprocess_common_args "$@" 13a1a0bc85SBo Chen 145b05e0cdSBo Chen# For now these values are default for kvm 15d83fc7f6SRob Bradfordtest_features="" 16a1a0bc85SBo Chen 176454c677SMuminul Islamif [ "$hypervisor" = "mshv" ]; then 18219716c3SBo Chen test_features="--features mshv" 196454c677SMuminul Islamfi 206454c677SMuminul Islam 212b2d0065SRuslan Mstoicp scripts/sha1sums-x86_64 "$WORKLOADS_DIR" 22a1a0bc85SBo Chen 23a1a0bc85SBo ChenFOCAL_OS_IMAGE_NAME="focal-server-cloudimg-amd64-custom-20210609-0.qcow2" 2405ec6190SRavi kumar VeeramallyFOCAL_OS_IMAGE_URL="https://ch-images.azureedge.net/$FOCAL_OS_IMAGE_NAME" 25a1a0bc85SBo ChenFOCAL_OS_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_IMAGE_NAME" 26a1a0bc85SBo Chenif [ ! -f "$FOCAL_OS_IMAGE" ]; then 272b2d0065SRuslan Mstoi pushd "$WORKLOADS_DIR" || exit 28a1a0bc85SBo Chen time wget --quiet $FOCAL_OS_IMAGE_URL || exit 1 292b2d0065SRuslan Mstoi popd || exit 30a1a0bc85SBo Chenfi 31a1a0bc85SBo Chen 32a1a0bc85SBo ChenFOCAL_OS_RAW_IMAGE_NAME="focal-server-cloudimg-amd64-custom-20210609-0.raw" 33a1a0bc85SBo ChenFOCAL_OS_RAW_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_RAW_IMAGE_NAME" 34a1a0bc85SBo Chenif [ ! -f "$FOCAL_OS_RAW_IMAGE" ]; then 352b2d0065SRuslan Mstoi pushd "$WORKLOADS_DIR" || exit 36a1a0bc85SBo Chen time qemu-img convert -p -f qcow2 -O raw $FOCAL_OS_IMAGE_NAME $FOCAL_OS_RAW_IMAGE_NAME || exit 1 372b2d0065SRuslan Mstoi popd || exit 38a1a0bc85SBo Chenfi 39a1a0bc85SBo Chen 402b2d0065SRuslan Mstoipushd "$WORKLOADS_DIR" || exit 412b2d0065SRuslan Mstoiif ! grep focal sha1sums-x86_64 | sha1sum --check; then 42a1a0bc85SBo Chen echo "sha1sum validation of images failed, remove invalid images to fix the issue." 43a1a0bc85SBo Chen exit 1 44a1a0bc85SBo Chenfi 452b2d0065SRuslan Mstoipopd || exit 46a1a0bc85SBo Chen 47edca82c4SBo Chen# Download Cloud Hypervisor binary from its last stable release 48f5abb168SRob BradfordLAST_RELEASE_VERSION="v39.0" 49edca82c4SBo ChenCH_RELEASE_URL="https://github.com/cloud-hypervisor/cloud-hypervisor/releases/download/$LAST_RELEASE_VERSION/cloud-hypervisor-static" 50edca82c4SBo ChenCH_RELEASE_NAME="cloud-hypervisor-static" 512b2d0065SRuslan Mstoipushd "$WORKLOADS_DIR" || exit 52edca82c4SBo Chentime wget --quiet $CH_RELEASE_URL -O "$CH_RELEASE_NAME" || exit 1 53edca82c4SBo Chenchmod +x $CH_RELEASE_NAME 542b2d0065SRuslan Mstoipopd || exit 55edca82c4SBo Chen 56a1a0bc85SBo Chen# Build custom kernel based on virtio-pmem and virtio-fs upstream patches 57*2b057537SBo ChenVMLINUX_IMAGE="$WORKLOADS_DIR/vmlinux-x86_64" 58a1a0bc85SBo Chenif [ ! -f "$VMLINUX_IMAGE" ]; then 593c05626aSRuoqing He # Prepare linux image (build from source or download pre-built) 603c05626aSRuoqing He prepare_linux 61a1a0bc85SBo Chenfi 62a1a0bc85SBo Chen 63a1a0bc85SBo ChenCFLAGS="" 64a1a0bc85SBo Chenif [[ "${BUILD_TARGET}" == "x86_64-unknown-linux-musl" ]]; then 652b2d0065SRuslan Mstoi # shellcheck disable=SC2034 66a1a0bc85SBo Chen CFLAGS="-I /usr/include/x86_64-linux-musl/ -idirafter /usr/include/" 67a1a0bc85SBo Chenfi 68a1a0bc85SBo Chen 692b2d0065SRuslan Mstoicargo build --features mshv --all --release --target "$BUILD_TARGET" 70a1a0bc85SBo Chen 71a181b77bSBo Chen# Test ovs-dpdk relies on hugepages 72318caeb9SRuslan MstoiHUGEPAGESIZE=$(grep Hugepagesize /proc/meminfo | awk '{print $2}') 732b2d0065SRuslan MstoiPAGE_NUM=$((12288 * 1024 / HUGEPAGESIZE)) 742b2d0065SRuslan Mstoiecho "$PAGE_NUM" | sudo tee /proc/sys/vm/nr_hugepages 75a181b77bSBo Chensudo chmod a+rwX /dev/hugepages 76a1a0bc85SBo Chen 77a181b77bSBo Chenexport RUST_BACKTRACE=1 78d83fc7f6SRob Bradfordtime cargo test $test_features "live_migration_parallel::$test_filter" -- ${test_binary_args[*]} 79a1a0bc85SBo ChenRES=$? 80a1a0bc85SBo Chen 818f3462b3SBo Chen# Run some tests in sequence since the result could be affected by other tests 828f3462b3SBo Chen# running in parallel. 838f3462b3SBo Chenif [ $RES -eq 0 ]; then 848f3462b3SBo Chen export RUST_BACKTRACE=1 85d83fc7f6SRob Bradford time cargo test $test_features "live_migration_sequential::$test_filter" -- --test-threads=1 ${test_binary_args[*]} 868f3462b3SBo Chen RES=$? 878f3462b3SBo Chenfi 888f3462b3SBo Chen 89a1a0bc85SBo Chenexit $RES 90