numam-spdk/test/vhost/integrity/integrity_start.sh
Ben Walker 10f9391a22 test: Shorten some relative paths using readlink
Core dumps stop working if the path is longer than 64 bytes.
Use readlink to shorten some of the very long relative paths.

Change-Id: I5e7eb6580ca581c5ac3a71afb7b62953836e2660
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
2017-04-07 08:14:34 -07:00

159 lines
4.5 KiB
Bash
Executable File

#!/usr/bin/env bash
basedir=$(readlink -f $(dirname $0))
rootdir=$(readlink -f $basedir/../../..)
testdir=$(readlink -f $rootdir/..)
qemu_src_dir="$testdir/qemu"
qemu_build_dir="$testdir/qemu/build"
qemu_install_dir="$testdir/root"
MAKE="make -j$(( $(nproc) * 2 ))"
source $rootdir/scripts/autotest_common.sh
if [ -z "$VM_IMG" ]; then
echo "ERROR: VM_IMG: path to qcow2 image not provided - not running"
exit 1
fi
if [ -z "$VM_QEMU" ]; then
echo "INFO: VM_QEMU: path to qemu binary not provided"
echo "INFO: Will use qemu from repository"
fi
if [ -z "$VM_FS" ]; then
VM_FS="ext4"
echo "INFO: Using default value for filesystem: $VM_FS"
fi
HOST_IP=192.200.200.1
VM_IP=192.200.200.254
VM_UNAME="root"
VM_PASS="root"
VM_NAME="int_test_vm"
VM_NET_NAME="int_test_net"
VM_MAC="02:de:ad:de:ad:01"
VM_BAK_IMG="/tmp/int_test_backing.img"
TIMEO=60
SSHCMD="sshpass -p $VM_PASS ssh"
SCPCMD="sshpass -p $VM_PASS scp"
echo "FS: $VM_FS"
function cleanup_virsh() {
virsh shutdown $VM_NAME || true
sleep 5
virsh net-destroy $VM_NET_NAME || true
rm $VM_BAK_IMG || true
}
timing_enter integrity_test
# If no VM_QEMU argument is given - check if needed qemu is installed
echo "INFO: Checking qemu..."
if [[ ! -d $qemu_src_dir && -z "$VM_QEMU" ]]; then
echo "INFO: Cloning $qemu_src_dir"
rm -rf $qemu_src_dir
mkdir -p $qemu_src_dir
cd $(dirname $qemu_src_dir)
git clone -b dev/vhost_scsi ssh://az-sg-sw01.ch.intel.com:29418/qemu
echo "INFO: Cloning Qemu Done"
else
echo "INFO: Qemu source exist $qemu_src_dir - not cloning"
fi
# Check if Qemu binary is present; build it if not
if [[ ! -x $qemu_install_dir/bin/qemu-system-x86_64 && -z "$VM_QEMU" ]]; then
echo "INFO: Can't find $qemu_install_dir/bin/qemu-system-x86_64 - building and installing"
mkdir -p $qemu_build_dir
cd $qemu_build_dir
$qemu_src_dir/configure --prefix=$qemu_install_dir \
--target-list="x86_64-softmmu" \
--enable-kvm --enable-linux-aio --enable-numa
echo "INFO: Compiling and installing QEMU in $qemu_install_dir"
$MAKE install
VM_QEMU="$qemu_install_dir/bin/qemu-system-x86_64"
echo "INFO: DONE"
elif [[ -z "$VM_QEMU" ]]; then
VM_QEMU="$qemu_install_dir/bin/qemu-system-x86_64"
fi
# Backing image for VM
qemu-img create -f qcow2 -o backing_file=$VM_IMG $VM_BAK_IMG
# Prepare vhost config
cp $basedir/vhost.conf.in $basedir/vhost.conf
$rootdir/scripts/gen_nvme.sh >> $basedir/vhost.conf
# Prepare .xml files for Virsh
cp $basedir/base_vm.xml $basedir/vm_conf.xml
cp $basedir/base_vnet.xml $basedir/vnet_conf.xml
sed -i "s@<name></name>@<name>$VM_NAME</name>@g" $basedir/vm_conf.xml
sed -i "s@source file=''@source file='$VM_BAK_IMG'@g" $basedir/vm_conf.xml
sed -i "s@<emulator></emulator>@<emulator>$VM_QEMU</emulator>@g" $basedir/vm_conf.xml
sed -i "s@mac address=''@mac address='$VM_MAC'@g" $basedir/vm_conf.xml
sed -i "s@source network=''@source network='$VM_NET_NAME'@g" $basedir/vm_conf.xml
sed -i "s@<name></name>@<name>$VM_NET_NAME</name>@g" $basedir/vnet_conf.xml
trap "cleanup_virsh; killprocess $pid; exit 1" SIGINT SIGTERM EXIT
virsh net-create $basedir/vnet_conf.xml
# Change directory and ownership because virsh has issues with
# paths that are in /root tree
cd /tmp
$rootdir/app/vhost/vhost -c $basedir/vhost.conf &
pid=$!
echo "Process pid: $pid"
sleep 10
chmod 777 /tmp/naa.0
virsh create $basedir/vm_conf.xml
virsh net-update $VM_NET_NAME add ip-dhcp-host "<host mac='$VM_MAC' name='$VM_NAME' ip='$VM_IP'/>"
# Wait for VM to boot, disable trap temporarily
# so that we don't exit on first fail
echo "INFO: Trying to connect to virtual machine..."
trap - SIGINT SIGTERM EXIT
set +xe
rc=-1
while [[ $TIMEO -gt 0 && rc -ne 0 ]]; do
$SSHCMD root@$VM_IP -q -oStrictHostKeyChecking=no 'echo Hello'
rc=$?
((TIMEO-=1))
done
set -xe
trap "cleanup_virsh; killprocess $pid; exit 1" SIGINT SIGTERM EXIT
if [[ $TIMEO -eq 0 || rc -ne 0 ]]; then
echo "ERROR: VM did not boot properly, exiting"
exit 1
fi
# Run test on Virtual Machine
$SCPCMD -r $basedir/integrity_vm.sh root@$VM_IP:~
$SSHCMD root@$VM_IP "fs=$VM_FS ~/integrity_vm.sh"
# Kill VM, cleanup config files
cleanup_virsh
rm $basedir/vm_conf.xml || true
rm $basedir/vnet_conf.xml || true
rm $basedir/vhost.conf || true
# Try to gracefully stop spdk vhost
if /bin/kill -INT $pid; then
while /bin/kill -0 $pid; do
sleep 1
done
elif /bin/kill -0 $pid; then
killprocess $pid
echo "ERROR: Vhost was not closed gracefully..."
exit 1
else
exit 1
fi
trap - SIGINT SIGTERM EXIT
timing_exit integrity_test