xref: /openbmc/qemu/tests/qemu-iotests/201 (revision 7c3a3028596db5e142c6fc9644800a0ec3b073fd)
1*7c3a3028SDaniel Henrique Barboza#!/bin/bash
2*7c3a3028SDaniel Henrique Barboza#
3*7c3a3028SDaniel Henrique Barboza# Test savevm and loadvm after live migration with postcopy flag
4*7c3a3028SDaniel Henrique Barboza#
5*7c3a3028SDaniel Henrique Barboza# Copyright (C) 2017, IBM Corporation.
6*7c3a3028SDaniel Henrique Barboza#
7*7c3a3028SDaniel Henrique Barboza# This file is derived from tests/qemu-iotests/181 by Kevin Wolf
8*7c3a3028SDaniel Henrique Barboza#
9*7c3a3028SDaniel Henrique Barboza# This program is free software; you can redistribute it and/or modify
10*7c3a3028SDaniel Henrique Barboza# it under the terms of the GNU General Public License as published by
11*7c3a3028SDaniel Henrique Barboza# the Free Software Foundation; either version 2 of the License, or
12*7c3a3028SDaniel Henrique Barboza# (at your option) any later version.
13*7c3a3028SDaniel Henrique Barboza#
14*7c3a3028SDaniel Henrique Barboza# This program is distributed in the hope that it will be useful,
15*7c3a3028SDaniel Henrique Barboza# but WITHOUT ANY WARRANTY; without even the implied warranty of
16*7c3a3028SDaniel Henrique Barboza# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17*7c3a3028SDaniel Henrique Barboza# GNU General Public License for more details.
18*7c3a3028SDaniel Henrique Barboza#
19*7c3a3028SDaniel Henrique Barboza# You should have received a copy of the GNU General Public License
20*7c3a3028SDaniel Henrique Barboza# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21*7c3a3028SDaniel Henrique Barboza
22*7c3a3028SDaniel Henrique Barbozaseq=`basename $0`
23*7c3a3028SDaniel Henrique Barbozaecho "QA output created by $seq"
24*7c3a3028SDaniel Henrique Barboza
25*7c3a3028SDaniel Henrique Barbozastatus=1	# failure is the default!
26*7c3a3028SDaniel Henrique Barboza
27*7c3a3028SDaniel Henrique BarbozaMIG_SOCKET="${TEST_DIR}/migrate"
28*7c3a3028SDaniel Henrique Barboza
29*7c3a3028SDaniel Henrique Barboza# get standard environment, filters and checks
30*7c3a3028SDaniel Henrique Barboza. ./common.rc
31*7c3a3028SDaniel Henrique Barboza. ./common.filter
32*7c3a3028SDaniel Henrique Barboza. ./common.qemu
33*7c3a3028SDaniel Henrique Barboza
34*7c3a3028SDaniel Henrique Barboza_cleanup()
35*7c3a3028SDaniel Henrique Barboza{
36*7c3a3028SDaniel Henrique Barboza    rm -f "${MIG_SOCKET}"
37*7c3a3028SDaniel Henrique Barboza    _cleanup_test_img
38*7c3a3028SDaniel Henrique Barboza    _cleanup_qemu
39*7c3a3028SDaniel Henrique Barboza}
40*7c3a3028SDaniel Henrique Barbozatrap "_cleanup; exit \$status" 0 1 2 3 15
41*7c3a3028SDaniel Henrique Barboza
42*7c3a3028SDaniel Henrique Barboza_supported_fmt qcow2
43*7c3a3028SDaniel Henrique Barboza_supported_proto generic
44*7c3a3028SDaniel Henrique Barboza_supported_os Linux
45*7c3a3028SDaniel Henrique Barboza
46*7c3a3028SDaniel Henrique Barboza# Internal snapshots are (currently) impossible with refcount_bits=1
47*7c3a3028SDaniel Henrique Barboza# This was taken from test 080
48*7c3a3028SDaniel Henrique Barboza_unsupported_imgopts 'refcount_bits=1[^0-9]'
49*7c3a3028SDaniel Henrique Barboza
50*7c3a3028SDaniel Henrique Barbozasize=64M
51*7c3a3028SDaniel Henrique Barboza_make_test_img $size
52*7c3a3028SDaniel Henrique Barboza
53*7c3a3028SDaniel Henrique Barbozaecho
54*7c3a3028SDaniel Henrique Barbozaecho === Starting VMs ===
55*7c3a3028SDaniel Henrique Barbozaecho
56*7c3a3028SDaniel Henrique Barboza
57*7c3a3028SDaniel Henrique Barbozaqemu_comm_method="monitor"
58*7c3a3028SDaniel Henrique Barboza
59*7c3a3028SDaniel Henrique Barbozaif [ "$IMGOPTSSYNTAX" = "true" ]; then
60*7c3a3028SDaniel Henrique Barboza    _launch_qemu \
61*7c3a3028SDaniel Henrique Barboza        -drive "${TEST_IMG}",cache=${CACHEMODE},id=disk
62*7c3a3028SDaniel Henrique Barbozaelse
63*7c3a3028SDaniel Henrique Barboza    _launch_qemu \
64*7c3a3028SDaniel Henrique Barboza        -drive file="${TEST_IMG}",cache=${CACHEMODE},driver=$IMGFMT,id=disk
65*7c3a3028SDaniel Henrique Barbozafi
66*7c3a3028SDaniel Henrique Barbozasrc=$QEMU_HANDLE
67*7c3a3028SDaniel Henrique Barboza
68*7c3a3028SDaniel Henrique Barbozaif [ "$IMGOPTSSYNTAX" = "true" ]; then
69*7c3a3028SDaniel Henrique Barboza    _launch_qemu \
70*7c3a3028SDaniel Henrique Barboza        -drive "${TEST_IMG}",cache=${CACHEMODE},id=disk \
71*7c3a3028SDaniel Henrique Barboza        -incoming "unix:${MIG_SOCKET}"
72*7c3a3028SDaniel Henrique Barbozaelse
73*7c3a3028SDaniel Henrique Barboza    _launch_qemu \
74*7c3a3028SDaniel Henrique Barboza        -drive file="${TEST_IMG}",cache=${CACHEMODE},driver=$IMGFMT,id=disk \
75*7c3a3028SDaniel Henrique Barboza        -incoming "unix:${MIG_SOCKET}"
76*7c3a3028SDaniel Henrique Barbozafi
77*7c3a3028SDaniel Henrique Barbozadest=$QEMU_HANDLE
78*7c3a3028SDaniel Henrique Barboza
79*7c3a3028SDaniel Henrique Barbozaecho
80*7c3a3028SDaniel Henrique Barbozaecho === Set \'migrate_set_capability postcopy-ram on\' and migrate ===
81*7c3a3028SDaniel Henrique Barbozaecho
82*7c3a3028SDaniel Henrique Barboza
83*7c3a3028SDaniel Henrique Barbozasilent=yes
84*7c3a3028SDaniel Henrique Barboza_send_qemu_cmd $dest 'migrate_set_capability postcopy-ram on' "(qemu)"
85*7c3a3028SDaniel Henrique Barboza_send_qemu_cmd $src 'migrate_set_capability postcopy-ram on' "(qemu)"
86*7c3a3028SDaniel Henrique Barboza_send_qemu_cmd $src "migrate -d unix:${MIG_SOCKET}" "(qemu)"
87*7c3a3028SDaniel Henrique Barboza
88*7c3a3028SDaniel Henrique BarbozaQEMU_COMM_TIMEOUT=1 qemu_cmd_repeat=10 silent=yes \
89*7c3a3028SDaniel Henrique Barboza    _send_qemu_cmd $src "info migrate" "completed\|failed"
90*7c3a3028SDaniel Henrique Barbozasilent=yes _send_qemu_cmd $src "" "(qemu)"
91*7c3a3028SDaniel Henrique Barboza
92*7c3a3028SDaniel Henrique Barbozaecho
93*7c3a3028SDaniel Henrique Barbozaecho === Check if migration was successful ===
94*7c3a3028SDaniel Henrique Barbozaecho
95*7c3a3028SDaniel Henrique Barboza
96*7c3a3028SDaniel Henrique BarbozaQEMU_COMM_TIMEOUT=1 silent=yes \
97*7c3a3028SDaniel Henrique Barboza    _send_qemu_cmd $src "info migrate" "completed"
98*7c3a3028SDaniel Henrique Barbozasilent=yes _send_qemu_cmd $src "" "(qemu)"
99*7c3a3028SDaniel Henrique Barboza
100*7c3a3028SDaniel Henrique Barbozaecho
101*7c3a3028SDaniel Henrique Barbozaecho === On destination, execute savevm and loadvm ===
102*7c3a3028SDaniel Henrique Barbozaecho
103*7c3a3028SDaniel Henrique Barboza
104*7c3a3028SDaniel Henrique Barbozasilent=
105*7c3a3028SDaniel Henrique Barboza_send_qemu_cmd $dest 'savevm state1' "(qemu)"
106*7c3a3028SDaniel Henrique Barboza_send_qemu_cmd $dest 'loadvm state1' "(qemu)"
107*7c3a3028SDaniel Henrique Barboza
108*7c3a3028SDaniel Henrique Barbozaecho
109*7c3a3028SDaniel Henrique Barbozaecho === Shut down and check image ===
110*7c3a3028SDaniel Henrique Barbozaecho
111*7c3a3028SDaniel Henrique Barboza
112*7c3a3028SDaniel Henrique Barboza_send_qemu_cmd $src 'quit' ""
113*7c3a3028SDaniel Henrique Barboza_send_qemu_cmd $dest 'quit' ""
114*7c3a3028SDaniel Henrique Barbozawait=1 _cleanup_qemu
115*7c3a3028SDaniel Henrique Barboza
116*7c3a3028SDaniel Henrique Barboza_check_test_img
117*7c3a3028SDaniel Henrique Barboza
118*7c3a3028SDaniel Henrique Barboza# success, all done
119*7c3a3028SDaniel Henrique Barbozaecho "*** done"
120*7c3a3028SDaniel Henrique Barbozastatus=0
121