]>
Commit | Line | Data |
---|---|---|
11a82d14 | 1 | #!/usr/bin/env bash |
26bf474b JC |
2 | # |
3 | # Test for force canceling a running blockjob that is paused in | |
4 | # an error state. | |
5 | # | |
6 | # Copyright (C) 2018 Red Hat, Inc. | |
7 | # | |
8 | # This program is free software; you can redistribute it and/or modify | |
9 | # it under the terms of the GNU General Public License as published by | |
10 | # the Free Software Foundation; either version 2 of the License, or | |
11 | # (at your option) any later version. | |
12 | # | |
13 | # This program is distributed in the hope that it will be useful, | |
14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | # GNU General Public License for more details. | |
17 | # | |
18 | # You should have received a copy of the GNU General Public License | |
19 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
20 | # | |
21 | ||
22 | # creator | |
23 | [email protected] | |
24 | ||
25 | seq="$(basename $0)" | |
26 | echo "QA output created by $seq" | |
27 | ||
26bf474b JC |
28 | status=1 # failure is the default! |
29 | ||
30 | _cleanup() | |
31 | { | |
32 | _cleanup_qemu | |
33 | _cleanup_test_img | |
f91ecbd7 HR |
34 | _rm_test_img "$TEST_IMG" |
35 | _rm_test_img "$DEST_IMG" | |
26bf474b JC |
36 | } |
37 | trap "_cleanup; exit \$status" 0 1 2 3 15 | |
38 | ||
39 | # get standard environment, filters and checks | |
40 | . ./common.rc | |
41 | . ./common.filter | |
42 | . ./common.qemu | |
43 | ||
44 | # Needs backing file and backing format support | |
45 | _supported_fmt qcow2 qed | |
46 | _supported_proto file | |
47 | _supported_os Linux | |
48 | ||
49 | ||
50 | DEST_IMG="$TEST_DIR/d.$IMGFMT" | |
51 | TEST_IMG="$TEST_DIR/b.$IMGFMT" | |
52 | ||
53 | _make_test_img 2M | |
54 | ||
55 | # destination for mirror will be too small, causing error | |
56 | TEST_IMG=$DEST_IMG _make_test_img 1M | |
57 | ||
58 | $QEMU_IO -c 'write 0 2M' "$TEST_IMG" | _filter_qemu_io | |
59 | ||
60 | _launch_qemu -drive id=testdisk,file="$TEST_IMG",format="$IMGFMT" | |
61 | ||
62 | _send_qemu_cmd $QEMU_HANDLE \ | |
63 | "{'execute': 'qmp_capabilities'}" \ | |
64 | 'return' | |
65 | ||
66 | echo | |
67 | echo '=== Starting drive-mirror, causing error & stop ===' | |
68 | echo | |
69 | ||
70 | _send_qemu_cmd $QEMU_HANDLE \ | |
71 | "{'execute': 'drive-mirror', | |
72 | 'arguments': {'device': 'testdisk', | |
26bf474b JC |
73 | 'format': '$IMGFMT', |
74 | 'target': '$DEST_IMG', | |
75 | 'sync': 'full', | |
76 | 'mode': 'existing', | |
77 | 'on-source-error': 'stop', | |
78 | 'on-target-error': 'stop' }}" \ | |
79 | "JOB_STATUS_CHANGE.*pause" | |
80 | ||
81 | echo | |
82 | echo '=== Force cancel job paused in error state ===' | |
83 | echo | |
84 | ||
fff2388d HR |
85 | # Filter out BLOCK_JOB_ERROR events because they may or may not occur. |
86 | # Cancelling the job means resuming it for a bit before it is actually | |
87 | # aborted, and in that time it may or may not re-encounter the error. | |
26bf474b JC |
88 | success_or_failure="y" _send_qemu_cmd $QEMU_HANDLE \ |
89 | "{'execute': 'block-job-cancel', | |
90 | 'arguments': { 'device': 'testdisk', | |
91 | 'force': true}}" \ | |
fff2388d HR |
92 | "BLOCK_JOB_CANCELLED" "Assertion" \ |
93 | | grep -v '"BLOCK_JOB_ERROR"' | |
26bf474b JC |
94 | |
95 | # success, all done | |
96 | echo "*** done" | |
97 | rm -f $seq.full | |
98 | status=0 |