All of lore.kernel.org
 help / color / mirror / Atom feed
* [LTP] [PATCH 1/2] network/in6_02: Rewrite to the new library
@ 2018-04-17 12:42 Petr Vorel
  2018-04-17 12:42 ` [LTP] [PATCH 2/2] network/in6_02: Don't use default value for LHOST_IFACES Petr Vorel
  2018-04-18 13:50 ` [LTP] [PATCH 1/2] network/in6_02: Rewrite to the new library Alexey Kodanev
  0 siblings, 2 replies; 7+ messages in thread
From: Petr Vorel @ 2018-04-17 12:42 UTC (permalink / raw)
  To: ltp

Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
 testcases/network/lib6/in6_02.c | 222 +++++++++++++++++++---------------------
 1 file changed, 106 insertions(+), 116 deletions(-)

diff --git a/testcases/network/lib6/in6_02.c b/testcases/network/lib6/in6_02.c
index 7cb362666..e3deb7b7b 100644
--- a/testcases/network/lib6/in6_02.c
+++ b/testcases/network/lib6/in6_02.c
@@ -1,110 +1,91 @@
 /*
+ * Copyright (c) International Business Machines  Corp., 2001
+ * Copyright (c) 2018 Petr Vorel <pvorel@suse.cz>
  *
- *   Copyright (c) International Business Machines  Corp., 2001
- *   Author: David L Stevens
+ * Author: David L Stevens
  *
- *   This program is free software;  you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 2 of the License, or
- *   (at your option) any later version.
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
  *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- *   the GNU General Public License for more details.
+ * This program is distributed in the hope that it would be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *   You should have received a copy of the GNU General Public License
- *   along with this program;  if not, write to the Free Software Foundation,
- *   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-/*
- *   Description:
- *     Tests for name to index and index to name functions in IPv6
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Description:
+ * IPv6 name to index and index to name function tests
  */
 
+
+#include <stdlib.h>
+#include <stdio.h>
 #include <unistd.h>
 #include <errno.h>
 #include <sys/socket.h>
 #include <net/if.h>
 
-#include "test.h"
+#include "tst_test.h"
+
+#define I2N_RNDCOUNT	10	/* random ints */
+#define I2N_LOWCOUNT	10	/* sequential from 0 */
+#define DEFAULT_IFACE	"eth0"
 
 static struct {
 	char *name;
 	int nonzero;
-} n2i[] = {
+} test_case[] = {
 	{ "lo", 1 },
-	{ "eth0", 1 },
+	{ DEFAULT_IFACE, 1 },
 	{ "hoser75", 0 },
 	{ "6", 0 },
 };
 
-#define N2I_COUNT (sizeof(n2i)/sizeof(n2i[0]))
-#define I2N_RNDCOUNT	10	/* random ints */
-#define I2N_LOWCOUNT	10	/* sequential from 0 */
-
 static void setup(void);
-static void n2itest(void);
-static void i2ntest(void);
-static void initest(void);
-
-static void (*testfunc[])(void) = { n2itest,
-	i2ntest, initest };
-
-char *TCID = "in6_02";
-int TST_TOTAL = ARRAY_SIZE(testfunc);
-
-int main(int argc, char *argv[])
-{
-	int lc;
-	int i;
-
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	setup();
+static void if_nametoindex_test(void);
+static void if_indextoname_test(void);
+static void if_nameindex_test(void);
 
-	for (lc = 0; TEST_LOOPING(lc); ++lc) {
-		tst_count = 0;
+static void (*testfunc[])(void) = { if_nametoindex_test, if_indextoname_test,
+	if_nameindex_test };
 
-		for (i = 0; i < TST_TOTAL; i++)
-			(*testfunc[i])();
-	}
-
-	tst_exit();
-}
-
-/* if_nametoindex tests */
-void n2itest(void)
+void if_nametoindex_test(void)
 {
 	unsigned int i;
 	char ifname[IF_NAMESIZE], *pifn;
 
-	for (i = 0; i < N2I_COUNT; ++i) {
-		TEST(if_nametoindex(n2i[i].name));
-		if (!TEST_RETURN != !n2i[i].nonzero) {
-			tst_resm(TFAIL, "if_nametoindex(\"%s\") %ld "
-				"[should be %szero]", n2i[i].name, TEST_RETURN,
-				n2i[i].nonzero ? "non" : "");
+	tst_res(TINFO, "IPv6 if_nametoindex() test");
+
+	for (i = 0; i < ARRAY_SIZE(test_case); ++i) {
+		TEST(if_nametoindex(test_case[i].name));
+		if (!TEST_RETURN != !test_case[i].nonzero) {
+			tst_res(TFAIL, "if_nametoindex(\"%s\") %ld [should be %szero]",
+					test_case[i].name, TEST_RETURN, test_case[i].nonzero ? "non"
+					: "");
 			return;
 		}
 		if (TEST_RETURN) {
 			pifn = if_indextoname(TEST_RETURN, ifname);
-			if (!pifn || strcmp(n2i[i].name, pifn)) {
-				tst_resm(TFAIL, "if_nametoindex(\"%s\") %ld "
-					"doesn't match if_indextoname(%ld) "
-					"\"%s\"", n2i[i].name, TEST_RETURN,
-					TEST_RETURN, pifn ? pifn : "");
+			if (!pifn || strcmp(test_case[i].name, pifn)) {
+				tst_res(TFAIL,
+					"if_nametoindex(\"%s\") %ld doesn't match if_indextoname(%ld) \"%s\"",
+					test_case[i].name, TEST_RETURN, TEST_RETURN, pifn ? pifn
+						: "");
 				return;
 			}
 		}
-		tst_resm(TINFO, "if_nametoindex(\"%s\") %ld",
-			n2i[i].name, TEST_RETURN);
+		tst_res(TINFO, "if_nametoindex(\"%s\") %ld",
+			test_case[i].name, TEST_RETURN);
 	}
 
-	tst_resm(TPASS, "if_nametoindex() tests succeed");
+	tst_res(TPASS, "if_nametoindex() test succeed");
 }
 
-int sub_i2ntest(unsigned int if_index)
+int sub_if_indextoname_test(unsigned int if_index)
 {
 	char ifname[IF_NAMESIZE];
 	unsigned int idx;
@@ -112,41 +93,42 @@ int sub_i2ntest(unsigned int if_index)
 	TEST((ifname == if_indextoname(if_index, ifname)));
 	if (!TEST_RETURN) {
 		if (TEST_ERRNO != ENXIO) {
-			tst_resm(TFAIL, "if_indextoname(%d) returns %ld "
-				 "but errno %d != ENXIO", if_index, TEST_RETURN,
-				 TEST_ERRNO);
+			tst_res(TFAIL,
+				"if_indextoname(%d) returns %ld but errno %d != ENXIO",
+				if_index, TEST_RETURN, TEST_ERRNO);
 			return 0;
 		}
-		tst_resm(TINFO, "if_indextoname(%d) returns NULL", if_index);
+		tst_res(TINFO, "if_indextoname(%d) returns NULL", if_index);
 		return 1;
 	}
 	/* else, a valid interface-- double check name */
 	idx = if_nametoindex(ifname);
 	if (idx != if_index) {
-		tst_resm(TFAIL, "if_indextoname(%u) returns \"%s\" but "
-			 "doesn't if_nametoindex(\"%s\") returns %u",
-			 if_index, ifname, ifname, idx);
+		tst_res(TFAIL,
+			"if_indextoname(%u) returns \"%s\" but doesn't if_nametoindex(\"%s\") returns %u",
+			if_index, ifname, ifname, idx);
 		return 0;
 	}
-	tst_resm(TINFO, "if_indextoname(%d) returns \"%s\"", if_index, ifname);
+	tst_res(TINFO, "if_indextoname(%d) returns \"%s\"", if_index, ifname);
 	return 1;
 }
 
-/* if_indextoname tests */
-void i2ntest(void)
+void if_indextoname_test(void)
 {
 	unsigned int i;
 
+	tst_res(TINFO, "IPv6 if_indextoname() test");
+
 	/* some low-numbered indexes-- likely to get valid interfaces here */
 	for (i = 0; i < I2N_LOWCOUNT; ++i)
-		if (!sub_i2ntest(i))
+		if (!sub_if_indextoname_test(i))
 			return;	/* skip the rest, if broken */
 	/* some random ints; should mostly fail */
 	for (i = 0; i < I2N_RNDCOUNT; ++i)
-		if (!sub_i2ntest(rand()))
+		if (!sub_if_indextoname_test(rand()))
 			return;	/* skip the rest, if broken */
 
-	tst_resm(TPASS, "if_indextoname() tests succeed");
+	tst_res(TPASS, "if_indextoname() test succeed");
 }
 
 /*
@@ -176,8 +158,7 @@ int getdatasize(void)
 	return dsize;
 }
 
-/* if_nameindex tests */
-void initest(void)
+void if_nameindex_test(void)
 {
 	struct if_nameindex *pini;
 	int i;
@@ -186,92 +167,101 @@ void initest(void)
 	int freenicount;
 	int dsize_before, dsize_after;
 
+	tst_res(TINFO, "IPv6 if_nameindex() test");
+
 	pini = if_nameindex();
 	if (pini == NULL) {
-		tst_resm(TFAIL, "if_nameindex() returns NULL, errno %d (%s)",
-			 TEST_ERRNO, strerror(TEST_ERRNO));
+		tst_res(TFAIL, "if_nameindex() returns NULL, errno %d (%s)",
+			TEST_ERRNO, strerror(TEST_ERRNO));
 		return;
 	}
 	for (i = 0; pini[i].if_index; ++i) {
 		p = if_indextoname(pini[i].if_index, buf);
 		if (!p || strcmp(p, pini[i].if_name)) {
-			tst_resm(TFAIL, "if_nameindex idx %d name \"%s\" but "
-				 "if_indextoname(%d) is \"%s\"",
-				 pini[i].if_index, pini[i].if_name,
-				 pini[i].if_index, p ? p : "");
+			tst_res(TFAIL,
+				"if_nameindex idx %d name \"%s\" but if_indextoname(%d) is \"%s\"",
+				pini[i].if_index, pini[i].if_name,
+				pini[i].if_index, p ? p : "");
 			return;
 		}
 		idx = if_nametoindex(pini[i].if_name);
 		if (idx != pini[i].if_index) {
-			tst_resm(TFAIL, "if_nameindex idx %d name \"%s\" but "
-				 "if_indextoname(\"%s\") is %d",
-				 pini[i].if_index, pini[i].if_name,
-				 pini[i].if_name, idx);
+			tst_res(TFAIL,
+				"if_nameindex idx %d name \"%s\" but if_indextoname(\"%s\") is %d",
+				pini[i].if_index, pini[i].if_name,
+				pini[i].if_name, idx);
 			return;
 		}
-		tst_resm(TINFO, "if_nameindex idx %d name \"%s\"",
+		tst_res(TINFO, "if_nameindex idx %d name \"%s\"",
 			 pini[i].if_index, pini[i].if_name);
 	}
 	if_freenameindex(pini);
 
-	/* if_freenameindex() has no error conditions; see if we run
+	/*
+	 * if_freenameindex() has no error conditions; see if we run
 	 * out of memory if we do it a lot.
 	 */
 	dsize_before = getdatasize();
 	if (dsize_before < 0) {
-		tst_brkm(TBROK, NULL, "getdatasize failed: errno %d (%s)",
+		tst_brk(TBROK, "getdatasize failed: errno %d (%s)",
 			errno, strerror(errno));
 	}
-	/* we need to leak at least a page to detect a leak; 1 byte per call
+
+	/*
+	 * we need to leak@least a page to detect a leak; 1 byte per call
 	 * will be detected with getpagesize() calls.
 	 */
 	freenicount = getpagesize();
 	for (i = 0; i < freenicount; ++i) {
 		pini = if_nameindex();
 		if (pini == NULL) {
-			tst_resm(TINFO, "if_freenameindex test failed "
-				 "if_nameindex() iteration %d", i);
+			tst_res(TINFO,
+				"if_freenameindex test failed if_nameindex() iteration %d", i);
 			break;
 		}
 		if_freenameindex(pini);
 	}
 	dsize_after = getdatasize();
 	if (dsize_after < 0) {
-		tst_brkm(TBROK, NULL, "getdatasize failed: errno %d (%s)",
+		tst_brk(TBROK, "getdatasize failed: errno %d (%s)",
 			errno, strerror(errno));
 	}
 	if (dsize_after > dsize_before + getpagesize()) {
-		tst_resm(TFAIL, "if_freenameindex leaking memory "
-			 "(%d iterations) dsize before %d dsize after %d", i,
-			 dsize_before, dsize_after);
+		tst_res(TFAIL,
+			"if_freenameindex leaking memory (%d iterations) dsize before %d dsize after %d",
+			i, dsize_before, dsize_after);
 		return;
-	} else {
-		tst_resm(TINFO, "if_freenameindex passed %d iterations", i);
 	}
+	tst_res(TINFO, "if_freenameindex passed %d iterations", i);
 
-	tst_resm(TPASS, "if_nameindex() tests succeed");
+	tst_res(TPASS, "if_nameindex() test succeed");
 }
 
 void setup(void)
 {
-	TEST_PAUSE;
-
-	tst_resm(TINFO, "get interface name from LHOST_IFACES var");
-
 	char *ifnames = getenv("LHOST_IFACES");
 
 	if (!ifnames) {
-		tst_resm(TWARN, "LHOST_IFACES not defined, default to eth0");
+		tst_res(TWARN, "LHOST_IFACES not defined, default to %s", DEFAULT_IFACE);
 		return;
 	}
 
 	static char name[256];
-
 	sscanf(ifnames, "%255s", name);
-
-	if (!strcmp(name, n2i[1].name))
+	if (!strcmp(name, test_case[1].name))
 		return;
 
-	tst_resm(TINFO, "change default 'eth0' name to '%s'", name);
-	n2i[1].name = name;
+	tst_res(TINFO, "change default '%s' name to '%s'", DEFAULT_IFACE, name);
+	test_case[1].name = name;
+}
+
+static void do_test(unsigned int i)
+{
+	(*testfunc[i])();
 }
+
+static struct tst_test test = {
+	.tcnt = ARRAY_SIZE(testfunc),
+	.setup = setup,
+	.test = do_test,
+};
-- 
2.16.3


^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2018-04-20  8:15 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-04-17 12:42 [LTP] [PATCH 1/2] network/in6_02: Rewrite to the new library Petr Vorel
2018-04-17 12:42 ` [LTP] [PATCH 2/2] network/in6_02: Don't use default value for LHOST_IFACES Petr Vorel
2018-04-18 14:00   ` Alexey Kodanev
2018-04-18 14:13     ` Petr Vorel
2018-04-18 14:56       ` Alexey Kodanev
2018-04-20  8:15         ` Petr Vorel
2018-04-18 13:50 ` [LTP] [PATCH 1/2] network/in6_02: Rewrite to the new library Alexey Kodanev

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.