From: Ziyang Zhang <ZiyangZhang@linux.alibaba.com>
To: shinichiro.kawasaki@wdc.com, ming.lei@redhat.com
Cc: linux-block@vger.kernel.org,
Ziyang Zhang <ZiyangZhang@linux.alibaba.com>
Subject: [PATCH blktests 2/2] tests: Add ublk tests
Date: Thu, 27 Apr 2023 18:32:42 +0800 [thread overview]
Message-ID: <20230427103242.31361-3-ZiyangZhang@linux.alibaba.com> (raw)
In-Reply-To: <20230427103242.31361-1-ZiyangZhang@linux.alibaba.com>
It is very important to test ublk crash handling since the userspace
part is not reliable. Especially we should test removing device, killing
ublk daemons and user recovery feature.
Add five new test for ublk to cover these cases.
Signed-off-by: Ziyang Zhang <ZiyangZhang@linux.alibaba.com>
---
tests/ublk/001 | 39 +++++++++++++++++++++++++++
tests/ublk/001.out | 2 ++
tests/ublk/002 | 53 +++++++++++++++++++++++++++++++++++++
tests/ublk/002.out | 2 ++
tests/ublk/003 | 43 ++++++++++++++++++++++++++++++
tests/ublk/003.out | 2 ++
tests/ublk/004 | 63 +++++++++++++++++++++++++++++++++++++++++++
tests/ublk/004.out | 2 ++
tests/ublk/005 | 66 ++++++++++++++++++++++++++++++++++++++++++++++
tests/ublk/005.out | 2 ++
10 files changed, 274 insertions(+)
create mode 100644 tests/ublk/001
create mode 100644 tests/ublk/001.out
create mode 100644 tests/ublk/002
create mode 100644 tests/ublk/002.out
create mode 100644 tests/ublk/003
create mode 100644 tests/ublk/003.out
create mode 100644 tests/ublk/004
create mode 100644 tests/ublk/004.out
create mode 100644 tests/ublk/005
create mode 100644 tests/ublk/005.out
diff --git a/tests/ublk/001 b/tests/ublk/001
new file mode 100644
index 0000000..fe158ba
--- /dev/null
+++ b/tests/ublk/001
@@ -0,0 +1,39 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-3.0+
+# Copyright (C) 2023 Ziyang Zhang
+#
+# Test ublk by deleting ublk device while running fio
+
+. tests/block/rc
+. common/ublk
+
+DESCRIPTION="test ublk deletion"
+QUICK=1
+
+requires() {
+ _have_ublk
+}
+
+test() {
+ local ublk_prog="src/miniublk"
+
+ echo "Running ${TEST_NAME}"
+
+ if ! _init_ublk; then
+ return 1
+ fi
+
+ ${ublk_prog} add -t null -n 0 > "$FULL"
+ udevadm settle
+ if ! ${ublk_prog} list -n 0 >> "$FULL"; then
+ echo "fail to list dev"
+ fi
+
+ _run_fio_rand_io --filename=/dev/ublkb0 --time_based --runtime=30 > /dev/null 2>&1 &
+
+ ${ublk_prog} del -n 0 >> "$FULL"
+
+ _exit_ublk
+
+ echo "Test complete"
+}
diff --git a/tests/ublk/001.out b/tests/ublk/001.out
new file mode 100644
index 0000000..0d070b3
--- /dev/null
+++ b/tests/ublk/001.out
@@ -0,0 +1,2 @@
+Running ublk/001
+Test complete
diff --git a/tests/ublk/002 b/tests/ublk/002
new file mode 100644
index 0000000..25cad13
--- /dev/null
+++ b/tests/ublk/002
@@ -0,0 +1,53 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-3.0+
+# Copyright (C) 2023 Ziyang Zhang
+#
+# Test ublk by killing ublk daemon while running fio
+# Delete the device after it is dead
+
+. tests/block/rc
+. common/ublk
+
+DESCRIPTION="test ublk crash(1)"
+QUICK=1
+
+requires() {
+ _have_ublk
+}
+
+test() {
+ local ublk_prog="src/miniublk"
+
+ echo "Running ${TEST_NAME}"
+
+ if ! _init_ublk; then
+ return 1
+ fi
+
+ ${ublk_prog} add -t null -n 0 > "$FULL"
+ udevadm settle
+ if ! ${ublk_prog} list -n 0 >> "$FULL"; then
+ echo "fail to list dev"
+ fi
+
+ _run_fio_rand_io --filename=/dev/ublkb0 --time_based --runtime=30 > /dev/null 2>&1 &
+
+ pid=`${ublk_prog} list -n 0 | grep "pid" | awk '{print $7}'`
+ kill -9 $pid
+
+ sleep 2
+ secs=0
+ while [ $secs -lt 10 ]; do
+ state=`${ublk_prog} list -n 0 | grep "state" | awk '{print $11}'`
+ [ "$state" == "DEAD" ] && break
+ sleep 1
+ let secs++
+ done
+ [ "$state" != "DEAD" ] && echo "device isn't dead after killing queue daemon"
+
+ ${ublk_prog} del -n 0 >> "$FULL"
+
+ _exit_ublk
+
+ echo "Test complete"
+}
diff --git a/tests/ublk/002.out b/tests/ublk/002.out
new file mode 100644
index 0000000..93039b7
--- /dev/null
+++ b/tests/ublk/002.out
@@ -0,0 +1,2 @@
+Running ublk/002
+Test complete
diff --git a/tests/ublk/003 b/tests/ublk/003
new file mode 100644
index 0000000..34bce74
--- /dev/null
+++ b/tests/ublk/003
@@ -0,0 +1,43 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-3.0+
+# Copyright (C) 2023 Ziyang Zhang
+#
+# Test ublk by killing ublk daemon while running fio
+# Delete the device immediately
+
+. tests/block/rc
+. common/ublk
+
+DESCRIPTION="test ublk crash(2)"
+QUICK=1
+
+requires() {
+ _have_ublk
+}
+
+test() {
+ local ublk_prog="src/miniublk"
+
+ echo "Running ${TEST_NAME}"
+
+ if ! _init_ublk; then
+ return 1
+ fi
+
+ ${ublk_prog} add -t null -n 0 > "$FULL"
+ udevadm settle
+ if ! ${ublk_prog} list -n 0 >> "$FULL"; then
+ echo "fail to list dev"
+ fi
+
+ _run_fio_rand_io --filename=/dev/ublkb0 --time_based --runtime=30 > /dev/null 2>&1 &
+
+ pid=`${ublk_prog} list -n 0 | grep "pid" | awk '{print $7}'`
+ kill -9 $pid
+
+ ${ublk_prog} del -n 0 >> "$FULL"
+
+ _exit_ublk
+
+ echo "Test complete"
+}
diff --git a/tests/ublk/003.out b/tests/ublk/003.out
new file mode 100644
index 0000000..90a3bfa
--- /dev/null
+++ b/tests/ublk/003.out
@@ -0,0 +1,2 @@
+Running ublk/003
+Test complete
diff --git a/tests/ublk/004 b/tests/ublk/004
new file mode 100644
index 0000000..c5d0694
--- /dev/null
+++ b/tests/ublk/004
@@ -0,0 +1,63 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-3.0+
+# Copyright (C) 2023 Ziyang Zhang
+#
+# Test ublk user recovery by run fio with dev recovery:
+# (1)kill all ubq_deamon, (2)recover with new ubq_daemon,
+# (3)delete dev
+
+. tests/block/rc
+. common/ublk
+
+DESCRIPTION="test ublk recovery(1)"
+QUICK=1
+
+requires() {
+ _have_ublk
+}
+
+test() {
+ local ublk_prog="src/miniublk"
+
+ echo "Running ${TEST_NAME}"
+
+ if ! _init_ublk; then
+ return 1
+ fi
+
+ ${ublk_prog} add -t null -n 0 -r 1 > "$FULL"
+ udevadm settle
+ if ! ${ublk_prog} list -n 0 >> "$FULL"; then
+ echo "fail to list dev"
+ fi
+
+ _run_fio_rand_io --filename=/dev/ublkb0 --time_based --runtime=30 > /dev/null 2>&1 &
+ pid=`${ublk_prog} list -n 0 | grep "pid" | awk '{print $7}'`
+ kill -9 $pid
+
+ sleep 2
+ secs=0
+ while [ $secs -lt 10 ]; do
+ state=`${ublk_prog} list -n 0 | grep "state" | awk '{print $11}'`
+ [ "$state" == "QUIESCED" ] && break
+ sleep 1
+ let secs++
+ done
+ [ "$state" != "QUIESCED" ] && echo "device isn't quiesced after killing queue daemon"
+
+ secs=0
+ while [ $secs -lt 10 ]; do
+ ${ublk_prog} recover -t null -n 0 >> "$FULL"
+ [ $? -eq 0 ] && break
+ sleep 1
+ let secs++
+ done
+ state=`${ublk_prog} list -n 0 | grep "state" | awk '{print $11}'`
+ [ "$state" == "QUIESCED" ] && echo "failed to recover dev"
+
+ ${ublk_prog} del -n 0 >> "$FULL"
+
+ _exit_ublk
+
+ echo "Test complete"
+}
diff --git a/tests/ublk/004.out b/tests/ublk/004.out
new file mode 100644
index 0000000..a92cd50
--- /dev/null
+++ b/tests/ublk/004.out
@@ -0,0 +1,2 @@
+Running ublk/004
+Test complete
diff --git a/tests/ublk/005 b/tests/ublk/005
new file mode 100644
index 0000000..23c0555
--- /dev/null
+++ b/tests/ublk/005
@@ -0,0 +1,66 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-3.0+
+# Copyright (C) 2023 Ziyang Zhang
+#
+# Test ublk user recovery by run fio with dev recovery:
+# (1)kill all ubq_deamon, (2)recover with new ubq_daemon,
+# (3)kill all ubq_deamon, (4)delete dev
+
+. tests/block/rc
+. common/ublk
+
+DESCRIPTION="test ublk recovery(2)"
+QUICK=1
+
+requires() {
+ _have_ublk
+}
+
+test() {
+ local ublk_prog="src/miniublk"
+
+ echo "Running ${TEST_NAME}"
+
+ if ! _init_ublk; then
+ return 1
+ fi
+
+ ${ublk_prog} add -t null -n 0 -r 1 > "$FULL"
+ udevadm settle
+ if ! ${ublk_prog} list -n 0 >> "$FULL"; then
+ echo "fail to list dev"
+ fi
+
+ _run_fio_rand_io --filename=/dev/ublkb0 --time_based --runtime=30 > /dev/null 2>&1 &
+ pid=`${ublk_prog} list -n 0 | grep "pid" | awk '{print $7}'`
+ kill -9 $pid
+
+ sleep 2
+ secs=0
+ while [ $secs -lt 10 ]; do
+ state=`${ublk_prog} list -n 0 | grep "state" | awk '{print $11}'`
+ [ "$state" == "QUIESCED" ] && break
+ sleep 1
+ let secs++
+ done
+ [ "$state" != "QUIESCED" ] && echo "device isn't quiesced after killing queue daemon"
+
+ secs=0
+ while [ $secs -lt 10 ]; do
+ ${ublk_prog} recover -t null -n 0 >> "$FULL"
+ [ $? -eq 0 ] && break
+ sleep 1
+ let secs++
+ done
+ state=`${ublk_prog} list -n 0 | grep "state" | awk '{print $11}'`
+ [ "$state" == "QUIESCED" ] && echo "failed to recover dev"
+
+ pid=`${ublk_prog} list -n 0 | grep "pid" | awk '{print $7}'`
+ kill -9 $pid
+
+ ${ublk_prog} del -n 0 >> "$FULL"
+
+ _exit_ublk
+
+ echo "Test complete"
+}
diff --git a/tests/ublk/005.out b/tests/ublk/005.out
new file mode 100644
index 0000000..20d7b38
--- /dev/null
+++ b/tests/ublk/005.out
@@ -0,0 +1,2 @@
+Running ublk/005
+Test complete
--
2.31.1
next prev parent reply other threads:[~2023-04-27 10:33 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-27 10:32 [PATCH blktests 0/2] blktests: Add ublk testcases Ziyang Zhang
2023-04-27 10:32 ` [PATCH blktests 1/2] src/miniublk: add user recovery Ziyang Zhang
2023-04-27 10:46 ` Chaitanya Kulkarni
2023-04-28 2:16 ` Ming Lei
2023-04-27 10:32 ` Ziyang Zhang [this message]
2023-04-28 3:10 ` [PATCH blktests 2/2] tests: Add ublk tests Ming Lei
2023-05-01 9:15 ` Shinichiro Kawasaki
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=20230427103242.31361-3-ZiyangZhang@linux.alibaba.com \
--to=ziyangzhang@linux.alibaba.com \
--cc=linux-block@vger.kernel.org \
--cc=ming.lei@redhat.com \
--cc=shinichiro.kawasaki@wdc.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