mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-09-06 18:05:37 +00:00
iotests: Test json:{} filenames of internal BDSs
Signed-off-by: Max Reitz <mreitz@redhat.com> Message-id: 20190201192935.18394-32-mreitz@redhat.com Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
62a01a27f7
commit
7b14f23149
139
tests/qemu-iotests/224
Executable file
139
tests/qemu-iotests/224
Executable file
|
@ -0,0 +1,139 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# Test json:{} filenames with qemu-internal BDSs
|
||||
# (the one of commit, to be precise)
|
||||
#
|
||||
# Copyright (C) 2018 Red Hat, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Creator/Owner: Max Reitz <mreitz@redhat.com>
|
||||
|
||||
import iotests
|
||||
from iotests import log, qemu_img, qemu_io_silent, filter_qmp_testfiles, \
|
||||
filter_qmp_imgfmt
|
||||
import json
|
||||
|
||||
# Need backing file support (for arbitrary backing formats)
|
||||
iotests.verify_image_format(supported_fmts=['qcow2', 'qcow', 'qed'])
|
||||
iotests.verify_platform(['linux'])
|
||||
|
||||
|
||||
# There are two variations of this test:
|
||||
# (1) We do not set filter_node_name. In that case, the commit_top
|
||||
# driver should not appear anywhere.
|
||||
# (2) We do set filter_node_name. In that case, it should appear.
|
||||
#
|
||||
# This for loop executes both.
|
||||
for filter_node_name in False, True:
|
||||
log('')
|
||||
log('--- filter_node_name: %s ---' % filter_node_name)
|
||||
log('')
|
||||
|
||||
with iotests.FilePath('base.img') as base_img_path, \
|
||||
iotests.FilePath('mid.img') as mid_img_path, \
|
||||
iotests.FilePath('top.img') as top_img_path, \
|
||||
iotests.VM() as vm:
|
||||
|
||||
assert qemu_img('create', '-f', iotests.imgfmt,
|
||||
base_img_path, '64M') == 0
|
||||
assert qemu_img('create', '-f', iotests.imgfmt, '-b', base_img_path,
|
||||
mid_img_path) == 0
|
||||
assert qemu_img('create', '-f', iotests.imgfmt, '-b', mid_img_path,
|
||||
top_img_path) == 0
|
||||
|
||||
# Something to commit
|
||||
assert qemu_io_silent(mid_img_path, '-c', 'write -P 1 0 1M') == 0
|
||||
|
||||
vm.launch()
|
||||
|
||||
# Change the bottom-most image's backing file (to null-co://)
|
||||
# to enforce json:{} filenames
|
||||
vm.qmp_log('blockdev-add',
|
||||
node_name='top',
|
||||
driver=iotests.imgfmt,
|
||||
file={
|
||||
'driver': 'file',
|
||||
'filename': top_img_path
|
||||
},
|
||||
backing={
|
||||
'node-name': 'mid',
|
||||
'driver': iotests.imgfmt,
|
||||
'file': {
|
||||
'driver': 'file',
|
||||
'filename': mid_img_path
|
||||
},
|
||||
'backing': {
|
||||
'node-name': 'base',
|
||||
'driver': iotests.imgfmt,
|
||||
'file': {
|
||||
'driver': 'file',
|
||||
'filename': base_img_path
|
||||
},
|
||||
'backing': {
|
||||
'driver': 'null-co'
|
||||
}
|
||||
}
|
||||
},
|
||||
filters=[filter_qmp_testfiles, filter_qmp_imgfmt])
|
||||
|
||||
# As long as block-commit does not accept node names, we have to
|
||||
# get our mid/base filenames here
|
||||
mid_name = vm.node_info('mid')['image']['filename']
|
||||
base_name = vm.node_info('base')['image']['filename']
|
||||
|
||||
assert mid_name[:5] == 'json:'
|
||||
assert base_name[:5] == 'json:'
|
||||
|
||||
# Start the block job
|
||||
if filter_node_name:
|
||||
vm.qmp_log('block-commit',
|
||||
job_id='commit',
|
||||
device='top',
|
||||
filter_node_name='filter_node',
|
||||
top=mid_name,
|
||||
base=base_name,
|
||||
speed=1,
|
||||
filters=[filter_qmp_testfiles, filter_qmp_imgfmt])
|
||||
else:
|
||||
vm.qmp_log('block-commit',
|
||||
job_id='commit',
|
||||
device='top',
|
||||
top=mid_name,
|
||||
base=base_name,
|
||||
speed=1,
|
||||
filters=[filter_qmp_testfiles, filter_qmp_imgfmt])
|
||||
|
||||
vm.qmp_log('job-pause', id='commit')
|
||||
|
||||
# Get and parse top's json:{} filename
|
||||
top_name = vm.node_info('top')['image']['filename']
|
||||
|
||||
vm.shutdown()
|
||||
|
||||
assert top_name[:5] == 'json:'
|
||||
top_options = json.loads(top_name[5:])
|
||||
|
||||
if filter_node_name:
|
||||
# This should be present and set
|
||||
assert top_options['backing']['driver'] == 'commit_top'
|
||||
# And the mid image is commit_top's backing image
|
||||
mid_options = top_options['backing']['backing']
|
||||
else:
|
||||
# The mid image should appear as the immediate backing BDS
|
||||
# of top
|
||||
mid_options = top_options['backing']
|
||||
|
||||
assert mid_options['driver'] == iotests.imgfmt
|
||||
assert mid_options['file']['filename'] == mid_img_path
|
18
tests/qemu-iotests/224.out
Normal file
18
tests/qemu-iotests/224.out
Normal file
|
@ -0,0 +1,18 @@
|
|||
|
||||
--- filter_node_name: False ---
|
||||
|
||||
{"execute": "blockdev-add", "arguments": {"backing": {"backing": {"backing": {"driver": "null-co"}, "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-base.img"}, "node-name": "base"}, "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-mid.img"}, "node-name": "mid"}, "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top.img"}, "node-name": "top"}}
|
||||
{"return": {}}
|
||||
{"execute": "block-commit", "arguments": {"base": "json:{\"backing\": {\"driver\": \"null-co\"}, \"driver\": \"IMGFMT\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/PID-base.img\"}}", "device": "top", "job-id": "commit", "speed": 1, "top": "json:{\"backing\": {\"backing\": {\"driver\": \"null-co\"}, \"driver\": \"IMGFMT\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/PID-base.img\"}}, \"driver\": \"IMGFMT\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/PID-mid.img\"}}"}}
|
||||
{"return": {}}
|
||||
{"execute": "job-pause", "arguments": {"id": "commit"}}
|
||||
{"return": {}}
|
||||
|
||||
--- filter_node_name: True ---
|
||||
|
||||
{"execute": "blockdev-add", "arguments": {"backing": {"backing": {"backing": {"driver": "null-co"}, "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-base.img"}, "node-name": "base"}, "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-mid.img"}, "node-name": "mid"}, "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top.img"}, "node-name": "top"}}
|
||||
{"return": {}}
|
||||
{"execute": "block-commit", "arguments": {"base": "json:{\"backing\": {\"driver\": \"null-co\"}, \"driver\": \"IMGFMT\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/PID-base.img\"}}", "device": "top", "filter-node-name": "filter_node", "job-id": "commit", "speed": 1, "top": "json:{\"backing\": {\"backing\": {\"driver\": \"null-co\"}, \"driver\": \"IMGFMT\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/PID-base.img\"}}, \"driver\": \"IMGFMT\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/PID-mid.img\"}}"}}
|
||||
{"return": {}}
|
||||
{"execute": "job-pause", "arguments": {"id": "commit"}}
|
||||
{"return": {}}
|
|
@ -224,6 +224,7 @@
|
|||
221 rw auto quick
|
||||
222 rw auto quick
|
||||
223 rw auto quick
|
||||
224 rw auto quick
|
||||
225 rw auto quick
|
||||
226 auto quick
|
||||
227 auto quick
|
||||
|
|
Loading…
Reference in a new issue