git: b37d1deb045d - main - ses: cleanup ses tests

From: Alan Somers <asomers_at_FreeBSD.org>
Date: Mon, 27 Mar 2023 20:11:38 UTC
The branch main has been updated by asomers:

URL: https://cgit.FreeBSD.org/src/commit/?id=b37d1deb045d7bc7877fb1d9afdb39d43130dcc4

commit b37d1deb045d7bc7877fb1d9afdb39d43130dcc4
Author:     Alan Somers <asomers@FreeBSD.org>
AuthorDate: 2022-01-19 21:33:43 +0000
Commit:     Alan Somers <asomers@FreeBSD.org>
CommitDate: 2023-03-27 20:06:51 +0000

    ses: cleanup ses tests
    
    Address mav's feedback RE eea7c61590ae
    
    See also: https://reviews.freebsd.org/D31809
    
    Reported by:    mav
    MFC after:      2 weeks
    MFC with:       eea7c61590ae8968b3f1f609cf0bc8633222a94f
    Sponsored by:   Axcient
    Reviewed by:    mav
    Differential Revision: https://reviews.freebsd.org/D33954
---
 tests/sys/ses/destructive.c    | 33 ++++++++++++++++--------
 tests/sys/ses/nondestructive.c | 58 +++++++++++++++++++++++++++---------------
 2 files changed, 60 insertions(+), 31 deletions(-)

diff --git a/tests/sys/ses/destructive.c b/tests/sys/ses/destructive.c
index 9b83009280cf..935cc7cff2cb 100644
--- a/tests/sys/ses/destructive.c
+++ b/tests/sys/ses/destructive.c
@@ -66,7 +66,9 @@ for_one_ses_dev(ses_cb cb)
 	globfree(&g);
 }
 
-static bool do_setelmstat(const char *devname __unused, int fd) {
+static bool
+do_setelmstat(const char *devname __unused, int fd)
+{
 	encioc_element_t *map;
 	unsigned elm_idx;
 	unsigned nobj;
@@ -96,6 +98,8 @@ static bool do_setelmstat(const char *devname __unused, int fd) {
 		{
 			r = ioctl(fd, ENCIOC_GETELMSTAT, (caddr_t)&elmstat);
 			ATF_REQUIRE_EQ(r, 0);
+			ses_status_to_ctrl(map[elm_idx].elm_type,
+				&elmstat.cstat[0]);
 
 			cslot = (struct ses_ctrl_dev_slot*)&elmstat.cstat[0];
 
@@ -110,7 +114,8 @@ static bool do_setelmstat(const char *devname __unused, int fd) {
 	last_elm_type = -1;
 	for (elm_idx = 0; elm_idx < nobj; elm_idx++) {
 		encioc_elm_status_t elmstat;
-		struct ses_status_dev_slot *sslot;
+		struct ses_status_dev_slot *sslot =
+			(struct ses_status_dev_slot*)&elmstat.cstat[0];
 
 		if (last_elm_type != map[elm_idx].elm_type) {
 			/* skip overall elements */
@@ -123,11 +128,6 @@ static bool do_setelmstat(const char *devname __unused, int fd) {
 		{
 			int i;
 
-			r = ioctl(fd, ENCIOC_GETELMSTAT, (caddr_t)&elmstat);
-			ATF_REQUIRE_EQ(r, 0);
-
-			sslot = (struct ses_status_dev_slot*)&elmstat.cstat[0];
-
 			for (i = 0; i < 10; i++) {
 				r = ioctl(fd, ENCIOC_GETELMSTAT,
 				    (caddr_t)&elmstat);
@@ -153,7 +153,8 @@ static bool do_setelmstat(const char *devname __unused, int fd) {
  * Instead, we'll just clear every ident bit.
  */
 static bool
-do_setelmstat_cleanup(const char *devname __unused, int fd __unused) {
+do_setelmstat_cleanup(const char *devname __unused, int fd __unused)
+{
 	encioc_element_t *map;
 	unsigned elm_idx;
 	unsigned nobj;
@@ -166,6 +167,7 @@ do_setelmstat_cleanup(const char *devname __unused, int fd __unused) {
 	map = calloc(nobj, sizeof(encioc_element_t));
 	ATF_REQUIRE(map != NULL);
 	r = ioctl(fd, ENCIOC_GETELMMAP, (caddr_t) map);
+	ATF_REQUIRE_EQ(r, 0);
 
 	/* Clear the IDENT bit for every disk slot */
 	for (elm_idx = 0; elm_idx < nobj; elm_idx++) {
@@ -181,11 +183,17 @@ do_setelmstat_cleanup(const char *devname __unused, int fd __unused) {
 		if (map[elm_idx].elm_type == ELMTYP_DEVICE ||
 		    map[elm_idx].elm_type == ELMTYP_ARRAY_DEV)
 		{
+			r = ioctl(fd, ENCIOC_GETELMSTAT, (caddr_t)&elmstat);
+			ATF_REQUIRE_EQ(r, 0);
+			ses_status_to_ctrl(map[elm_idx].elm_type,
+			    &elmstat.cstat[0]);
+
 			cslot = (struct ses_ctrl_dev_slot*)&elmstat.cstat[0];
 
 			ses_ctrl_common_set_select(&cslot->common, 1);
 			ses_ctrl_dev_slot_set_rqst_ident(cslot, 0);
 			r = ioctl(fd, ENCIOC_SETELMSTAT, (caddr_t)&elmstat);
+			ATF_REQUIRE_EQ(r, 0);
 		}
 	}
 
@@ -215,7 +223,9 @@ ATF_TC_CLEANUP(setelmstat, tc)
 }
 
 
-static bool do_setencstat(const char *devname __unused, int fd) {
+static bool
+do_setencstat(const char *devname __unused, int fd)
+{
 	unsigned char encstat;
 	int r, i;
 	bool worked = false;
@@ -245,7 +255,9 @@ static bool do_setencstat(const char *devname __unused, int fd) {
 		return (true);
 }
 
-static bool do_setencstat_cleanup(const char *devname __unused, int fd) {
+static bool
+do_setencstat_cleanup(const char *devname __unused, int fd)
+{
 	unsigned char encstat;
 
 	/*
@@ -290,7 +302,6 @@ ATF_TP_ADD_TCS(tp)
 	 */
 	ATF_TP_ADD_TC(tp, setelmstat);
 	ATF_TP_ADD_TC(tp, setencstat);
-	// TODO ENCIOC_SETELMSTAT
 
 	return (atf_no_error());
 }
diff --git a/tests/sys/ses/nondestructive.c b/tests/sys/ses/nondestructive.c
index 47c7e5067239..4a731487b290 100644
--- a/tests/sys/ses/nondestructive.c
+++ b/tests/sys/ses/nondestructive.c
@@ -42,7 +42,9 @@
 
 #include "common.h"
 
-static bool do_getelmdesc(const char *devname, int fd) {
+static bool
+do_getelmdesc(const char *devname, int fd)
+{
 	regex_t re;
 	FILE *pipe;
 	char cmd[256];
@@ -125,11 +127,13 @@ ATF_TC_BODY(getelmdesc, tc)
 	for_each_ses_dev(do_getelmdesc, O_RDONLY);
 }
 
-static bool do_getelmdevnames(const char *devname __unused, int fd) {
+static bool
+do_getelmdevnames(const char *devname __unused, int fd)
+{
 	encioc_element_t *map;
 	unsigned nobj;
 	const size_t namesize = 128;
-	int r;
+	int r, status;
 	char *namebuf;
 	unsigned elm_idx;
 
@@ -164,8 +168,10 @@ static bool do_getelmdevnames(const char *devname __unused, int fd) {
 		elmdn.elm_devnames = namebuf;
 		namebuf[0] = '\0';
 		r = ioctl(fd, ENCIOC_GETELMDEVNAMES, (caddr_t) &elmdn);
-		if (e_status.cstat[0] != SES_OBJSTAT_UNSUPPORTED &&
-		    e_status.cstat[0] != SES_OBJSTAT_NOTINSTALLED &&
+		status = ses_status_common_get_element_status_code(
+			(struct ses_status_common*)&e_status.cstat[0]);
+		if (status != SES_OBJSTAT_UNSUPPORTED &&
+		    status != SES_OBJSTAT_NOTINSTALLED &&
 		    (map[elm_idx].elm_type == ELMTYP_DEVICE ||
 		     map[elm_idx].elm_type == ELMTYP_ARRAY_DEV))
 		{
@@ -176,8 +182,7 @@ static bool do_getelmdevnames(const char *devname __unused, int fd) {
 
 		if (r == 0) {
 			size_t z = 0;
-			int da = 0, ada = 0, pass = 0, nvd = 0;
-			int nvme = 0, unknown = 0;
+			int da = 0, ada = 0, pass = 0, nda = 0, unknown = 0;
 
 			while(elmdn.elm_devnames[z] != '\0') {
 				size_t e;
@@ -193,16 +198,14 @@ static bool do_getelmdevnames(const char *devname __unused, int fd) {
 					ada++;
 				else if (0 == strncmp("pass", s, e))
 					pass++;
-				else if (0 == strncmp("nvd", s, e))
-					nvd++;
-				else if (0 == strncmp("nvme", s, e))
-					nvme++;
+				else if (0 == strncmp("nda", s, e))
+					nda++;
 				else
 					unknown++;
 				z += strcspn(elmdn.elm_devnames + z, ",");
 			}
 			/* There should be one pass dev for each non-pass dev */
-			ATF_CHECK_EQ(pass, da + ada + nvd + nvme);
+			ATF_CHECK_EQ(pass, da + ada + nda);
 			ATF_CHECK_EQ_MSG(0, unknown,
 			    "Unknown device names %s", elmdn.elm_devnames);
 		}
@@ -229,7 +232,8 @@ ATF_TC_BODY(getelmdevnames, tc)
 }
 
 static int
-elm_type_name2int(const char *name) {
+elm_type_name2int(const char *name)
+{
 	const char *elm_type_names[] = ELM_TYPE_NAMES;
 	int i;
 
@@ -241,7 +245,9 @@ elm_type_name2int(const char *name) {
 	return (-1);
 }
 
-static bool do_getelmmap(const char *devname, int fd) {
+static bool
+do_getelmmap(const char *devname, int fd)
+{
 	encioc_element_t *map;
 	FILE *pipe;
 	char cmd[256];
@@ -320,7 +326,9 @@ ATF_TC_BODY(getelmmap, tc)
 	for_each_ses_dev(do_getelmmap, O_RDONLY);
 }
 
-static bool do_getelmstat(const char *devname, int fd) {
+static bool
+do_getelmstat(const char *devname, int fd)
+{
 	encioc_element_t *map;
 	unsigned elm_idx;
 	unsigned nobj;
@@ -391,7 +399,9 @@ ATF_TC_BODY(getelmstat, tc)
 	for_each_ses_dev(do_getelmstat, O_RDONLY);
 }
 
-static bool do_getencid(const char *devname, int fd) {
+static bool
+do_getencid(const char *devname, int fd)
+{
 	encioc_string_t stri;
 	FILE *pipe;
 	char cmd[256];
@@ -441,7 +451,9 @@ ATF_TC_BODY(getencid, tc)
 	for_each_ses_dev(do_getencid, O_RDONLY);
 }
 
-static bool do_getencname(const char *devname, int fd) {
+static bool
+do_getencname(const char *devname, int fd)
+{
 	encioc_string_t stri;
 	FILE *pipe;
 	char cmd[256];
@@ -487,7 +499,9 @@ ATF_TC_BODY(getencname, tc)
 	for_each_ses_dev(do_getencname, O_RDONLY);
 }
 
-static bool do_getencstat(const char *devname, int fd) {
+static bool
+do_getencstat(const char *devname, int fd)
+{
 	FILE *pipe;
 	char cmd[256];
 	unsigned char e, estat, invop, info, noncrit, crit, unrecov;
@@ -530,7 +544,9 @@ ATF_TC_BODY(getencstat, tc)
 	for_each_ses_dev(do_getencstat, O_RDONLY);
 }
 
-static bool do_getnelm(const char *devname, int fd) {
+static bool
+do_getnelm(const char *devname, int fd)
+{
 	FILE *pipe;
 	char cmd[256];
 	char line[256];
@@ -578,7 +594,9 @@ ATF_TC_BODY(getnelm, tc)
 	for_each_ses_dev(do_getnelm, O_RDONLY);
 }
 
-static bool do_getstring(const char *devname, int fd) {
+static bool
+do_getstring(const char *devname, int fd)
+{
 	FILE *pipe;
 	char cmd[256];
 	char *sg_ses_buf, *ses_buf;