scripts: Add an option to accept hypervisor argument

Signed-off-by: Muminul Islam <muislam@microsoft.com>
This commit is contained in:
Muminul Islam 2020-11-17 16:37:27 -08:00 committed by Samuel Ortiz
parent 2cc312b65c
commit 27b5f8d7e3
8 changed files with 102 additions and 19 deletions

View File

@ -175,6 +175,7 @@ cmd_help() {
echo " --release Build the release binaries."
echo " --libc Select the C library Cloud Hypervisor will be built against. Default is gnu"
echo " --volumes Hash separated volumes to be exported. Example --volumes /mnt:/mnt#/myvol:/myvol"
echo " --hypervisor Underlying hypervisor. Options kvm, mshv"
echo ""
echo " tests [--unit|--cargo|--all] [--libc musl|gnu] [-- [<cargo test args>]]"
echo " Run the Cloud Hypervisor tests."
@ -185,6 +186,7 @@ cmd_help() {
echo " --integration-windows Run the Windows guest integration tests."
echo " --libc Select the C library Cloud Hypervisor will be built against. Default is gnu"
echo " --volumes Hash separated volumes to be exported. Example --volumes /mnt:/mnt#/myvol:/myvol"
echo " --hypervisor Underlying hypervisor. Options kvm, mshv"
echo " --all Run all tests."
echo ""
echo " build-container [--type]"
@ -205,6 +207,8 @@ cmd_help() {
cmd_build() {
build="debug"
libc="gnu"
hypervisor="kvm"
features_build=""
while [ $# -gt 0 ]; do
case "$1" in
@ -221,6 +225,10 @@ cmd_build() {
shift
arg_vols="$1"
;;
"--hypervisor")
shift
hypervisor="$1"
;;
"--") { shift; break; } ;;
*)
die "Unknown build argument: $1. Please use --help for help."
@ -229,6 +237,9 @@ cmd_build() {
shift
done
process_volumes_args
if [[ "$hypervisor" != "kvm" ]]; then
die "Hypervisor value must be kvm"
fi
target="$(uname -m)-unknown-linux-${libc}"
@ -251,7 +262,7 @@ cmd_build() {
--volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" $exported_volumes \
--env RUSTFLAGS="$rustflags" \
"$CTR_IMAGE" \
cargo build --all \
cargo build --all $features_build \
--target-dir "$CTR_CLH_CARGO_TARGET" \
"${cargo_args[@]}" && say "Binaries placed under $CLH_CARGO_TARGET/$target/$build"
}
@ -278,7 +289,8 @@ cmd_tests() {
integration_windows=false
libc="gnu"
arg_vols=""
hypervisor="kvm"
saved_args=("$@")
while [ $# -gt 0 ]; do
case "$1" in
"-h"|"--help") { cmd_help; exit 1; } ;;
@ -297,6 +309,10 @@ cmd_tests() {
shift
arg_vols="$1"
;;
"--hypervisor")
shift
hypervisor="$1"
;;
"--all") { cargo=true; unit=true; integration=true; } ;;
"--") { shift; break; } ;;
*)
@ -305,7 +321,9 @@ cmd_tests() {
esac
shift
done
if [[ "$hypervisor" != "kvm" ]]; then
die "Hypervisor value must be kvm"
fi
process_volumes_args
target="$(uname -m)-unknown-linux-${libc}"
cflags=""
@ -315,7 +333,7 @@ cmd_tests() {
cflags="-I /usr/include/x86_64-linux-musl/ -idirafter /usr/include/"
fi
if [ "$unit" = true ] ; then
if [[ "$unit" = true && $hypervisor = "kvm" ]] ; then
say "Running unit tests for $target..."
$DOCKER_RUNTIME run \
--workdir "$CTR_CLH_ROOT_DIR" \
@ -328,7 +346,7 @@ cmd_tests() {
--env CFLAGS="$cflags" \
--env TARGET_CC="$target_cc" \
"$CTR_IMAGE" \
./scripts/run_unit_tests.sh "$@" || fix_dir_perms $? || exit $?
./scripts/run_unit_tests.sh "${saved_args[@]}" || fix_dir_perms $? || exit $?
fi
if [ "$cargo" = true ] ; then
@ -338,7 +356,7 @@ cmd_tests() {
--rm \
--volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" $exported_volumes \
"$CTR_IMAGE" \
./scripts/run_cargo_tests.sh || fix_dir_perms $? || exit $?
./scripts/run_cargo_tests.sh "${saved_args[@]}" || fix_dir_perms $? || exit $?
fi
if [ "$integration" = true ] ; then
@ -357,7 +375,7 @@ cmd_tests() {
--env USER="root" \
--env CH_LIBC="${libc}" \
"$CTR_IMAGE" \
./scripts/run_integration_tests_$(uname -m).sh "$@" || fix_dir_perms $? || exit $?
./scripts/run_integration_tests_$(uname -m).sh "${saved_args[@]}" || fix_dir_perms $? || exit $?
fi
if [ "$integration_sgx" = true ] ; then
@ -376,7 +394,7 @@ cmd_tests() {
--env USER="root" \
--env CH_LIBC="${libc}" \
"$CTR_IMAGE" \
./scripts/run_integration_tests_sgx.sh "$@" || fix_dir_perms $? || exit $?
./scripts/run_integration_tests_sgx.sh "${saved_args[@]}" || fix_dir_perms $? || exit $?
fi
if [ "$integration_windows" = true ] ; then
@ -395,7 +413,7 @@ cmd_tests() {
--env USER="root" \
--env CH_LIBC="${libc}" \
"$CTR_IMAGE" \
./scripts/run_integration_tests_windows.sh "$@" || fix_dir_perms $? || exit $?
./scripts/run_integration_tests_windows.sh "${saved_args[@]}" || fix_dir_perms $? || exit $?
fi
fix_dir_perms $?
}

View File

@ -3,6 +3,9 @@ set -e
set -x
source $HOME/.cargo/env
source $(dirname "$0")/test-util.sh
process_common_args "$@"
# Install cargo components
time rustup component add clippy

View File

@ -2,6 +2,7 @@
set -x
source $HOME/.cargo/env
source $(dirname "$0")/test-util.sh
export BUILD_TARGET=${BUILD_TARGET-aarch64-unknown-linux-gnu}
@ -177,6 +178,10 @@ update_workloads() {
fi
}
process_common_args "$@"
features_build="--no-default-features --features kvm "
features_test="--no-default-features --features integration_tests,kvm"
# lock the workloads folder to avoid parallel updating by different containers
(
echo "try to lock $WORKLOADS_DIR folder and update"
@ -204,7 +209,7 @@ TARGET_CC="musl-gcc"
CFLAGS="-I /usr/include/aarch64-linux-musl/ -idirafter /usr/include/"
fi
cargo build --all --release --no-default-features --features kvm --target $BUILD_TARGET
cargo build --all --release $features_build --target $BUILD_TARGET
strip target/$BUILD_TARGET/release/cloud-hypervisor
strip target/$BUILD_TARGET/release/vhost_user_net
strip target/$BUILD_TARGET/release/ch-remote
@ -216,7 +221,7 @@ sudo bash -c "echo 10 > /sys/kernel/mm/ksm/sleep_millisecs"
sudo bash -c "echo 1 > /sys/kernel/mm/ksm/run"
export RUST_BACKTRACE=1
time cargo test --no-default-features --features "integration_tests,kvm" "tests::parallel::$@"
time cargo test $features_test "tests::parallel::"
RES=$?
# Tear vhost_user_net test network down

View File

@ -2,6 +2,12 @@
set -x
source $HOME/.cargo/env
source $(dirname "$0")/test-util.sh
process_common_args "$@"
# For now these values are deafult for kvm
features_build=""
features_test="--features integration_tests"
BUILD_TARGET="$(uname -m)-unknown-linux-${CH_LIBC}"
CFLAGS=""
@ -11,12 +17,12 @@ TARGET_CC="musl-gcc"
CFLAGS="-I /usr/include/x86_64-linux-musl/ -idirafter /usr/include/"
fi
cargo build --all --release --target $BUILD_TARGET
cargo build --all --release $features_build --target $BUILD_TARGET
strip target/$BUILD_TARGET/release/cloud-hypervisor
export RUST_BACKTRACE=1
time cargo test --features "integration_tests" "tests::sgx::$@"
time cargo test $features_test "tests::sgx::"
RES=$?
exit $RES

View File

@ -2,6 +2,12 @@
set -x
source $HOME/.cargo/env
source $(dirname "$0")/test-util.sh
process_common_args "$@"
# For now these values are deafult for kvm
features_build=""
features_test="--features integration_tests"
BUILD_TARGET="$(uname -m)-unknown-linux-${CH_LIBC}"
CFLAGS=""
@ -11,14 +17,14 @@ TARGET_CC="musl-gcc"
CFLAGS="-I /usr/include/x86_64-linux-musl/ -idirafter /usr/include/"
fi
cargo build --all --release --target $BUILD_TARGET
cargo build --all --release $features_build --target $BUILD_TARGET
strip target/$BUILD_TARGET/release/cloud-hypervisor
export RUST_BACKTRACE=1
# Only run with 1 thread to avoid tests interfering with one another because
# Windows has a static IP configured
time cargo test --features "integration_tests" "tests::windows::$@" -- --test-threads=1
time cargo test $features_test "tests::windows::" -- --test-threads=1
RES=$?
exit $RES

View File

@ -2,12 +2,20 @@
set -x
source $HOME/.cargo/env
source $(dirname "$0")/test-util.sh
export BUILD_TARGET=${BUILD_TARGET-x86_64-unknown-linux-gnu}
WORKLOADS_DIR="$HOME/workloads"
mkdir -p "$WORKLOADS_DIR"
process_common_args "$@"
# For now these values are deafult for kvm
features_build=""
features_test="--features integration_tests"
cp scripts/sha1sums-x86_64 $WORKLOADS_DIR
FW_URL=$(curl --silent https://api.github.com/repos/cloud-hypervisor/rust-hypervisor-firmware/releases/latest | grep "browser_download_url" | grep -o 'https://.*[^ "]')
@ -215,7 +223,7 @@ TARGET_CC="musl-gcc"
CFLAGS="-I /usr/include/x86_64-linux-musl/ -idirafter /usr/include/"
fi
cargo build --all --release --target $BUILD_TARGET
cargo build --all --release $features_build --target $BUILD_TARGET
strip target/$BUILD_TARGET/release/cloud-hypervisor
strip target/$BUILD_TARGET/release/vhost_user_net
strip target/$BUILD_TARGET/release/ch-remote
@ -235,14 +243,14 @@ echo 4096 | sudo tee /proc/sys/vm/nr_hugepages
sudo chmod a+rwX /dev/hugepages
export RUST_BACKTRACE=1
time cargo test --features "integration_tests" "tests::parallel::$@"
time cargo test $features_test "tests::parallel::"
RES=$?
# Run some tests in sequence since the result could be affected by other tests
# running in parallel.
if [ $RES -eq 0 ]; then
export RUST_BACKTRACE=1
time cargo test --features "integration_tests" "tests::sequential::$@" -- --test-threads=1
time cargo test $features_test "tests::sequential::" -- --test-threads=1
RES=$?
fi

View File

@ -1,9 +1,12 @@
#!/bin/bash
source $HOME/.cargo/env
source $(dirname "$0")/test-util.sh
process_common_args "$@"
BUILD_TARGET=${BUILD_TARGET-x86_64-unknown-linux-gnu}
cargo_args=("$@")
cargo_args=("")
[ $(uname -m) = "aarch64" ] && cargo_args+=("--no-default-features")
[ $(uname -m) = "aarch64" ] && cargo_args+=("--features kvm")

34
scripts/test-util.sh Normal file
View File

@ -0,0 +1,34 @@
#!/bin/bash
hypervisor="kvm"
cmd_help() {
echo ""
echo "Cloud Hypervisor $(basename $0)"
echo "Usage: $(basename $0) [<args>]"
echo ""
echo "Available arguments:"
echo ""
echo " --hypervisor Underlying hypervisor. Options kvm, mshv"
echo ""
echo " --help Display this help message."
echo ""
}
process_common_args() {
while [ $# -gt 0 ]; do
case "$1" in
"-h"|"--help") { cmd_help; exit 1; } ;;
"--hypervisor")
shift
hypervisor="$1"
;;
*)
# We only care about hypervisor , do nothing for other arguments
;;
esac
shift
done
if [[ "$hypervisor" != "kvm" ]]; then
echo "Hypervisor value must be kvm"
exit 1
fi
}