1d047cfa7SVladimir Sementsov-Ogievskiy#!/usr/bin/env python3 2*9dd003a9SVladimir Sementsov-Ogievskiy# group: auto quick 3d047cfa7SVladimir Sementsov-Ogievskiy# 4d047cfa7SVladimir Sementsov-Ogievskiy# Test shutdown when bitmap is exported through NBD server 5d047cfa7SVladimir Sementsov-Ogievskiy# 6d047cfa7SVladimir Sementsov-Ogievskiy# Copyright (c) 2020 Virtuozzo International GmbH. 7d047cfa7SVladimir Sementsov-Ogievskiy# 8d047cfa7SVladimir Sementsov-Ogievskiy# This program is free software; you can redistribute it and/or modify 9d047cfa7SVladimir Sementsov-Ogievskiy# it under the terms of the GNU General Public License as published by 10d047cfa7SVladimir Sementsov-Ogievskiy# the Free Software Foundation; either version 2 of the License, or 11d047cfa7SVladimir Sementsov-Ogievskiy# (at your option) any later version. 12d047cfa7SVladimir Sementsov-Ogievskiy# 13d047cfa7SVladimir Sementsov-Ogievskiy# This program is distributed in the hope that it will be useful, 14d047cfa7SVladimir Sementsov-Ogievskiy# but WITHOUT ANY WARRANTY; without even the implied warranty of 15d047cfa7SVladimir Sementsov-Ogievskiy# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16d047cfa7SVladimir Sementsov-Ogievskiy# GNU General Public License for more details. 17d047cfa7SVladimir Sementsov-Ogievskiy# 18d047cfa7SVladimir Sementsov-Ogievskiy# You should have received a copy of the GNU General Public License 19d047cfa7SVladimir Sementsov-Ogievskiy# along with this program. If not, see <http://www.gnu.org/licenses/>. 20d047cfa7SVladimir Sementsov-Ogievskiy# 21d047cfa7SVladimir Sementsov-Ogievskiy 22d047cfa7SVladimir Sementsov-Ogievskiyimport iotests 23d047cfa7SVladimir Sementsov-Ogievskiy 24d047cfa7SVladimir Sementsov-Ogievskiy# The test is unrelated to formats, restrict it to qcow2 to avoid extra runs 25d047cfa7SVladimir Sementsov-Ogievskiyiotests.script_initialize( 26d047cfa7SVladimir Sementsov-Ogievskiy supported_fmts=['qcow2'], 27d047cfa7SVladimir Sementsov-Ogievskiy) 28d047cfa7SVladimir Sementsov-Ogievskiy 29d047cfa7SVladimir Sementsov-Ogievskiynbd_sock = iotests.file_path('nbd.sock', base_dir=iotests.sock_dir) 30d047cfa7SVladimir Sementsov-Ogievskiynbd_uri = 'nbd+unix:///disk?socket=' + nbd_sock 31d047cfa7SVladimir Sementsov-Ogievskiysize = 1024 * 1024 32d047cfa7SVladimir Sementsov-Ogievskiy 33d047cfa7SVladimir Sementsov-Ogievskiyvm = iotests.VM() 34d047cfa7SVladimir Sementsov-Ogievskiyvm.launch() 35d047cfa7SVladimir Sementsov-Ogievskiy 36d047cfa7SVladimir Sementsov-Ogievskiyvm.qmp_log('blockdev-add', **{ 37d047cfa7SVladimir Sementsov-Ogievskiy 'node-name': 'disk', 38d047cfa7SVladimir Sementsov-Ogievskiy 'driver': 'null-co', 39d047cfa7SVladimir Sementsov-Ogievskiy 'size': 1024 * 1024, 40d047cfa7SVladimir Sementsov-Ogievskiy}) 41d047cfa7SVladimir Sementsov-Ogievskiy 42d047cfa7SVladimir Sementsov-Ogievskiyvm.qmp_log('block-dirty-bitmap-add', **{ 43d047cfa7SVladimir Sementsov-Ogievskiy 'node': 'disk', 44d047cfa7SVladimir Sementsov-Ogievskiy 'name': 'bitmap0' 45d047cfa7SVladimir Sementsov-Ogievskiy}) 46d047cfa7SVladimir Sementsov-Ogievskiy 47d047cfa7SVladimir Sementsov-Ogievskiyvm.qmp_log('nbd-server-start', **{ 48d047cfa7SVladimir Sementsov-Ogievskiy 'addr': { 49d047cfa7SVladimir Sementsov-Ogievskiy 'type': 'unix', 50d047cfa7SVladimir Sementsov-Ogievskiy 'data': {'path': nbd_sock} 51d047cfa7SVladimir Sementsov-Ogievskiy } 52d047cfa7SVladimir Sementsov-Ogievskiy}, filters=[iotests.filter_qmp_testfiles]) 53d047cfa7SVladimir Sementsov-Ogievskiy 54d047cfa7SVladimir Sementsov-Ogievskiyvm.qmp_log('nbd-server-add', **{ 55d047cfa7SVladimir Sementsov-Ogievskiy 'device': 'disk', 56d047cfa7SVladimir Sementsov-Ogievskiy 'writable': True, 57d047cfa7SVladimir Sementsov-Ogievskiy 'bitmap': 'bitmap0' 58d047cfa7SVladimir Sementsov-Ogievskiy}) 59d047cfa7SVladimir Sementsov-Ogievskiy 60d047cfa7SVladimir Sementsov-Ogievskiyp = iotests.QemuIoInteractive('-f', 'raw', nbd_uri) 61d047cfa7SVladimir Sementsov-Ogievskiy# wait for connection and check it: 62d047cfa7SVladimir Sementsov-Ogievskiyiotests.log(p.cmd('read 0 512').rstrip(), filters=[iotests.filter_qemu_io]) 63d047cfa7SVladimir Sementsov-Ogievskiy 64d047cfa7SVladimir Sementsov-Ogievskiyvm.shutdown() 65d047cfa7SVladimir Sementsov-Ogievskiy 66d047cfa7SVladimir Sementsov-Ogievskiyp.close() 67