#!/bin/bash
# SPDX-License-Identifier: GPL-2.0

. common/fio_common
. common/qcow2_common

echo "check qcow2 image integrity after ubq_deamon is killed when running fio"

BS=4k
RW=rw
JOBS=4
QUEUES=1
RT=$TRUNTIME
LOOPS=4
URING_COMP=1
NEED_GET_DATA=1

ublk_run_abort_test()
{
	for CNT in `seq $LOOPS`; do
		export T_TYPE_PARAMS="-t qcow2 -q $QUEUES -u $URING_COMP -g $NEED_GET_DATA -f $file"
		DEV=`__create_ublk_dev`
		echo -e "\trun fio with killing $DEV(ublk $T_TYPE_PARAMS) with check image integrity $CNT"
		__run_fio_libaio $DEV $BS $RW $JOBS $RT > /dev/null 2 >& 1 &
		sleep 2
		queue_tid=`__ublk_get_queue_tid $DEV 0`
		kill -9 $queue_tid
		sleep 2
		secs=0
		while [ $secs -lt 10 ]; do
			state=`__ublk_get_dev_state $DEV`
			[ "$state" == "DEAD" ] && break
			sleep 1
			let secs++
		done
		[ "$state" != "DEAD" ] && echo "device isn't dead after killing queue daemon" && exit -1
		RES=`__remove_ublk_dev_return $DEV`
		if [ $RES -ne 0 ]; then
				echo -e "\tdelete $DEV failed"
				exit -1
		fi
		qemu-img check -r leaks $file > ${UBLK_TMP} 2>&1
		RES=$?
		wait
		[ $RES -ne 0 ] && cat ${UBLK_TMP} && break
	done
}

file=`_create_qcow2_image "null" 2G`

ublk_run_abort_test

_remove_qcow2_image $file
