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