Annotation of qemu/tests/qemu-iotests/026, revision 1.1.1.1

1.1       root        1: #!/bin/bash
                      2: #
                      3: # qcow2 error path testing
                      4: #
                      5: # Copyright (C) 2010 Red Hat, Inc.
                      6: #
                      7: # This program is free software; you can redistribute it and/or modify
                      8: # it under the terms of the GNU General Public License as published by
                      9: # the Free Software Foundation; either version 2 of the License, or
                     10: # (at your option) any later version.
                     11: #
                     12: # This program is distributed in the hope that it will be useful,
                     13: # but WITHOUT ANY WARRANTY; without even the implied warranty of
                     14: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     15: # GNU General Public License for more details.
                     16: #
                     17: # You should have received a copy of the GNU General Public License
                     18: # along with this program.  If not, see <http://www.gnu.org/licenses/>.
                     19: #
                     20: 
                     21: # creator
                     22: [email protected]
                     23: 
                     24: seq=`basename $0`
                     25: echo "QA output created by $seq"
                     26: 
                     27: here=`pwd`
                     28: tmp=/tmp/$$
                     29: status=1       # failure is the default!
                     30: 
                     31: _cleanup()
                     32: {
                     33:        _cleanup_test_img
                     34:     rm $TEST_DIR/blkdebug.conf
                     35: }
                     36: trap "_cleanup; exit \$status" 0 1 2 3 15
                     37: 
                     38: # get standard environment, filters and checks
                     39: . ./common.rc
                     40: . ./common.filter
                     41: . ./common.pattern
                     42: 
                     43: # Currently only qcow2 supports rebasing
                     44: _supported_fmt qcow2
                     45: _supported_proto generic
                     46: _supported_os Linux
                     47: 
                     48: 
                     49: echo "Errors while writing 128 kB"
                     50: echo
                     51: 
                     52: CLUSTER_SIZE=1024
                     53: 
                     54: BLKDBG_TEST_IMG="blkdebug:$TEST_DIR/blkdebug.conf:$TEST_IMG"
                     55: 
                     56: for event in \
                     57:     l1_update \
                     58:     \
                     59:     l2_load \
                     60:     l2_update \
                     61:     l2_alloc.write \
                     62:     \
                     63:     write_aio \
                     64:     \
                     65:     refblock_load \
                     66:     refblock_update_part \
                     67:     refblock_alloc \
                     68:     \
                     69:     cluster_alloc \
                     70: 
                     71: do
                     72: 
                     73: for errno in 5 28; do
                     74: for imm in off; do
                     75: for once in on off; do
                     76: for vmstate in "" "-b"; do
                     77: 
                     78: cat > $TEST_DIR/blkdebug.conf <<EOF
                     79: [inject-error]
                     80: event = "$event"
                     81: errno = "$errno"
                     82: immediately = "$imm"
                     83: once ="$once"
                     84: EOF
                     85: 
                     86: _make_test_img 1G
                     87: 
                     88: echo
                     89: echo "Event: $event; errno: $errno; imm: $imm; once: $once; write $vmstate"
                     90: 
                     91: # We want to catch a simple L2 update, not the allocation of the first L2 table
                     92: if [ "$event" == "l2_update" ]; then
                     93:     $QEMU_IO -c "write $vmstate 0 512" $TEST_IMG > /dev/null 2>&1
                     94: fi
                     95: 
                     96: $QEMU_IO -c "write $vmstate 0 128k " $BLKDBG_TEST_IMG | _filter_qemu_io
                     97: 
                     98: # l2_load is not called on allocation, so issue a second write
                     99: # Reads are another path to trigger l2_load, so do a read, too
                    100: if [ "$event" == "l2_load" ]; then
                    101:     $QEMU_IO -c "write $vmstate 0 128k " $BLKDBG_TEST_IMG | _filter_qemu_io
                    102:     $QEMU_IO -c "read $vmstate 0 128k " $BLKDBG_TEST_IMG | _filter_qemu_io
                    103: fi
                    104: 
                    105: $QEMU_IMG check $TEST_IMG 2>&1 | grep -v "refcount=1 reference=0"
                    106: 
                    107: done
                    108: done
                    109: done
                    110: done
                    111: done
                    112: 
                    113: 
                    114: echo
                    115: echo === Refcout table growth tests ===
                    116: echo
                    117: CLUSTER_SIZE=512
                    118: 
                    119: 
                    120: for event in \
                    121:     refblock_alloc.hookup \
                    122:     refblock_alloc.write \
                    123:     refblock_alloc.write_blocks \
                    124:     refblock_alloc.write_table \
                    125:     refblock_alloc.switch_table \
                    126: 
                    127: do
                    128: 
                    129: # This one takes a while, so let's test only one error code (ENOSPC should
                    130: # never be generated by qemu, so it's probably a good choice)
                    131: for errno in 28; do
                    132: for imm in off; do
                    133: for once in on off; do
                    134: for vmstate in "" "-b"; do
                    135: 
                    136: cat > $TEST_DIR/blkdebug.conf <<EOF
                    137: [inject-error]
                    138: event = "$event"
                    139: errno = "$errno"
                    140: immediately = "$imm"
                    141: once = "$once"
                    142: EOF
                    143: 
                    144: _make_test_img 1G
                    145: 
                    146: echo
                    147: echo "Event: $event; errno: $errno; imm: $imm; once: $once; write $vmstate"
                    148: $QEMU_IO -c "write $vmstate 0 64M" $BLKDBG_TEST_IMG | _filter_qemu_io
                    149: 
                    150: $QEMU_IMG check $TEST_IMG 2>&1 | grep -v "refcount=1 reference=0"
                    151: 
                    152: done
                    153: done
                    154: done
                    155: done
                    156: done
                    157: 
                    158: echo
                    159: echo === L1 growth tests ===
                    160: echo
                    161: CLUSTER_SIZE=1024
                    162: 
                    163: 
                    164: for event in \
                    165:     l1_grow.alloc_table \
                    166:     l1_grow.write_table \
                    167:     l1_grow.activate_table \
                    168: 
                    169: do
                    170: 
                    171: for errno in 5 28; do
                    172: for imm in off; do
                    173: for once in on off; do
                    174: 
                    175: cat > $TEST_DIR/blkdebug.conf <<EOF
                    176: [inject-error]
                    177: event = "$event"
                    178: errno = "$errno"
                    179: immediately = "$imm"
                    180: once = "$once"
                    181: EOF
                    182: 
                    183: _make_test_img 1G
                    184: 
                    185: echo
                    186: echo "Event: $event; errno: $errno; imm: $imm; once: $once"
                    187: $QEMU_IO -c "write -b 0 64k" $BLKDBG_TEST_IMG | _filter_qemu_io
                    188: 
                    189: $QEMU_IMG check $TEST_IMG 2>&1 | grep -v "refcount=1 reference=0"
                    190: 
                    191: done
                    192: done
                    193: done
                    194: done
                    195: 
                    196: # success, all done
                    197: echo "*** done"
                    198: rm -f $seq.full
                    199: status=0

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.