xref: /openbmc/qemu/tests/qemu-iotests/249 (revision fef80ea073c4862bc9eaddb6ddb0ed970b8ad7c4)
1a2aa8b07SAlberto Garcia#!/usr/bin/env bash
2*9dd003a9SVladimir Sementsov-Ogievskiy# group: rw auto quick
3a2aa8b07SAlberto Garcia#
4a2aa8b07SAlberto Garcia# Test that a backing image is put back in read-only mode after
5a2aa8b07SAlberto Garcia# block-commit (both when it fails and when it succeeds).
6a2aa8b07SAlberto Garcia#
7a2aa8b07SAlberto Garcia# Copyright (C) 2019 Igalia, S.L.
8a2aa8b07SAlberto Garcia#
9a2aa8b07SAlberto Garcia# This program is free software; you can redistribute it and/or modify
10a2aa8b07SAlberto Garcia# it under the terms of the GNU General Public License as published by
11a2aa8b07SAlberto Garcia# the Free Software Foundation; either version 2 of the License, or
12a2aa8b07SAlberto Garcia# (at your option) any later version.
13a2aa8b07SAlberto Garcia#
14a2aa8b07SAlberto Garcia# This program is distributed in the hope that it will be useful,
15a2aa8b07SAlberto Garcia# but WITHOUT ANY WARRANTY; without even the implied warranty of
16a2aa8b07SAlberto Garcia# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17a2aa8b07SAlberto Garcia# GNU General Public License for more details.
18a2aa8b07SAlberto Garcia#
19a2aa8b07SAlberto Garcia# You should have received a copy of the GNU General Public License
20a2aa8b07SAlberto Garcia# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21a2aa8b07SAlberto Garcia#
22a2aa8b07SAlberto Garcia
23a2aa8b07SAlberto Garcia# creator
24a2aa8b07SAlberto Garciaowner=berto@igalia.com
25a2aa8b07SAlberto Garcia
26a2aa8b07SAlberto Garciaseq="$(basename $0)"
27a2aa8b07SAlberto Garciaecho "QA output created by $seq"
28a2aa8b07SAlberto Garcia
29a2aa8b07SAlberto Garciastatus=1	# failure is the default!
30a2aa8b07SAlberto Garcia
31a2aa8b07SAlberto Garcia_cleanup()
32a2aa8b07SAlberto Garcia{
33a2aa8b07SAlberto Garcia    _cleanup_test_img
34f91ecbd7SMax Reitz    _rm_test_img "$TEST_IMG.base"
35f91ecbd7SMax Reitz    _rm_test_img "$TEST_IMG.int"
36a2aa8b07SAlberto Garcia}
37a2aa8b07SAlberto Garciatrap "_cleanup; exit \$status" 0 1 2 3 15
38a2aa8b07SAlberto Garcia
39a2aa8b07SAlberto Garcia# get standard environment, filters and checks
40a2aa8b07SAlberto Garcia. ./common.rc
41a2aa8b07SAlberto Garcia. ./common.filter
42a2aa8b07SAlberto Garcia. ./common.qemu
43a2aa8b07SAlberto Garcia
44a2aa8b07SAlberto Garcia# Any format implementing BlockDriver.bdrv_change_backing_file
45a2aa8b07SAlberto Garcia_supported_fmt qcow2 qed
4657284d2aSMax Reitz_supported_proto file fuse
47a2aa8b07SAlberto Garcia_supported_os Linux
48a2aa8b07SAlberto Garcia
49a2aa8b07SAlberto GarciaIMG_SIZE=1M
50a2aa8b07SAlberto Garcia
51a2aa8b07SAlberto Garcia# Create the images: base <- int <- active
52f96e59daSMax ReitzTEST_IMG="$TEST_IMG.base" _make_test_img $IMG_SIZE
53f96e59daSMax ReitzTEST_IMG="$TEST_IMG.int" _make_test_img -b "$TEST_IMG.base" -F $IMGFMT
54f96e59daSMax Reitz_make_test_img -b "$TEST_IMG.int" -F $IMGFMT
55a2aa8b07SAlberto Garcia
56a2aa8b07SAlberto Garcia# Launch QEMU with these two drives:
57a2aa8b07SAlberto Garcia# none0: base (read-only)
58a2aa8b07SAlberto Garcia# none1: base <- int <- active
59a2aa8b07SAlberto Garcia_launch_qemu -drive if=none,file="${TEST_IMG}.base",node-name=base,read-only=on \
60a2aa8b07SAlberto Garcia             -drive if=none,file="${TEST_IMG}",backing.node-name=int,backing.backing=base
61a2aa8b07SAlberto Garcia
62a2aa8b07SAlberto Garcia_send_qemu_cmd $QEMU_HANDLE \
63a2aa8b07SAlberto Garcia    "{ 'execute': 'qmp_capabilities' }" \
64a2aa8b07SAlberto Garcia    'return'
65a2aa8b07SAlberto Garcia
66a2aa8b07SAlberto Garciaecho
67a2aa8b07SAlberto Garciaecho '=== Send a write command to a drive opened in read-only mode (1)'
68a2aa8b07SAlberto Garciaecho
69a2aa8b07SAlberto Garcia_send_qemu_cmd $QEMU_HANDLE \
70a2aa8b07SAlberto Garcia    "{ 'execute': 'human-monitor-command',
71a2aa8b07SAlberto Garcia       'arguments': {'command-line': 'qemu-io none0 \"aio_write 0 2k\"'}}" \
72a2aa8b07SAlberto Garcia    'return'
73a2aa8b07SAlberto Garcia
74a2aa8b07SAlberto Garciaecho
75a2aa8b07SAlberto Garciaecho '=== Run block-commit on base using an invalid filter node name'
76a2aa8b07SAlberto Garciaecho
77a2aa8b07SAlberto Garcia_send_qemu_cmd $QEMU_HANDLE \
78a2aa8b07SAlberto Garcia    "{ 'execute': 'block-commit',
79a2aa8b07SAlberto Garcia       'arguments': {'job-id': 'job0', 'device': 'none1', 'top-node': 'int',
80a2aa8b07SAlberto Garcia                     'filter-node-name': '1234'}}" \
81a2aa8b07SAlberto Garcia    'error'
82a2aa8b07SAlberto Garcia
83a2aa8b07SAlberto Garciaecho
84a2aa8b07SAlberto Garciaecho '=== Send a write command to a drive opened in read-only mode (2)'
85a2aa8b07SAlberto Garciaecho
86a2aa8b07SAlberto Garcia_send_qemu_cmd $QEMU_HANDLE \
87a2aa8b07SAlberto Garcia    "{ 'execute': 'human-monitor-command',
88a2aa8b07SAlberto Garcia       'arguments': {'command-line': 'qemu-io none0 \"aio_write 0 2k\"'}}" \
89a2aa8b07SAlberto Garcia    'return'
90a2aa8b07SAlberto Garcia
91a2aa8b07SAlberto Garciaecho
92a2aa8b07SAlberto Garciaecho '=== Run block-commit on base using the default filter node name'
93a2aa8b07SAlberto Garciaecho
94a2aa8b07SAlberto Garcia_send_qemu_cmd $QEMU_HANDLE \
95a2aa8b07SAlberto Garcia    "{ 'execute': 'block-commit',
96a2aa8b07SAlberto Garcia       'arguments': {'job-id': 'job0', 'device': 'none1', 'top-node': 'int'}}" \
97a2aa8b07SAlberto Garcia    'return'
98a2aa8b07SAlberto Garcia
99a2aa8b07SAlberto Garcia# Wait for block-commit to finish
100a2aa8b07SAlberto Garcia_send_qemu_cmd $QEMU_HANDLE '' \
101a2aa8b07SAlberto Garcia    '"status": "null"'
102a2aa8b07SAlberto Garcia
103a2aa8b07SAlberto Garciaecho
104a2aa8b07SAlberto Garciaecho '=== Send a write command to a drive opened in read-only mode (3)'
105a2aa8b07SAlberto Garciaecho
106a2aa8b07SAlberto Garcia_send_qemu_cmd $QEMU_HANDLE \
107a2aa8b07SAlberto Garcia    "{ 'execute': 'human-monitor-command',
108a2aa8b07SAlberto Garcia       'arguments': {'command-line': 'qemu-io none0 \"aio_write 0 2k\"'}}" \
109a2aa8b07SAlberto Garcia    'return'
110a2aa8b07SAlberto Garcia
111a2aa8b07SAlberto Garcia_cleanup_qemu
112a2aa8b07SAlberto Garcia
113a2aa8b07SAlberto Garcia# success, all done
114a2aa8b07SAlberto Garciaecho "*** done"
115a2aa8b07SAlberto Garciarm -f $seq.full
116a2aa8b07SAlberto Garciastatus=0
117