xref: /openbmc/qemu/tests/qemu-iotests/058 (revision 5262caa7)
19c468a01SWenchao Xia#!/bin/bash
29c468a01SWenchao Xia#
3f33d2873SWenchao Xia# Test export internal snapshot by qemu-nbd, convert it by qemu-img.
49c468a01SWenchao Xia#
59c468a01SWenchao Xia# Copyright (C) 2013 IBM, Inc.
69c468a01SWenchao Xia#
79c468a01SWenchao Xia# Based on 029.
89c468a01SWenchao Xia#
99c468a01SWenchao Xia# This program is free software; you can redistribute it and/or modify
109c468a01SWenchao Xia# it under the terms of the GNU General Public License as published by
119c468a01SWenchao Xia# the Free Software Foundation; either version 2 of the License, or
129c468a01SWenchao Xia# (at your option) any later version.
139c468a01SWenchao Xia#
149c468a01SWenchao Xia# This program is distributed in the hope that it will be useful,
159c468a01SWenchao Xia# but WITHOUT ANY WARRANTY; without even the implied warranty of
169c468a01SWenchao Xia# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
179c468a01SWenchao Xia# GNU General Public License for more details.
189c468a01SWenchao Xia#
199c468a01SWenchao Xia# You should have received a copy of the GNU General Public License
209c468a01SWenchao Xia# along with this program.  If not, see <http://www.gnu.org/licenses/>.
219c468a01SWenchao Xia#
229c468a01SWenchao Xia
239c468a01SWenchao Xia# creator
249c468a01SWenchao Xiaowner=xiawenc@linux.vnet.ibm.com
259c468a01SWenchao Xia
269c468a01SWenchao Xiaseq=`basename $0`
279c468a01SWenchao Xiaecho "QA output created by $seq"
289c468a01SWenchao Xia
299c468a01SWenchao Xiahere=`pwd`
309c468a01SWenchao Xiatmp=/tmp/$$
319c468a01SWenchao Xiastatus=1	# failure is the default!
329c468a01SWenchao Xia
339c468a01SWenchao Xianbd_unix_socket=$TEST_DIR/test_qemu_nbd_socket
349c468a01SWenchao Xianbd_snapshot_img="nbd:unix:$nbd_unix_socket"
359c468a01SWenchao Xia
369c468a01SWenchao Xia_cleanup_nbd()
379c468a01SWenchao Xia{
389c468a01SWenchao Xia    if [ -n "$NBD_SNAPSHOT_PID" ]; then
399c468a01SWenchao Xia        kill "$NBD_SNAPSHOT_PID"
409c468a01SWenchao Xia    fi
419c468a01SWenchao Xia    rm -f "$nbd_unix_socket"
429c468a01SWenchao Xia}
439c468a01SWenchao Xia
449c468a01SWenchao Xia_wait_for_nbd()
459c468a01SWenchao Xia{
469c468a01SWenchao Xia    for ((i = 0; i < 300; i++))
479c468a01SWenchao Xia    do
489c468a01SWenchao Xia        if [ -r "$nbd_unix_socket" ]; then
499c468a01SWenchao Xia            return
509c468a01SWenchao Xia        fi
519c468a01SWenchao Xia        sleep 0.1
529c468a01SWenchao Xia    done
539c468a01SWenchao Xia    echo "Failed in check of unix socket created by qemu-nbd"
549c468a01SWenchao Xia    exit 1
559c468a01SWenchao Xia}
569c468a01SWenchao Xia
57f33d2873SWenchao Xiaconverted_image=$TEST_IMG.converted
58f33d2873SWenchao Xia
599c468a01SWenchao Xia_export_nbd_snapshot()
609c468a01SWenchao Xia{
619c468a01SWenchao Xia    _cleanup_nbd
629c468a01SWenchao Xia    $QEMU_NBD -v -t -k "$nbd_unix_socket" "$TEST_IMG" -l $1 &
639c468a01SWenchao Xia    NBD_SNAPSHOT_PID=$!
649c468a01SWenchao Xia    _wait_for_nbd
659c468a01SWenchao Xia}
669c468a01SWenchao Xia
679c468a01SWenchao Xia_export_nbd_snapshot1()
689c468a01SWenchao Xia{
699c468a01SWenchao Xia    _cleanup_nbd
709c468a01SWenchao Xia    $QEMU_NBD -v -t -k "$nbd_unix_socket" "$TEST_IMG" -l snapshot.name=$1 &
719c468a01SWenchao Xia    NBD_SNAPSHOT_PID=$!
729c468a01SWenchao Xia    _wait_for_nbd
739c468a01SWenchao Xia}
749c468a01SWenchao Xia
759c468a01SWenchao Xia_cleanup()
769c468a01SWenchao Xia{
779c468a01SWenchao Xia    _cleanup_nbd
789c468a01SWenchao Xia    _cleanup_test_img
79f33d2873SWenchao Xia    rm -f "$converted_image"
809c468a01SWenchao Xia}
819c468a01SWenchao Xiatrap "_cleanup; exit \$status" 0 1 2 3 15
829c468a01SWenchao Xia
839c468a01SWenchao Xia# get standard environment, filters and checks
849c468a01SWenchao Xia. ./common.rc
859c468a01SWenchao Xia. ./common.filter
869c468a01SWenchao Xia. ./common.pattern
879c468a01SWenchao Xia
889c468a01SWenchao Xia_supported_fmt qcow2
899c468a01SWenchao Xia_supported_proto file
909c8ab1aeSFam Zheng_supported_os Linux
919c468a01SWenchao Xia_require_command QEMU_NBD
92*5262caa7SMax Reitz# Internal snapshots are (currently) impossible with refcount_bits=1
93*5262caa7SMax Reitz_unsupported_imgopts 'refcount_bits=1[^0-9]'
949c468a01SWenchao Xia
958f9e835fSKevin Wolf# Use -f raw instead of -f $IMGFMT for the NBD connection
968f9e835fSKevin WolfQEMU_IO_NBD="$QEMU_IO -f raw --cache=$CACHEMODE"
978f9e835fSKevin Wolf
989c468a01SWenchao Xiaecho
999c468a01SWenchao Xiaecho "== preparing image =="
1009c468a01SWenchao Xia_make_test_img 64M
1019c468a01SWenchao Xia$QEMU_IO -c 'write -P 0xa 0x1000 0x1000' "$TEST_IMG" | _filter_qemu_io
1029c468a01SWenchao Xia$QEMU_IO -c 'write -P 0xb 0x2000 0x1000' "$TEST_IMG" | _filter_qemu_io
1039c468a01SWenchao Xia$QEMU_IMG snapshot -c sn1 "$TEST_IMG"
1049c468a01SWenchao Xia$QEMU_IO -c 'write -P 0xc 0x1000 0x1000' "$TEST_IMG" | _filter_qemu_io
1059c468a01SWenchao Xia$QEMU_IO -c 'write -P 0xd 0x2000 0x1000' "$TEST_IMG" | _filter_qemu_io
1069c468a01SWenchao Xia_check_test_img
1079c468a01SWenchao Xia
1089c468a01SWenchao Xiaecho
1099c468a01SWenchao Xiaecho "== verifying the image file with patterns =="
1109c468a01SWenchao Xia$QEMU_IO -c 'read -P 0xc 0x1000 0x1000' "$TEST_IMG" | _filter_qemu_io
1119c468a01SWenchao Xia$QEMU_IO -c 'read -P 0xd 0x2000 0x1000' "$TEST_IMG" | _filter_qemu_io
1129c468a01SWenchao Xia
1139c468a01SWenchao Xia_export_nbd_snapshot sn1
1149c468a01SWenchao Xia
1159c468a01SWenchao Xiaecho
1169c468a01SWenchao Xiaecho "== verifying the exported snapshot with patterns, method 1 =="
1178f9e835fSKevin Wolf$QEMU_IO_NBD -c 'read -P 0xa 0x1000 0x1000' "$nbd_snapshot_img" | _filter_qemu_io
1188f9e835fSKevin Wolf$QEMU_IO_NBD -c 'read -P 0xb 0x2000 0x1000' "$nbd_snapshot_img" | _filter_qemu_io
1199c468a01SWenchao Xia
1209c468a01SWenchao Xia_export_nbd_snapshot1 sn1
1219c468a01SWenchao Xia
1229c468a01SWenchao Xiaecho
1239c468a01SWenchao Xiaecho "== verifying the exported snapshot with patterns, method 2 =="
1248f9e835fSKevin Wolf$QEMU_IO_NBD -c 'read -P 0xa 0x1000 0x1000' "$nbd_snapshot_img" | _filter_qemu_io
1258f9e835fSKevin Wolf$QEMU_IO_NBD -c 'read -P 0xb 0x2000 0x1000' "$nbd_snapshot_img" | _filter_qemu_io
1269c468a01SWenchao Xia
127f33d2873SWenchao Xia$QEMU_IMG convert "$TEST_IMG" -l sn1 -O qcow2 "$converted_image"
128f33d2873SWenchao Xia
129f33d2873SWenchao Xiaecho
130f33d2873SWenchao Xiaecho "== verifying the converted snapshot with patterns, method 1 =="
131f33d2873SWenchao Xia$QEMU_IO -c 'read -P 0xa 0x1000 0x1000' "$converted_image" | _filter_qemu_io
132f33d2873SWenchao Xia$QEMU_IO -c 'read -P 0xb 0x2000 0x1000' "$converted_image" | _filter_qemu_io
133f33d2873SWenchao Xia
134f33d2873SWenchao Xia$QEMU_IMG convert "$TEST_IMG" -l snapshot.name=sn1 -O qcow2 "$converted_image"
135f33d2873SWenchao Xia
136f33d2873SWenchao Xiaecho
137f33d2873SWenchao Xiaecho "== verifying the converted snapshot with patterns, method 2 =="
138f33d2873SWenchao Xia$QEMU_IO -c 'read -P 0xa 0x1000 0x1000' "$converted_image" | _filter_qemu_io
139f33d2873SWenchao Xia$QEMU_IO -c 'read -P 0xb 0x2000 0x1000' "$converted_image" | _filter_qemu_io
140f33d2873SWenchao Xia
1419c468a01SWenchao Xia# success, all done
1429c468a01SWenchao Xiaecho "*** done"
1439c468a01SWenchao Xiarm -f $seq.full
1449c468a01SWenchao Xiastatus=0
145