]>
Commit | Line | Data |
---|---|---|
11a82d14 | 1 | #!/usr/bin/env bash |
7c3a3028 DHB |
2 | # |
3 | # Test savevm and loadvm after live migration with postcopy flag | |
4 | # | |
5 | # Copyright (C) 2017, IBM Corporation. | |
6 | # | |
7 | # This file is derived from tests/qemu-iotests/181 by Kevin Wolf | |
8 | # | |
9 | # This program is free software; you can redistribute it and/or modify | |
10 | # it under the terms of the GNU General Public License as published by | |
11 | # the Free Software Foundation; either version 2 of the License, or | |
12 | # (at your option) any later version. | |
13 | # | |
14 | # This program is distributed in the hope that it will be useful, | |
15 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 | # GNU General Public License for more details. | |
18 | # | |
19 | # You should have received a copy of the GNU General Public License | |
20 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
21 | ||
22 | seq=`basename $0` | |
23 | echo "QA output created by $seq" | |
24 | ||
25 | status=1 # failure is the default! | |
26 | ||
2b4af465 | 27 | MIG_SOCKET="${SOCK_DIR}/migrate" |
7c3a3028 DHB |
28 | |
29 | # get standard environment, filters and checks | |
30 | . ./common.rc | |
31 | . ./common.filter | |
32 | . ./common.qemu | |
33 | ||
34 | _cleanup() | |
35 | { | |
36 | rm -f "${MIG_SOCKET}" | |
37 | _cleanup_test_img | |
38 | _cleanup_qemu | |
39 | } | |
40 | trap "_cleanup; exit \$status" 0 1 2 3 15 | |
41 | ||
42 | _supported_fmt qcow2 | |
43 | _supported_proto generic | |
44 | _supported_os Linux | |
45 | ||
3be2024a HR |
46 | # Internal snapshots are (currently) impossible with refcount_bits=1, |
47 | # and generally impossible with external data files | |
48 | _unsupported_imgopts 'refcount_bits=1[^0-9]' data_file | |
7c3a3028 DHB |
49 | |
50 | size=64M | |
51 | _make_test_img $size | |
52 | ||
53 | echo | |
54 | echo === Starting VMs === | |
55 | echo | |
56 | ||
57 | qemu_comm_method="monitor" | |
58 | ||
59 | if [ "$IMGOPTSSYNTAX" = "true" ]; then | |
60 | _launch_qemu \ | |
8dff69b9 | 61 | -drive "${TEST_IMG}",cache=${CACHEMODE},aio=$AIOMODE,id=disk |
7c3a3028 DHB |
62 | else |
63 | _launch_qemu \ | |
8dff69b9 | 64 | -drive file="${TEST_IMG}",cache=${CACHEMODE},aio=$AIOMODE,driver=$IMGFMT,id=disk |
7c3a3028 DHB |
65 | fi |
66 | src=$QEMU_HANDLE | |
67 | ||
68 | if [ "$IMGOPTSSYNTAX" = "true" ]; then | |
69 | _launch_qemu \ | |
8dff69b9 | 70 | -drive "${TEST_IMG}",cache=${CACHEMODE},aio=$AIOMODE,id=disk \ |
7c3a3028 DHB |
71 | -incoming "unix:${MIG_SOCKET}" |
72 | else | |
73 | _launch_qemu \ | |
8dff69b9 | 74 | -drive file="${TEST_IMG}",cache=${CACHEMODE},aio=$AIOMODE,driver=$IMGFMT,id=disk \ |
7c3a3028 DHB |
75 | -incoming "unix:${MIG_SOCKET}" |
76 | fi | |
77 | dest=$QEMU_HANDLE | |
78 | ||
79 | echo | |
80 | echo === Set \'migrate_set_capability postcopy-ram on\' and migrate === | |
81 | echo | |
82 | ||
83 | silent=yes | |
84 | _send_qemu_cmd $dest 'migrate_set_capability postcopy-ram on' "(qemu)" | |
b05a2225 HR |
85 | |
86 | qemu_error_no_exit=yes success_or_failure=yes \ | |
87 | _send_qemu_cmd $dest '' "(qemu)" "Postcopy is not supported" | |
88 | if [ ${QEMU_STATUS[$dest]} -lt 0 ]; then | |
89 | _send_qemu_cmd $dest '' "(qemu)" | |
90 | ||
91 | _send_qemu_cmd $src 'quit' "" | |
92 | _send_qemu_cmd $dest 'quit' "" | |
93 | wait=1 _cleanup_qemu | |
94 | ||
95 | _notrun 'Postcopy is not supported' | |
96 | fi | |
97 | ||
7c3a3028 DHB |
98 | _send_qemu_cmd $src 'migrate_set_capability postcopy-ram on' "(qemu)" |
99 | _send_qemu_cmd $src "migrate -d unix:${MIG_SOCKET}" "(qemu)" | |
100 | ||
101 | QEMU_COMM_TIMEOUT=1 qemu_cmd_repeat=10 silent=yes \ | |
102 | _send_qemu_cmd $src "info migrate" "completed\|failed" | |
103 | silent=yes _send_qemu_cmd $src "" "(qemu)" | |
104 | ||
105 | echo | |
106 | echo === Check if migration was successful === | |
107 | echo | |
108 | ||
109 | QEMU_COMM_TIMEOUT=1 silent=yes \ | |
110 | _send_qemu_cmd $src "info migrate" "completed" | |
111 | silent=yes _send_qemu_cmd $src "" "(qemu)" | |
112 | ||
113 | echo | |
114 | echo === On destination, execute savevm and loadvm === | |
115 | echo | |
116 | ||
117 | silent= | |
118 | _send_qemu_cmd $dest 'savevm state1' "(qemu)" | |
119 | _send_qemu_cmd $dest 'loadvm state1' "(qemu)" | |
120 | ||
121 | echo | |
122 | echo === Shut down and check image === | |
123 | echo | |
124 | ||
125 | _send_qemu_cmd $src 'quit' "" | |
126 | _send_qemu_cmd $dest 'quit' "" | |
127 | wait=1 _cleanup_qemu | |
128 | ||
129 | _check_test_img | |
130 | ||
131 | # success, all done | |
132 | echo "*** done" | |
133 | status=0 |