#!/bin/bash
# SPDX-License-Identifier: GPL-3.0+
# Copyright (C) 2018 Sagi Grimberg
#
# Test NVMe out of range access on a file backend. Regression test for commit
# 9c891c139894 ("nvmet: check fileio LBA range access boundaries").

. tests/nvme/rc

DESCRIPTION="unit test NVMe-oF out of range access on a file backend"
QUICK=1

requires() {
	_nvme_requires
	_have_loop
	_require_nvme_trtype_is_fabrics
}

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

	_setup_nvmet

	local nvmedev

	_nvmet_target_setup --blkdev file

	_nvme_connect_subsys "${nvme_trtype}" "${def_subsysnqn}"

	nvmedev=$(_find_nvme_dev "${def_subsysnqn}")
	_check_uuid "${nvmedev}"

	local sectors
	local bs
	sectors="$(blockdev --getsz "/dev/${nvmedev}n1")"
	bs="$(blockdev --getbsz "/dev/${nvmedev}n1")"

	nvme read "/dev/${nvmedev}n1" -s "$sectors" -c 0 -z "$bs" &>"$FULL" \
		&& echo "ERROR: nvme read for out of range LBA was not rejected"

	_nvme_disconnect_subsys "${def_subsysnqn}"

	_nvmet_target_cleanup

	echo "Test complete"
}
