#!/bin/bash
# SPDX-License-Identifier: GPL-3.0+
# Copyright (C) 2023 SUSE LLC
#
# Test if the fabrics transports are handling different queues types correctly.

. tests/nvme/rc
. common/xfs

DESCRIPTION="test different queue types for fabric transports"

requires() {
	_nvme_requires
	_have_xfs
	_have_fio
	_require_nvme_trtype tcp rdma
	_have_kver 4 21
}

test() {
	echo "Running ${TEST_NAME}"

	_setup_nvmet

	local port
	local nvmedev
	local loop_dev
	local rand_io_size
	local file_path="$TMPDIR/img"
	local subsys_name="blktests-subsystem-1"

	truncate -s "${nvme_img_size}" "${file_path}"

	loop_dev="$(losetup -f --show "${file_path}")"

	_create_nvmet_subsystem "${subsys_name}" "${loop_dev}" \
		"91fdba0d-f87b-4c25-b80f-db7be1418b9e"
	port="$(_create_nvmet_port "${nvme_trtype}")"
	_add_nvmet_subsys_to_port "${port}" "${subsys_name}"

	_nvme_connect_subsys "${nvme_trtype}" "${subsys_name}" \
		--nr-write-queues 1 || echo FAIL

	nvmedev=$(_find_nvme_dev "${subsys_name}")

	rand_io_size="$(_nvme_calc_rand_io_size 4M)"
	_run_fio_rand_io --filename="/dev/${nvmedev}n1" --size="${rand_io_size}"

	_nvme_disconnect_subsys "${subsys_name}" >> "$FULL" 2>&1

	_nvme_connect_subsys "${nvme_trtype}" "${subsys_name}" \
		--nr-write-queues 1 \
		--nr-poll-queues 1 || echo FAIL

	_run_fio_rand_io --filename="/dev/${nvmedev}n1" --size="${rand_io_size}"

	_nvme_disconnect_subsys "${subsys_name}" >> "$FULL" 2>&1

	_remove_nvmet_subsystem_from_port "${port}" "${subsys_name}"
	_remove_nvmet_subsystem "${subsys_name}"
	_remove_nvmet_port "${port}"

	losetup -d "${loop_dev}"

	rm "${file_path}"

	echo "Test complete"
}
