qemu/tests/qemu-iotests/037
<<
>>
Prefs
   1#!/usr/bin/env bash
   2# group: rw auto backing quick
   3#
   4# Test COW from backing files
   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=kwolf@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}
  34trap "_cleanup; exit \$status" 0 1 2 3 15
  35
  36# get standard environment, filters and checks
  37. ./common.rc
  38. ./common.filter
  39
  40_supported_fmt qcow qcow2 vmdk qed
  41_supported_proto file fuse
  42_unsupported_imgopts "subformat=monolithicFlat" \
  43                     "subformat=twoGbMaxExtentFlat" \
  44                     "subformat=twoGbMaxExtentSparse" \
  45                     "subformat=streamOptimized"
  46
  47CLUSTER_SIZE=4k
  48size=128M
  49
  50echo
  51echo "== creating backing file for COW tests =="
  52
  53TEST_IMG_SAVE="$TEST_IMG"
  54TEST_IMG="$TEST_IMG.base"
  55
  56_make_test_img $size
  57
  58backing_io()
  59{
  60    local offset=$1
  61    local sectors=$2
  62    local op=$3
  63    local pattern=0
  64    local cur_sec=0
  65
  66    for ((i=0;i<=$((sectors - 1));i++)); do
  67        cur_sec=$((offset / 512 + i))
  68        pattern=$(( ( (cur_sec % 256) + (cur_sec / 256)) % 256 ))
  69
  70        echo "$op -P $pattern $((cur_sec * 512)) 512"
  71    done
  72}
  73
  74backing_io 0 256 write | $QEMU_IO "$TEST_IMG" | _filter_qemu_io
  75
  76TEST_IMG="$TEST_IMG_SAVE"
  77
  78_make_test_img -b "$TEST_IMG.base" -F $IMGFMT 6G
  79
  80echo
  81echo "== COW in a single cluster =="
  82$QEMU_IO -c "write -P 0x77 0 2k" "$TEST_IMG" | _filter_qemu_io
  83$QEMU_IO -c "write -P 0x88 6k 2k" "$TEST_IMG" | _filter_qemu_io
  84$QEMU_IO -c "write -P 0x99 9k 2k" "$TEST_IMG" | _filter_qemu_io
  85
  86$QEMU_IO -c "read -P 0x77 0 2k" "$TEST_IMG" | _filter_qemu_io
  87backing_io $((2 * 1024)) 8 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io
  88$QEMU_IO -c "read -P 0x88 6k 2k" "$TEST_IMG" | _filter_qemu_io
  89backing_io $((8 * 1024)) 2 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io
  90$QEMU_IO -c "read -P 0x99 9k 2k" "$TEST_IMG" | _filter_qemu_io
  91backing_io $((11 * 1024)) 2 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io
  92
  93echo
  94echo "== COW in two-cluster allocations =="
  95$QEMU_IO -c "write -P 0x77 16k 6k" "$TEST_IMG" | _filter_qemu_io
  96$QEMU_IO -c "write -P 0x88 26k 6k" "$TEST_IMG" | _filter_qemu_io
  97$QEMU_IO -c "write -P 0x99 33k 5k" "$TEST_IMG" | _filter_qemu_io
  98
  99$QEMU_IO -c "read -P 0x77 16k 6k" "$TEST_IMG" | _filter_qemu_io
 100backing_io $((22 * 1024)) 8 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io
 101$QEMU_IO -c "read -P 0x88 26k 6k" "$TEST_IMG" | _filter_qemu_io
 102backing_io $((32 * 1024)) 2 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io
 103$QEMU_IO -c "read -P 0x99 33k 5k" "$TEST_IMG" | _filter_qemu_io
 104backing_io $((38 * 1024)) 4 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io
 105
 106echo
 107echo "== COW in multi-cluster allocations =="
 108$QEMU_IO -c "write -P 0x77 48k 15k" "$TEST_IMG" | _filter_qemu_io
 109$QEMU_IO -c "write -P 0x88 66k 14k" "$TEST_IMG" | _filter_qemu_io
 110$QEMU_IO -c "write -P 0x99 83k 15k" "$TEST_IMG" | _filter_qemu_io
 111
 112$QEMU_IO -c "read -P 0x77 48k 15k" "$TEST_IMG" | _filter_qemu_io
 113backing_io $((63 * 1024)) 6 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io
 114$QEMU_IO -c "read -P 0x88 66k 14k" "$TEST_IMG" | _filter_qemu_io
 115backing_io $((80 * 1024)) 6 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io
 116$QEMU_IO -c "read -P 0x99 83k 15k" "$TEST_IMG" | _filter_qemu_io
 117backing_io $((98 * 1024)) 4 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io
 118
 119_check_test_img
 120
 121# success, all done
 122echo "*** done"
 123rm -f $seq.full
 124status=0
 125