Commit 29f5540b authored by @wuzhangjin's avatar @wuzhangjin Committed by Willy Tarreau
Browse files

selftests/nolibc: add EXPECT_PTREQ, EXPECT_PTRNE and EXPECT_PTRER



The syscalls like sbrk() and mmap() return pointers, to test them, more
pointer compare test macros are required, add them:

- EXPECT_PTREQ() expects two equal pointers.
- EXPECT_PTRNE() expects two non-equal pointers.
- EXPECT_PTRER() expects failure with a specified errno.
- EXPECT_PTRER2() expects failure with one of two specified errnos.

Signed-off-by: default avatarZhangjin Wu <falcon@tinylab.org>
Signed-off-by: default avatarWilly Tarreau <w@1wt.eu>
parent 82e339c2
Loading
Loading
Loading
Loading
+58 −0
Original line number Diff line number Diff line
@@ -364,6 +364,64 @@ static int expect_ptrnz(const void *expr, int llen)
	return ret;
}

#define EXPECT_PTREQ(cond, expr, cmp)				\
	do { if (!cond) pad_spc(llen, 64, "[SKIPPED]\n"); else ret += expect_ptreq(expr, llen, cmp); } while (0)

static int expect_ptreq(const void *expr, int llen, const void *cmp)
{
	int ret = 0;

	llen += printf(" = <%p> ", expr);
	if (expr != cmp) {
		ret = 1;
		llen += pad_spc(llen, 64, "[FAIL]\n");
	} else {
		llen += pad_spc(llen, 64, " [OK]\n");
	}
	return ret;
}

#define EXPECT_PTRNE(cond, expr, cmp)				\
	do { if (!cond) pad_spc(llen, 64, "[SKIPPED]\n"); else ret += expect_ptrne(expr, llen, cmp); } while (0)

static int expect_ptrne(const void *expr, int llen, const void *cmp)
{
	int ret = 0;

	llen += printf(" = <%p> ", expr);
	if (expr == cmp) {
		ret = 1;
		llen += pad_spc(llen, 64, "[FAIL]\n");
	} else {
		llen += pad_spc(llen, 64, " [OK]\n");
	}
	return ret;
}

#define EXPECT_PTRER2(cond, expr, expret, experr1, experr2)		\
	do { if (!cond) pad_spc(llen, 64, "[SKIPPED]\n"); else ret += expect_ptrerr2(expr, expret, experr1, experr2, llen); } while (0)

#define EXPECT_PTRER(cond, expr, expret, experr)			\
	EXPECT_PTRER2(cond, expr, expret, experr, 0)

static int expect_ptrerr2(const void *expr, const void *expret, int experr1, int experr2, int llen)
{
	int ret = 0;
	int _errno = errno;

	llen += printf(" = <%p> %s ", expr, errorname(_errno));
	if (expr != expret || (_errno != experr1 && _errno != experr2)) {
		ret = 1;
		if (experr2 == 0)
			llen += printf(" != (<%p> %s) ", expret, errorname(experr1));
		else
			llen += printf(" != (<%p> %s %s) ", expret, errorname(experr1), errorname(experr2));
		llen += pad_spc(llen, 64, "[FAIL]\n");
	} else {
		llen += pad_spc(llen, 64, " [OK]\n");
	}
	return ret;
}

#define EXPECT_STRZR(cond, expr)				\
	do { if (!cond) pad_spc(llen, 64, "[SKIPPED]\n"); else ret += expect_strzr(expr, llen); } while (0)