From patchwork Thu Apr 19 13:11:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Vorel X-Patchwork-Id: 901079 X-Patchwork-Delegate: akodanev@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=lists.linux.it (client-ip=2001:1418:10:5::2; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=suse.cz Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40RfXC0zjfz9s2t for ; Thu, 19 Apr 2018 23:11:53 +1000 (AEST) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 1FDD83E74C2 for ; Thu, 19 Apr 2018 15:11:51 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-5.smtp.seeweb.it (in-5.smtp.seeweb.it [217.194.8.5]) by picard.linux.it (Postfix) with ESMTP id 8F4C23E6C12 for ; Thu, 19 Apr 2018 15:11:49 +0200 (CEST) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by in-5.smtp.seeweb.it (Postfix) with ESMTPS id B873D6013C2 for ; Thu, 19 Apr 2018 15:11:45 +0200 (CEST) Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id F3CDEAE03; Thu, 19 Apr 2018 13:11:44 +0000 (UTC) From: Petr Vorel To: ltp@lists.linux.it Date: Thu, 19 Apr 2018 15:11:34 +0200 Message-Id: <20180419131135.23693-1-pvorel@suse.cz> X-Mailer: git-send-email 2.16.3 X-Virus-Scanned: clamav-milter 0.99.2 at in-5.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-0.0 required=7.0 tests=SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-5.smtp.seeweb.it Subject: [LTP] [PATCH v2 1/2] network/in6_02: Don't use default value for LHOST_IFACES X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.18 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" In case of LHOST_IFACES not being defined was 'eth0' used as default. Although eth0 is common iface, we cannot guarantee it, therefore skip testing it. Also check sscanf return value to catch whitespace only. Signed-off-by: Petr Vorel --- Changes v1->v2: * Add check before rewriting into new API. * Check sscanf return value to catch whitespace only. NOTE: with LHOST_IFACES="lo" (or other from n2i) it's tested twice, but I ignore it. --- Not sure if I need to put all longer strings in tst_res on new line. --- testcases/network/lib6/in6_02.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/testcases/network/lib6/in6_02.c b/testcases/network/lib6/in6_02.c index 7cb362666..e1a71d987 100644 --- a/testcases/network/lib6/in6_02.c +++ b/testcases/network/lib6/in6_02.c @@ -34,7 +34,7 @@ static struct { int nonzero; } n2i[] = { { "lo", 1 }, - { "eth0", 1 }, + { NULL, 1 }, { "hoser75", 0 }, { "6", 0 }, }; @@ -80,6 +80,11 @@ void n2itest(void) char ifname[IF_NAMESIZE], *pifn; for (i = 0; i < N2I_COUNT; ++i) { + if (n2i[i].name == NULL) { + tst_resm(TCONF, "LHOST_IFACES not defined or invalid, skip testing it"); + return; + } + TEST(if_nametoindex(n2i[i].name)); if (!TEST_RETURN != !n2i[i].nonzero) { tst_resm(TFAIL, "if_nametoindex(\"%s\") %ld " @@ -256,22 +261,17 @@ 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"); + if (!ifnames) return; - } static char name[256]; + int ret; - sscanf(ifnames, "%255s", name); - - if (!strcmp(name, n2i[1].name)) + ret = sscanf(ifnames, "%255s", name); + if (ret == -1) return; - tst_resm(TINFO, "change default 'eth0' name to '%s'", name); + tst_resm(TINFO, "get interface name from LHOST_IFACES: '%s'", name); n2i[1].name = name; } From patchwork Thu Apr 19 13:11:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Vorel X-Patchwork-Id: 901080 X-Patchwork-Delegate: akodanev@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=lists.linux.it (client-ip=2001:1418:10:5::2; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=suse.cz Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40RfXF1L01z9s3D for ; Thu, 19 Apr 2018 23:11:57 +1000 (AEST) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 6568D3E76D5 for ; Thu, 19 Apr 2018 15:11:54 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-3.smtp.seeweb.it (in-3.smtp.seeweb.it [217.194.8.3]) by picard.linux.it (Postfix) with ESMTP id 242B73E6C12 for ; Thu, 19 Apr 2018 15:11:49 +0200 (CEST) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by in-3.smtp.seeweb.it (Postfix) with ESMTPS id 2C3AE1A01488 for ; Thu, 19 Apr 2018 15:11:46 +0200 (CEST) Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id C3137AE6A; Thu, 19 Apr 2018 13:11:45 +0000 (UTC) From: Petr Vorel To: ltp@lists.linux.it Date: Thu, 19 Apr 2018 15:11:35 +0200 Message-Id: <20180419131135.23693-2-pvorel@suse.cz> X-Mailer: git-send-email 2.16.3 In-Reply-To: <20180419131135.23693-1-pvorel@suse.cz> References: <20180419131135.23693-1-pvorel@suse.cz> X-Virus-Scanned: clamav-milter 0.99.2 at in-3.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-0.0 required=7.0 tests=SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-3.smtp.seeweb.it Subject: [LTP] [PATCH v2 2/2] network/in6_02: Rewrite to the new library X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.18 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Signed-off-by: Petr Vorel --- testcases/network/lib6/in6_02.c | 224 ++++++++++++++++++++-------------------- 1 file changed, 110 insertions(+), 114 deletions(-) diff --git a/testcases/network/lib6/in6_02.c b/testcases/network/lib6/in6_02.c index e1a71d987..e3a92f519 100644 --- a/testcases/network/lib6/in6_02.c +++ b/testcases/network/lib6/in6_02.c @@ -1,115 +1,95 @@ /* + * Copyright (c) International Business Machines Corp., 2001 + * Copyright (c) 2018 Petr Vorel * - * 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 . + * + * Description: + * IPv6 name to index and index to name function tests */ + +#include +#include #include #include #include #include -#include "test.h" +#include "tst_test.h" + +#define I2N_RNDCOUNT 10 /* random ints */ +#define I2N_LOWCOUNT 10 /* sequential from 0 */ static struct { char *name; int nonzero; -} n2i[] = { +} test_case[] = { { "lo", 1 }, { NULL, 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 }; +static void if_nametoindex_test(void); +static void if_indextoname_test(void); +static void if_nameindex_test(void); -char *TCID = "in6_02"; -int TST_TOTAL = ARRAY_SIZE(testfunc); +static void (*testfunc[])(void) = { if_nametoindex_test, if_indextoname_test, + if_nameindex_test }; -int main(int argc, char *argv[]) -{ - int lc; - int i; - - tst_parse_opts(argc, argv, NULL, NULL); - - setup(); - - for (lc = 0; TEST_LOOPING(lc); ++lc) { - tst_count = 0; - - for (i = 0; i < TST_TOTAL; i++) - (*testfunc[i])(); - } - - tst_exit(); -} - -/* if_nametoindex tests */ -void n2itest(void) +static void if_nametoindex_test(void) { unsigned int i; char ifname[IF_NAMESIZE], *pifn; - for (i = 0; i < N2I_COUNT; ++i) { - if (n2i[i].name == NULL) { - tst_resm(TCONF, "LHOST_IFACES not defined or invalid, skip testing it"); + tst_res(TINFO, "IPv6 if_nametoindex() test"); + + for (i = 0; i < ARRAY_SIZE(test_case); ++i) { + if (test_case[i].name == NULL) { + tst_res(TCONF, "LHOST_IFACES not defined or invalid, skip testing it"); return; } - 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" : ""); + 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) +static int sub_if_indextoname_test(unsigned int if_index) { char ifname[IF_NAMESIZE]; unsigned int idx; @@ -117,48 +97,49 @@ 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) +static 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"); } /* * This is an ugly, linux-only solution. getrusage() doesn't support the * current data segment size, so we get it out of /proc */ -int getdatasize(void) +static int getdatasize(void) { char line[128], *p; int dsize = -1; @@ -181,8 +162,7 @@ int getdatasize(void) return dsize; } -/* if_nameindex tests */ -void initest(void) +static void if_nameindex_test(void) { struct if_nameindex *pini; int i; @@ -191,79 +171,84 @@ 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 at 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) +static void setup(void) { - TEST_PAUSE; - char *ifnames = getenv("LHOST_IFACES"); - if (!ifnames) + + if (!ifnames) { + tst_res(TINFO, "LHOST_IFACES not defined, it will not be tested"); return; + } static char name[256]; int ret; @@ -272,6 +257,17 @@ void setup(void) if (ret == -1) return; - tst_resm(TINFO, "get interface name from LHOST_IFACES: '%s'", name); - n2i[1].name = name; + tst_res(TINFO, "LHOST_IFACES \"%s\"", 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, +};