#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (c) 2021 SUSE LLC <mdoucha@suse.cz>
#
# DESCRIPTION: Create a large number of files and directories on NFS volume.
# Then check whether they can be listed via NFS.

FILE_COUNT=5000

TST_OPTS="n:"
TST_PARSE_ARGS=do_parse_args
TST_TESTFUNC="do_test"
TST_SETUP="do_setup"

do_parse_args()
{
	case "$1" in
	n) FILE_COUNT="$2";;
	esac
}

. nfs_lib.sh

TST_USAGE="show_usage"

show_usage()
{
	nfs_usage
	echo "-n x    Create x files and x directories, default is 5000"
}

do_setup()
{
	nfs_setup

	local rpath=$(nfs_get_remote_path | sed -e 's/%/%%/g')
	local file_fmt="$rpath/file%1.0f"
	local dir_fmt="$rpath/dir%1.0f"

	tst_rhost_run -s -c "touch \$(seq -f \"$file_fmt\" -s ' ' $FILE_COUNT)"
	tst_rhost_run -s -c "mkdir \$(seq -f \"$dir_fmt\" -s ' ' $FILE_COUNT)"
}

do_test()
{
	local count

	# Pass the list of files through `sort -u` in case `ls` doesn't filter
	# out potential duplicate filenames returned by buggy NFS
	count=$(ls | grep '^file' | sort -u | wc -l)

	if [ $count -ne $FILE_COUNT ]; then
		tst_res TFAIL "Listing files failed: $count != $FILE_COUNT"
		return
	fi

	count=$(ls | grep '^dir' | sort -u | wc -l)

	if [ $count -ne $FILE_COUNT ]; then
		tst_res TFAIL "Listing dirs failed: $count != $FILE_COUNT"
		return
	fi

	tst_res TPASS "All files and directories were correctly listed"
}

tst_run