Spdk/test/nvme/hotplug.sh
Seth Howell 34ae11720d test/vhost: shell_restore_x -> xtrace_restore
The shell_Restore_x variable and xtrace_restore were attempting to
accomplish the exact same thing. However, when assigning
shell_restore_x, if -x was not set, then the assignment would result in
an error causing the scripts to fail.
So just get rid of that variable entirely and replace it with the more
robust xtrace_disable, xtrace_restore mechanism.

Change-Id: Ic823ad8433bd3dc181aaa0930297cd9d74bcf528
Signed-off-by: Seth Howell <seth.howell@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/477966
Reviewed-by: Karol Latecki <karol.latecki@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: SPDK CI Jenkins <sys_sgci@intel.com>
2019-12-17 14:54:40 +00:00

145 lines
3.3 KiB
Bash
Executable File

#!/usr/bin/env bash
testdir=$(readlink -f $(dirname $0))
rootdir=$(readlink -f $testdir/../..)
source $rootdir/test/common/autotest_common.sh
if [ -z "${DEPENDENCY_DIR}" ]; then
echo DEPENDENCY_DIR not defined!
exit 1
fi
function ssh_vm() {
xtrace_disable
sshpass -p "$password" ssh -o PubkeyAuthentication=no \
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 10022 root@localhost "$@"
xtrace_restore
}
function monitor_cmd() {
rc=0
if ! (echo "$@" | nc localhost 4444 > mon.log); then
rc=1
cat mon.log
fi
rm mon.log
return $rc
}
function get_online_devices_count() {
ssh_vm "lspci | grep -c NVM"
}
function wait_for_devices_ready() {
count=$(get_online_devices_count)
while [ $count -ne 4 ]; do
echo "waitting for all devices online"
count=$(get_online_devices_count)
done
}
function devices_initialization() {
timing_enter devices_initialization
dd if=/dev/zero of=/root/test0 bs=1M count=1024
dd if=/dev/zero of=/root/test1 bs=1M count=1024
dd if=/dev/zero of=/root/test2 bs=1M count=1024
dd if=/dev/zero of=/root/test3 bs=1M count=1024
monitor_cmd "drive_add 0 file=/root/test0,format=raw,id=drive0,if=none"
monitor_cmd "drive_add 1 file=/root/test1,format=raw,id=drive1,if=none"
monitor_cmd "drive_add 2 file=/root/test2,format=raw,id=drive2,if=none"
monitor_cmd "drive_add 3 file=/root/test3,format=raw,id=drive3,if=none"
timing_exit devices_initialization
}
function insert_devices() {
monitor_cmd "device_add nvme,drive=drive0,id=nvme0,serial=nvme0"
monitor_cmd "device_add nvme,drive=drive1,id=nvme1,serial=nvme1"
monitor_cmd "device_add nvme,drive=drive2,id=nvme2,serial=nvme2"
monitor_cmd "device_add nvme,drive=drive3,id=nvme3,serial=nvme3"
wait_for_devices_ready
ssh_vm "scripts/setup.sh"
}
function remove_devices() {
monitor_cmd "device_del nvme0"
monitor_cmd "device_del nvme1"
monitor_cmd "device_del nvme2"
monitor_cmd "device_del nvme3"
}
function devices_delete() {
timing_enter devices_delete
rm /root/test0
rm /root/test1
rm /root/test2
rm /root/test3
timing_exit devices_delete
}
password=$1
base_img=${DEPENDENCY_DIR}/fedora-hotplug.qcow2
test_img=${DEPENDENCY_DIR}/fedora-hotplug-test.qcow2
qemu_pidfile=${DEPENDENCY_DIR}/qemupid
if [ ! -e "$base_img" ]; then
echo "Hotplug VM image not found; skipping test"
exit 0
fi
timing_enter start_qemu
qemu-img create -b "$base_img" -f qcow2 "$test_img"
qemu-system-x86_64 \
-daemonize -display none -m 8192 \
-pidfile "$qemu_pidfile" \
-hda "$test_img" \
-net user,hostfwd=tcp::10022-:22 \
-net nic \
-cpu host \
-smp cores=16,sockets=1 \
--enable-kvm \
-chardev socket,id=mon0,host=localhost,port=4444,server,nowait \
-mon chardev=mon0,mode=readline
timing_exit start_qemu
timing_enter wait_for_vm
ssh_vm 'echo ready'
timing_exit wait_for_vm
timing_enter copy_repo
(cd "$rootdir"; tar -cf - .) | (ssh_vm 'tar -xf -')
timing_exit copy_repo
devices_initialization
insert_devices
timing_enter hotplug_test
ssh_vm "examples/nvme/hotplug/hotplug -i 0 -t 25 -n 4 -r 8" &
example_pid=$!
sleep 4
remove_devices
sleep 4
insert_devices
sleep 4
remove_devices
devices_delete
timing_enter wait_for_example
wait $example_pid
timing_exit wait_for_example
trap - SIGINT SIGTERM EXIT
qemupid=$(cat "$qemu_pidfile" | awk '{printf $0}')
kill -9 $qemupid
rm "$qemu_pidfile"
rm "$test_img"
report_test_completion "nvme_hotplug"
timing_exit hotplug_test