xref: /openbmc/qemu/tests/qemu-iotests/071 (revision 4dd7b8d30cfa1aebee547958db27efd581a58d9b)
130bd6a4dSMax Reitz#!/bin/bash
230bd6a4dSMax Reitz#
330bd6a4dSMax Reitz# Test case for the QMP blkdebug and blkverify interfaces
430bd6a4dSMax Reitz#
530bd6a4dSMax Reitz# Copyright (C) 2013 Red Hat, Inc.
630bd6a4dSMax Reitz#
730bd6a4dSMax Reitz# This program is free software; you can redistribute it and/or modify
830bd6a4dSMax Reitz# it under the terms of the GNU General Public License as published by
930bd6a4dSMax Reitz# the Free Software Foundation; either version 2 of the License, or
1030bd6a4dSMax Reitz# (at your option) any later version.
1130bd6a4dSMax Reitz#
1230bd6a4dSMax Reitz# This program is distributed in the hope that it will be useful,
1330bd6a4dSMax Reitz# but WITHOUT ANY WARRANTY; without even the implied warranty of
1430bd6a4dSMax Reitz# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1530bd6a4dSMax Reitz# GNU General Public License for more details.
1630bd6a4dSMax Reitz#
1730bd6a4dSMax Reitz# You should have received a copy of the GNU General Public License
1830bd6a4dSMax Reitz# along with this program.  If not, see <http://www.gnu.org/licenses/>.
1930bd6a4dSMax Reitz#
2030bd6a4dSMax Reitz
2130bd6a4dSMax Reitz# creator
2230bd6a4dSMax Reitzowner=mreitz@redhat.com
2330bd6a4dSMax Reitz
2430bd6a4dSMax Reitzseq="$(basename $0)"
2530bd6a4dSMax Reitzecho "QA output created by $seq"
2630bd6a4dSMax Reitz
2730bd6a4dSMax Reitzhere="$PWD"
2830bd6a4dSMax Reitztmp=/tmp/$$
2930bd6a4dSMax Reitzstatus=1	# failure is the default!
3030bd6a4dSMax Reitz
3130bd6a4dSMax Reitz_cleanup()
3230bd6a4dSMax Reitz{
3330bd6a4dSMax Reitz	_cleanup_test_img
3430bd6a4dSMax Reitz}
3530bd6a4dSMax Reitztrap "_cleanup; exit \$status" 0 1 2 3 15
3630bd6a4dSMax Reitz
3730bd6a4dSMax Reitz# get standard environment, filters and checks
3830bd6a4dSMax Reitz. ./common.rc
3930bd6a4dSMax Reitz. ./common.filter
4030bd6a4dSMax Reitz
411b7650efSStefan Hajnoczi_supported_fmt qcow2
421f7bf7d0SPeter Lieven_supported_proto file
4330bd6a4dSMax Reitz_supported_os Linux
4430bd6a4dSMax Reitz
4530bd6a4dSMax Reitzfunction do_run_qemu()
4630bd6a4dSMax Reitz{
4730bd6a4dSMax Reitz    echo Testing: "$@" | _filter_imgfmt
4830bd6a4dSMax Reitz    $QEMU -nographic -qmp stdio -serial none "$@"
4930bd6a4dSMax Reitz    echo
5030bd6a4dSMax Reitz}
5130bd6a4dSMax Reitz
5230bd6a4dSMax Reitzfunction run_qemu()
5330bd6a4dSMax Reitz{
54*4dd7b8d3SMax Reitz    do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_qmp | _filter_qemu_io
5530bd6a4dSMax Reitz}
5630bd6a4dSMax Reitz
5730bd6a4dSMax ReitzIMG_SIZE=64M
5830bd6a4dSMax Reitz
5930bd6a4dSMax Reitzecho
6030bd6a4dSMax Reitzecho "=== Testing blkverify through filename ==="
6130bd6a4dSMax Reitzecho
6230bd6a4dSMax Reitz
6330bd6a4dSMax ReitzTEST_IMG="$TEST_IMG.base" IMGOPTS="" IMGFMT="raw" _make_test_img $IMG_SIZE |\
6430bd6a4dSMax Reitz    _filter_imgfmt
6530bd6a4dSMax Reitz_make_test_img $IMG_SIZE
668f9e835fSKevin Wolf$QEMU_IO -c "open -o driver=raw,file.driver=blkverify,file.raw.filename=$TEST_IMG.base $TEST_IMG" \
6730bd6a4dSMax Reitz         -c 'read 0 512' -c 'write -P 42 0x38000 512' -c 'read -P 42 0x38000 512' | _filter_qemu_io
6830bd6a4dSMax Reitz
6930bd6a4dSMax Reitz$QEMU_IO -c 'write -P 42 0 512' "$TEST_IMG" | _filter_qemu_io
7030bd6a4dSMax Reitz
718f9e835fSKevin Wolf$QEMU_IO -c "open -o driver=raw,file.driver=blkverify,file.raw.filename=$TEST_IMG.base $TEST_IMG" \
7230bd6a4dSMax Reitz         -c 'read -P 42 0 512' | _filter_qemu_io
7330bd6a4dSMax Reitz
7430bd6a4dSMax Reitzecho
7530bd6a4dSMax Reitzecho "=== Testing blkverify through file blockref ==="
7630bd6a4dSMax Reitzecho
7730bd6a4dSMax Reitz
7830bd6a4dSMax ReitzTEST_IMG="$TEST_IMG.base" IMGOPTS="" IMGFMT="raw" _make_test_img $IMG_SIZE |\
7930bd6a4dSMax Reitz    _filter_imgfmt
8030bd6a4dSMax Reitz_make_test_img $IMG_SIZE
818f9e835fSKevin Wolf$QEMU_IO -c "open -o driver=raw,file.driver=blkverify,file.raw.filename=$TEST_IMG.base,file.test.driver=$IMGFMT,file.test.file.filename=$TEST_IMG" \
8230bd6a4dSMax Reitz         -c 'read 0 512' -c 'write -P 42 0x38000 512' -c 'read -P 42 0x38000 512' | _filter_qemu_io
8330bd6a4dSMax Reitz
8430bd6a4dSMax Reitz$QEMU_IO -c 'write -P 42 0 512' "$TEST_IMG" | _filter_qemu_io
8530bd6a4dSMax Reitz
868f9e835fSKevin Wolf$QEMU_IO -c "open -o driver=raw,file.driver=blkverify,file.raw.filename=$TEST_IMG.base $TEST_IMG" \
8730bd6a4dSMax Reitz         -c 'read -P 42 0 512' | _filter_qemu_io
8830bd6a4dSMax Reitz
8930bd6a4dSMax Reitzecho
9030bd6a4dSMax Reitzecho "=== Testing blkdebug through filename ==="
9130bd6a4dSMax Reitzecho
9230bd6a4dSMax Reitz
9330bd6a4dSMax Reitz$QEMU_IO -c "open -o file.driver=blkdebug,file.inject-error.event=l2_load $TEST_IMG" \
9430bd6a4dSMax Reitz         -c 'read -P 42 0x38000 512'
9530bd6a4dSMax Reitz
9630bd6a4dSMax Reitzecho
9730bd6a4dSMax Reitzecho "=== Testing blkdebug through file blockref ==="
9830bd6a4dSMax Reitzecho
9930bd6a4dSMax Reitz
10030bd6a4dSMax Reitz$QEMU_IO -c "open -o driver=$IMGFMT,file.driver=blkdebug,file.inject-error.event=l2_load,file.image.filename=$TEST_IMG" \
10130bd6a4dSMax Reitz         -c 'read -P 42 0x38000 512'
10230bd6a4dSMax Reitz
10330bd6a4dSMax Reitzecho
10430bd6a4dSMax Reitzecho "=== Testing blkdebug on existing block device ==="
10530bd6a4dSMax Reitzecho
10630bd6a4dSMax Reitz
10730bd6a4dSMax Reitzrun_qemu -drive "file=$TEST_IMG,format=raw,if=none,id=drive0" <<EOF
10830bd6a4dSMax Reitz{ "execute": "qmp_capabilities" }
10930bd6a4dSMax Reitz{ "execute": "blockdev-add",
11030bd6a4dSMax Reitz    "arguments": {
11130bd6a4dSMax Reitz        "options": {
11230bd6a4dSMax Reitz            "driver": "$IMGFMT",
11330bd6a4dSMax Reitz            "id": "drive0-debug",
11430bd6a4dSMax Reitz            "file": {
11530bd6a4dSMax Reitz                "driver": "blkdebug",
11630bd6a4dSMax Reitz                "image": "drive0",
11730bd6a4dSMax Reitz                "inject-error": [{
11830bd6a4dSMax Reitz                    "event": "l2_load"
11930bd6a4dSMax Reitz                }]
12030bd6a4dSMax Reitz            }
12130bd6a4dSMax Reitz        }
12230bd6a4dSMax Reitz    }
12330bd6a4dSMax Reitz}
12430bd6a4dSMax Reitz{ "execute": "human-monitor-command",
12530bd6a4dSMax Reitz    "arguments": {
12630bd6a4dSMax Reitz        "command-line": 'qemu-io drive0-debug "read 0 512"'
12730bd6a4dSMax Reitz    }
12830bd6a4dSMax Reitz}
12930bd6a4dSMax Reitz{ "execute": "quit" }
13030bd6a4dSMax ReitzEOF
13130bd6a4dSMax Reitz
13230bd6a4dSMax Reitzecho
13330bd6a4dSMax Reitzecho "=== Testing blkverify on existing block device ==="
13430bd6a4dSMax Reitzecho
13530bd6a4dSMax Reitz
13630bd6a4dSMax Reitzrun_qemu -drive "file=$TEST_IMG,format=$IMGFMT,if=none,id=drive0" <<EOF
13730bd6a4dSMax Reitz{ "execute": "qmp_capabilities" }
13830bd6a4dSMax Reitz{ "execute": "blockdev-add",
13930bd6a4dSMax Reitz    "arguments": {
14030bd6a4dSMax Reitz        "options": {
14130bd6a4dSMax Reitz            "driver": "blkverify",
14230bd6a4dSMax Reitz            "id": "drive0-verify",
14330bd6a4dSMax Reitz            "test": "drive0",
14430bd6a4dSMax Reitz            "raw": {
14530bd6a4dSMax Reitz                "driver": "raw",
14630bd6a4dSMax Reitz                "file": {
14730bd6a4dSMax Reitz                    "driver": "file",
14830bd6a4dSMax Reitz                    "filename": "$TEST_IMG.base"
14930bd6a4dSMax Reitz                }
15030bd6a4dSMax Reitz            }
15130bd6a4dSMax Reitz        }
15230bd6a4dSMax Reitz    }
15330bd6a4dSMax Reitz}
15430bd6a4dSMax Reitz{ "execute": "human-monitor-command",
15530bd6a4dSMax Reitz    "arguments": {
15630bd6a4dSMax Reitz        "command-line": 'qemu-io drive0-verify "read 0 512"'
15730bd6a4dSMax Reitz    }
15830bd6a4dSMax Reitz}
15930bd6a4dSMax Reitz{ "execute": "quit" }
16030bd6a4dSMax ReitzEOF
16130bd6a4dSMax Reitz
16230bd6a4dSMax Reitzecho
16330bd6a4dSMax Reitzecho "=== Testing blkverify on existing raw block device ==="
16430bd6a4dSMax Reitzecho
16530bd6a4dSMax Reitz
1668f9e835fSKevin Wolfrun_qemu -drive "file=$TEST_IMG.base,format=raw,if=none,id=drive0" <<EOF
16730bd6a4dSMax Reitz{ "execute": "qmp_capabilities" }
16830bd6a4dSMax Reitz{ "execute": "blockdev-add",
16930bd6a4dSMax Reitz    "arguments": {
17030bd6a4dSMax Reitz        "options": {
17130bd6a4dSMax Reitz            "driver": "blkverify",
17230bd6a4dSMax Reitz            "id": "drive0-verify",
17330bd6a4dSMax Reitz            "test": {
17430bd6a4dSMax Reitz                "driver": "$IMGFMT",
17530bd6a4dSMax Reitz                "file": {
17630bd6a4dSMax Reitz                    "driver": "file",
17730bd6a4dSMax Reitz                    "filename": "$TEST_IMG"
17830bd6a4dSMax Reitz                }
17930bd6a4dSMax Reitz            },
18030bd6a4dSMax Reitz            "raw": "drive0"
18130bd6a4dSMax Reitz        }
18230bd6a4dSMax Reitz    }
18330bd6a4dSMax Reitz}
18430bd6a4dSMax Reitz{ "execute": "human-monitor-command",
18530bd6a4dSMax Reitz    "arguments": {
18630bd6a4dSMax Reitz        "command-line": 'qemu-io drive0-verify "read 0 512"'
18730bd6a4dSMax Reitz    }
18830bd6a4dSMax Reitz}
18930bd6a4dSMax Reitz{ "execute": "quit" }
19030bd6a4dSMax ReitzEOF
19130bd6a4dSMax Reitz
19230bd6a4dSMax Reitzecho
19330bd6a4dSMax Reitzecho "=== Testing blkdebug's set-state through QMP ==="
19430bd6a4dSMax Reitzecho
19530bd6a4dSMax Reitz
19630bd6a4dSMax Reitzrun_qemu -drive "file=$TEST_IMG,format=raw,if=none,id=drive0" <<EOF
19730bd6a4dSMax Reitz{ "execute": "qmp_capabilities" }
19830bd6a4dSMax Reitz{ "execute": "blockdev-add",
19930bd6a4dSMax Reitz    "arguments": {
20030bd6a4dSMax Reitz        "options": {
20130bd6a4dSMax Reitz            "driver": "$IMGFMT",
20230bd6a4dSMax Reitz            "id": "drive0-debug",
20330bd6a4dSMax Reitz            "file": {
20430bd6a4dSMax Reitz                "driver": "blkdebug",
20530bd6a4dSMax Reitz                "image": "drive0",
20630bd6a4dSMax Reitz                "inject-error": [{
20730bd6a4dSMax Reitz                    "event": "read_aio",
20830bd6a4dSMax Reitz                    "state": 42
20930bd6a4dSMax Reitz                }],
21030bd6a4dSMax Reitz                "set-state": [{
21130bd6a4dSMax Reitz                    "event": "write_aio",
21230bd6a4dSMax Reitz                    "new_state": 42
21330bd6a4dSMax Reitz                }]
21430bd6a4dSMax Reitz            }
21530bd6a4dSMax Reitz        }
21630bd6a4dSMax Reitz    }
21730bd6a4dSMax Reitz}
21830bd6a4dSMax Reitz{ "execute": "human-monitor-command",
21930bd6a4dSMax Reitz    "arguments": {
22030bd6a4dSMax Reitz        "command-line": 'qemu-io drive0-debug "read 0 512"'
22130bd6a4dSMax Reitz    }
22230bd6a4dSMax Reitz}
22330bd6a4dSMax Reitz{ "execute": "human-monitor-command",
22430bd6a4dSMax Reitz    "arguments": {
22530bd6a4dSMax Reitz        "command-line": 'qemu-io drive0-debug "write 0 512"'
22630bd6a4dSMax Reitz    }
22730bd6a4dSMax Reitz}
22830bd6a4dSMax Reitz{ "execute": "human-monitor-command",
22930bd6a4dSMax Reitz    "arguments": {
23030bd6a4dSMax Reitz        "command-line": 'qemu-io drive0-debug "read 0 512"'
23130bd6a4dSMax Reitz    }
23230bd6a4dSMax Reitz}
23330bd6a4dSMax Reitz{ "execute": "quit" }
23430bd6a4dSMax ReitzEOF
23530bd6a4dSMax Reitz
23630bd6a4dSMax Reitz# success, all done
23730bd6a4dSMax Reitzecho "*** done"
23830bd6a4dSMax Reitzrm -f $seq.full
23930bd6a4dSMax Reitzstatus=0
240