]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/spdk/test/nvme/hotplug.sh
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / spdk / test / nvme / hotplug.sh
index dfe5d17badbbce2ec031cbef467aec8d3306d6bd..13011e19355e683668fed4a48a6469a2139d4eeb 100755 (executable)
@@ -1,7 +1,5 @@
 #!/usr/bin/env bash
 
-set -xe
-
 testdir=$(readlink -f $(dirname $0))
 rootdir=$(readlink -f $testdir/../..)
 source $rootdir/test/common/autotest_common.sh
@@ -12,20 +10,14 @@ if [ -z "${DEPENDENCY_DIR}" ]; then
 fi
 
 function ssh_vm() {
-       local shell_restore_x="$( [[ "$-" =~ x ]] && echo 'set -x' )"
-       set +x
-       sshpass -p "$password" ssh -o PubkeyAuthentication=no -o StrictHostKeyChecking=no -p 10022 root@localhost "$@"
-       $shell_restore_x
+       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
+       echo "$@" | nc localhost 4444 | tail --lines=+2 | (grep -v '^(qemu) ' || true)
 }
 
 function get_online_devices_count() {
@@ -41,47 +33,29 @@ function wait_for_devices_ready() {
        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"
+       for i in {0..3}; do
+               monitor_cmd "device_add nvme,drive=drive$i,id=nvme$i,serial=nvme$i"
+       done
        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"
+       for i in {0..3}; do
+               monitor_cmd "device_del nvme$i"
+       done
 }
 
 function devices_delete() {
-       timing_enter devices_delete
-       rm /root/test0
-       rm /root/test1
-       rm /root/test2
-       rm /root/test3
-       timing_exit devices_delete
+       for i in {0..3}; do
+               rm "$SPDK_TEST_STORAGE/nvme$i.img"
+       done
 }
 
 password=$1
-base_img=${DEPENDENCY_DIR}/fedora24.img
-test_img=${DEPENDENCY_DIR}/fedora24_test.img
+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
@@ -89,12 +63,14 @@ if [ ! -e "$base_img" ]; then
        exit 0
 fi
 
-timing_enter hotplug
-
 timing_enter start_qemu
 
 qemu-img create -b "$base_img" -f qcow2 "$test_img"
 
+for i in {0..3}; do
+       dd if=/dev/zero of="$SPDK_TEST_STORAGE/nvme$i.img" bs=1M count=1024
+done
+
 qemu-system-x86_64 \
        -daemonize -display none -m 8192 \
        -pidfile "$qemu_pidfile" \
@@ -105,7 +81,11 @@ qemu-system-x86_64 \
        -smp cores=16,sockets=1 \
        --enable-kvm \
        -chardev socket,id=mon0,host=localhost,port=4444,server,nowait \
-       -mon chardev=mon0,mode=readline
+       -mon chardev=mon0,mode=readline \
+       -drive format=raw,file="$SPDK_TEST_STORAGE/nvme0.img",if=none,id=drive0 \
+       -drive format=raw,file="$SPDK_TEST_STORAGE/nvme1.img",if=none,id=drive1 \
+       -drive format=raw,file="$SPDK_TEST_STORAGE/nvme2.img",if=none,id=drive2 \
+       -drive format=raw,file="$SPDK_TEST_STORAGE/nvme3.img",if=none,id=drive3
 
 timing_exit start_qemu
 
@@ -114,22 +94,29 @@ ssh_vm 'echo ready'
 timing_exit wait_for_vm
 
 timing_enter copy_repo
-(cd "$rootdir"; tar -cf - .) | (ssh_vm 'tar -xf -')
+files_to_copy="scripts "
+files_to_copy+="include/spdk/pci_ids.h "
+files_to_copy+="build/examples/hotplug "
+files_to_copy+="build/lib "
+files_to_copy+="dpdk/build/lib "
+(
+       cd "$rootdir"
+       tar -cf - $files_to_copy
+) | (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" &
+ssh_vm "LD_LIBRARY_PATH=/root//build/lib:/root/dpdk/build/lib:$LD_LIBRARY_PATH build/examples/hotplug -i 0 -t 25 -n 4 -r 8" &
 example_pid=$!
 
-sleep 4
+sleep 6
 remove_devices
 sleep 4
 insert_devices
-sleep 4
+sleep 6
 remove_devices
 devices_delete
 
@@ -139,12 +126,9 @@ timing_exit wait_for_example
 
 trap - SIGINT SIGTERM EXIT
 
-qemupid=`cat "$qemu_pidfile" | awk '{printf $0}'`
+qemupid=$(awk '{printf $0}' "$qemu_pidfile")
 kill -9 $qemupid
 rm "$qemu_pidfile"
 rm "$test_img"
 
-report_test_completion "nvme_hotplug"
 timing_exit hotplug_test
-
-timing_exit hotplug