1f08c3bdfSopenharmony_ci#!/bin/sh
2f08c3bdfSopenharmony_ci# SPDX-License-Identifier: GPL-2.0-or-later
3f08c3bdfSopenharmony_ci# Copyright (c) 2021 SUSE LLC <mdoucha@suse.cz>
4f08c3bdfSopenharmony_ci#
5f08c3bdfSopenharmony_ci# DESCRIPTION: Create a large number of files and directories on NFS volume.
6f08c3bdfSopenharmony_ci# Then check whether they can be listed via NFS.
7f08c3bdfSopenharmony_ci
8f08c3bdfSopenharmony_ciFILE_COUNT=5000
9f08c3bdfSopenharmony_ci
10f08c3bdfSopenharmony_ciTST_OPTS="n:"
11f08c3bdfSopenharmony_ciTST_PARSE_ARGS="do_parse_args"
12f08c3bdfSopenharmony_ciTST_TESTFUNC="do_test"
13f08c3bdfSopenharmony_ciTST_SETUP="do_setup"
14f08c3bdfSopenharmony_ciTST_USAGE="show_usage"
15f08c3bdfSopenharmony_ci
16f08c3bdfSopenharmony_cido_parse_args()
17f08c3bdfSopenharmony_ci{
18f08c3bdfSopenharmony_ci	case "$1" in
19f08c3bdfSopenharmony_ci	n) FILE_COUNT="$2";;
20f08c3bdfSopenharmony_ci	esac
21f08c3bdfSopenharmony_ci}
22f08c3bdfSopenharmony_ci
23f08c3bdfSopenharmony_cishow_usage()
24f08c3bdfSopenharmony_ci{
25f08c3bdfSopenharmony_ci	nfs_usage
26f08c3bdfSopenharmony_ci	echo "-n x    Create x files and x directories, default is 5000"
27f08c3bdfSopenharmony_ci}
28f08c3bdfSopenharmony_ci
29f08c3bdfSopenharmony_cido_setup()
30f08c3bdfSopenharmony_ci{
31f08c3bdfSopenharmony_ci	nfs_setup
32f08c3bdfSopenharmony_ci
33f08c3bdfSopenharmony_ci	local rpath=$(nfs_get_remote_path | sed -e 's/%/%%/g')
34f08c3bdfSopenharmony_ci	local file_fmt="$rpath/file%1.0f"
35f08c3bdfSopenharmony_ci	local dir_fmt="$rpath/dir%1.0f"
36f08c3bdfSopenharmony_ci
37f08c3bdfSopenharmony_ci	tst_rhost_run -s -c "touch \$(seq -f \"$file_fmt\" -s ' ' $FILE_COUNT)"
38f08c3bdfSopenharmony_ci	tst_rhost_run -s -c "mkdir \$(seq -f \"$dir_fmt\" -s ' ' $FILE_COUNT)"
39f08c3bdfSopenharmony_ci}
40f08c3bdfSopenharmony_ci
41f08c3bdfSopenharmony_cido_test()
42f08c3bdfSopenharmony_ci{
43f08c3bdfSopenharmony_ci	local count
44f08c3bdfSopenharmony_ci
45f08c3bdfSopenharmony_ci	# Pass the list of files through `sort -u` in case `ls` doesn't filter
46f08c3bdfSopenharmony_ci	# out potential duplicate filenames returned by buggy NFS
47f08c3bdfSopenharmony_ci	count=$(ls | grep '^file' | sort -u | wc -l)
48f08c3bdfSopenharmony_ci
49f08c3bdfSopenharmony_ci	if [ $count -ne $FILE_COUNT ]; then
50f08c3bdfSopenharmony_ci		tst_res TFAIL "Listing files failed: $count != $FILE_COUNT"
51f08c3bdfSopenharmony_ci		return
52f08c3bdfSopenharmony_ci	fi
53f08c3bdfSopenharmony_ci
54f08c3bdfSopenharmony_ci	count=$(ls | grep '^dir' | sort -u | wc -l)
55f08c3bdfSopenharmony_ci
56f08c3bdfSopenharmony_ci	if [ $count -ne $FILE_COUNT ]; then
57f08c3bdfSopenharmony_ci		tst_res TFAIL "Listing dirs failed: $count != $FILE_COUNT"
58f08c3bdfSopenharmony_ci		return
59f08c3bdfSopenharmony_ci	fi
60f08c3bdfSopenharmony_ci
61f08c3bdfSopenharmony_ci	tst_res TPASS "All files and directories were correctly listed"
62f08c3bdfSopenharmony_ci}
63f08c3bdfSopenharmony_ci
64f08c3bdfSopenharmony_ci. nfs_lib.sh
65f08c3bdfSopenharmony_citst_run
66