qemu/tests/qemu-iotests/043
<<
>>
Prefs
   1#!/usr/bin/env bash
   2# group: rw auto backing
   3#
   4# Test that qemu-img info --backing-chain detects infinite loops
   5#
   6# Copyright (C) 2012 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
  23owner=stefanha@redhat.com
  24
  25seq=`basename $0`
  26echo "QA output created by $seq"
  27
  28status=1        # failure is the default!
  29
  30_cleanup()
  31{
  32    _cleanup_test_img
  33    for img in "$TEST_IMG".[123].base; do
  34        _rm_test_img "$img"
  35    done
  36}
  37trap "_cleanup; exit \$status" 0 1 2 3 15
  38
  39# get standard environment, filters and checks
  40. ./common.rc
  41. ./common.filter
  42
  43# Any format supporting backing files
  44_supported_fmt qcow2 qed
  45_supported_proto file
  46
  47
  48size=128M
  49_make_test_img $size
  50$QEMU_IMG rebase -u -b "$TEST_IMG" -F $IMGFMT "$TEST_IMG"
  51
  52echo
  53echo "== backing file references self =="
  54_img_info --backing-chain
  55
  56_make_test_img $size
  57mv "$TEST_IMG" "$TEST_IMG.base"
  58_make_test_img -b "$TEST_IMG.base" -F $IMGFMT $size
  59$QEMU_IMG rebase -u -b "$TEST_IMG" -F $IMGFMT "$TEST_IMG.base"
  60
  61echo
  62echo "== parent references self =="
  63_img_info --backing-chain
  64
  65_make_test_img $size
  66mv "$TEST_IMG" "$TEST_IMG.1.base"
  67_make_test_img -b "$TEST_IMG.1.base" -F $IMGFMT $size
  68mv "$TEST_IMG" "$TEST_IMG.2.base"
  69_make_test_img -b "$TEST_IMG.2.base" -F $IMGFMT $size
  70mv "$TEST_IMG" "$TEST_IMG.3.base"
  71_make_test_img -b "$TEST_IMG.3.base" -F $IMGFMT $size
  72$QEMU_IMG rebase -u -b "$TEST_IMG.2.base" -F $IMGFMT "$TEST_IMG.1.base"
  73
  74echo
  75echo "== ancestor references another ancestor =="
  76_img_info --backing-chain
  77
  78_make_test_img $size
  79mv "$TEST_IMG" "$TEST_IMG.1.base"
  80_make_test_img -b "$TEST_IMG.1.base" -F $IMGFMT $size
  81mv "$TEST_IMG" "$TEST_IMG.2.base"
  82_make_test_img -b "$TEST_IMG.2.base" -F $IMGFMT $size
  83
  84echo
  85echo "== finite chain of length 3 (human) =="
  86# Exclude backing format, since qed differs from qcow2 on what gets stored
  87_img_info --backing-chain | grep -v '^backing file format:'
  88
  89echo
  90echo "== finite chain of length 3 (json) =="
  91_img_info --backing-chain --output=json | grep -v 'backing-filename-format'
  92
  93# success, all done
  94echo "*** done"
  95rm -f $seq.full
  96status=0
  97