| #!/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 <http://www.gnu.org/licenses/>. | 
 | # | 
 |  | 
 | import iotests | 
 | import subprocess | 
 | from iotests import qemu_img_create, qemu_io_log, file_path, log, \ | 
 |         verify_qcow2_zstd_compression | 
 |  | 
 | iotests.script_initialize(supported_fmts=['qcow2'], | 
 |                           unsupported_imgopts=['refcount_bits', 'compat']) | 
 | verify_qcow2_zstd_compression() | 
 |  | 
 | 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}' | 
 |     qemu_io_log('-c', write, disk) | 
 |  | 
 |  | 
 | 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) |