#!/usr/bin/env python3
#
# Test resume mirror after auto pause on ENOSPC
#
# Copyright (c) 2019 Virtuozzo International GmbH. All rights reserved.
#
# 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
from iotests import qemu_img_create, qemu_io, file_path, filter_qmp_testfiles

iotests.verify_image_format(supported_fmts=['qcow2'])

source, target = file_path('source', 'target')
size = 5 * 1024 * 1024
limit = 2 * 1024 * 1024

qemu_img_create('-f', iotests.imgfmt, source, str(size))
qemu_img_create('-f', iotests.imgfmt, target, str(size))
qemu_io('-c', 'write 0 {}'.format(size), source)

# raw format don't like empty files
qemu_io('-c', 'write 0 {}'.format(size), target)

vm = iotests.VM().add_drive(source)
vm.launch()

blockdev_opts = {
    'driver': iotests.imgfmt,
    'node-name': 'target',
    'file': {
        'driver': 'raw',
        'size': limit,
        'file': {
            'driver': 'file',
            'filename': target
        }
    }
}
vm.qmp_log('blockdev-add', filters=[filter_qmp_testfiles], **blockdev_opts)

vm.qmp_log('blockdev-mirror', device='drive0', sync='full', target='target',
           on_target_error='enospc')

vm.event_wait('JOB_STATUS_CHANGE', timeout=3.0,
              match={'data': {'status': 'paused'}})

# drop other cached events, to not interfere with further wait for 'running'
vm.get_qmp_events()

del blockdev_opts['file']['size']
vm.qmp_log('x-blockdev-reopen', filters=[filter_qmp_testfiles],
           **blockdev_opts)

vm.qmp_log('block-job-resume', device='drive0')
vm.event_wait('JOB_STATUS_CHANGE', timeout=1.0,
              match={'data': {'status': 'running'}})

vm.shutdown()
