#!/bin/bash
# SPDX-License-Identifier: GPL-3.0+
# Copyright (C) 2024 Nilay Shroff
#
# Regression test for commit be647e2c76b2(nvme: use srcu for iterating
# namespace list). This regression is resolved with commit ff0ffe5b7c3c
# (nvme: fix namespace removal list)

. tests/nvme/rc

DESCRIPTION="Test file-ns creation/deletion under one subsystem"

requires() {
	_nvme_requires
	_have_loop
	_require_nvme_trtype_is_loop
}

set_conditions() {
	_set_nvme_trtype "$@"
}

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

	_setup_nvmet

	local i iterations=20
	local uuid nsid filepath

	_nvmet_target_setup --blkdev none

	_nvme_connect_subsys --no-wait-ns

	for ((i = 1; i <= iterations; i++)); do
		nsid=$((def_nsid + i - 1))
		filepath="$(_nvme_def_file_path).${nsid}"
		truncate -s "${NVME_IMG_SIZE}" "$filepath"
		uuid=$(_create_nvmet_ns --blkdev "$filepath" --nsid "${nsid}")

		# wait until async request is processed and ns is created
		if ! _nvmf_wait_for_ns "${uuid}" created; then
			echo "FAIL"
			rm "$filepath"
			break
		fi

		_remove_nvmet_ns "${def_subsysnqn}" "${nsid}"

		# wait until async request is processed and ns is removed
		if ! _nvmf_wait_for_ns "${uuid}" removed; then
			echo "FAIL"
			rm "$filepath"
			break
		fi

		rm "$filepath"
	done

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

	_nvmet_target_cleanup

	echo "Test complete"
}
