xref: /openbmc/qemu/tests/qemu-iotests/201 (revision dc5bd18f)
1#!/bin/bash
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
22seq=`basename $0`
23echo "QA output created by $seq"
24
25status=1	# failure is the default!
26
27MIG_SOCKET="${TEST_DIR}/migrate"
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}
40trap "_cleanup; exit \$status" 0 1 2 3 15
41
42_supported_fmt qcow2
43_supported_proto generic
44_supported_os Linux
45
46# Internal snapshots are (currently) impossible with refcount_bits=1
47# This was taken from test 080
48_unsupported_imgopts 'refcount_bits=1[^0-9]'
49
50size=64M
51_make_test_img $size
52
53echo
54echo === Starting VMs ===
55echo
56
57qemu_comm_method="monitor"
58
59if [ "$IMGOPTSSYNTAX" = "true" ]; then
60    _launch_qemu \
61        -drive "${TEST_IMG}",cache=${CACHEMODE},id=disk
62else
63    _launch_qemu \
64        -drive file="${TEST_IMG}",cache=${CACHEMODE},driver=$IMGFMT,id=disk
65fi
66src=$QEMU_HANDLE
67
68if [ "$IMGOPTSSYNTAX" = "true" ]; then
69    _launch_qemu \
70        -drive "${TEST_IMG}",cache=${CACHEMODE},id=disk \
71        -incoming "unix:${MIG_SOCKET}"
72else
73    _launch_qemu \
74        -drive file="${TEST_IMG}",cache=${CACHEMODE},driver=$IMGFMT,id=disk \
75        -incoming "unix:${MIG_SOCKET}"
76fi
77dest=$QEMU_HANDLE
78
79echo
80echo === Set \'migrate_set_capability postcopy-ram on\' and migrate ===
81echo
82
83silent=yes
84_send_qemu_cmd $dest 'migrate_set_capability postcopy-ram on' "(qemu)"
85_send_qemu_cmd $src 'migrate_set_capability postcopy-ram on' "(qemu)"
86_send_qemu_cmd $src "migrate -d unix:${MIG_SOCKET}" "(qemu)"
87
88QEMU_COMM_TIMEOUT=1 qemu_cmd_repeat=10 silent=yes \
89    _send_qemu_cmd $src "info migrate" "completed\|failed"
90silent=yes _send_qemu_cmd $src "" "(qemu)"
91
92echo
93echo === Check if migration was successful ===
94echo
95
96QEMU_COMM_TIMEOUT=1 silent=yes \
97    _send_qemu_cmd $src "info migrate" "completed"
98silent=yes _send_qemu_cmd $src "" "(qemu)"
99
100echo
101echo === On destination, execute savevm and loadvm ===
102echo
103
104silent=
105_send_qemu_cmd $dest 'savevm state1' "(qemu)"
106_send_qemu_cmd $dest 'loadvm state1' "(qemu)"
107
108echo
109echo === Shut down and check image ===
110echo
111
112_send_qemu_cmd $src 'quit' ""
113_send_qemu_cmd $dest 'quit' ""
114wait=1 _cleanup_qemu
115
116_check_test_img
117
118# success, all done
119echo "*** done"
120status=0
121