]> git.proxmox.com Git - mirror_qemu.git/blame - tests/qemu-iotests/206
build: Remove --enable-gprof
[mirror_qemu.git] / tests / qemu-iotests / 206
CommitLineData
7c477526 1#!/usr/bin/env python3
9dd003a9 2# group: rw
39218a77
KW
3#
4# Test qcow2 and file image creation
5#
6# Copyright (C) 2018 Red Hat, Inc.
7#
4de110f8
KW
8# Creator/Owner: Kevin Wolf <kwolf@redhat.com>
9#
39218a77
KW
10# This program is free software; you can redistribute it and/or modify
11# it under the terms of the GNU General Public License as published by
12# the Free Software Foundation; either version 2 of the License, or
13# (at your option) any later version.
14#
15# This program is distributed in the hope that it will be useful,
16# but WITHOUT ANY WARRANTY; without even the implied warranty of
17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18# GNU General Public License for more details.
19#
20# You should have received a copy of the GNU General Public License
21# along with this program. If not, see <http://www.gnu.org/licenses/>.
22#
23
4de110f8
KW
24import iotests
25from iotests import imgfmt
26
eda7a9c5
HR
27iotests.script_initialize(supported_fmts=['qcow2'],
28 supported_protocols=['file'])
d2a839ed 29iotests.verify_working_luks()
4de110f8 30
4de110f8
KW
31with iotests.FilePath('t.qcow2') as disk_path, \
32 iotests.FilePath('t.qcow2.base') as backing_path, \
33 iotests.VM() as vm:
34
35 vm.add_object('secret,id=keysec0,data=foo')
36
37 #
38 # Successful image creation (defaults)
39 #
40 iotests.log("=== Successful image creation (defaults) ===")
41 iotests.log("")
42
43 size = 128 * 1024 * 1024
44
45 vm.launch()
f6da1736
KW
46 vm.blockdev_create({ 'driver': 'file',
47 'filename': disk_path,
48 'size': 0 })
4de110f8 49
f8ca8609 50 vm.qmp_log('blockdev-add',
08fcd611 51 filters=[iotests.filter_qmp_testfiles],
f8ca8609 52 driver='file', filename=disk_path,
4de110f8
KW
53 node_name='imgfile')
54
f6da1736
KW
55 vm.blockdev_create({ 'driver': imgfmt,
56 'file': 'imgfile',
57 'size': size })
4de110f8
KW
58 vm.shutdown()
59
60 iotests.img_info_log(disk_path)
61
62 #
63 # Successful image creation (inline blockdev-add, explicit defaults)
64 #
65 iotests.log("=== Successful image creation (inline blockdev-add, explicit defaults) ===")
66 iotests.log("")
67
68 # Choose a different size to show that we got a new image
69 size = 64 * 1024 * 1024
70
71 vm.launch()
f6da1736
KW
72 vm.blockdev_create({ 'driver': 'file',
73 'filename': disk_path,
74 'size': 0,
75 'preallocation': 'off',
76 'nocow': False })
77
78 vm.blockdev_create({ 'driver': imgfmt,
79 'file': {
80 'driver': 'file',
81 'filename': disk_path,
82 },
83 'size': size,
84 'version': 'v3',
85 'cluster-size': 65536,
86 'preallocation': 'off',
87 'lazy-refcounts': False,
88 'refcount-bits': 16 })
4de110f8
KW
89 vm.shutdown()
90
91 iotests.img_info_log(disk_path)
92
93 #
94 # Successful image creation (v3 non-default options)
95 #
96 iotests.log("=== Successful image creation (v3 non-default options) ===")
97 iotests.log("")
98
99 # Choose a different size to show that we got a new image
100 size = 32 * 1024 * 1024
101
102 vm.launch()
f6da1736
KW
103 vm.blockdev_create({ 'driver': 'file',
104 'filename': disk_path,
105 'size': 0,
106 'preallocation': 'falloc',
107 'nocow': True })
108
109 vm.blockdev_create({ 'driver': imgfmt,
110 'file': {
111 'driver': 'file',
112 'filename': disk_path,
113 },
114 'size': size,
115 'version': 'v3',
116 'cluster-size': 2097152,
117 'preallocation': 'metadata',
118 'lazy-refcounts': True,
119 'refcount-bits': 1 })
4de110f8
KW
120 vm.shutdown()
121
122 iotests.img_info_log(disk_path)
123
124 #
125 # Successful image creation (v2 non-default options)
126 #
127 iotests.log("=== Successful image creation (v2 non-default options) ===")
128 iotests.log("")
129
130 vm.launch()
f6da1736
KW
131 vm.blockdev_create({ 'driver': 'file',
132 'filename': disk_path,
133 'size': 0 })
134
135 vm.blockdev_create({ 'driver': imgfmt,
136 'file': {
137 'driver': 'file',
138 'filename': disk_path,
139 },
140 'size': size,
141 'backing-file': backing_path,
142 'backing-fmt': 'qcow2',
143 'version': 'v2',
144 'cluster-size': 512 })
4de110f8
KW
145 vm.shutdown()
146
147 iotests.img_info_log(disk_path)
148
149 #
150 # Successful image creation (encrypted)
151 #
152 iotests.log("=== Successful image creation (encrypted) ===")
153 iotests.log("")
154
155 vm.launch()
f6da1736
KW
156 vm.blockdev_create({ 'driver': imgfmt,
157 'file': {
158 'driver': 'file',
159 'filename': disk_path,
160 },
161 'size': size,
162 'encrypt': {
163 'format': 'luks',
164 'key-secret': 'keysec0',
cb5a24d7
HR
165 'cipher-alg': 'aes-128',
166 'cipher-mode': 'cbc',
f6da1736
KW
167 'ivgen-alg': 'plain64',
168 'ivgen-hash-alg': 'md5',
169 'hash-alg': 'sha1',
170 'iter-time': 10,
171 }})
4de110f8
KW
172 vm.shutdown()
173
174 iotests.img_info_log(disk_path)
175
176 #
177 # Invalid BlockdevRef
178 #
179 iotests.log("=== Invalid BlockdevRef ===")
180 iotests.log("")
181
182 vm.launch()
f6da1736
KW
183 vm.blockdev_create({ 'driver': imgfmt,
184 'file': "this doesn't exist",
185 'size': size })
4de110f8
KW
186 vm.shutdown()
187
188 #
189 # Invalid sizes
190 #
191 iotests.log("=== Invalid sizes ===")
192
193 # TODO Negative image sizes aren't handled correctly, but this is a problem
194 # with QAPI's implementation of the 'size' type and affects other commands
195 # as well. Once this is fixed, we may want to add a test case here.
196 #
197 # 1. Misaligned image size
198 # 2. 2^64 - 512
199 # 3. 2^63 = 8 EB (qemu-img enforces image sizes less than this)
200 # 4. 2^63 - 512 (generally valid, but qcow2 can't handle images this size)
201
202 vm.add_blockdev('driver=file,filename=%s,node-name=node0' % (disk_path))
203
204 vm.launch()
205 for size in [ 1234, 18446744073709551104, 9223372036854775808,
8b117001 206 9223372036854775296, 9223372035781033984 ]:
f6da1736
KW
207 vm.blockdev_create({ 'driver': imgfmt,
208 'file': 'node0',
209 'size': size })
4de110f8
KW
210 vm.shutdown()
211
212 #
213 # Invalid version
214 #
215 iotests.log("=== Invalid version ===")
216
217 vm.launch()
f6da1736
KW
218 vm.blockdev_create({ 'driver': imgfmt,
219 'file': 'node0',
220 'size': 67108864,
221 'version': 'v1' })
222 vm.blockdev_create({ 'driver': imgfmt,
223 'file': 'node0',
224 'size': 67108864,
225 'version': 'v2',
226 'lazy-refcounts': True })
227 vm.blockdev_create({ 'driver': imgfmt,
228 'file': 'node0',
229 'size': 67108864,
230 'version': 'v2',
231 'refcount-bits': 8 })
4de110f8
KW
232 vm.shutdown()
233
234 #
235 # Invalid backing file options
236 #
237 iotests.log("=== Invalid backing file options ===")
238
239 vm.launch()
f6da1736
KW
240 vm.blockdev_create({ 'driver': imgfmt,
241 'file': 'node0',
242 'size': 67108864,
243 'backing-file': '/dev/null',
244 'preallocation': 'full' })
245 vm.blockdev_create({ 'driver': imgfmt,
246 'file': 'node0',
247 'size': 67108864,
248 'backing-fmt': imgfmt })
4de110f8
KW
249 vm.shutdown()
250
251 #
252 # Invalid cluster size
253 #
254 iotests.log("=== Invalid cluster size ===")
255
256 vm.launch()
257 for csize in [ 1234, 128, 4194304, 0 ]:
f6da1736
KW
258 vm.blockdev_create({ 'driver': imgfmt,
259 'file': 'node0',
260 'size': 67108864,
261 'cluster-size': csize })
262 vm.blockdev_create({ 'driver': imgfmt,
263 'file': 'node0',
264 'size': 281474976710656,
265 'cluster-size': 512 })
4de110f8
KW
266 vm.shutdown()
267
268 #
269 # Invalid refcount width
270 #
271 iotests.log("=== Invalid refcount width ===")
272
273 vm.launch()
274 for refcount_bits in [ 128, 0, 7 ]:
f6da1736
KW
275 vm.blockdev_create({ 'driver': imgfmt,
276 'file': 'node0',
277 'size': 67108864,
278 'refcount-bits': refcount_bits })
4de110f8 279 vm.shutdown()