]> Git Repo - qemu.git/blame - tests/qemu-iotests/224
Merge remote-tracking branch 'remotes/huth-gitlab/tags/pull-request-2020-05-30' into...
[qemu.git] / tests / qemu-iotests / 224
CommitLineData
7c477526 1#!/usr/bin/env python3
7b14f231
HR
2#
3# Test json:{} filenames with qemu-internal BDSs
4# (the one of commit, to be precise)
5#
6# Copyright (C) 2018 Red Hat, Inc.
7#
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 2 of the License, or
11# (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License
19# along with this program. If not, see <http://www.gnu.org/licenses/>.
20#
21# Creator/Owner: Max Reitz <[email protected]>
22
23import iotests
24from iotests import log, qemu_img, qemu_io_silent, filter_qmp_testfiles, \
25 filter_qmp_imgfmt
26import json
27
28# Need backing file support (for arbitrary backing formats)
7d814059
JS
29iotests.script_initialize(supported_fmts=['qcow2', 'qcow', 'qed'],
30 supported_platforms=['linux'])
7b14f231
HR
31
32
33# There are two variations of this test:
34# (1) We do not set filter_node_name. In that case, the commit_top
35# driver should not appear anywhere.
36# (2) We do set filter_node_name. In that case, it should appear.
37#
38# This for loop executes both.
39for filter_node_name in False, True:
40 log('')
41 log('--- filter_node_name: %s ---' % filter_node_name)
42 log('')
43
44 with iotests.FilePath('base.img') as base_img_path, \
45 iotests.FilePath('mid.img') as mid_img_path, \
46 iotests.FilePath('top.img') as top_img_path, \
47 iotests.VM() as vm:
48
49 assert qemu_img('create', '-f', iotests.imgfmt,
50 base_img_path, '64M') == 0
51 assert qemu_img('create', '-f', iotests.imgfmt, '-b', base_img_path,
52 mid_img_path) == 0
53 assert qemu_img('create', '-f', iotests.imgfmt, '-b', mid_img_path,
54 top_img_path) == 0
55
56 # Something to commit
57 assert qemu_io_silent(mid_img_path, '-c', 'write -P 1 0 1M') == 0
58
59 vm.launch()
60
61 # Change the bottom-most image's backing file (to null-co://)
62 # to enforce json:{} filenames
63 vm.qmp_log('blockdev-add',
64 node_name='top',
65 driver=iotests.imgfmt,
66 file={
67 'driver': 'file',
68 'filename': top_img_path
69 },
70 backing={
71 'node-name': 'mid',
72 'driver': iotests.imgfmt,
73 'file': {
74 'driver': 'file',
75 'filename': mid_img_path
76 },
77 'backing': {
78 'node-name': 'base',
79 'driver': iotests.imgfmt,
80 'file': {
81 'driver': 'file',
82 'filename': base_img_path
83 },
84 'backing': {
85 'driver': 'null-co'
86 }
87 }
88 },
89 filters=[filter_qmp_testfiles, filter_qmp_imgfmt])
90
91 # As long as block-commit does not accept node names, we have to
92 # get our mid/base filenames here
93 mid_name = vm.node_info('mid')['image']['filename']
94 base_name = vm.node_info('base')['image']['filename']
95
96 assert mid_name[:5] == 'json:'
97 assert base_name[:5] == 'json:'
98
99 # Start the block job
100 if filter_node_name:
101 vm.qmp_log('block-commit',
102 job_id='commit',
103 device='top',
104 filter_node_name='filter_node',
105 top=mid_name,
106 base=base_name,
107 speed=1,
108 filters=[filter_qmp_testfiles, filter_qmp_imgfmt])
109 else:
110 vm.qmp_log('block-commit',
111 job_id='commit',
112 device='top',
113 top=mid_name,
114 base=base_name,
115 speed=1,
116 filters=[filter_qmp_testfiles, filter_qmp_imgfmt])
117
118 vm.qmp_log('job-pause', id='commit')
119
120 # Get and parse top's json:{} filename
121 top_name = vm.node_info('top')['image']['filename']
122
123 vm.shutdown()
124
125 assert top_name[:5] == 'json:'
126 top_options = json.loads(top_name[5:])
127
128 if filter_node_name:
129 # This should be present and set
130 assert top_options['backing']['driver'] == 'commit_top'
131 # And the mid image is commit_top's backing image
132 mid_options = top_options['backing']['backing']
133 else:
134 # The mid image should appear as the immediate backing BDS
135 # of top
136 mid_options = top_options['backing']
137
138 assert mid_options['driver'] == iotests.imgfmt
139 assert mid_options['file']['filename'] == mid_img_path
This page took 0.135135 seconds and 4 git commands to generate.