cd8c44
From b7671c82010ffc04dfaecff2dd19ef8b2283e2b6 Mon Sep 17 00:00:00 2001
cd8c44
From: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
cd8c44
Date: Tue, 19 Jul 2022 14:48:21 +0200
2b63fb
Subject: [PATCH 47/83] tests: add test for names
cd8c44
cd8c44
Current behavior is not documented and tested. This test is a base for
cd8c44
future improvements. It is enough to test it only with native metadata,
cd8c44
because it is generic code. Generated properties are passed to metadata
cd8c44
handler.
cd8c44
cd8c44
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
cd8c44
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
cd8c44
---
cd8c44
 tests/00createnames | 93 +++++++++++++++++++++++++++++++++++++++++++++
cd8c44
 1 file changed, 93 insertions(+)
cd8c44
 create mode 100644 tests/00createnames
cd8c44
cd8c44
diff --git a/tests/00createnames b/tests/00createnames
cd8c44
new file mode 100644
cd8c44
index 00000000..64b81b92
cd8c44
--- /dev/null
cd8c44
+++ b/tests/00createnames
cd8c44
@@ -0,0 +1,93 @@
cd8c44
+set -x -e
cd8c44
+
cd8c44
+# Test how <devname> and --name= are handled for create mode.
cd8c44
+# We need to check three properties, generated from those parameters:
cd8c44
+# - devnode name
cd8c44
+# - link in /dev/md/ (MD_DEVNAME property from --detail --export)
cd8c44
+# - name in metadata (MD_NAME property from --examine --export)
cd8c44
+
cd8c44
+function _verify() {
cd8c44
+  local DEVNODE_NAME="$1"
cd8c44
+  local WANTED_LINK="$2"
cd8c44
+  local WANTED_NAME="$3"
cd8c44
+
cd8c44
+  local RES="$(mdadm -D --export $DEVNODE_NAME | grep MD_DEVNAME)"
cd8c44
+  if [[ "$?" != "0" ]]; then
cd8c44
+    echo "Cannot get details for $DEVNODE_NAME - unexpected devnode."
cd8c44
+    exit 1
cd8c44
+  fi
cd8c44
+
cd8c44
+  if [[ "$WANTED_LINK" != "empty" ]]; then
cd8c44
+    local EXPECTED="MD_DEVNAME=$WANTED_LINK"
cd8c44
+      if [[ "$RES" != "$EXPECTED" ]]; then
cd8c44
+        echo "$RES doesn't match $EXPECTED."
cd8c44
+        exit 1
cd8c44
+      fi
cd8c44
+  fi
cd8c44
+
cd8c44
+
cd8c44
+  local RES="$(mdadm -E --export $dev0 | grep MD_NAME)"
cd8c44
+  if [[ "$?" != "0" ]]; then
cd8c44
+    echo "Cannot get metadata from $dev0."
cd8c44
+    exit 1
cd8c44
+  fi
cd8c44
+
cd8c44
+  local EXPECTED="MD_NAME=$(hostname):$WANTED_NAME"
cd8c44
+  if [[ "$RES" != "$EXPECTED" ]]; then
cd8c44
+    echo "$RES doesn't match $EXPECTED."
cd8c44
+    exit 1
cd8c44
+  fi
cd8c44
+}
cd8c44
+
cd8c44
+function _create() {
cd8c44
+  local DEVNAME=$1
cd8c44
+  local NAME=$2
cd8c44
+
cd8c44
+  if [[ -z "$NAME" ]]; then
cd8c44
+    mdadm -CR "$DEVNAME" -l0 -n 1 $dev0 --force
cd8c44
+  else
cd8c44
+    mdadm -CR "$DEVNAME" --name="$NAME" -l0 -n 1 $dev0 --force
cd8c44
+  fi
cd8c44
+
cd8c44
+  if [[ "$?" != "0" ]]; then
cd8c44
+    echo "Cannot create device."
cd8c44
+    exit 1
cd8c44
+  fi
cd8c44
+}
cd8c44
+
cd8c44
+# The most trivial case.
cd8c44
+_create "/dev/md/name"
cd8c44
+_verify "/dev/md127" "name" "name"
cd8c44
+mdadm -S "/dev/md127"
cd8c44
+
cd8c44
+_create "name"
cd8c44
+_verify "/dev/md127" "name" "name"
cd8c44
+mdadm -S "/dev/md127"
cd8c44
+
cd8c44
+# Use 'mdX' as name.
cd8c44
+_create "/dev/md/md0"
cd8c44
+_verify "/dev/md127" "md0" "md0"
cd8c44
+mdadm -S "/dev/md127"
cd8c44
+
cd8c44
+_create "md0"
cd8c44
+_verify "/dev/md127" "md0" "md0"
cd8c44
+mdadm -S "/dev/md127"
cd8c44
+
cd8c44
+# <devnode> is used to create MD_DEVNAME but, name is used to create MD_NAME.
cd8c44
+_create "/dev/md/devnode" "name"
cd8c44
+_verify "/dev/md127" "devnode" "name"
cd8c44
+mdadm -S "/dev/md127"
cd8c44
+
cd8c44
+_create "devnode" "name"
cd8c44
+_verify "/dev/md127" "devnode" "name"
cd8c44
+mdadm -S "/dev/md127"
cd8c44
+
cd8c44
+# Devnode points to /dev/ directory. MD_DEVNAME doesn't exist.
cd8c44
+_create "/dev/md0"
cd8c44
+_verify "/dev/md0" "empty" "0"
cd8c44
+mdadm -S "/dev/md0"
cd8c44
+
cd8c44
+# Devnode points to /dev/ directory and name is set.
cd8c44
+_create "/dev/md0" "name"
cd8c44
+_verify "/dev/md0" "empty" "name"
cd8c44
+mdadm -S "/dev/md0"
cd8c44
-- 
2b63fb
2.38.1
cd8c44