#!/usr/bin/env bash
#
# Test qemu-img file cleanup for LUKS when using a non-UTF8 secret
#
# Copyright (C) 2020, IBM Corporation.
#
# 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/>.
#

seq=`basename $0`
echo "QA output created by $seq"

status=1	# failure is the default!
TEST_IMAGE_FILE='vol.img'

_cleanup()
{
  _cleanup_test_img
  rm non_utf8_secret
  rm -f $TEST_IMAGE_FILE
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

_supported_fmt luks
_supported_proto generic

echo "== Create non-UTF8 secret =="
echo -n -e '\x3a\x3c\x3b\xff' > non_utf8_secret
SECRET="secret,id=sec0,file=non_utf8_secret"

echo "== Throws an error because of invalid UTF-8 secret =="
$QEMU_IMG create -f $IMGFMT --object $SECRET -o "key-secret=sec0" $TEST_IMAGE_FILE 4M

echo "== Image file should not exist after the error =="
if test -f "$TEST_IMAGE_FILE"; then
    exit 1
fi

echo "== Create a stub image file and run qemu-img again =="
touch $TEST_IMAGE_FILE
$QEMU_IMG create -f $IMGFMT --object $SECRET -o "key-secret=sec0" $TEST_IMAGE_FILE 4M

echo "== Pre-existing image file should also be deleted after the error =="
if test -f "$TEST_IMAGE_FILE"; then
    exit 1
fi

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