#!/usr/bin/env bash
#
# Tests oVirt-like storage migration:
#  - Create snapshot
#  - Create target image with (not yet existing) target backing chain
#    (i.e. just write the name of a soon-to-be-copied-over backing file into it)
#  - drive-mirror the snapshot to the target with mode=existing and sync=top
#  - In the meantime, copy the original source files to the destination via
#    conventional means (i.e. outside of qemu)
#  - Complete the drive-mirror job
#  - Delete all source images
#
# Copyright (C) 2016 Red Hat, Inc.
#
# 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/>.
#

# creator
owner=mreitz@redhat.com

seq="$(basename $0)"
echo "QA output created by $seq"

status=1	# failure is the default!

_cleanup()
{
    _cleanup_qemu
    for img in "$TEST_IMG"{,.target}{,.backing,.overlay}; do
        _rm_test_img "$img"
    done
}
trap "_cleanup; exit \$status" 0 1 2 3 15

# get standard environment, filters and checks
. ./common.rc
. ./common.filter
. ./common.qemu

_supported_fmt qcow2 qed
_supported_proto generic
_unsupported_proto vxhs
# Copying files around with cp does not work with external data files
_unsupported_imgopts data_file

# Create source disk
TEST_IMG="$TEST_IMG.backing" _make_test_img 1M
_make_test_img -b "$TEST_IMG.backing" -F $IMGFMT 1M

$QEMU_IO -c 'write -P 1 0 256k' "$TEST_IMG.backing" | _filter_qemu_io
$QEMU_IO -c 'write -P 2 64k 192k' "$TEST_IMG" | _filter_qemu_io

_launch_qemu -drive if=none,id=source,file="$TEST_IMG"

_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'qmp_capabilities' }" \
    'return'

# Create snapshot
TEST_IMG="$TEST_IMG.overlay" _make_test_img -u -b "$TEST_IMG" -F $IMGFMT 1M
_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'blockdev-snapshot-sync',
       'arguments': { 'device': 'source',
                      'snapshot-file': '$TEST_IMG.overlay',
                      'format': '$IMGFMT',
                      'mode': 'existing' } }" \
    'return'

# Write something to the snapshot
_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'human-monitor-command',
       'arguments': { 'command-line':
                      'qemu-io source \"write -P 3 128k 128k\"' } }" \
    'return'

# Create target image
TEST_IMG="$TEST_IMG.target.overlay" _make_test_img -u -b "$TEST_IMG.target" \
    -F $IMGFMT 1M

# Mirror snapshot
_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'drive-mirror',
       'arguments': { 'device': 'source',
                      'target': '$TEST_IMG.target.overlay',
                      'mode': 'existing',
                      'sync': 'top' } }" \
    'return'

# Wait for convergence
_send_qemu_cmd $QEMU_HANDLE \
    '' \
    'BLOCK_JOB_READY'

# Write some more
_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'human-monitor-command',
       'arguments': { 'command-line':
                      'qemu-io source \"write -P 4 192k 64k\"' } }" \
    'return'

# Copy source backing chain to the target before completing the job
cp "$TEST_IMG.backing" "$TEST_IMG.target.backing"
cp "$TEST_IMG" "$TEST_IMG.target"
$QEMU_IMG rebase -u -b "$TEST_IMG.target.backing" -F $IMGFMT "$TEST_IMG.target"

# Complete block job
_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'block-job-complete',
       'arguments': { 'device': 'source' } }" \
    ''

_send_qemu_cmd $QEMU_HANDLE \
    '' \
    '"status": "null"'

# Remove the source images
for img in "$TEST_IMG{,.backing,.overlay}"; do
    _rm_test_img "$img"
done

echo

# Check online disk contents
_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'human-monitor-command',
       'arguments': { 'command-line':
                      'qemu-io source \"read -P 1 0k 64k\"' } }" \
    'return'

_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'human-monitor-command',
       'arguments': { 'command-line':
                      'qemu-io source \"read -P 2 64k 64k\"' } }" \
    'return'

_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'human-monitor-command',
       'arguments': { 'command-line':
                      'qemu-io source \"read -P 3 128k 64k\"' } }" \
    'return'

_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'human-monitor-command',
       'arguments': { 'command-line':
                      'qemu-io source \"read -P 4 192k 64k\"' } }" \
    'return'

echo

_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'quit' }" \
    'return'

wait=1 _cleanup_qemu

echo

# Check offline disk contents
$QEMU_IO -c 'read -P 1 0k 64k' \
         -c 'read -P 2 64k 64k' \
         -c 'read -P 3 128k 64k' \
         -c 'read -P 4 192k 64k' \
         "$TEST_IMG.target.overlay" | _filter_qemu_io

echo

# success, all done
echo '*** done'
rm -f $seq.full
status=0
