Commit c50abd17 authored by Max Reitz's avatar Max Reitz
Browse files

iotests: Add case for a corrupted inactive image



Reviewed-by: default avatarJohn Snow <jsnow@redhat.com>
Tested-by: default avatarJeff Cody <jcody@redhat.com>
Reviewed-by: default avatarJeff Cody <jcody@redhat.com>
Signed-off-by: default avatarMax Reitz <mreitz@redhat.com>
Message-id: 20180606193702.7113-4-mreitz@redhat.com
Signed-off-by: default avatarMax Reitz <mreitz@redhat.com>
parent ddf3b47e
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -440,6 +440,36 @@ echo "{'execute': 'qmp_capabilities'}
            -drive if=none,node-name=drive,file="$TEST_IMG",driver=qcow2 \
    | _filter_qmp | _filter_qemu_io

echo
echo "=== Testing incoming inactive corrupted image ==="
echo

_make_test_img 64M
# Create an unaligned L1 entry, so qemu will signal a corruption when
# reading from the covered area
poke_file "$TEST_IMG" "$l1_offset" "\x00\x00\x00\x00\x2a\x2a\x2a\x2a"

# Inactive images are effectively read-only images, so this should be a
# non-fatal corruption (which does not modify the image)
echo "{'execute': 'qmp_capabilities'}
      {'execute': 'human-monitor-command',
       'arguments': {'command-line': 'qemu-io drive \"read 0 512\"'}}
      {'execute': 'quit'}" \
    | $QEMU -qmp stdio -nographic -nodefaults \
            -blockdev "{'node-name': 'drive',
                        'driver': 'qcow2',
                        'file': {
                            'driver': 'file',
                            'filename': '$TEST_IMG'
                        }}" \
            -incoming exec:'cat /dev/null' \
            2>&1 \
    | _filter_qmp | _filter_qemu_io

echo
# Image should not have been marked corrupt
_img_info --format-specific | grep 'corrupt:'

# success, all done
echo "*** done"
rm -f $seq.full
+14 −0
Original line number Diff line number Diff line
@@ -420,4 +420,18 @@ write failed: Input/output error
{"return": ""}
{"return": {}}
{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}

=== Testing incoming inactive corrupted image ===

Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
QMP_VERSION
{"return": {}}
qcow2: Image is corrupt: L2 table offset 0x2a2a2a00 unaligned (L1 index: 0); further non-fatal corruption events will be suppressed
{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_IMAGE_CORRUPTED", "data": {"device": "", "msg": "L2 table offset 0x2a2a2a00 unaligned (L1 index: 0)", "node-name": "drive", "fatal": false}}
read failed: Input/output error
{"return": ""}
{"return": {}}
{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}

    corrupt: false
*** done