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>
145 lines
3.3 KiB
Bash
Executable File
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
|