All of lore.kernel.org
 help / color / mirror / Atom feed
From: Denis Efremov <efremov@linux.com>
To: linux-kselftest@vger.kernel.org
Cc: Denis Efremov <efremov@linux.com>,
	linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
	Jens Axboe <axboe@kernel.dk>, Jiri Kosina <jkosina@suse.cz>,
	Willy Tarreau <w@1wt.eu>
Subject: [RFC PATCH 5/5] selftests: floppy: add basic rdwr tests
Date: Wed, 18 Aug 2021 18:46:46 +0300	[thread overview]
Message-ID: <20210818154646.925351-6-efremov@linux.com> (raw)
In-Reply-To: <20210818154646.925351-1-efremov@linux.com>

Add basic tests for a floppy with writable disk. "rdwr" test
works under following assumptions:
 - writable disk in "/dev/fd0"

To simulate the conditions and automate the testing process there is
"run_rdwr.sh".

Signed-off-by: Denis Efremov <efremov@linux.com>
---
 tools/testing/selftests/floppy/.gitignore  |  1 +
 tools/testing/selftests/floppy/Makefile    |  4 +-
 tools/testing/selftests/floppy/lib.sh      |  4 ++
 tools/testing/selftests/floppy/rdwr.c      | 67 ++++++++++++++++++++++
 tools/testing/selftests/floppy/run_rdwr.sh | 22 +++++++
 5 files changed, 96 insertions(+), 2 deletions(-)
 create mode 100644 tools/testing/selftests/floppy/rdwr.c
 create mode 100755 tools/testing/selftests/floppy/run_rdwr.sh

diff --git a/tools/testing/selftests/floppy/.gitignore b/tools/testing/selftests/floppy/.gitignore
index 7642dc0ef281..f53e70197edd 100644
--- a/tools/testing/selftests/floppy/.gitignore
+++ b/tools/testing/selftests/floppy/.gitignore
@@ -5,3 +5,4 @@ testdir/
 
 empty
 rdonly
+rdwr
diff --git a/tools/testing/selftests/floppy/Makefile b/tools/testing/selftests/floppy/Makefile
index ed8fdeb79aea..c5d010dd4445 100644
--- a/tools/testing/selftests/floppy/Makefile
+++ b/tools/testing/selftests/floppy/Makefile
@@ -1,8 +1,8 @@
 # SPDX-License-Identifier: GPL-2.0
 CFLAGS := -static -I../../../../usr/include
 
-TEST_PROGS := run_empty.sh run_rdonly.sh
-TEST_GEN_FILES := init empty rdonly
+TEST_PROGS := run_empty.sh run_rdonly.sh run_rdwr.sh
+TEST_GEN_FILES := init empty rdonly rdwr
 TEST_FILES := lib.sh
 
 include ../lib.mk
diff --git a/tools/testing/selftests/floppy/lib.sh b/tools/testing/selftests/floppy/lib.sh
index 9988be187bc9..0eab702b355a 100644
--- a/tools/testing/selftests/floppy/lib.sh
+++ b/tools/testing/selftests/floppy/lib.sh
@@ -61,3 +61,7 @@ run_qemu_rdonly_fat() {
   $run -drive file=fat:floppy:"$1",index=0,if=floppy,readonly
 }
 
+run_qemu_rdwr_img() {
+  detect_debug "$2"
+  $run -drive file="$1",index=0,if=floppy,format=raw
+}
diff --git a/tools/testing/selftests/floppy/rdwr.c b/tools/testing/selftests/floppy/rdwr.c
new file mode 100644
index 000000000000..44ad18701530
--- /dev/null
+++ b/tools/testing/selftests/floppy/rdwr.c
@@ -0,0 +1,67 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/mount.h>
+#include <errno.h>
+#include <linux/fd.h>
+#include "../kselftest_harness.h"
+
+FIXTURE(floppy) {
+	const char *dev;
+};
+
+FIXTURE_SETUP(floppy)
+{
+	int fd;
+	struct floppy_drive_params params;
+
+	self->dev = "/dev/fd0";
+	if (access(self->dev, F_OK))
+		ksft_exit_skip("No floppy device found\n");
+	if (access(self->dev, R_OK))
+		ksft_exit_skip("Floppy is not read accessible\n");
+	if (access(self->dev, W_OK))
+		ksft_exit_skip("Floppy is not write accessible\n");
+
+	fd = open("/dev/fd0", O_ACCMODE|O_NDELAY);
+	EXPECT_EQ(0, ioctl(fd, FDGETDRVPRM, &params));
+	params.flags |= FD_DEBUG;
+	EXPECT_EQ(0, ioctl(fd, FDSETDRVPRM, &params));
+	close(fd);
+}
+
+FIXTURE_TEARDOWN(floppy)
+{
+}
+
+TEST_F(floppy, write)
+{
+#define TEST_DATA "TEST_WRITE"
+	int fd;
+	char test[] = TEST_DATA;
+
+	fd = open(self->dev, O_RDWR);
+	ASSERT_GT(fd, 0);
+
+	ASSERT_EQ(sizeof(test), write(fd, test, sizeof(test)));
+	ASSERT_EQ(sizeof(test), read(fd, test, sizeof(test)));
+	ASSERT_NE(0, strncmp(TEST_DATA, test, sizeof(TEST_DATA)));
+
+	ASSERT_EQ(close(fd), 0);
+#undef TEST_DATA
+}
+
+TEST_F(floppy, ioctl_disk_writable)
+{
+	int fd;
+	struct floppy_drive_struct drive;
+
+	fd = open(self->dev, O_RDONLY|O_NDELAY);
+	ASSERT_GT(fd, 0);
+	ASSERT_EQ(0, ioctl(fd, FDGETDRVSTAT, &drive));
+	ASSERT_TRUE(drive.flags & FD_DISK_WRITABLE);
+	ASSERT_EQ(close(fd), 0);
+}
+
+TEST_HARNESS_MAIN
diff --git a/tools/testing/selftests/floppy/run_rdwr.sh b/tools/testing/selftests/floppy/run_rdwr.sh
new file mode 100755
index 000000000000..0ebe8bd6bc69
--- /dev/null
+++ b/tools/testing/selftests/floppy/run_rdwr.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0
+
+set -e
+
+source "$(dirname $0)"/lib.sh
+
+while getopts d flag; do
+  case "${flag}" in
+    d) debug=1;;
+  esac
+done
+
+if [ -z $debug ]; then
+  trap "rm -rf testdir" EXIT
+fi
+mkdir -p testdir
+head -c 1474560 /dev/zero > testdir/floppy.raw
+
+gen_cpio_list rdwr
+gen_initrd rdwr
+run_qemu_rdwr_img testdir/floppy.raw $debug
-- 
2.31.1


      parent reply	other threads:[~2021-08-18 15:47 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-18 15:46 [RFC PATCH 0/5] selftests: floppy: basic tests Denis Efremov
2021-08-18 15:46 ` [RFC PATCH 1/5] checkpatch: improve handling of revert commits Denis Efremov
2021-08-18 16:00   ` Joe Perches
2021-08-18 16:21     ` Denis Efremov
2021-08-18 20:21       ` Joe Perches
2021-08-18 20:35         ` Andrew Morton
2021-08-18 21:22       ` Joe Perches
2021-08-19 19:52         ` Denis Efremov
2021-08-19 21:44           ` Joe Perches
2021-08-19 22:17           ` Joe Perches
2021-08-21  6:47             ` Denis Efremov
2021-08-21  7:12               ` Joe Perches
2021-08-21  7:35                 ` Denis Efremov
2021-08-18 15:46 ` [RFC PATCH 2/5] gen_initramfs.sh: use absolute path for gen_init_cpio Denis Efremov
2021-08-18 21:47   ` kernel test robot
2021-08-19  0:24   ` Masahiro Yamada
2021-08-19 20:51     ` Denis Efremov
2021-08-20  2:19       ` Masahiro Yamada
2021-08-18 15:46 ` [RFC PATCH 3/5] selftests: floppy: add basic tests for opening an empty device Denis Efremov
2021-08-18 15:46 ` [RFC PATCH 4/5] selftests: floppy: add basic tests for a readonly disk Denis Efremov
2021-08-18 15:46 ` Denis Efremov [this message]

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=20210818154646.925351-6-efremov@linux.com \
    --to=efremov@linux.com \
    --cc=axboe@kernel.dk \
    --cc=jkosina@suse.cz \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=w@1wt.eu \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.