CVS commit: src/tests/lib/libc/rpc
Module Name:src Committed By: christos Date: Sat Aug 27 14:36:22 UTC 2016 Modified Files: src/tests/lib/libc/rpc: t_rpc.c Log Message: skip if we are not running rpcbind. To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/tests/lib/libc/rpc/t_rpc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/tests/lib/libc/rpc/t_rpc.c diff -u src/tests/lib/libc/rpc/t_rpc.c:1.9 src/tests/lib/libc/rpc/t_rpc.c:1.10 --- src/tests/lib/libc/rpc/t_rpc.c:1.9 Fri Nov 27 08:59:40 2015 +++ src/tests/lib/libc/rpc/t_rpc.c Sat Aug 27 10:36:22 2016 @@ -1,7 +1,7 @@ -/* $NetBSD: t_rpc.c,v 1.9 2015/11/27 13:59:40 christos Exp $ */ +/* $NetBSD: t_rpc.c,v 1.10 2016/08/27 14:36:22 christos Exp $ */ #include -__RCSID("$NetBSD: t_rpc.c,v 1.9 2015/11/27 13:59:40 christos Exp $"); +__RCSID("$NetBSD: t_rpc.c,v 1.10 2016/08/27 14:36:22 christos Exp $"); #include #include @@ -21,12 +21,12 @@ __RCSID("$NetBSD: t_rpc.c,v 1.9 2015/11/ #define SKIPX(ev, msg, ...) do { \ atf_tc_skip(msg, __VA_ARGS__); \ - return; \ + return ev; \ } while(/*CONSTCOND*/0) #else -#define ERRX(ev, msg, ...) errx(ev, msg, __VA_ARGS__) -#define SKIPX(ev, msg, ...) errx(ev, msg, __VA_ARGS__) +#define ERRX(ev, msg, ...) errx(EXIT_FAILURE, msg, __VA_ARGS__) +#define SKIPX(ev, msg, ...) errx(EXIT_FAILURE, msg, __VA_ARGS__) #endif #ifdef DEBUG @@ -72,13 +72,13 @@ onehost(const char *host, const char *tr __rpc_control(CLCR_SET_RPCB_TIMEOUT, ); if ((clnt = clnt_create(host, RPCBPROG, RPCBVERS, transp)) == NULL) - SKIPX(EXIT_FAILURE, "clnt_create (%s)", clnt_spcreateerror("")); + SKIPX(, "clnt_create (%s)", clnt_spcreateerror("")); tv.tv_sec = 1; tv.tv_usec = 0; if (clnt_call(clnt, RPCBPROC_NULL, xdr_void, NULL, xdr_void, NULL, tv) != RPC_SUCCESS) - ERRX(EXIT_FAILURE, "clnt_call (%s)", clnt_sperror(clnt, "")); + ERRX(, "clnt_call (%s)", clnt_sperror(clnt, "")); clnt_control(clnt, CLGET_SVC_ADDR, (char *) ); reply(NULL, , NULL); } @@ -100,13 +100,13 @@ server(struct svc_req *rqstp, SVCXPRT *t switch (rqstp->rq_proc) { case NULLPROC: if (!svc_sendreply(transp, (xdrproc_t)xdr_void, NULL)) - ERRX(EXIT_FAILURE, "svc_sendreply failed %d", 0); + ERRX(, "svc_sendreply failed %d", 0); return; case PLUSONE: break; case DESTROY: if (!svc_sendreply(transp, (xdrproc_t)xdr_void, NULL)) - ERRX(EXIT_FAILURE, "svc_sendreply failed %d", 0); + ERRX(, "svc_sendreply failed %d", 0); svc_destroy(transp); exit(0); default: @@ -121,7 +121,7 @@ server(struct svc_req *rqstp, SVCXPRT *t DPRINTF("About to increment\n"); num++; if (!svc_sendreply(transp, (xdrproc_t)xdr_int, (void *))) - ERRX(EXIT_FAILURE, "svc_sendreply failed %d", 1); + ERRX(, "svc_sendreply failed %d", 1); DPRINTF("Leaving server procedure.\n"); } @@ -176,7 +176,7 @@ regtest(const char *hostname, const char svc_fdset_init(p ? SVC_FDSET_POLL : 0); if (!svc_create(server, PROGNUM, VERSNUM, transp)) - ERRX(EXIT_FAILURE, "Cannot create server %d", num); + SKIPX(EXIT_FAILURE, "Cannot create server %d", num); switch ((pid = fork())) { case 0:
CVS commit: src/tests/lib/libc/rpc
Module Name:src Committed By: christos Date: Fri Nov 27 13:59:40 UTC 2015 Modified Files: src/tests/lib/libc/rpc: t_rpc.c Log Message: fix double negation To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/tests/lib/libc/rpc/t_rpc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/tests/lib/libc/rpc/t_rpc.c diff -u src/tests/lib/libc/rpc/t_rpc.c:1.8 src/tests/lib/libc/rpc/t_rpc.c:1.9 --- src/tests/lib/libc/rpc/t_rpc.c:1.8 Tue Nov 10 13:13:01 2015 +++ src/tests/lib/libc/rpc/t_rpc.c Fri Nov 27 08:59:40 2015 @@ -1,7 +1,7 @@ -/* $NetBSD: t_rpc.c,v 1.8 2015/11/10 18:13:01 christos Exp $ */ +/* $NetBSD: t_rpc.c,v 1.9 2015/11/27 13:59:40 christos Exp $ */ #include -__RCSID("$NetBSD: t_rpc.c,v 1.8 2015/11/10 18:13:01 christos Exp $"); +__RCSID("$NetBSD: t_rpc.c,v 1.9 2015/11/27 13:59:40 christos Exp $"); #include #include @@ -140,9 +140,9 @@ rawtest(const char *arg) svc = svc_raw_create(); if (svc == NULL) - ERRX(EXIT_FAILURE, "Can't not create server %d", num); + ERRX(EXIT_FAILURE, "Cannot create server %d", num); if (!svc_reg(svc, PROGNUM, VERSNUM, server, NULL)) - ERRX(EXIT_FAILURE, "Can't not register server %d", num); + ERRX(EXIT_FAILURE, "Cannot register server %d", num); clnt = clnt_raw_create(PROGNUM, VERSNUM); if (clnt == NULL) @@ -176,7 +176,7 @@ regtest(const char *hostname, const char svc_fdset_init(p ? SVC_FDSET_POLL : 0); if (!svc_create(server, PROGNUM, VERSNUM, transp)) - ERRX(EXIT_FAILURE, "Can't not create server %d", num); + ERRX(EXIT_FAILURE, "Cannot create server %d", num); switch ((pid = fork())) { case 0:
CVS commit: src/tests/lib/libc/rpc
Module Name:src Committed By: christos Date: Tue Nov 10 18:13:01 UTC 2015 Modified Files: src/tests/lib/libc/rpc: t_rpc.c Log Message: CID 1338516: Handle svc_run() returning. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/tests/lib/libc/rpc/t_rpc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/tests/lib/libc/rpc/t_rpc.c diff -u src/tests/lib/libc/rpc/t_rpc.c:1.7 src/tests/lib/libc/rpc/t_rpc.c:1.8 --- src/tests/lib/libc/rpc/t_rpc.c:1.7 Sun Nov 8 14:40:06 2015 +++ src/tests/lib/libc/rpc/t_rpc.c Tue Nov 10 13:13:01 2015 @@ -1,7 +1,7 @@ -/* $NetBSD: t_rpc.c,v 1.7 2015/11/08 19:40:06 christos Exp $ */ +/* $NetBSD: t_rpc.c,v 1.8 2015/11/10 18:13:01 christos Exp $ */ #include -__RCSID("$NetBSD: t_rpc.c,v 1.7 2015/11/08 19:40:06 christos Exp $"); +__RCSID("$NetBSD: t_rpc.c,v 1.8 2015/11/10 18:13:01 christos Exp $"); #include #include @@ -182,6 +182,7 @@ regtest(const char *hostname, const char case 0: DPRINTF("Calling svc_run\n"); svc_run(); + ERRX(EXIT_FAILURE, "svc_run returned %d!", num); case -1: ERRX(EXIT_FAILURE, "Fork failed (%s)", strerror(errno)); default:
CVS commit: src/tests/lib/libc/rpc
Module Name:src Committed By: christos Date: Sun Nov 8 19:38:04 UTC 2015 Modified Files: src/tests/lib/libc/rpc: t_rpc.c Log Message: Add more rpc tests. XXX: Need rpcbind running. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/tests/lib/libc/rpc/t_rpc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/tests/lib/libc/rpc/t_rpc.c diff -u src/tests/lib/libc/rpc/t_rpc.c:1.5 src/tests/lib/libc/rpc/t_rpc.c:1.6 --- src/tests/lib/libc/rpc/t_rpc.c:1.5 Fri Nov 6 10:30:47 2015 +++ src/tests/lib/libc/rpc/t_rpc.c Sun Nov 8 14:38:04 2015 @@ -1,19 +1,21 @@ -/* $NetBSD: t_rpc.c,v 1.5 2015/11/06 15:30:47 christos Exp $ */ +/* $NetBSD: t_rpc.c,v 1.6 2015/11/08 19:38:04 christos Exp $ */ #include -__RCSID("$NetBSD: t_rpc.c,v 1.5 2015/11/06 15:30:47 christos Exp $"); +__RCSID("$NetBSD: t_rpc.c,v 1.6 2015/11/08 19:38:04 christos Exp $"); #include #include #include -// #include #include +#include #include #include #include +#include #include - +#define DEBUG +#define TEST #ifndef TEST #include @@ -86,8 +88,9 @@ onehost(const char *host, const char *tr #define PROGNUM 0x81 #define VERSNUM 0x01 #define PLUSONE 1 +#define DESTROY 2 -static struct timeval tout = {0, 0}; +static struct timeval tout = {1, 0}; static void server(struct svc_req *rqstp, SVCXPRT *transp) @@ -103,6 +106,11 @@ server(struct svc_req *rqstp, SVCXPRT *t return; case PLUSONE: break; + case DESTROY: + if (!svc_sendreply(transp, (xdrproc_t)xdr_void, NULL)) + ERRX(EXIT_FAILURE, "svc_sendreply failed %d", 0); + svc_destroy(transp); + exit(0); default: svcerr_noproc(transp); return; @@ -155,6 +163,55 @@ rawtest(const char *arg) return EXIT_SUCCESS; } +static int +regtest(const char *hostname, const char *transp, const char *arg, int p) +{ + CLIENT *clnt; + int num, resp; + enum clnt_stat rv; + pid_t pid; + + if (arg) + num = atoi(arg); + else + num = 0; + + svc_fdset_init(p ? SVC_FDSET_POLL : 0); + if (!svc_create(server, PROGNUM, VERSNUM, transp)) + ERRX(EXIT_FAILURE, "Can't not create server %d", num); + + switch ((pid = fork())) { + case 0: + DPRINTF("Calling svc_run\n"); + svc_run(); + case -1: + ERRX(EXIT_FAILURE, "Fork failed (%s)", strerror(errno)); + default: + sleep(1); + break; + } + + DPRINTF("Initializing client\n"); + clnt = clnt_create(hostname, PROGNUM, VERSNUM, transp); + if (clnt == NULL) + ERRX(EXIT_FAILURE, "%s", + clnt_spcreateerror("clnt_raw_create")); + rv = clnt_call(clnt, PLUSONE, (xdrproc_t)xdr_int, (void *), + (xdrproc_t)xdr_int, (void *), tout); + if (rv != RPC_SUCCESS) + ERRX(EXIT_FAILURE, "clnt_call: %s", clnt_sperrno(rv)); + DPRINTF("Got %d\n", resp); + if (++num != resp) + ERRX(EXIT_FAILURE, "expected %d got %d", num, resp); + rv = clnt_call(clnt, DESTROY, (xdrproc_t)xdr_void, NULL, + (xdrproc_t)xdr_void, NULL, tout); + if (rv != RPC_SUCCESS) + ERRX(EXIT_FAILURE, "clnt_call: %s", clnt_sperrno(rv)); + clnt_destroy(clnt); + + return EXIT_SUCCESS; +} + #ifdef TEST static void @@ -173,11 +230,18 @@ int main(int argc, char *argv[]) { int ch; + int s, p; const char *transp = "udp"; - - while ((ch = getopt(argc, argv, "rtu")) != -1) + p = s = 0; + while ((ch = getopt(argc, argv, "prstu")) != -1) switch (ch) { + case 'p': + p = 1; + break; + case 's': + s = 1; + break; case 't': transp = "tcp"; break; @@ -188,7 +252,8 @@ main(int argc, char *argv[]) transp = NULL; break; default: - fprintf(stderr, "Usage: %s -[r|t|u] [...]\n", + fprintf(stderr, + "Usage: %s -[r|s|t|u] [...]\n", getprogname()); return EXIT_FAILURE; } @@ -201,7 +266,9 @@ main(int argc, char *argv[]) } else { for (; optind < argc; optind++) { if (transp) -onehost(argv[optind], transp); +s == 0 ? +onehost(argv[optind], transp) : +regtest(argv[optind], transp, "1", p); else rawtest(argv[optind]); } @@ -248,11 +315,64 @@ ATF_TC_BODY(raw, tc) rawtest(NULL); } + +ATF_TC(tcp); +ATF_TC_HEAD(tcp, tc) +{ + atf_tc_set_md_var(tc, "descr", "Checks svc tcp (select)"); +} + +ATF_TC_BODY(tcp, tc) +{ + regtest("localhost", "tcp", 1, 0); + +} + +ATF_TC(udp); +ATF_TC_HEAD(udp, tc) +{ + atf_tc_set_md_var(tc, "descr", "Checks svc udp (select)"); +} + +ATF_TC_BODY(udp, tc) +{ + regtest("localhost", "udp", 1, 0); + +} + +ATF_TC(tcp_poll); +ATF_TC_HEAD(tcp_poll, tc) +{ + atf_tc_set_md_var(tc, "descr", "Checks svc tcp (poll)"); +} + +ATF_TC_BODY(tcp_poll, tc) +{ + regtest("localhost", "tcp", 1, 1); + +} + +ATF_TC(udp_poll); +ATF_TC_HEAD(udp_poll, tc) +{ + atf_tc_set_md_var(tc, "descr", "Checks svc udp (poll)"); +} + +ATF_TC_BODY(udp_poll, tc) +{ + regtest("localhost", "udp", 1, 1); + +} + ATF_TP_ADD_TCS(tp) { ATF_TP_ADD_TC(tp, get_svc_addr_udp); ATF_TP_ADD_TC(tp, get_svc_addr_tcp); ATF_TP_ADD_TC(tp, raw); +
CVS commit: src/tests/lib/libc/rpc
Module Name:src Committed By: christos Date: Sun Nov 8 19:40:06 UTC 2015 Modified Files: src/tests/lib/libc/rpc: t_rpc.c Log Message: Disable debugging. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/tests/lib/libc/rpc/t_rpc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/tests/lib/libc/rpc/t_rpc.c diff -u src/tests/lib/libc/rpc/t_rpc.c:1.6 src/tests/lib/libc/rpc/t_rpc.c:1.7 --- src/tests/lib/libc/rpc/t_rpc.c:1.6 Sun Nov 8 14:38:04 2015 +++ src/tests/lib/libc/rpc/t_rpc.c Sun Nov 8 14:40:06 2015 @@ -1,7 +1,7 @@ -/* $NetBSD: t_rpc.c,v 1.6 2015/11/08 19:38:04 christos Exp $ */ +/* $NetBSD: t_rpc.c,v 1.7 2015/11/08 19:40:06 christos Exp $ */ #include -__RCSID("$NetBSD: t_rpc.c,v 1.6 2015/11/08 19:38:04 christos Exp $"); +__RCSID("$NetBSD: t_rpc.c,v 1.7 2015/11/08 19:40:06 christos Exp $"); #include #include @@ -14,8 +14,6 @@ __RCSID("$NetBSD: t_rpc.c,v 1.6 2015/11/ #include #include -#define DEBUG -#define TEST #ifndef TEST #include @@ -324,7 +322,7 @@ ATF_TC_HEAD(tcp, tc) ATF_TC_BODY(tcp, tc) { - regtest("localhost", "tcp", 1, 0); + regtest("localhost", "tcp", "1", 0); } @@ -336,7 +334,7 @@ ATF_TC_HEAD(udp, tc) ATF_TC_BODY(udp, tc) { - regtest("localhost", "udp", 1, 0); + regtest("localhost", "udp", "1", 0); } @@ -348,7 +346,7 @@ ATF_TC_HEAD(tcp_poll, tc) ATF_TC_BODY(tcp_poll, tc) { - regtest("localhost", "tcp", 1, 1); + regtest("localhost", "tcp", "1", 1); } @@ -360,7 +358,7 @@ ATF_TC_HEAD(udp_poll, tc) ATF_TC_BODY(udp_poll, tc) { - regtest("localhost", "udp", 1, 1); + regtest("localhost", "udp", "1", 1); }
CVS commit: src/tests/lib/libc/rpc
Module Name:src Committed By: christos Date: Fri Nov 6 15:23:23 UTC 2015 Modified Files: src/tests/lib/libc/rpc: t_rpc.c Log Message: Add a test for the raw transports which are currently busted. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/tests/lib/libc/rpc/t_rpc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/tests/lib/libc/rpc/t_rpc.c diff -u src/tests/lib/libc/rpc/t_rpc.c:1.3 src/tests/lib/libc/rpc/t_rpc.c:1.4 --- src/tests/lib/libc/rpc/t_rpc.c:1.3 Thu Feb 28 10:56:53 2013 +++ src/tests/lib/libc/rpc/t_rpc.c Fri Nov 6 10:23:23 2015 @@ -1,11 +1,12 @@ -/* $NetBSD: t_rpc.c,v 1.3 2013/02/28 15:56:53 christos Exp $ */ +/* $NetBSD: t_rpc.c,v 1.4 2015/11/06 15:23:23 christos Exp $ */ #include -__RCSID("$NetBSD: t_rpc.c,v 1.3 2013/02/28 15:56:53 christos Exp $"); +__RCSID("$NetBSD: t_rpc.c,v 1.4 2015/11/06 15:23:23 christos Exp $"); #include #include #include +#include #include #include #include @@ -28,6 +29,12 @@ __RCSID("$NetBSD: t_rpc.c,v 1.3 2013/02/ #define SKIPX(ev, msg, ...) errx(ev, msg, __VA_ARGS__) #endif +#ifdef DEBUG +#define DPRINTF(...) printf(__VA_ARGS__) +#else +#define DPRINTF(...) +#endif + #define RPCBPROC_NULL 0 @@ -47,7 +54,7 @@ reply(caddr_t replyp, struct netbuf * ra return 0; } -extern bool __rpc_control(int, void *); +extern bool_t __rpc_control(int, void *); static void onehost(const char *host, const char *transp) @@ -76,9 +83,82 @@ onehost(const char *host, const char *tr reply(NULL, , NULL); } +#define PROGNUM 0x81 +#define VERSNUM 0x01 +#define PLUSONE 1 + +static struct timeval tout = {0, 0}; + +static void +server(struct svc_req *rqstp, SVCXPRT *transp) +{ + int num; + + DPRINTF("Starting server\n"); + + switch (rqstp->rq_proc) { + case NULLPROC: + if (!svc_sendreply(transp, (xdrproc_t)xdr_void, NULL)) + ERRX(EXIT_FAILURE, "svc_sendreply failed"); + return; + case PLUSONE: + break; + default: + svcerr_noproc(transp); + return; + } + + if (!svc_getargs(transp, (xdrproc_t)xdr_int, (void *))) { + svcerr_decode(transp); + return; + } + DPRINTF("About to increment\n"); + num++; + if (!svc_sendreply(transp, (xdrproc_t)xdr_int, (void *))) + ERRX(EXIT_FAILURE, "svc_sendreply failed"); + DPRINTF("Leaving server procedure.\n"); +} + +int +rawtest(const char *arg) +{ + CLIENT *clnt; + SVCXPRT*svc; + int num, resp; + enum clnt_stat rv; + + if (arg) + num = atoi(arg); + else + num = 0; + + svc = svc_raw_create(); + if (svc == NULL) + ERRX(EXIT_FAILURE, "Can't not create server"); + if (!svc_reg(svc, PROGNUM, VERSNUM, server, NULL)) + ERRX(EXIT_FAILURE, "Can't not register server"); + + clnt = clnt_raw_create(PROGNUM, VERSNUM); + if (clnt == NULL) + ERRX(EXIT_FAILURE, "%s", + clnt_spcreateerror("clnt_raw_create")); + rv = clnt_call(clnt, PLUSONE, (xdrproc_t)xdr_int, (void *), + (xdrproc_t)xdr_int, (void *), tout); + if (rv != RPC_SUCCESS) + ERRX(EXIT_FAILURE, "clnt_call: %s", clnt_sperrno(rv)); + DPRINTF("Got %d\n", resp); + clnt_destroy(clnt); + svc_destroy(svc); + if (++num != resp) + ERRX(EXIT_FAILURE, "expected %d got %d", num, resp); + + return EXIT_SUCCESS; +} + + #ifdef TEST static void -allhosts(void) +allhosts(const char *transp) { enum clnt_stat clnt_stat; @@ -96,7 +176,7 @@ main(int argc, char *argv[]) const char *transp = "udp"; - while ((ch = getopt(argc, argv, "ut")) != -1) + while ((ch = getopt(argc, argv, "rtu")) != -1) switch (ch) { case 't': transp = "tcp"; @@ -104,17 +184,28 @@ main(int argc, char *argv[]) case 'u': transp = "udp"; break; + case 'r': + transp = NULL; + break; default: - fprintf(stderr, "Usage: %s -[t|u] [...]\n", + fprintf(stderr, "Usage: %s -[r|t|u] [...]\n", getprogname()); return EXIT_FAILURE; } - if (argc == optind) - allhosts(); - else - for (; optind < argc; optind++) - onehost(argv[optind], transp); + if (argc == optind) { + if (transp) + allhosts(transp); + else + rawtest(NULL); + } else { + for (; optind < argc; optind++) { + if (transp) +onehost(argv[optind], transp); + else +rawtest(argv[optind]); + } + } return EXIT_SUCCESS; } @@ -146,10 +237,22 @@ ATF_TC_BODY(get_svc_addr_udp, tc) } +ATF_TC(raw); +ATF_TC_HEAD(raw, tc) +{ + atf_tc_set_md_var(tc, "descr", "Checks svc raw"); +} + +ATF_TC_BODY(raw, tc) +{ + rawtest(NULL); + +} ATF_TP_ADD_TCS(tp) { ATF_TP_ADD_TC(tp, get_svc_addr_udp); ATF_TP_ADD_TC(tp, get_svc_addr_tcp); + ATF_TP_ADD_TC(tp, raw); return atf_no_error(); }
CVS commit: src/tests/lib/libc/rpc
Module Name:src Committed By: christos Date: Fri Nov 6 15:30:47 UTC 2015 Modified Files: src/tests/lib/libc/rpc: t_rpc.c Log Message: make this compile for tests. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/tests/lib/libc/rpc/t_rpc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/tests/lib/libc/rpc/t_rpc.c diff -u src/tests/lib/libc/rpc/t_rpc.c:1.4 src/tests/lib/libc/rpc/t_rpc.c:1.5 --- src/tests/lib/libc/rpc/t_rpc.c:1.4 Fri Nov 6 10:23:23 2015 +++ src/tests/lib/libc/rpc/t_rpc.c Fri Nov 6 10:30:47 2015 @@ -1,12 +1,12 @@ -/* $NetBSD: t_rpc.c,v 1.4 2015/11/06 15:23:23 christos Exp $ */ +/* $NetBSD: t_rpc.c,v 1.5 2015/11/06 15:30:47 christos Exp $ */ #include -__RCSID("$NetBSD: t_rpc.c,v 1.4 2015/11/06 15:23:23 christos Exp $"); +__RCSID("$NetBSD: t_rpc.c,v 1.5 2015/11/06 15:30:47 christos Exp $"); #include #include #include -#include +// #include #include #include #include @@ -99,7 +99,7 @@ server(struct svc_req *rqstp, SVCXPRT *t switch (rqstp->rq_proc) { case NULLPROC: if (!svc_sendreply(transp, (xdrproc_t)xdr_void, NULL)) - ERRX(EXIT_FAILURE, "svc_sendreply failed"); + ERRX(EXIT_FAILURE, "svc_sendreply failed %d", 0); return; case PLUSONE: break; @@ -115,11 +115,11 @@ server(struct svc_req *rqstp, SVCXPRT *t DPRINTF("About to increment\n"); num++; if (!svc_sendreply(transp, (xdrproc_t)xdr_int, (void *))) - ERRX(EXIT_FAILURE, "svc_sendreply failed"); + ERRX(EXIT_FAILURE, "svc_sendreply failed %d", 1); DPRINTF("Leaving server procedure.\n"); } -int +static int rawtest(const char *arg) { CLIENT *clnt; @@ -134,9 +134,9 @@ rawtest(const char *arg) svc = svc_raw_create(); if (svc == NULL) - ERRX(EXIT_FAILURE, "Can't not create server"); + ERRX(EXIT_FAILURE, "Can't not create server %d", num); if (!svc_reg(svc, PROGNUM, VERSNUM, server, NULL)) - ERRX(EXIT_FAILURE, "Can't not register server"); + ERRX(EXIT_FAILURE, "Can't not register server %d", num); clnt = clnt_raw_create(PROGNUM, VERSNUM); if (clnt == NULL)
CVS commit: src/tests/lib/libc/rpc
Module Name:src Committed By: christos Date: Thu Feb 28 15:56:54 UTC 2013 Modified Files: src/tests/lib/libc/rpc: t_rpc.c Log Message: remove the timeout; it is handled internally. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/tests/lib/libc/rpc/t_rpc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/tests/lib/libc/rpc/t_rpc.c diff -u src/tests/lib/libc/rpc/t_rpc.c:1.2 src/tests/lib/libc/rpc/t_rpc.c:1.3 --- src/tests/lib/libc/rpc/t_rpc.c:1.2 Wed Feb 27 13:39:58 2013 +++ src/tests/lib/libc/rpc/t_rpc.c Thu Feb 28 10:56:53 2013 @@ -1,7 +1,7 @@ -/* $NetBSD: t_rpc.c,v 1.2 2013/02/27 18:39:58 christos Exp $ */ +/* $NetBSD: t_rpc.c,v 1.3 2013/02/28 15:56:53 christos Exp $ */ #include sys/cdefs.h -__RCSID($NetBSD: t_rpc.c,v 1.2 2013/02/27 18:39:58 christos Exp $); +__RCSID($NetBSD: t_rpc.c,v 1.3 2013/02/28 15:56:53 christos Exp $); #include sys/types.h #include sys/socket.h @@ -125,7 +125,6 @@ ATF_TC(get_svc_addr_tcp); ATF_TC_HEAD(get_svc_addr_tcp, tc) { atf_tc_set_md_var(tc, descr, Checks CLGET_SVC_ADDR for tcp); - atf_tc_set_md_var(tc, timeout, 1); } @@ -139,7 +138,6 @@ ATF_TC(get_svc_addr_udp); ATF_TC_HEAD(get_svc_addr_udp, tc) { atf_tc_set_md_var(tc, descr, Checks CLGET_SVC_ADDR for udp); - atf_tc_set_md_var(tc, timeout, 1); } ATF_TC_BODY(get_svc_addr_udp, tc)
CVS commit: src/tests/lib/libc/rpc
Module Name:src Committed By: christos Date: Wed Feb 27 18:39:58 UTC 2013 Modified Files: src/tests/lib/libc/rpc: t_rpc.c Log Message: skip the tests if rpcbind is not responding. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/tests/lib/libc/rpc/t_rpc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/tests/lib/libc/rpc/t_rpc.c diff -u src/tests/lib/libc/rpc/t_rpc.c:1.1 src/tests/lib/libc/rpc/t_rpc.c:1.2 --- src/tests/lib/libc/rpc/t_rpc.c:1.1 Tue Feb 26 12:06:55 2013 +++ src/tests/lib/libc/rpc/t_rpc.c Wed Feb 27 13:39:58 2013 @@ -1,7 +1,7 @@ -/* $NetBSD: t_rpc.c,v 1.1 2013/02/26 17:06:55 christos Exp $ */ +/* $NetBSD: t_rpc.c,v 1.2 2013/02/27 18:39:58 christos Exp $ */ #include sys/cdefs.h -__RCSID($NetBSD: t_rpc.c,v 1.1 2013/02/26 17:06:55 christos Exp $); +__RCSID($NetBSD: t_rpc.c,v 1.2 2013/02/27 18:39:58 christos Exp $); #include sys/types.h #include sys/socket.h @@ -17,8 +17,15 @@ __RCSID($NetBSD: t_rpc.c,v 1.1 2013/02/ #include atf-c.h #define ERRX(ev, msg, ...) ATF_REQUIRE_MSG(0, msg, __VA_ARGS__) + +#define SKIPX(ev, msg, ...) do { \ + atf_tc_skip(msg, __VA_ARGS__); \ + return; \ +} while(/*CONSTCOND*/0) + #else #define ERRX(ev, msg, ...) errx(ev, msg, __VA_ARGS__) +#define SKIPX(ev, msg, ...) errx(ev, msg, __VA_ARGS__) #endif @@ -40,6 +47,8 @@ reply(caddr_t replyp, struct netbuf * ra return 0; } +extern bool __rpc_control(int, void *); + static void onehost(const char *host, const char *transp) { @@ -47,9 +56,16 @@ onehost(const char *host, const char *tr struct netbuf addr; struct timeval tv; + /* + * Magic! + */ + tv.tv_sec = 0; + tv.tv_usec = 50; +#define CLCR_SET_RPCB_TIMEOUT 2 + __rpc_control(CLCR_SET_RPCB_TIMEOUT, tv); if ((clnt = clnt_create(host, RPCBPROG, RPCBVERS, transp)) == NULL) - ERRX(EXIT_FAILURE, clnt_create (%s), clnt_spcreateerror()); + SKIPX(EXIT_FAILURE, clnt_create (%s), clnt_spcreateerror()); tv.tv_sec = 1; tv.tv_usec = 0;
CVS commit: src/tests/lib/libc/rpc
Module Name:src Committed By: christos Date: Tue Feb 26 17:06:56 UTC 2013 Modified Files: src/tests/lib/libc/rpc: Makefile Added Files: src/tests/lib/libc/rpc: t_rpc.c Log Message: Add a test for the rpc getaddr bug lib/13082. Timeout added, but it needs rpcbind to be running to succeed. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/tests/lib/libc/rpc/Makefile cvs rdiff -u -r0 -r1.1 src/tests/lib/libc/rpc/t_rpc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/tests/lib/libc/rpc/Makefile diff -u src/tests/lib/libc/rpc/Makefile:1.1 src/tests/lib/libc/rpc/Makefile:1.2 --- src/tests/lib/libc/rpc/Makefile:1.1 Sat Jan 8 01:59:37 2011 +++ src/tests/lib/libc/rpc/Makefile Tue Feb 26 12:06:55 2013 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.1 2011/01/08 06:59:37 pgoyette Exp $ +# $NetBSD: Makefile,v 1.2 2013/02/26 17:06:55 christos Exp $ MKMAN= no @@ -9,6 +9,8 @@ TESTSDIR= ${TESTSBASE}/lib/libc/rpc TESTS_C= t_xdr SRCS.t_xdr= ${RPCSRCS:.x=_xdr.c} t_xdr.c +TESTS_C+= t_rpc + RPCSRCS= h_testbits.x DPSRCS= ${RPCSRCS:.x=.h} CLEANFILES+= ${RPCSRCS:.x=.h} ${RPCSRCS:.x=_xdr.c} Added files: Index: src/tests/lib/libc/rpc/t_rpc.c diff -u /dev/null src/tests/lib/libc/rpc/t_rpc.c:1.1 --- /dev/null Tue Feb 26 12:06:56 2013 +++ src/tests/lib/libc/rpc/t_rpc.c Tue Feb 26 12:06:55 2013 @@ -0,0 +1,143 @@ +/* $NetBSD: t_rpc.c,v 1.1 2013/02/26 17:06:55 christos Exp $ */ + +#include sys/cdefs.h +__RCSID($NetBSD: t_rpc.c,v 1.1 2013/02/26 17:06:55 christos Exp $); + +#include sys/types.h +#include sys/socket.h +#include rpc/rpc.h +#include stdlib.h +#include err.h +#include netdb.h +#include stdio.h +#include unistd.h + + +#ifndef TEST +#include atf-c.h + +#define ERRX(ev, msg, ...) ATF_REQUIRE_MSG(0, msg, __VA_ARGS__) +#else +#define ERRX(ev, msg, ...) errx(ev, msg, __VA_ARGS__) +#endif + + +#define RPCBPROC_NULL 0 + +static int +reply(caddr_t replyp, struct netbuf * raddrp, struct netconfig * nconf) +{ + char host[NI_MAXHOST]; + struct sockaddr *sock = raddrp-buf; + int error; + + + error = getnameinfo(sock, sock-sa_len, host, sizeof(host), NULL, 0, 0); + if (error) + warnx(Cannot resolve address (%s), gai_strerror(error)); + else + printf(response from: %s\n, host); + return 0; +} + +static void +onehost(const char *host, const char *transp) +{ + CLIENT *clnt; + struct netbuf addr; + struct timeval tv; + + + if ((clnt = clnt_create(host, RPCBPROG, RPCBVERS, transp)) == NULL) + ERRX(EXIT_FAILURE, clnt_create (%s), clnt_spcreateerror()); + + tv.tv_sec = 1; + tv.tv_usec = 0; + if (clnt_call(clnt, RPCBPROC_NULL, xdr_void, NULL, xdr_void, NULL, tv) + != RPC_SUCCESS) + ERRX(EXIT_FAILURE, clnt_call (%s), clnt_sperror(clnt, )); + clnt_control(clnt, CLGET_SVC_ADDR, (char *) addr); + reply(NULL, addr, NULL); +} + +#ifdef TEST +static void +allhosts(void) +{ + enum clnt_stat clnt_stat; + + clnt_stat = rpc_broadcast(RPCBPROG, RPCBVERS, RPCBPROC_NULL, + (xdrproc_t)xdr_void, NULL, (xdrproc_t)xdr_void, + NULL, (resultproc_t)reply, transp); + if (clnt_stat != RPC_SUCCESS clnt_stat != RPC_TIMEDOUT) + ERRX(EXIT_FAILURE, %s, clnt_sperrno(clnt_stat)); +} + +int +main(int argc, char *argv[]) +{ + int ch; + const char *transp = udp; + + + while ((ch = getopt(argc, argv, ut)) != -1) + switch (ch) { + case 't': + transp = tcp; + break; + case 'u': + transp = udp; + break; + default: + fprintf(stderr, Usage: %s -[t|u] [hostname...]\n, + getprogname()); + return EXIT_FAILURE; + } + + if (argc == optind) + allhosts(); + else + for (; optind argc; optind++) + onehost(argv[optind], transp); + + return EXIT_SUCCESS; +} + +#else + +ATF_TC(get_svc_addr_tcp); +ATF_TC_HEAD(get_svc_addr_tcp, tc) +{ + atf_tc_set_md_var(tc, descr, Checks CLGET_SVC_ADDR for tcp); + atf_tc_set_md_var(tc, timeout, 1); + +} + +ATF_TC_BODY(get_svc_addr_tcp, tc) +{ + onehost(localhost, tcp); + +} + +ATF_TC(get_svc_addr_udp); +ATF_TC_HEAD(get_svc_addr_udp, tc) +{ + atf_tc_set_md_var(tc, descr, Checks CLGET_SVC_ADDR for udp); + atf_tc_set_md_var(tc, timeout, 1); +} + +ATF_TC_BODY(get_svc_addr_udp, tc) +{ + onehost(localhost, udp); + +} + +ATF_TP_ADD_TCS(tp) +{ + ATF_TP_ADD_TC(tp, get_svc_addr_udp); + ATF_TP_ADD_TC(tp, get_svc_addr_tcp); + + return atf_no_error(); +} + +#endif