From: Cyril Hrubis <chrubis@suse.cz>
To: Xing Gu <gux.fnst@cn.fujitsu.com>
Cc: ltp-list@lists.sourceforge.net
Subject: Re: [LTP] [PATCH 4/6] lib6/asapi_06.c: cleanup
Date: Thu, 30 Apr 2015 15:33:44 +0200 [thread overview]
Message-ID: <20150430133344.GD24720@rei.suse.de> (raw)
In-Reply-To: <1427787975-10668-4-git-send-email-gux.fnst@cn.fujitsu.com>
Hi!
> Signed-off-by: Xing Gu <gux.fnst@cn.fujitsu.com>
> ---
> testcases/network/lib6/asapi_06.c | 374 +++++++++++++++++---------------------
> 1 file changed, 167 insertions(+), 207 deletions(-)
>
> diff --git a/testcases/network/lib6/asapi_06.c b/testcases/network/lib6/asapi_06.c
> index 960ebb5..733d1c4 100644
> --- a/testcases/network/lib6/asapi_06.c
> +++ b/testcases/network/lib6/asapi_06.c
> @@ -1,6 +1,7 @@
> /*
> *
> * Copyright (c) International Business Machines Corp., 2001
> + * 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
> @@ -13,25 +14,12 @@
> * 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
> + * along with this program; if not, write to the Free Software Foundation,
> + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> */
> -
> /*
> - * Test Name: asapi_06
> - *
> - * Test Description:
> - * Tests for RFC 3542 section 4 socket options and ancillary data
> - *
> - * Usage: <for command-line>
> - * asapi_06
> - *
> - * HISTORY
> - * 05/2005 written by David L Stevens
> - *
> - * RESTRICTIONS:
> - * None.
> - *
> + * Description:
> + * Tests for RFC 3542 section 4 socket options and ancillary data.
> */
>
> #include "config.h"
> @@ -58,42 +46,46 @@
>
> #include "test.h"
>
> -char *TCID = "asapi_06"; /* Test program identifier. */
> -
> -int TST_TOTAL = 1;
> -
> -pid_t pid;
> +static void setup(void);
> +static void test_soent(void);
> +#ifdef notyet
> +static void test_pktinfo(void);
> +#endif
>
> -struct {
> - char *prt_name;
> - int prt_value;
> -} ptab[] = {
> +static void (*testfunc[])(void) = {
> + test_soent,
> +#ifdef notyet
> + test_pktinfo,
> +#endif
Does the test actually works if we remove the ifdefs?
Looks to me like this has been implemented in kernel in 2005 in:
commit 333fad5364d6b457c8d837f7d05802d2aaf8a961
Author: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Date: Thu Sep 8 09:59:17 2005 +0900
[IPV6]: Support several new sockopt / ancillary data in Advanced API (RFC3542).
> };
>
> -#define PTCOUNT (sizeof(ptab)/sizeof(ptab[0]))
> -
> -#define READ_TIMEOUT 5 /* secs */
> -
> -void do_tests(void);
> -void setup(void), cleanup(void);
> +char *TCID = "asapi_06";
> +int TST_TOTAL = ARRAY_SIZE(testfunc);
>
> int main(int argc, char *argv[])
> {
> int lc;
> + int i;
>
> tst_parse_opts(argc, argv, NULL, NULL);
>
> - pid = getpid();
> -
> setup();
>
> - for (lc = 0; TEST_LOOPING(lc); ++lc)
> - do_tests();
> + for (lc = 0; TEST_LOOPING(lc); ++lc) {
> + tst_count = 0;
> +
> + for (i = 0; i < TST_TOTAL; i++)
> + (*testfunc[i])();
> + }
>
> - cleanup();
> tst_exit();
> }
>
> +void setup(void)
> +{
> + TEST_PAUSE;
> +}
> +
> #define NH_TEST 0x9f
>
> #ifndef IPV6_RECVPKTINFO
> @@ -145,11 +137,6 @@ union soval {
> int sou_bool;
> };
>
> -/* in6_addr initializer for loopback interface */
> -#define IN6_LOOP {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }
> -#define IN6_ANY {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
> -
> -/* so_clrval and so_setval members are initilized in the body */
> struct soent {
> char *so_tname;
> int so_opt;
> @@ -160,72 +147,63 @@ struct soent {
> union soval so_setval;
> socklen_t so_valsize;
> } sotab[] = {
> -/* RFC 3542, Section 4 */
> - {
> - "IPV6_RECVPKTINFO", IPV6_RECVPKTINFO, 1, IPV6_PKTINFO, 1, { { { { {
> - 0}}}}}, { { { { {
> - 0}}}}}, sizeof(int)}, {
> - "IPV6_RECVHOPLIMIT", IPV6_RECVHOPLIMIT, 1, IPV6_HOPLIMIT, 1, { { { { {
> - 0}}}}}, { { { { {
> - 0}}}}}, sizeof(int)}, {
> - "IPV6_RECVRTHDR", IPV6_RECVRTHDR, 0, IPV6_RTHDR, 1, { { { { {
> - 0}}}}}, { { { { {
> - 0}}}}}, sizeof(int)}, {
> - "IPV6_RECVHOPOPTS", IPV6_RECVHOPOPTS, 0, IPV6_HOPOPTS, 1, { { { { {
> - 0}}}}}, { { { { {
> - 0}}}}}, sizeof(int)}, {
> - "IPV6_RECVDSTOPTS", IPV6_RECVDSTOPTS, 0, IPV6_DSTOPTS, 1, { { { { {
> - 0}}}}}, { { { { {
> - 0}}}}}, sizeof(int)}, {
> - "IPV6_RECVTCLASS", IPV6_RECVTCLASS, 1, IPV6_TCLASS, 1, { { { { {
> - 0}}}}}, { { { { {
> - 0}}}}}, sizeof(int)},
> -/* make sure TCLASS stays when setting another opt */
> - {
> - "IPV6_RECVTCLASS (2)", IPV6_RECVHOPLIMIT, 1, IPV6_TCLASS, 0, { { { { {
> - 0}}}}}, { { { { {
> - 0}}}}}, sizeof(int)},
> -/* OLD values */
> - {
> - "IPV6_2292PKTINFO", IPV6_2292PKTINFO, 1, IPV6_2292PKTINFO, 1, { { { { {
> - 0}}}}}, { { { { {
> - 0}}}}}, sizeof(int)}, {
> - "IPV6_2292HOPLIMIT", IPV6_2292HOPLIMIT, 1, IPV6_2292HOPLIMIT, 1, { { { { {
> - 0}}}}}, { { { { {
> - 0}}}}}, sizeof(int)}, {
> - "IPV6_2292RTHDR", IPV6_2292RTHDR, 0, IPV6_2292RTHDR, 1, { { { { {
> - 0}}}}}, { { { { {
> - 0}}}}}, sizeof(int)}, {
> - "IPV6_2292HOPOPTS", IPV6_2292HOPOPTS, 0, IPV6_2292HOPOPTS, 1, { { { { {
> - 0}}}}}, { { { { {
> - 0}}}}}, sizeof(int)}, {
> - "IPV6_2292DSTOPTS", IPV6_2292DSTOPTS, 0, IPV6_2292DSTOPTS, 1, { { { { {
> - 0}}}}}, { { { { {
> -0}}}}}, sizeof(int)},};
> + /* RFC 3542, Section 4 */
> + { "IPV6_RECVPKTINFO", IPV6_RECVPKTINFO, 1, IPV6_PKTINFO, 1,
> + { { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> + sizeof(int) },
> + { "IPV6_RECVHOPLIMIT", IPV6_RECVHOPLIMIT, 1, IPV6_HOPLIMIT, 1,
> + { { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> + sizeof(int) },
> + { "IPV6_RECVRTHDR", IPV6_RECVRTHDR, 0, IPV6_RTHDR, 1,
> + { { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> + sizeof(int) },
> + { "IPV6_RECVHOPOPTS", IPV6_RECVHOPOPTS, 0, IPV6_HOPOPTS, 1,
> + { { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> + sizeof(int) },
> + { "IPV6_RECVDSTOPTS", IPV6_RECVDSTOPTS, 0, IPV6_DSTOPTS, 1,
> + { { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> + sizeof(int) },
> + { "IPV6_RECVTCLASS", IPV6_RECVTCLASS, 1, IPV6_TCLASS, 1,
> + { { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> + sizeof(int) },
> + /* make sure TCLASS stays when setting another opt */
> + { "IPV6_RECVTCLASS (2)", IPV6_RECVHOPLIMIT, 1, IPV6_TCLASS, 0,
> + { { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> + sizeof(int) },
> + /* OLD values */
> + { "IPV6_2292PKTINFO", IPV6_2292PKTINFO, 1, IPV6_2292PKTINFO, 1,
> + { { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> + sizeof(int) },
> + { "IPV6_2292HOPLIMIT", IPV6_2292HOPLIMIT, 1, IPV6_2292HOPLIMIT, 1,
> + { { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> + sizeof(int) },
> + { "IPV6_2292RTHDR", IPV6_2292RTHDR, 0, IPV6_2292RTHDR, 1,
> + { { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> + sizeof(int) },
> + { "IPV6_2292HOPOPTS", IPV6_2292HOPOPTS, 0, IPV6_2292HOPOPTS, 1,
> + { { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> + sizeof(int) },
> + { "IPV6_2292DSTOPTS", IPV6_2292DSTOPTS, 0, IPV6_2292DSTOPTS, 1,
> + { { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> + sizeof(int) },
> +};
>
> #define SOCOUNT (sizeof(sotab)/sizeof(sotab[0]))
ARRAY_SIZE()
> struct soprot {
> - int sop_pid; /* sender PID */
> - int sop_seq; /* sequence # */
> - int sop_dlen; /* tp_dat length */
> - unsigned char sop_dat[0]; /* user data */
> + int sop_pid; /* sender PID */
> + int sop_seq; /* sequence # */
> + int sop_dlen; /* tp_dat length */
> + unsigned char sop_dat[0]; /* user data */
> };
>
> unsigned char tpbuf[sizeof(struct soprot) + 2048];
> unsigned char rpbuf[sizeof(struct soprot) + 2048];
>
> unsigned char control[2048];
> -int clen;
>
> int seq;
>
> -int setupso(void)
> -{
> -/* add routing headers, other ancillary data here */
> - return 0;
> -}
> -
> struct cme {
> int cm_len;
> int cm_level;
> @@ -235,17 +213,13 @@ struct cme {
> uint32_t cmu_hops;
> } cmu;
> } cmtab[] = {
> - {
> - sizeof(uint32_t), SOL_IPV6, IPV6_TCLASS, {
> - 0x12}
> - }
> - , {
> - sizeof(uint32_t), SOL_IPV6, IPV6_HOPLIMIT, {
> - 0x21}
> - }
> -,};
> + { sizeof(uint32_t), SOL_IPV6, IPV6_TCLASS, {0x12} },
> + { sizeof(uint32_t), SOL_IPV6, IPV6_HOPLIMIT, {0x21} },
> +};
> +
> +#define CMCOUNT (sizeof(cmtab)/sizeof(cmtab[0]))
ARRAY_SIZE()
> -#define CMCOUNT (sizeof(cmtab)/sizeof(cmtab[0]))
> +unsigned int count;
>
> ssize_t sendall(int st)
> {
> @@ -254,7 +228,8 @@ ssize_t sendall(int st)
> struct iovec iov;
> struct soprot *psop;
> unsigned char *pd;
> - int i, ctotal;
> + unsigned int i;
> + int ctotal;
>
> psop = (struct soprot *)tpbuf;
> psop->sop_pid = htonl(getpid());
> @@ -300,32 +275,29 @@ void so_test(struct soent *psoe)
> int st;
>
> if (psoe->so_opt == -1) {
> - tst_resm(TBROK, "%s not present at compile time",
> + tst_brkm(TBROK, NULL, "%s not present at compile time",
> psoe->so_tname);
> - return;
> }
> if (psoe->so_clear || sr < 0) {
> if (sr < 0)
> close(sr);
> sr = socket(PF_INET6, SOCK_RAW, NH_TEST);
> if (sr < 0) {
> - tst_resm(TBROK, "%s socket: %s", psoe->so_tname,
> - strerror(errno));
> - return;
> + tst_brkm(TBROK | TERRNO, NULL, "%s socket: %s",
> + psoe->so_tname, strerror(errno));
^
Remove the strerror() if you added TERRNO
> }
> }
> memset(&sin6, 0, sizeof(sin6));
> sin6.sin6_family = AF_INET6;
> sin6.sin6_addr = in6addr_loopback;
> if (bind(sr, (struct sockaddr *)&sin6, sizeof(sin6)) < 0) {
> - tst_resm(TBROK, "%s: bind: %s", psoe->so_tname,
> - strerror(errno));
> + tst_brkm(TBROK | TERRNO, NULL, "%s: bind: %s",
> + psoe->so_tname, strerror(errno));
Here as well.
> }
> if (setsockopt(sr, SOL_IPV6, psoe->so_opt, &psoe->so_clrval,
> psoe->so_valsize) < 0) {
> - tst_resm(TBROK, "%s: setsockopt: %s", psoe->so_tname,
> - strerror(errno));
> - return;
> + tst_brkm(TBROK | TERRNO, NULL, "%s: setsockopt: %s",
> + psoe->so_tname, strerror(errno));
And here.
> }
> TEST(setsockopt(sr, SOL_IPV6, psoe->so_opt, &psoe->so_setval,
> psoe->so_valsize));
> @@ -337,25 +309,23 @@ void so_test(struct soent *psoe)
> valsize = psoe->so_valsize;
> TEST(getsockopt(sr, SOL_IPV6, psoe->so_opt, &sobuf, &valsize));
> if (TEST_RETURN != 0) {
> - tst_resm(TBROK, "%s set-get: getsockopt: %s", psoe->so_tname,
> - strerror(errno));
> - return;
> - } else if (memcmp(&psoe->so_setval, &sobuf, psoe->so_valsize))
> + tst_brkm(TBROK | TTERRNO, NULL, "%s set-get: getsockopt: %s",
> + psoe->so_tname, strerror(errno));
And here.
> + } else if (memcmp(&psoe->so_setval, &sobuf, psoe->so_valsize)) {
> tst_resm(TFAIL, "%s set-get optval != setval", psoe->so_tname);
> - else
> - tst_resm(TPASS, "%s set-get", psoe->so_tname);
> + return;
> + } else {
> + tst_resm(TINFO, "%s set-get", psoe->so_tname);
> + }
Again why do we exit on first failure? And why don't we rather adjust the
number of testcases?
> st = socket(PF_INET6, SOCK_RAW, NH_TEST);
> if (st < 0) {
> - tst_resm(TBROK, "%s transmit socket: %s", psoe->so_tname,
> - strerror(errno));
> - return;
> + tst_brkm(TBROK | TERRNO, NULL, "%s transmit socket: %s",
> + psoe->so_tname, strerror(errno));
strerror() here as well.
> }
> if (sendall(st) < 0) {
> - tst_resm(TBROK, "%s transmit sendto: %s", psoe->so_tname,
> - strerror(errno));
> - close(st);
> - return;
> + tst_brkm(TBROK, NULL, "%s transmit sendto: %s",
> + psoe->so_tname, strerror(errno));
And this should rather be changed to TBROK | TERRNO and the strerror() removed
to be consistent with the rest.
> }
> close(st);
>
> @@ -382,14 +352,12 @@ void so_test(struct soent *psoe)
> if (nfds < 0) {
> if (errno == EINTR)
> continue;
> - tst_resm(TBROK, "%s select: %s", psoe->so_tname,
> - strerror(errno));
> - return;
> + tst_brkm(TBROK | TERRNO, NULL, "%s select: %s",
> + psoe->so_tname, strerror(errno));
Here as well.
> }
> if (nfds == 0) {
> - tst_resm(TBROK, "%s recvmsg timed out",
> + tst_brkm(TBROK, NULL, "%s recvmsg timed out",
> psoe->so_tname);
> - return;
> }
> /* else, nfds == 1 */
> if (!FD_ISSET(sr, &rfds))
> @@ -405,11 +373,9 @@ void so_test(struct soent *psoe)
>
> cc = recvmsg(sr, &msg, 0);
> if (cc < 0) {
> - tst_resm(TBROK, "%s recvmsg: %s",
> + tst_brkm(TBROK | TERRNO, NULL, "%s recvmsg: %s",
> psoe->so_tname, strerror(errno));
And here.
> - return;
> }
> -/* check pid & seq here */
> break;
> }
> gotone = 0;
> @@ -429,11 +395,31 @@ void so_test(struct soent *psoe)
> return;
> }
> }
> -/* check contents here */
> - if (psoe->so_dorecv)
> - tst_resm(gotone ? TPASS : TFAIL, "%s receive",
> - psoe->so_tname);
> + if (psoe->so_dorecv) {
> + if (gotone)
> + tst_resm(TINFO, "%s receive", psoe->so_tname);
> + else
> + tst_resm(TFAIL, "%s receive", psoe->so_tname);
> + }
Again I don't like this, let's keep the PASS/FAIL here.
> }
> +
> + count++;
> +}
> +
> +void test_soent(void)
> +{
> + unsigned int i;
> +
> + for (i = 0; i < SOCOUNT; ++i) {
> + sotab[i].so_clrval.sou_bool = 0;
> + sotab[i].so_setval.sou_bool = 1;
> + so_test(&sotab[i]);
> + }
> +
> + if (count < SOCOUNT)
> + tst_resm(TPASS, "socket set-get/receive tests fail");
^
Should this be TFAIL?
> + else
> + tst_resm(TPASS, "socket set-get/receive tests succeed");
> }
>
> #define IPV6_ADDR_NODE 1
> @@ -449,7 +435,7 @@ static int ipv6_addr_scope(struct in6_addr *pin6)
> return IPV6_ADDR_NODE;
> return IPV6_ADDR_GLOBAL;
> }
> -#endif /* HAVE_IFADDRS_H */
> +#endif
If the #ifdef #endif pair spans over more than a few lines it's fine to have
this comment there.
> int getsock(char *tname, struct sockaddr_in6 *psin6_arg, int scope)
> {
> @@ -462,8 +448,7 @@ int getsock(char *tname, struct sockaddr_in6 *psin6_arg, int scope)
> int s;
>
> if (!pifa_head && getifaddrs(&pifa_head)) {
> - tst_resm(TBROK, "%s: getifaddrs failed", tname);
> - return -1;
> + tst_brkm(TBROK, NULL, "%s: getifaddrs failed", tname);
> }
> if (psin6_arg)
> ifindex = psin6_arg->sin6_scope_id;
> @@ -483,20 +468,19 @@ int getsock(char *tname, struct sockaddr_in6 *psin6_arg, int scope)
> (this_scope > 0 && this_scope != scope)))
> continue;
> psin6->sin6_scope_id = if_nametoindex(pifa->ifa_name);
> - if ((ifindex < 0 && -ifindex == psin6->sin6_scope_id) ||
> - (ifindex > 0 && ifindex != psin6->sin6_scope_id))
> + if ((ifindex < 0 && -(unsigned int)ifindex ==
Eh, casting to (unsigned int) and then negating it with - sounds wrong. What
was the problem here?
> + psin6->sin6_scope_id) || (ifindex > 0 &&
> + (unsigned int)ifindex != psin6->sin6_scope_id))
> continue;
> s = socket(PF_INET6, SOCK_DGRAM, 0);
> if (s < 0) {
> - tst_resm(TBROK, "%s: socket %s", tname,
> + tst_brkm(TBROK | TERRNO, NULL, "%s: socket %s", tname,
> strerror(errno));
The strerror() again.
> - return -1;
> }
> if (bind(s, pifa->ifa_addr, sizeof(struct sockaddr_in6)) < 0) {
> - tst_resm(TBROK, "%s: bind \"%s\": %s", tname,
> - inet_ntop(AF_INET6, &psin6->sin6_addr, strbuf,
> - sizeof(strbuf)), strerror(errno));
> - return -1;
> + tst_brkm(TBROK | TERRNO, NULL, "%s: bind \"%s\": %s",
> + tname, inet_ntop(AF_INET6, &psin6->sin6_addr,
> + strbuf, sizeof(strbuf)), strerror(errno));
Here as well.
> }
> if (psin6_arg) {
> *psin6_arg = *psin6;
> @@ -530,15 +514,13 @@ int getsock(char *tname, struct sockaddr_in6 *psin6_arg, int scope)
> else
> intfstr = 0;
>
> - if (intfstr)
> - tst_resm(TBROK, "%s: getsock : no%s addresses%s %d",
> - tname, scopestr, intfstr, ifindex);
> - else
> + if (intfstr == 0) {
> tst_resm(TBROK, "%s: getsock : no%s addresses",
> tname, scopestr);
> + }
This change does not look right. Looks like the purpose of the code was to add
more information to the tst_resm() message if intfstr was not zero and this
change removed the tst_resm() for intfstr != 0. Or was the previous code wrong
(if it was, I would expect description of the change in the commit message)?
> }
> return -1;
> -#else /* HAVE_IFADDRS_H */
> +#else
> return -1;
> #endif
> }
> @@ -563,98 +545,76 @@ void test_pktinfo(void)
>
> s_snd = getsock(tname, 0, IPV6_ADDR_GLOBAL);
> if (s_snd < 0) {
> - tst_resm(TBROK, "%s: can't create send socket", tname);
> - return;
> + tst_brkm(TBROK, NULL, "%s: can't create send socket", tname);
> }
> /* global-scope address, interface X */
> sa_rcv[0].sin6_scope_id = 0;
> s_rcv[0] = getsock(tname, &sa_rcv[0], IPV6_ADDR_GLOBAL);
> if (s_rcv[0] == -1) {
> - tst_resm(TBROK, "%s: only link-scope addresses", tname);
> - return;
> + tst_brkm(TBROK, NULL, "%s: only link-scope addresses", tname);
> }
> /* link-local-scope address, interface X */
> sa_rcv[1].sin6_scope_id = sa_rcv[0].sin6_scope_id;
> s_rcv[1] = getsock(tname, &sa_rcv[1], IPV6_ADDR_LINK);
> if (s_rcv[1] < 0) {
> - tst_resm(TBROK, "%s: no link-local address on ifindex %d",
> + tst_brkm(TBROK, NULL, "%s: no link-local address on ifindex %d",
> tname, sa_rcv[0].sin6_scope_id);
> - return;
> }
> /* link-local-scope address, interface Y */
> sa_rcv[2].sin6_scope_id = -sa_rcv[0].sin6_scope_id;
> s_rcv[2] = getsock(tname, &sa_rcv[2], IPV6_ADDR_LINK);
> if (s_rcv[2] < 0) {
> - tst_resm(TBROK, "%s: only one interface?", tname);
> - return;
> + tst_brkm(TBROK, NULL, "%s: only one interface?", tname);
> }
> /* send to rcv1 to verify communication */
> /* force to rcv2 w/ PKTINFO */
> -/* TESTS: */
> -/* sticky set-get */
> + /* TESTS: */
> + /* sticky set-get */
> tname = "IPV6_PKTINFO set";
> pi.ipi6_addr = sa_rcv[1].sin6_addr;
> pi.ipi6_ifindex = sa_rcv[1].sin6_scope_id;
> TEST(setsockopt(s_snd, SOL_IPV6, IPV6_PKTINFO, &pi, sizeof(pi)));
> - if (TEST_RETURN != 0)
> + if (TEST_RETURN != 0) {
> tst_resm(TFAIL, "%s: %s", tname, strerror(errno));
> - else
> - tst_resm(TPASS, "%s", tname);
> + return;
> + } else {
> + tst_resm(TINFO, "%s", tname);
> + }
Again, why do we exit on first failure?
--
Cyril Hrubis
chrubis@suse.cz
------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
next prev parent reply other threads:[~2015-04-30 13:34 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-31 7:46 [LTP] [PATCH 1/6] lib6/runcc.c: use TCONF instead of TBROK when no C compiler is present Xing Gu
2015-03-31 7:46 ` [LTP] [PATCH 2/6] lib6/asapi_04.c: cleanup Xing Gu
2015-04-30 11:55 ` Cyril Hrubis
2015-04-30 12:18 ` Cyril Hrubis
2015-03-31 7:46 ` [LTP] [PATCH 3/6] lib6/asapi_05.c: cleanup Xing Gu
2015-04-30 12:15 ` Cyril Hrubis
2015-03-31 7:46 ` [LTP] [PATCH 4/6] lib6/asapi_06.c: cleanup Xing Gu
2015-04-30 13:33 ` Cyril Hrubis [this message]
2015-03-31 7:46 ` [LTP] [PATCH 5/6] lib6/getaddrinfo_01.c: cleanup Xing Gu
2015-03-31 7:46 ` [LTP] [PATCH 6/6] ipv6_lib: add it into default Xing Gu
2015-03-31 14:52 ` [LTP] [PATCH 1/6] lib6/runcc.c: use TCONF instead of TBROK when no C compiler is present Alexey Kodanev
2015-04-01 1:38 ` gux.fnst
2015-04-01 7:15 ` Alexey Kodanev
2015-04-14 9:24 ` gux.fnst
2015-04-28 17:24 ` Cyril Hrubis
[not found] ` <1433247689-3984-1-git-send-email-zenglg.jy@cn.fujitsu.com>
[not found] ` <1433247689-3984-2-git-send-email-zenglg.jy@cn.fujitsu.com>
2015-06-06 12:52 ` [LTP] [PATCH v2 1/6] lib6/runcc.c: Cleanup Alexey Kodanev
2015-06-16 12:24 ` [LTP] [PATCH v3 1/7] SAFE_MACROS: Add socket(), bind(), listen(), connect() and getsockname() Zeng Linggang
2015-06-16 12:24 ` [LTP] [PATCH v3 2/7] lib6/runcc.c: Cleanup Zeng Linggang
2015-06-19 16:08 ` Alexey Kodanev
2015-06-16 12:24 ` [LTP] [PATCH v3 3/7] lib6/asapi_04.c: Cleanup Zeng Linggang
2015-06-16 12:24 ` [LTP] [PATCH v3 4/7] lib6/asapi_05.c: Cleanup Zeng Linggang
2015-06-16 12:24 ` [LTP] [PATCH v3 5/7] lib6/asapi_06.c: Cleanup Zeng Linggang
2015-06-16 12:24 ` [LTP] [PATCH v3 6/7] lib6/getaddrinfo_01.c: Cleanup Zeng Linggang
2015-06-16 12:24 ` [LTP] [PATCH v3 7/7] ipv6_lib: Add it into default Zeng Linggang
2015-06-19 14:34 ` [LTP] [PATCH v3 1/7] SAFE_MACROS: Add socket(), bind(), listen(), connect() and getsockname() Alexey Kodanev
2015-07-09 3:05 ` [LTP] [PATCH v4 01/11] " Zeng Linggang
2015-07-09 3:05 ` [LTP] [PATCH v4 02/11] lib6/runcc.c: Cleanup Zeng Linggang
2015-07-09 3:05 ` [LTP] [PATCH v4 03/11] asapi_01: Use 'tst_tmpdir' and more cleanup Zeng Linggang
2015-07-09 3:05 ` [LTP] [PATCH v4 04/11] asapi_02: " Zeng Linggang
2015-07-09 3:05 ` [LTP] [PATCH v4 05/11] asapi_03: " Zeng Linggang
2015-07-09 3:05 ` [LTP] [PATCH v4 06/11] lib6/asapi_04.c: Cleanup Zeng Linggang
2015-07-09 3:05 ` [LTP] [PATCH v4 07/11] lib6/asapi_05.c: Cleanup Zeng Linggang
2015-07-09 3:05 ` [LTP] [PATCH v4 08/11] lib6/asapi_06.c: Cleanup Zeng Linggang
2015-07-09 3:05 ` [LTP] [PATCH v4 09/11] asapi_07: Use 'tst_tmpdir' and more cleanup Zeng Linggang
2015-07-09 3:05 ` [LTP] [PATCH v4 10/11] lib6/getaddrinfo_01.c: Cleanup Zeng Linggang
2015-07-09 3:05 ` [LTP] [PATCH v4 11/11] ipv6_lib: Add it into default Zeng Linggang
2015-07-15 15:49 ` [LTP] [PATCH v4 01/11] SAFE_MACROS: Add socket(), bind(), listen(), connect() and getsockname() Alexey Kodanev
2015-07-16 2:30 ` Zeng Linggang
2015-07-16 5:30 ` [LTP] [PATCH v5 " Zeng Linggang
2015-07-16 5:30 ` [LTP] [PATCH v5 02/11] lib6/runcc.c: Cleanup Zeng Linggang
2015-08-05 17:17 ` Cyril Hrubis
2015-08-05 17:29 ` Cyril Hrubis
[not found] ` <1441016132-18804-1-git-send-email-zenglg.jy@cn.fujitsu.com>
[not found] ` <1441016132-18804-2-git-send-email-zenglg.jy@cn.fujitsu.com>
2015-09-14 9:56 ` [LTP] [PATCH v6 2/7] SAFE_MACROS: Add socket(), bind(), listen(), connect() and getsockname() Alexey Kodanev
2015-07-16 5:30 ` [LTP] [PATCH v5 03/11] asapi_01: Use 'tst_tmpdir' and more cleanup Zeng Linggang
2015-07-16 5:30 ` [LTP] [PATCH v5 04/11] asapi_02: " Zeng Linggang
2015-07-16 5:30 ` [LTP] [PATCH v5 05/11] asapi_03: " Zeng Linggang
2015-07-16 5:30 ` [LTP] [PATCH v5 06/11] lib6/asapi_04.c: Cleanup Zeng Linggang
2015-07-16 5:30 ` [LTP] [PATCH v5 07/11] lib6/asapi_05.c: Cleanup Zeng Linggang
2015-07-16 5:30 ` [LTP] [PATCH v5 08/11] lib6/asapi_06.c: Cleanup Zeng Linggang
2015-07-16 5:30 ` [LTP] [PATCH v5 09/11] asapi_07: Use 'tst_tmpdir' and more cleanup Zeng Linggang
2015-07-16 5:30 ` [LTP] [PATCH v5 10/11] lib6/getaddrinfo_01.c: Cleanup Zeng Linggang
2015-07-16 5:30 ` [LTP] [PATCH v5 11/11] ipv6_lib: Add it into default Zeng Linggang
2015-08-05 14:00 ` [LTP] [PATCH v5 01/11] SAFE_MACROS: Add socket(), bind(), listen(), connect() and getsockname() Cyril Hrubis
[not found] ` <55C236CB.8060508@oracle.com>
[not found] ` <1438858276.11271.20.camel@G08FNSTD140232>
2015-08-06 11:56 ` Cyril Hrubis
[not found] ` <1433247689-3984-3-git-send-email-zenglg.jy@cn.fujitsu.com>
2015-06-06 13:22 ` [LTP] [PATCH v2 2/6] lib6/asapi_04.c: Cleanup Alexey Kodanev
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150430133344.GD24720@rei.suse.de \
--to=chrubis@suse.cz \
--cc=gux.fnst@cn.fujitsu.com \
--cc=ltp-list@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.