1#!/usr/bin/env bash 2# SPDX-License-Identifier: BSD-3-Clause 3# Copyright (C) 2017 Intel Corporation 4# All rights reserved. 5# 6testdir=$(readlink -f $(dirname $0)) 7rootdir=$(readlink -f $testdir/../../..) 8source "$rootdir/test/vhost/hotplug/common.sh" 9 10function get_first_disk() { 11 vm_check_scsi_location $1 12 disk_array=($SCSI_DISK) 13 eval "$2=${disk_array[0]}" 14} 15 16function check_disks() { 17 if [ "$1" == "$2" ]; then 18 fail "Disk has not been deleted" 19 fi 20} 21 22function prepare_fio_cmd_tc1_iter1() { 23 print_test_fio_header 24 25 run_fio="$fio_bin --eta=never " 26 for vm_num in $1; do 27 cp $fio_job $tmp_detach_job 28 vm_check_scsi_location $vm_num 29 for disk in $SCSI_DISK; do 30 echo "[nvme-host$disk]" >> $tmp_detach_job 31 echo "filename=/dev/$disk" >> $tmp_detach_job 32 done 33 vm_scp "$vm_num" $tmp_detach_job 127.0.0.1:/root/default_integrity_4discs.job 34 run_fio+="--client=127.0.0.1,$(vm_fio_socket $vm_num) --remote-config /root/default_integrity_4discs.job " 35 rm $tmp_detach_job 36 done 37} 38 39function prepare_fio_cmd_tc2_iter1() { 40 print_test_fio_header 41 42 run_fio="$fio_bin --eta=never " 43 for vm_num in $1; do 44 cp $fio_job $tmp_detach_job 45 vm_check_scsi_location $vm_num 46 disk_array=($SCSI_DISK) 47 disk=${disk_array[0]} 48 echo "[nvme-host$disk]" >> $tmp_detach_job 49 echo "filename=/dev/$disk" >> $tmp_detach_job 50 vm_scp "$vm_num" $tmp_detach_job 127.0.0.1:/root/default_integrity.job 51 run_fio+="--client=127.0.0.1,$(vm_fio_socket $vm_num) --remote-config /root/default_integrity.job " 52 rm $tmp_detach_job 53 done 54} 55 56function prepare_fio_cmd_tc2_iter2() { 57 print_test_fio_header 58 59 run_fio="$fio_bin --eta=never " 60 for vm_num in $1; do 61 cp $fio_job $tmp_detach_job 62 if [ $vm_num == 2 ]; then 63 vm_job_name=default_integrity_3discs.job 64 else 65 vm_job_name=default_integrity_4discs.job 66 fi 67 vm_check_scsi_location $vm_num 68 for disk in $SCSI_DISK; do 69 echo "[nvme-host$disk]" >> $tmp_detach_job 70 echo "filename=/dev/$disk" >> $tmp_detach_job 71 done 72 vm_scp "$vm_num" $tmp_detach_job 127.0.0.1:/root/$vm_job_name 73 run_fio+="--client=127.0.0.1,$(vm_fio_socket $vm_num) --remote-config /root/${vm_job_name} " 74 rm $tmp_detach_job 75 done 76} 77 78function prepare_fio_cmd_tc3_iter1() { 79 print_test_fio_header 80 81 run_fio="$fio_bin --eta=never " 82 for vm_num in $1; do 83 cp $fio_job $tmp_detach_job 84 if [ $vm_num == 2 ]; then 85 vm_job_name=default_integrity_3discs.job 86 else 87 vm_job_name=default_integrity_4discs.job 88 fi 89 vm_check_scsi_location $vm_num 90 j=1 91 for disk in $SCSI_DISK; do 92 if [ $vm_num == 2 ]; then 93 if [ $j == 1 ]; then 94 ((j++)) 95 continue 96 fi 97 fi 98 echo "[nvme-host$disk]" >> $tmp_detach_job 99 echo "filename=/dev/$disk" >> $tmp_detach_job 100 ((j++)) 101 done 102 vm_scp "$vm_num" $tmp_detach_job 127.0.0.1:/root/$vm_job_name 103 run_fio+="--client=127.0.0.1,$(vm_fio_socket $vm_num) --remote-config /root/$vm_job_name " 104 rm $tmp_detach_job 105 done 106} 107 108# During fio test for all devices remove first device from fifth controller and check if fio fails. 109# Also check if disc has been removed from VM. 110function hotdetach_tc1() { 111 notice "Hotdetach test case 1" 112 first_disk="" 113 get_first_disk "2" first_disk 114 prepare_fio_cmd_tc1_iter1 "2 3" 115 $run_fio & 116 last_pid=$! 117 sleep 3 118 $rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p4.2 0 119 set +xe 120 wait $last_pid 121 check_fio_retcode "Hotdetach test case 1: Iteration 1." 1 $? 122 set -xe 123 second_disk="" 124 get_first_disk "2" second_disk 125 check_disks $first_disk $second_disk 126 clear_after_tests 127} 128 129# During fio test for device from third VM remove first device from fifth controller and check if fio fails. 130# Also check if disc has been removed from VM. 131function hotdetach_tc2() { 132 notice "Hotdetach test case 2" 133 sleep 2 134 first_disk="" 135 get_first_disk "2" first_disk 136 prepare_fio_cmd_tc2_iter1 "2" 137 $run_fio & 138 last_pid=$! 139 sleep 3 140 $rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p4.2 0 141 set +xe 142 wait $last_pid 143 check_fio_retcode "Hotdetach test case 2: Iteration 1." 1 $? 144 set -xe 145 second_disk="" 146 get_first_disk "2" second_disk 147 check_disks $first_disk $second_disk 148 clear_after_tests 149} 150 151# Run fio test for all devices except one, then remove this device and check if fio passes. 152# Also check if disc has been removed from VM. 153function hotdetach_tc3() { 154 notice "Hotdetach test case 3" 155 sleep 2 156 first_disk="" 157 get_first_disk "2" first_disk 158 prepare_fio_cmd_tc3_iter1 "2 3" 159 $run_fio & 160 last_pid=$! 161 sleep 3 162 $rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p4.2 0 163 wait $last_pid 164 check_fio_retcode "Hotdetach test case 3: Iteration 1." 0 $? 165 second_disk="" 166 get_first_disk "2" second_disk 167 check_disks $first_disk $second_disk 168 clear_after_tests 169} 170 171# Run fio test for all devices except one and run separate fio test for this device. 172# Check if first fio test passes and second fio test fails. 173# Also check if disc has been removed from VM. 174# After reboot run fio test for remaining devices and check if fio passes. 175function hotdetach_tc4() { 176 notice "Hotdetach test case 4" 177 sleep 2 178 first_disk="" 179 get_first_disk "2" first_disk 180 prepare_fio_cmd_tc2_iter1 "2" 181 $run_fio & 182 first_fio_pid=$! 183 prepare_fio_cmd_tc3_iter1 "2 3" 184 $run_fio & 185 second_fio_pid=$! 186 sleep 3 187 $rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p4.2 0 188 set +xe 189 wait $first_fio_pid 190 check_fio_retcode "Hotdetach test case 4: Iteration 1." 1 $? 191 set -xe 192 wait $second_fio_pid 193 check_fio_retcode "Hotdetach test case 4: Iteration 2." 0 $? 194 second_disk="" 195 get_first_disk "2" second_disk 196 check_disks $first_disk $second_disk 197 198 reboot_all_and_prepare "2 3" 199 sleep 2 200 prepare_fio_cmd_tc2_iter2 "2 3" 201 $run_fio 202 check_fio_retcode "Hotdetach test case 4: Iteration 3." 0 $? 203 clear_after_tests 204} 205 206function clear_after_tests() { 207 $rpc_py vhost_scsi_controller_add_target naa.Nvme0n1p4.2 0 Nvme0n1p8 208} 209 210hotdetach_tc1 211hotdetach_tc2 212hotdetach_tc3 213hotdetach_tc4 214