selftests/nolibc: support two errnos with EXPECT_SYSER2()
authorZhangjin Wu <falcon@tinylab.org>
Sat, 3 Jun 2023 08:13:40 +0000 (16:13 +0800)
committerPaul E. McKenney <paulmck@kernel.org>
Fri, 9 Jun 2023 18:46:10 +0000 (11:46 -0700)
Some functions may be implemented with different syscalls in different
platforms, these syscalls may set different errnos for the same
arguments, let's support such cases.

Suggested-by: Willy Tarreau <w@1wt.eu>
Link: https://lore.kernel.org/linux-riscv/20230528113325.GJ1956@1wt.eu/
Signed-off-by: Zhangjin Wu <falcon@tinylab.org>
Reviewed-by: Thomas Weißschuh <linux@weissschuh.net>
Signed-off-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
tools/testing/selftests/nolibc/nolibc-test.c

index ff3da953980959b91b0a4c74b64b181cbfb17725..7896bc3f609ef91683d9a5e362820a2340cd959c 100644 (file)
@@ -300,18 +300,24 @@ static int expect_sysne(int expr, int llen, int val)
 }
 
 
+#define EXPECT_SYSER2(cond, expr, expret, experr1, experr2)            \
+       do { if (!cond) pad_spc(llen, 64, "[SKIPPED]\n"); else ret += expect_syserr2(expr, expret, experr1, experr2, llen); } while (0)
+
 #define EXPECT_SYSER(cond, expr, expret, experr)                       \
-       do { if (!cond) pad_spc(llen, 64, "[SKIPPED]\n"); else ret += expect_syserr(expr, expret, experr, llen); } while (0)
+       EXPECT_SYSER2(cond, expr, expret, experr, 0)
 
-static int expect_syserr(int expr, int expret, int experr, int llen)
+static int expect_syserr2(int expr, int expret, int experr1, int experr2, int llen)
 {
        int ret = 0;
        int _errno = errno;
 
        llen += printf(" = %d %s ", expr, errorname(_errno));
-       if (expr != expret || _errno != experr) {
+       if (expr != expret || (_errno != experr1 && _errno != experr2)) {
                ret = 1;
-               llen += printf(" != (%d %s) ", expret, errorname(experr));
+               if (experr2 == 0)
+                       llen += printf(" != (%d %s) ", expret, errorname(experr1));
+               else
+                       llen += printf(" != (%d %s %s) ", expret, errorname(experr1), errorname(experr2));
                llen += pad_spc(llen, 64, "[FAIL]\n");
        } else {
                llen += pad_spc(llen, 64, " [OK]\n");