xref: /openbmc/qemu/tests/qemu-iotests/081 (revision 15489c769b9a4b3bec5b5848af2960689d7b4bd8)
1c7fc5bc2SBenoît Canet#!/bin/bash
2c7fc5bc2SBenoît Canet#
3c7fc5bc2SBenoît Canet# Test Quorum block driver
4c7fc5bc2SBenoît Canet#
5c7fc5bc2SBenoît Canet# Copyright (C) 2013 Nodalink, SARL.
6c7fc5bc2SBenoît Canet#
7c7fc5bc2SBenoît Canet# This program is free software; you can redistribute it and/or modify
8c7fc5bc2SBenoît Canet# it under the terms of the GNU General Public License as published by
9c7fc5bc2SBenoît Canet# the Free Software Foundation; either version 2 of the License, or
10c7fc5bc2SBenoît Canet# (at your option) any later version.
11c7fc5bc2SBenoît Canet#
12c7fc5bc2SBenoît Canet# This program is distributed in the hope that it will be useful,
13c7fc5bc2SBenoît Canet# but WITHOUT ANY WARRANTY; without even the implied warranty of
14c7fc5bc2SBenoît Canet# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15c7fc5bc2SBenoît Canet# GNU General Public License for more details.
16c7fc5bc2SBenoît Canet#
17c7fc5bc2SBenoît Canet# You should have received a copy of the GNU General Public License
18c7fc5bc2SBenoît Canet# along with this program.  If not, see <http://www.gnu.org/licenses/>.
19c7fc5bc2SBenoît Canet#
20c7fc5bc2SBenoît Canet
21c7fc5bc2SBenoît Canet# creator
22c7fc5bc2SBenoît Canetowner=benoit@irqsave.net
23c7fc5bc2SBenoît Canet
24c7fc5bc2SBenoît Canetseq=`basename $0`
25c7fc5bc2SBenoît Canetecho "QA output created by $seq"
26c7fc5bc2SBenoît Canet
27c7fc5bc2SBenoît Canethere=`pwd`
28c7fc5bc2SBenoît Canettmp=/tmp/$$
29c7fc5bc2SBenoît Canetstatus=1	# failure is the default!
30c7fc5bc2SBenoît Canet
31c7fc5bc2SBenoît Canet_cleanup()
32c7fc5bc2SBenoît Canet{
33c7fc5bc2SBenoît Canet    rm -rf $TEST_DIR/1.raw
34c7fc5bc2SBenoît Canet    rm -rf $TEST_DIR/2.raw
35c7fc5bc2SBenoît Canet    rm -rf $TEST_DIR/3.raw
36c7fc5bc2SBenoît Canet}
37c7fc5bc2SBenoît Canettrap "_cleanup; exit \$status" 0 1 2 3 15
38c7fc5bc2SBenoît Canet
39c7fc5bc2SBenoît Canet# get standard environment, filters and checks
40c7fc5bc2SBenoît Canet. ./common.rc
41c7fc5bc2SBenoît Canet. ./common.filter
42c7fc5bc2SBenoît Canet
43c7fc5bc2SBenoît Canet_supported_fmt raw
44c5f7c0afSPeter Lieven_supported_proto file
45c7fc5bc2SBenoît Canet_supported_os Linux
46c7fc5bc2SBenoît Canet
476141f3bdSMax Reitzfunction do_run_qemu()
486141f3bdSMax Reitz{
496141f3bdSMax Reitz    echo Testing: "$@" | _filter_imgfmt
506141f3bdSMax Reitz    $QEMU -nographic -qmp stdio -serial none "$@"
516141f3bdSMax Reitz    echo
526141f3bdSMax Reitz}
536141f3bdSMax Reitz
546141f3bdSMax Reitzfunction run_qemu()
556141f3bdSMax Reitz{
56*15489c76SJeff Cody    do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_qmp\
57*15489c76SJeff Cody                          | _filter_qemu_io | _filter_generated_node_ids
586141f3bdSMax Reitz}
596141f3bdSMax Reitz
604b350f1dSBenoît Canettest_quorum=$($QEMU_IMG --help|grep quorum)
614b350f1dSBenoît Canet[ "$test_quorum" = "" ] && _supported_fmt quorum
624b350f1dSBenoît Canet
638f9e835fSKevin Wolfquorum="driver=raw,file.driver=quorum,file.vote-threshold=2"
648f9e835fSKevin Wolfquorum="$quorum,file.children.0.file.filename=$TEST_DIR/1.raw"
65c7fc5bc2SBenoît Canetquorum="$quorum,file.children.1.file.filename=$TEST_DIR/2.raw"
668f9e835fSKevin Wolfquorum="$quorum,file.children.2.file.filename=$TEST_DIR/3.raw"
678f9e835fSKevin Wolfquorum="$quorum,file.children.0.driver=raw"
688f9e835fSKevin Wolfquorum="$quorum,file.children.1.driver=raw"
698f9e835fSKevin Wolfquorum="$quorum,file.children.2.driver=raw"
70c7fc5bc2SBenoît Canet
71c7fc5bc2SBenoît Canetecho
72c7fc5bc2SBenoît Canetecho "== creating quorum files =="
73c7fc5bc2SBenoît Canet
74c7fc5bc2SBenoît Canetsize=10M
75c7fc5bc2SBenoît Canet
76c7fc5bc2SBenoît CanetTEST_IMG="$TEST_DIR/1.raw" _make_test_img $size
77c7fc5bc2SBenoît CanetTEST_IMG="$TEST_DIR/2.raw" _make_test_img $size
78c7fc5bc2SBenoît CanetTEST_IMG="$TEST_DIR/3.raw" _make_test_img $size
79c7fc5bc2SBenoît Canet
80c7fc5bc2SBenoît Canetecho
81c7fc5bc2SBenoît Canetecho "== writing images =="
82c7fc5bc2SBenoît Canet
83c7fc5bc2SBenoît Canet$QEMU_IO -c "open -o $quorum" -c "write -P 0x32 0 $size" | _filter_qemu_io
84c7fc5bc2SBenoît Canet
85c7fc5bc2SBenoît Canetecho
86c7fc5bc2SBenoît Canetecho "== checking quorum write =="
87c7fc5bc2SBenoît Canet
88c7fc5bc2SBenoît Canet$QEMU_IO -c "read -P 0x32 0 $size" "$TEST_DIR/1.raw" | _filter_qemu_io
89c7fc5bc2SBenoît Canet$QEMU_IO -c "read -P 0x32 0 $size" "$TEST_DIR/2.raw" | _filter_qemu_io
90c7fc5bc2SBenoît Canet$QEMU_IO -c "read -P 0x32 0 $size" "$TEST_DIR/3.raw" | _filter_qemu_io
91c7fc5bc2SBenoît Canet
92c7fc5bc2SBenoît Canetecho
93c7fc5bc2SBenoît Canetecho "== corrupting image =="
94c7fc5bc2SBenoît Canet
95c7fc5bc2SBenoît Canet$QEMU_IO -c "write -P 0x42 0 $size" "$TEST_DIR/2.raw" | _filter_qemu_io
96c7fc5bc2SBenoît Canet
97c7fc5bc2SBenoît Canetecho
98c7fc5bc2SBenoît Canetecho "== checking quorum correction =="
99c7fc5bc2SBenoît Canet
100c7fc5bc2SBenoît Canet$QEMU_IO -c "open -o $quorum" -c "read -P 0x32 0 $size" | _filter_qemu_io
101c7fc5bc2SBenoît Canet
102c7fc5bc2SBenoît Canetecho
1036141f3bdSMax Reitzecho "== checking mixed reference/option specification =="
1046141f3bdSMax Reitz
1056141f3bdSMax Reitzrun_qemu -drive "file=$TEST_DIR/2.raw,format=$IMGFMT,if=none,id=drive2" <<EOF
1066141f3bdSMax Reitz{ "execute": "qmp_capabilities" }
1076141f3bdSMax Reitz{ "execute": "blockdev-add",
1086141f3bdSMax Reitz    "arguments": {
1096141f3bdSMax Reitz        "options": {
1106141f3bdSMax Reitz            "driver": "quorum",
1116141f3bdSMax Reitz            "id": "drive0-quorum",
1126141f3bdSMax Reitz            "vote-threshold": 2,
1136141f3bdSMax Reitz            "children": [
1146141f3bdSMax Reitz                {
1156141f3bdSMax Reitz                    "driver": "raw",
1166141f3bdSMax Reitz                    "file": {
1176141f3bdSMax Reitz                        "driver": "file",
1186141f3bdSMax Reitz                        "filename": "$TEST_DIR/1.raw"
1196141f3bdSMax Reitz                    }
1206141f3bdSMax Reitz                },
1216141f3bdSMax Reitz                "drive2",
1226141f3bdSMax Reitz                {
1236141f3bdSMax Reitz                    "driver": "raw",
1246141f3bdSMax Reitz                    "file": {
1256141f3bdSMax Reitz                        "driver": "file",
1266141f3bdSMax Reitz                        "filename": "$TEST_DIR/3.raw"
1276141f3bdSMax Reitz                    }
1286141f3bdSMax Reitz                }
1296141f3bdSMax Reitz            ]
1306141f3bdSMax Reitz        }
1316141f3bdSMax Reitz    }
1326141f3bdSMax Reitz}
1336141f3bdSMax Reitz{ "execute": "human-monitor-command",
1346141f3bdSMax Reitz    "arguments": {
1356141f3bdSMax Reitz        "command-line": 'qemu-io drive0-quorum "read -P 0x32 0 $size"'
1366141f3bdSMax Reitz    }
1376141f3bdSMax Reitz}
1386141f3bdSMax Reitz{ "execute": "quit" }
1396141f3bdSMax ReitzEOF
1406141f3bdSMax Reitz
1416141f3bdSMax Reitzecho
142cf29a570SBenoît Canetecho "== using quorum rewrite corrupted mode =="
143cf29a570SBenoît Canet
144cf29a570SBenoît Canetquorum="$quorum,file.rewrite-corrupted=on"
145cf29a570SBenoît Canet
146cf29a570SBenoît Canet$QEMU_IO -c "open -o $quorum" -c "read -P 0x32 0 $size" | _filter_qemu_io
147cf29a570SBenoît Canet
148cf29a570SBenoît Canetecho
149cf29a570SBenoît Canetecho "== checking that quorum has corrected the corrupted file =="
150cf29a570SBenoît Canet
151cf29a570SBenoît Canet$QEMU_IO -c "read -P 0x32 0 $size" "$TEST_DIR/2.raw" | _filter_qemu_io
152cf29a570SBenoît Canet
153cf29a570SBenoît Canetecho
154c7fc5bc2SBenoît Canetecho "== breaking quorum =="
155c7fc5bc2SBenoît Canet
156c7fc5bc2SBenoît Canet$QEMU_IO -c "write -P 0x41 0 $size" "$TEST_DIR/1.raw" | _filter_qemu_io
157cf29a570SBenoît Canet$QEMU_IO -c "write -P 0x42 0 $size" "$TEST_DIR/2.raw" | _filter_qemu_io
158cf29a570SBenoît Canet
159c7fc5bc2SBenoît Canetecho
160c7fc5bc2SBenoît Canetecho "== checking that quorum is broken =="
161c7fc5bc2SBenoît Canet
162c7fc5bc2SBenoît Canet$QEMU_IO -c "open -o $quorum" -c "read -P 0x32 0 $size" | _filter_qemu_io
163c7fc5bc2SBenoît Canet
164c7fc5bc2SBenoît Canet# success, all done
165c7fc5bc2SBenoît Canetecho "*** done"
166c7fc5bc2SBenoît Canetrm -f $seq.full
167c7fc5bc2SBenoît Canetstatus=0
168