#!/usr/bin/env python3 # group: rw quick # # Test for dumping of qcow2 image metadata # # Copyright (c) 2020 Virtuozzo International GmbH # # 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 . # import iotests import subprocess from iotests import qemu_img_create, qemu_io, file_path, log, filter_qemu_io iotests.script_initialize(supported_fmts=['qcow2'], unsupported_imgopts=['refcount_bits', 'compat']) disk = file_path('disk') chunk = 1024 * 1024 def create_bitmap(bitmap_number, disabled): granularity = 1 << (14 + bitmap_number) bitmap_name = 'bitmap-' + str(bitmap_number) args = ['bitmap', '--add', '-g', f'{granularity}', '-f', iotests.imgfmt, disk, bitmap_name] if disabled: args.append('--disable') iotests.qemu_img(*args) def write_to_disk(offset, size): write = f'write {offset} {size}' log(qemu_io('-c', write, disk), filters=[filter_qemu_io]) def add_bitmap(num, begin, end, disabled): log(f'Add bitmap {num}') create_bitmap(num, disabled) for i in range(begin, end): write_to_disk((i) * chunk, chunk) log('') def test(compression_type: str, json_output: bool) -> None: qemu_img_create('-f', iotests.imgfmt, '-o', f'compression_type={compression_type}', disk, '10M') add_bitmap(1, 0, 6, False) add_bitmap(2, 6, 8, True) cmd = ['./qcow2.py', disk, 'dump-header'] if json_output: cmd.append('-j') subprocess.run(cmd) test('zlib', False) test('zstd', True)