[firefly] [PATCH 2/3 RFC v2] selftest: net: update socket test to use new testing framework

Daniel Baluta daniel.baluta at gmail.com
Thu Apr 25 13:30:00 EEST 2013


On Thu, Apr 25, 2013 at 10:45 AM, Alexandru Copot
<alex.mihai.c at gmail.com> wrote:
> Signed-of by Alexandru Copot <alex.mihai.c at gmail.com>
> Cc: Daniel Baluta <dbaluta at ixiacom.com>
s/Signed-of by/Signed-of-by
> ---
>  tools/testing/selftests/net/Makefile |  14 +++--
>  tools/testing/selftests/net/socket.c | 108 +++++++++++++++++++++++++----------
>  2 files changed, 88 insertions(+), 34 deletions(-)
>
> diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile
> index 750512b..7984f80 100644
> --- a/tools/testing/selftests/net/Makefile
> +++ b/tools/testing/selftests/net/Makefile
> @@ -3,17 +3,23 @@
>  CC = $(CROSS_COMPILE)gcc
>  CFLAGS = -Wall -O2 -g
>
> -CFLAGS += -I../../../../usr/include/
> +CFLAGS += -I../../../../usr/include/ -I../lib
>
>  NET_PROGS = socket psock_fanout psock_tpacket
>
> +LIB = ../lib/selftests.a
> +
>  all: $(NET_PROGS)
> -%: %.c
> -       $(CC) $(CFLAGS) -o $@ $^
> +
> +socket: socket.o $(LIB)
> +
> +%.o: %.c
> +       $(CC) $(CFLAGS) -c -o $@ $^
> +
>
>  run_tests: all
>         @/bin/sh ./run_netsocktests || echo "sockettests: [FAIL]"
>         @/bin/sh ./run_afpackettests || echo "afpackettests: [FAIL]"
>
>  clean:
> -       $(RM) $(NET_PROGS)
> +       $(RM) $(NET_PROGS) *.o
> diff --git a/tools/testing/selftests/net/socket.c b/tools/testing/selftests/net/socket.c
> index 0f227f2..198a57b 100644
> --- a/tools/testing/selftests/net/socket.c
> +++ b/tools/testing/selftests/net/socket.c
> @@ -6,6 +6,8 @@
>  #include <sys/socket.h>
>  #include <netinet/in.h>
>
> +#include "selftests.h"
> +
>  struct socket_testcase {
>         int     domain;
>         int     type;
> @@ -22,7 +24,7 @@ struct socket_testcase {
>         int     nosupport_ok;
>  };
>
> -static struct socket_testcase tests[] = {
> +static struct socket_testcase tests_inet[] = {
>         { AF_MAX,  0,           0,           -EAFNOSUPPORT,    0 },
>         { AF_INET, SOCK_STREAM, IPPROTO_TCP, 0,                1  },
>         { AF_INET, SOCK_DGRAM,  IPPROTO_TCP, -EPROTONOSUPPORT, 1  },
> @@ -30,58 +32,104 @@ static struct socket_testcase tests[] = {
>         { AF_INET, SOCK_STREAM, IPPROTO_UDP, -EPROTONOSUPPORT, 1  },
>  };
>
> +static struct socket_testcase tests_inet6[] = {
> +       { AF_INET6, SOCK_STREAM, IPPROTO_TCP, 0,                1  },
> +       { AF_INET6, SOCK_DGRAM,  IPPROTO_TCP, -EPROTONOSUPPORT, 1  },
> +       { AF_INET6, SOCK_DGRAM,  IPPROTO_UDP, 0,                1  },
> +       { AF_INET6, SOCK_STREAM, IPPROTO_UDP, -EPROTONOSUPPORT, 1  },
> +};
> +
> +static struct socket_testcase tests_unix[] = {
> +       { AF_UNIX, SOCK_STREAM,    0,           0,                1  },
> +       { AF_UNIX, SOCK_DGRAM,     0,           0,                1  },
> +       { AF_UNIX, SOCK_SEQPACKET, 0,           0,                1  },
> +       { AF_UNIX, SOCK_STREAM,    PF_UNIX,     0,                1  },
> +       { AF_UNIX, SOCK_DGRAM,     PF_UNIX,     0,                1  },
> +       { AF_UNIX, SOCK_SEQPACKET, PF_UNIX,     0,                1  },
> +       { AF_UNIX, SOCK_STREAM,    IPPROTO_TCP, -EPROTONOSUPPORT, 1  },
> +       { AF_UNIX, SOCK_STREAM,    IPPROTO_UDP, -EPROTONOSUPPORT, 1  },
> +       { AF_UNIX, SOCK_DCCP,      0,           -ESOCKTNOSUPPORT, 1  },
> +};
> +
>  #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
>  #define ERR_STRING_SZ  64
>
> -static int run_tests(void)
> +static test_result_t my_run_testcase(void *arg)
>  {
> +       struct socket_testcase *s = (struct socket_testcase*)arg;
> +       int fd;
>         char err_string1[ERR_STRING_SZ];
>         char err_string2[ERR_STRING_SZ];
> -       int i, err;
> -
> -       err = 0;
> -       for (i = 0; i < ARRAY_SIZE(tests); i++) {
> -               struct socket_testcase *s = &tests[i];
> -               int fd;
> +       test_result_t ret;
>
> -               fd = socket(s->domain, s->type, s->protocol);
> -               if (fd < 0) {
> -                       if (s->nosupport_ok &&
> -                           errno == EAFNOSUPPORT)
> -                               continue;
> +       ret = TEST_PASS;
> +       fd = socket(s->domain, s->type, s->protocol);
> +       if (fd < 0) {
> +               pass_if(s->nosupport_ok && errno == EAFNOSUPPORT, out, ret);
>
> -                       if (s->expect < 0 &&
> -                           errno == -s->expect)
> -                               continue;
> +               pass_if(s->expect < 0 && errno == -s->expect, out, ret);
>
> -                       strerror_r(-s->expect, err_string1, ERR_STRING_SZ);
> -                       strerror_r(errno, err_string2, ERR_STRING_SZ);
> +               strerror_r(-s->expect, err_string1, ERR_STRING_SZ);
> +               strerror_r(errno, err_string2, ERR_STRING_SZ);
>
> -                       fprintf(stderr, "socket(%d, %d, %d) expected "
> +               fprintf(stderr, "socket(%d, %d, %d) expected "
>                                 "err (%s) got (%s)\n",
>                                 s->domain, s->type, s->protocol,
>                                 err_string1, err_string2);
>
> -                       err = -1;
> -                       break;
> -               } else {
> -                       close(fd);
> +               return TEST_FAIL;
> +       } else {
> +               close(fd);
>
> -                       if (s->expect < 0) {
> -                               strerror_r(errno, err_string1, ERR_STRING_SZ);
> +               if (s->expect < 0) {
> +                       strerror_r(errno, err_string1, ERR_STRING_SZ);
>
> -                               fprintf(stderr, "socket(%d, %d, %d) expected "
> +                       fprintf(stderr, "socket(%d, %d, %d) expected "
>                                         "success got err (%s)\n",
>                                         s->domain, s->type, s->protocol,
>                                         err_string1);
>
> -                               err = -1;
> -                               break;
> -                       }
> +                       return TEST_FAIL;
>                 }
>         }
> +out:
> +       return ret;
> +}
>
> -       return err;
> +static int run_tests(void)
> +{
> +       int rc;
> +       struct generic_test test1 = {
> +               .name = "socket AF_INET",
> +               .prepare = NULL,
> +               .run = my_run_testcase,
> +               .testcases = tests_inet,
> +               .testcase_size = sizeof(struct socket_testcase),
> +               .testcase_count = ARRAY_SIZE(tests_inet),
> +       };
> +       struct generic_test test2 = {
> +               .name = "socket AF_INET6",
> +               .prepare = NULL,
> +               .run = my_run_testcase,
> +               .testcases = tests_inet6,
> +               .testcase_size = sizeof(struct socket_testcase),
> +               .testcase_count = ARRAY_SIZE(tests_inet6),
> +       };
> +       struct generic_test test3 = {
> +               .name = "socket AF_UNIX",
> +               .prepare = NULL,
> +               .run = my_run_testcase,
> +               .testcases = tests_unix,
> +               .testcase_size = sizeof(struct socket_testcase),
> +               .testcase_count = ARRAY_SIZE(tests_unix),
> +       };
> +
> +       rc = 0;
> +       rc |= run_all_tests(&test1, NULL);
> +       rc |= run_all_tests(&test2, NULL);
> +       rc |= run_all_tests(&test3, NULL);
> +
> +       return rc;
>  }

Looks good. Thanks Alex.


More information about the firefly mailing list