ltp.lists.linux.it archive mirror
 help / color / mirror / Atom feed
From: Petr Vorel <pvorel@suse.cz>
To: ltp@lists.linux.it
Cc: Richard Palethorpe <rpalethorpe@suse.com>,
	Joerg Vehlow <joerg.vehlow@aox-tech.de>,
	linux-fsdevel@vger.kernel.org,
	automated-testing@lists.yoctoproject.org
Subject: [LTP] [PATCH 4/6] tst_device: Use getopts
Date: Sat, 27 Aug 2022 02:28:13 +0200	[thread overview]
Message-ID: <20220827002815.19116-5-pvorel@suse.cz> (raw)
In-Reply-To: <20220827002815.19116-1-pvorel@suse.cz>

size and filesystems are passed by -s and -f flags.
That will help to pass used filesystem.

When it, add also -h.

Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
 testcases/lib/tst_device.c        | 71 +++++++++++++++++++------------
 testcases/lib/tst_test.sh         |  2 +-
 testcases/misc/lvm/cleanup_lvm.sh |  2 +-
 testcases/misc/lvm/prepare_lvm.sh |  8 ++--
 4 files changed, 49 insertions(+), 34 deletions(-)

diff --git a/testcases/lib/tst_device.c b/testcases/lib/tst_device.c
index b76abf52b..b672202e2 100644
--- a/testcases/lib/tst_device.c
+++ b/testcases/lib/tst_device.c
@@ -18,30 +18,18 @@ static struct tst_test test = {
 
 static void print_help(void)
 {
-	fprintf(stderr, "\nUsage: tst_device acquire [size [filename]]\n");
-	fprintf(stderr, "   or: tst_device release /path/to/device\n\n");
+	fprintf(stderr, "\nUsage:\n");
+	fprintf(stderr, "tst_device [-s size [-d /path/to/device]] acquire\n");
+	fprintf(stderr, "tst_device -d /path/to/device release\n");
+	fprintf(stderr, "tst_device -h\n\n");
 }
 
-static int acquire_device(int argc, char *argv[])
+static int acquire_device(const char *device_path, unsigned int size)
 {
-	unsigned int size = 0;
 	const char *device;
 
-	if (argc > 4)
-		return 1;
-
-	if (argc >= 3) {
-		size = atoi(argv[2]);
-
-		if (!size) {
-			fprintf(stderr, "ERROR: Invalid device size '%s'",
-				argv[2]);
-			return 1;
-		}
-	}
-
-	if (argc >= 4)
-		device = tst_acquire_loop_device(size, argv[3]);
+	if (device_path)
+		device = tst_acquire_loop_device(size, device_path);
 	else
 		device = tst_acquire_device__(size, TST_ALL_FILESYSTEMS);
 
@@ -58,10 +46,12 @@ static int acquire_device(int argc, char *argv[])
 	return 0;
 }
 
-static int release_device(int argc, char *argv[])
+static int release_device(const char *device_path)
 {
-	if (argc != 3)
+	if (!device_path) {
+		fprintf(stderr, "ERROR: Missing /path/to/device\n");
 		return 1;
+	}
 
 	/*
 	 * tst_acquire_[loop_]device() was called in a different process.
@@ -69,11 +59,15 @@ static int release_device(int argc, char *argv[])
 	 * and do nothing. Call tst_detach_device() directly to bypass
 	 * the check.
 	 */
-	return tst_detach_device(argv[2]);
+	return tst_detach_device(device_path);
 }
 
 int main(int argc, char *argv[])
 {
+	char *device_path = NULL;
+	unsigned int size = 0;
+	int ret;
+
 	/*
 	 * Force messages to be printed from the new library i.e. tst_test.c
 	 *
@@ -85,17 +79,38 @@ int main(int argc, char *argv[])
 	 */
 	tst_test = &test;
 
-	if (argc < 2)
+	while ((ret = getopt(argc, argv, "d:hs:"))) {
+		if (ret < 0)
+			break;
+
+		switch (ret) {
+		case 'd':
+			device_path = optarg;
+			break;
+		case 'h':
+			print_help();
+			return 0;
+		case 's':
+			size = atoi(optarg);
+			if (!size) {
+				fprintf(stderr, "ERROR: Invalid device size '%s'", optarg);
+				return 1;
+			}
+			break;
+		}
+	}
+
+	if (argc - optind < 1)
 		goto help;
 
-	if (!strcmp(argv[1], "acquire")) {
-		if (acquire_device(argc, argv))
+	if (!strcmp(argv[optind], "acquire")) {
+		if (acquire_device(device_path, size))
 			goto help;
-	} else if (!strcmp(argv[1], "release")) {
-		if (release_device(argc, argv))
+	} else if (!strcmp(argv[optind], "release")) {
+		if (release_device(device_path))
 			goto help;
 	} else {
-		fprintf(stderr, "ERROR: Invalid COMMAND '%s'\n", argv[1]);
+		fprintf(stderr, "ERROR: Invalid COMMAND '%s'\n", argv[optind]);
 		goto help;
 	}
 
diff --git a/testcases/lib/tst_test.sh b/testcases/lib/tst_test.sh
index b42e54ca1..7aea9ee5f 100644
--- a/testcases/lib/tst_test.sh
+++ b/testcases/lib/tst_test.sh
@@ -46,7 +46,7 @@ _tst_do_exit()
 	fi
 
 	if [ "$TST_NEEDS_DEVICE" = 1 -a "$TST_DEVICE_FLAG" = 1 ]; then
-		if ! tst_device release "$TST_DEVICE"; then
+		if ! tst_device -d "$TST_DEVICE" release; then
 			tst_res TWARN "Failed to release device '$TST_DEVICE'"
 		fi
 	fi
diff --git a/testcases/misc/lvm/cleanup_lvm.sh b/testcases/misc/lvm/cleanup_lvm.sh
index f05289f00..c876b4bbf 100755
--- a/testcases/misc/lvm/cleanup_lvm.sh
+++ b/testcases/misc/lvm/cleanup_lvm.sh
@@ -24,7 +24,7 @@ cleanup_lvm()
 	ROD vgremove -y ltp_test_vg2
 
 	for devname in $DEVLIST; do
-		ROD tst_device release $devname
+		ROD tst_device -d $devname release
 	done
 
 	rm -rf $LVM_DIR/ltp
diff --git a/testcases/misc/lvm/prepare_lvm.sh b/testcases/misc/lvm/prepare_lvm.sh
index d3ae4b23f..dbf1e3157 100755
--- a/testcases/misc/lvm/prepare_lvm.sh
+++ b/testcases/misc/lvm/prepare_lvm.sh
@@ -43,17 +43,17 @@ prepare_mounts()
 	FSNAME1=$1
 	FSNAME2=$2
 	shift 2
-	LVM_DEV1=`tst_device acquire 1040 "$LVM_IMGDIR/lvm_pv1.img"`
+	LVM_DEV1=`tst_device -s 1040 -d "$LVM_IMGDIR/lvm_pv1.img" acquire`
 	error_check
-	LVM_DEV2=`tst_device acquire 1040 "$LVM_IMGDIR/lvm_pv2.img"`
+	LVM_DEV2=`tst_device -s 1040 -d "$LVM_IMGDIR/lvm_pv2.img" acquire`
 	error_check
 
 	# DEVSIZE=($# * 1GB / 2) + 16MB. The extra 16MB is for LVM physical
 	# volume headers
 	DEVSIZE=$(( $# * 512 + 16 ))
-	LVM_DEV3=`tst_device acquire $DEVSIZE "$LVM_IMGDIR/lvm_pv3.img"`
+	LVM_DEV3=`tst_device -s $DEVSIZE -d "$LVM_IMGDIR/lvm_pv3.img" acquire`
 	error_check
-	LVM_DEV4=`tst_device acquire $DEVSIZE "$LVM_IMGDIR/lvm_pv4.img"`
+	LVM_DEV4=`tst_device -s $DEVSIZE -d "$LVM_IMGDIR/lvm_pv4.img" acquire`
 	error_check
 	ROD pvcreate $LVM_DEV1 $LVM_DEV2 $LVM_DEV3 $LVM_DEV4
 	ROD vgcreate ltp_test_vg1 $LVM_DEV1 $LVM_DEV2
-- 
2.37.2


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  parent reply	other threads:[~2022-08-27  0:29 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-27  0:28 [LTP] [PATCH 0/6] Track minimal size per filesystem Petr Vorel
2022-08-27  0:28 ` [LTP] [PATCH 1/6] tst_fs_type: Add nsfs, vfat, squashfs to tst_fs_type_name() Petr Vorel
2022-08-29 10:44   ` Cyril Hrubis
2022-08-29 15:46   ` Bird, Tim
2022-08-29 16:14     ` Petr Vorel
2022-08-29 16:35       ` Bird, Tim
2022-08-29 16:49         ` Petr Vorel
2022-08-30  5:59   ` Li Wang
2022-08-27  0:28 ` [LTP] [PATCH 2/6] API: tst_device: Track minimal size per filesystem Petr Vorel
2022-08-29 10:58   ` Cyril Hrubis
2022-08-29 11:29     ` Petr Vorel
2022-08-29 12:24       ` [LTP] [Automated-testing] " Cyril Hrubis
2022-08-30  6:11     ` [LTP] " Li Wang
2022-08-27  0:28 ` [LTP] [PATCH 3/6] tst_test: Use 16 MB also for tmpfs Petr Vorel
2022-08-29 11:00   ` Cyril Hrubis
2022-08-30  6:12   ` Li Wang
2022-08-27  0:28 ` Petr Vorel [this message]
2022-08-29 11:03   ` [LTP] [Automated-testing] [PATCH 4/6] tst_device: Use getopts Cyril Hrubis
2022-08-29 11:42     ` Petr Vorel
2022-08-30  6:14   ` [LTP] " Li Wang
2022-08-27  0:28 ` [LTP] [PATCH 5/6] tst_device: Add support -f filesystem Petr Vorel
2022-08-29 11:04   ` Cyril Hrubis
2022-08-30  6:14   ` Li Wang
2022-08-27  0:28 ` [LTP] [PATCH 6/6] tst_test.sh: Pass used filesystem to tst_device Petr Vorel
2022-08-29 11:05   ` Cyril Hrubis
2022-08-30  6:16   ` Li Wang
2022-08-29 10:43 ` [LTP] [Automated-testing] [PATCH 0/6] Track minimal size per filesystem Cyril Hrubis
2022-08-29 11:39   ` Petr Vorel
2022-08-30  5:52     ` Li Wang
2022-08-30  8:18       ` Petr Vorel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220827002815.19116-5-pvorel@suse.cz \
    --to=pvorel@suse.cz \
    --cc=automated-testing@lists.yoctoproject.org \
    --cc=joerg.vehlow@aox-tech.de \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=ltp@lists.linux.it \
    --cc=rpalethorpe@suse.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).