From 10cda2cfd7afe028a7fd3178476709c3173c8f1a Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Mon, 30 Oct 2017 10:37:33 +0000 Subject: [PATCH] exclude TCP test in testnetlib because sometimes this test is failed as follows. OpenSUSE OBS - Ubuntu 17.04 i586 failed [ 542s] testnetlib : Line 262: expected <0>, but saw <-1> [ 542s] [10/30 07:48:38.730] ERRR: connect error(111:Connection refused)(proto:6 remote:127.0.0.1 dport:5121 lport:0) (net_lib.c:353) [ 542s] [10/30 07:48:38.730] ERRR: connect error(111:Connection refused)(proto:6 remote:127.0.0.1 dport:5121 lport:0) (net_lib.c:353) [ 542s] [10/30 07:48:38.730] ERRR: connect error(111:Connection refused)(proto:6 remote:127.0.0.1 dport:5121 lport:0) (net_lib.c:353) [ 542s] [10/30 07:48:38.730] ERRR: connect error(111:Connection refused)(proto:6 remote:127.0.0.1 dport:5121 lport:0) (net_lib.c:353) [ 542s] [10/30 07:48:38.730] ASSERT: !(net_sock && buffer). Invalid params [ 542s] (net_lib.c:590) [ 542s] [10/30 07:48:38.730] ASSERT: !(net_sock). net_sock is NULL [ 542s] (net_lib.c:408) [ 542s] [10/30 07:48:38.730] ASSERT: !(net_sock). net_sock is NULL --- debian/rules | 5 +- lib/core/src/unix/net_lib.c | 4 +- lib/core/test/Makefile.am | 4 + lib/core/test/abts_tests.h | 3 + lib/core/test/testnetlib.c | 334 +++--------------------------------- lib/core/test/testsctp.c | 324 ++++++++++++++++++++++++++++++++++ lib/core/test/testutil.h | 1 + 7 files changed, 358 insertions(+), 317 deletions(-) create mode 100644 lib/core/test/testsctp.c diff --git a/debian/rules b/debian/rules index 0575296f7..beb6e2c92 100755 --- a/debian/rules +++ b/debian/rules @@ -23,7 +23,7 @@ override_dh_auto_test: testcore_excluded_list=; \ testepc_excluded_list=; \ if ! cat /proc/net/protocols | grep SCTP > /dev/null; then \ - testcore_excluded_list="-x testnetlib"; \ + testcore_excluded_list="-x testsctp"; \ testepc_excluded_list="-x s1setup_test attach_test volte_test handover_test"; \ fi; \ mongodb_required=yes; \ @@ -37,5 +37,4 @@ override_dh_auto_test: test/testepc -f debian/test/etc/nextepc/nextepc.conf -c $$testepc_excluded_list || exit; \ if test "x$$mongodb_required" = xyes; then \ pkill mongod; \ - fi; \ - rm -rf debian/test; + fi; diff --git a/lib/core/src/unix/net_lib.c b/lib/core/src/unix/net_lib.c index 2a6ea9d1c..1697305d9 100644 --- a/lib/core/src/unix/net_lib.c +++ b/lib/core/src/unix/net_lib.c @@ -346,7 +346,9 @@ int net_open_ext(net_sock_t **net_sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)); if (rc < 0) { - d_error("connect error(proto:%d remote:%s dport:%d lport:%d)", + d_error("connect error(%d:%s)(proto:%d remote:%s dport:%d lport:%d)", + errno, + strerror(errno), proto, remote_host, rport, diff --git a/lib/core/test/Makefile.am b/lib/core/test/Makefile.am index ac2230a32..f5e591c23 100644 --- a/lib/core/test/Makefile.am +++ b/lib/core/test/Makefile.am @@ -9,6 +9,10 @@ testcore_SOURCES = \ testpkbuf.c testmisc.c testhash.c \ abts.h abts_tests.h testutil.c testutil.h +if !USRSCTP +testcore_SOURCES += testsctp.c +endif + testcore_LDADD = \ $(top_srcdir)/lib/core/src/libcore.la diff --git a/lib/core/test/abts_tests.h b/lib/core/test/abts_tests.h index f74c96744..dd47aade8 100644 --- a/lib/core/test/abts_tests.h +++ b/lib/core/test/abts_tests.h @@ -29,6 +29,9 @@ const struct testlist { {testaes}, {testsha2}, {testnetlib}, +#if USE_USRSCTP != 1 + {testsctp}, +#endif {testtime}, {testtimer}, {testthread}, diff --git a/lib/core/test/testnetlib.c b/lib/core/test/testnetlib.c index 99d899cb5..15f232731 100644 --- a/lib/core/test/testnetlib.c +++ b/lib/core/test/testnetlib.c @@ -14,11 +14,9 @@ static char buffer[TEST_BUFFER_SIZE]; static int tcp_server_started = 0; static int udp_server_started = 0; -static int sctp_stream_server_started = 0; -static int sctp_seq_server_started = 0; -pthread_t tserver_tid,userver_tid,streamserver_tid, seqserver_tid; -net_sock_t *tserver_sock,*userver_sock,*streamserver_sock,*seqserver_sock; +pthread_t tserver_tid,userver_tid; +net_sock_t *tserver_sock,*userver_sock; static void *tcp_session_main(void *param) { @@ -183,171 +181,6 @@ static void stop_udp_server() pthread_join(userver_tid, NULL); } -static void *sctp_stream_session_main(void *param) -{ - int rc; - - net_sock_t *net_sock = (net_sock_t *)param; - while (1) - { - rc = net_read(net_sock, buffer, TEST_BUFFER_SIZE, 1); - if (rc > 0) - { - if (!strncmp(buffer, "QUIT",4)) - { - break; - } - else - { - /* Send received data */ - rc = net_send(net_sock, buffer, rc); - } - } - else if (rc == 0) - { - /* Timeout */ - } - else - { - if (rc != -2 && net_sock->sndrcv_errno != EAGAIN) - break; - } - } - - net_close(net_sock); - - return NULL; -} - -static void start_stream_sctp_session(net_sock_t *net_sock) -{ - pthread_t tid; - - pthread_create(&tid, NULL, sctp_stream_session_main, (void *)net_sock); - pthread_detach(tid); - return; -} - -static void *sctp_stream_server_main(void *param) -{ - int rc; - net_sock_t *new_sock; - - rc = net_listen(&streamserver_sock, - SOCK_STREAM, IPPROTO_SCTP, TEST_SERVER_PORT); - if (rc != 0) - { - d_error("net_sctp_listen Error(rc = %d)\n",rc); - return NULL; - } - - sctp_stream_server_started = 1; - - while (1) - { - rc = net_accept(&new_sock, streamserver_sock, 1); - if (rc >0) - { - /* New connection arrived. Start session */ - start_stream_sctp_session(new_sock); - } - else if (rc == 0) - { - /* Timeout */ - } - else - { - /* Error occured */ - break; - } - } - - return NULL; -} - -static void start_stream_sctp_server() -{ - pthread_create(&streamserver_tid, NULL, sctp_stream_server_main, NULL); - while (sctp_stream_server_started == 0) - { - sleep(1); - } - return; -} - -static void stop_stream_sctp_server() -{ - net_close(streamserver_sock); - pthread_join(streamserver_tid, NULL); -} - -static void *sctp_seq_server_main(void *param) -{ - int rc; - - rc = net_listen(&seqserver_sock, - SOCK_SEQPACKET, IPPROTO_SCTP, TEST_SERVER_PORT); - if (rc != 0) - { - d_error("net_sctp Error(rc = %d)\n",rc); - return NULL; - } - - sctp_seq_server_started = 1; - - while (1) - { - d_trace(1,"Wait for data....\n"); - rc = net_read(seqserver_sock, buffer, TEST_BUFFER_SIZE, 2); - if (rc >0) - { - d_trace(1,"RECV %d bytes\n", rc); - if (!strncmp(buffer, "QUIT",4)) - { - break; - } - else - { - /* Send received data */ - rc = net_send(seqserver_sock, buffer, rc); - d_trace(1,"SEND %d bytes\n", rc); - if (rc == -1) - { - printf("error = %d\n", seqserver_sock->sndrcv_errno); - } - } - } - else if (rc == 0) - { - /* Timeout */ - } - else - { - /* Error occured */ - if (rc != -2 && seqserver_sock->sndrcv_errno != EAGAIN) - break; - } - } - - return NULL; -} - -static void start_seq_sctp_server() -{ - pthread_create(&seqserver_tid, NULL, sctp_seq_server_main, NULL); - while (sctp_seq_server_started == 0) - { - sleep(1); - } - return; -} - -static void stop_seq_sctp_server() -{ - net_close(seqserver_sock); - pthread_join(seqserver_tid, NULL); -} - static void netlib1(abts_case *tc, void *data) { int rc = 0; @@ -529,139 +362,6 @@ static void netlib3(abts_case *tc, void *data) } static void netlib4(abts_case *tc, void *data) -{ - int rc = 0; - net_sock_t *net_sock[TEST_MAX_NUM]; - char inputbuf[TEST_MAX_NUM][25]; - char outputbuf[TEST_MAX_NUM][25]; - int i; - - /* Start SCTP Server */ - start_stream_sctp_server(); - - /* Connect to invalid port */ - d_log_set_level(D_MSG_TO_STDOUT, D_LOG_LEVEL_FATAL); - for (i =0 ; isndrcv_errno == EAGAIN) - continue; - rc += n; - if (n == 0 || n == 6) - break; - } - ABTS_INT_EQUAL(tc, 6, rc); - ABTS_INT_EQUAL(tc, 6, strlen(outputbuf[i])+1); - ABTS_STR_EQUAL(tc, inputbuf[i], outputbuf[i]); - } - - for (i = 0 ; i< TEST_MAX_NUM; i++) - { - rc = net_close(net_sock[i]); - ABTS_INT_EQUAL(tc, 0, rc); - } - - stop_stream_sctp_server(); -} - -static void netlib5(abts_case *tc, void *data) -{ - int rc = 0; - net_sock_t *net_sock[TEST_MAX_NUM]; - char inputbuf[TEST_MAX_NUM][25]; - char outputbuf[TEST_MAX_NUM][25]; - int i; - - /* Connect to invalid port. - * In SCTP cases, net_open should be success always - */ - for (i =0 ; isndrcv_errno == EAGAIN) - continue; - rc += n; - if (n == 0 || n == 6) - break; - } - ABTS_INT_EQUAL(tc, 6, rc); - ABTS_INT_EQUAL(tc, 6, strlen(outputbuf[i])+1); - ABTS_STR_EQUAL(tc, inputbuf[i], outputbuf[i]); - } - - for (i = 0 ; i< TEST_MAX_NUM; i++) - { - rc = net_close(net_sock[i]); - ABTS_INT_EQUAL(tc, 0, rc); - } - - stop_seq_sctp_server(); -} - -static void netlib6(abts_case *tc, void *data) { int rc; net_ftp_t *ftp_session = NULL; @@ -741,7 +441,7 @@ static void filter_updu(char *buf, int len) } } -static void netlib7(abts_case *tc, void *data) +static void netlib5(abts_case *tc, void *data) { net_link_t *net_link = NULL; int promisc = 1; @@ -788,7 +488,7 @@ static int make_test_updu(char *src_addr, char *dst_addr, char *buf, int len) return rc; } -static void netlib8(abts_case *tc, void *data) +static void netlib6(abts_case *tc, void *data) { net_link_t *net_link = NULL; int promisc = 1; @@ -827,22 +527,30 @@ abts_suite *testnetlib(abts_suite *suite) suite = ADD_SUITE(suite); abts_run_test(suite, netlib1, NULL); + (111:Connection refused) /* * OpenSUSE OBS - * line 429 failed - */ -#if 0 /* FIXME : This test is not working */ + * - Ubuntu 17.04 i586 failed + * +[ 542s] testnetlib : Line 262: expected <0>, but saw <-1> +[ 542s] [10/30 07:48:38.730] ERRR: connect error(111:Connection refused)(proto:6 remote:127.0.0.1 dport:5121 lport:0) (net_lib.c:353) +[ 542s] [10/30 07:48:38.730] ERRR: connect error(111:Connection refused)(proto:6 remote:127.0.0.1 dport:5121 lport:0) (net_lib.c:353) +[ 542s] [10/30 07:48:38.730] ERRR: connect error(111:Connection refused)(proto:6 remote:127.0.0.1 dport:5121 lport:0) (net_lib.c:353) +[ 542s] [10/30 07:48:38.730] ERRR: connect error(111:Connection refused)(proto:6 remote:127.0.0.1 dport:5121 lport:0) (net_lib.c:353) +[ 542s] [10/30 07:48:38.730] ASSERT: !(net_sock && buffer). Invalid params +[ 542s] (net_lib.c:590) +[ 542s] [10/30 07:48:38.730] ASSERT: !(net_sock). net_sock is NULL +[ 542s] (net_lib.c:408) +[ 542s] [10/30 07:48:38.730] ASSERT: !(net_sock). net_sock is NULL + */ +#if 0 abts_run_test(suite, netlib2, NULL); #endif abts_run_test(suite, netlib3, NULL); -#if USE_USRSCTP != 1 abts_run_test(suite, netlib4, NULL); - abts_run_test(suite, netlib5, NULL); -#endif - abts_run_test(suite, netlib6, NULL); #if LINUX == 1 - abts_run_test(suite, netlib7, NULL); - abts_run_test(suite, netlib8, NULL); + abts_run_test(suite, netlib5, NULL); + abts_run_test(suite, netlib6, NULL); #endif return suite; diff --git a/lib/core/test/testsctp.c b/lib/core/test/testsctp.c new file mode 100644 index 000000000..91a606ba4 --- /dev/null +++ b/lib/core/test/testsctp.c @@ -0,0 +1,324 @@ +#define TRACE_MODULE _testsctp +#include "core_debug.h" +#include "core_net.h" +#include "testutil.h" + +#define TEST_SERVER_PORT 5121 +#define TEST_BUFFER_SIZE 1024 + +#define TEST_MAX_NUM 4 + +static char buffer[TEST_BUFFER_SIZE]; +static int sctp_stream_server_started = 0; +static int sctp_seq_server_started = 0; + +pthread_t streamserver_tid, seqserver_tid; +net_sock_t *streamserver_sock,*seqserver_sock; + +static void *sctp_stream_session_main(void *param) +{ + int rc; + + net_sock_t *net_sock = (net_sock_t *)param; + while (1) + { + rc = net_read(net_sock, buffer, TEST_BUFFER_SIZE, 1); + if (rc > 0) + { + if (!strncmp(buffer, "QUIT",4)) + { + break; + } + else + { + /* Send received data */ + rc = net_send(net_sock, buffer, rc); + } + } + else if (rc == 0) + { + /* Timeout */ + } + else + { + if (rc != -2 && net_sock->sndrcv_errno != EAGAIN) + break; + } + } + + net_close(net_sock); + + return NULL; +} + +static void start_stream_sctp_session(net_sock_t *net_sock) +{ + pthread_t tid; + + pthread_create(&tid, NULL, sctp_stream_session_main, (void *)net_sock); + pthread_detach(tid); + return; +} + +static void *sctp_stream_server_main(void *param) +{ + int rc; + net_sock_t *new_sock; + + rc = net_listen(&streamserver_sock, + SOCK_STREAM, IPPROTO_SCTP, TEST_SERVER_PORT); + if (rc != 0) + { + d_error("net_sctp_listen Error(rc = %d)\n",rc); + return NULL; + } + + sctp_stream_server_started = 1; + + while (1) + { + rc = net_accept(&new_sock, streamserver_sock, 1); + if (rc >0) + { + /* New connection arrived. Start session */ + start_stream_sctp_session(new_sock); + } + else if (rc == 0) + { + /* Timeout */ + } + else + { + /* Error occured */ + break; + } + } + + return NULL; +} + +static void start_stream_sctp_server() +{ + pthread_create(&streamserver_tid, NULL, sctp_stream_server_main, NULL); + while (sctp_stream_server_started == 0) + { + sleep(1); + } + return; +} + +static void stop_stream_sctp_server() +{ + net_close(streamserver_sock); + pthread_join(streamserver_tid, NULL); +} + +static void *sctp_seq_server_main(void *param) +{ + int rc; + + rc = net_listen(&seqserver_sock, + SOCK_SEQPACKET, IPPROTO_SCTP, TEST_SERVER_PORT); + if (rc != 0) + { + d_error("net_sctp Error(rc = %d)\n",rc); + return NULL; + } + + sctp_seq_server_started = 1; + + while (1) + { + d_trace(1,"Wait for data....\n"); + rc = net_read(seqserver_sock, buffer, TEST_BUFFER_SIZE, 2); + if (rc >0) + { + d_trace(1,"RECV %d bytes\n", rc); + if (!strncmp(buffer, "QUIT",4)) + { + break; + } + else + { + /* Send received data */ + rc = net_send(seqserver_sock, buffer, rc); + d_trace(1,"SEND %d bytes\n", rc); + if (rc == -1) + { + printf("error = %d\n", seqserver_sock->sndrcv_errno); + } + } + } + else if (rc == 0) + { + /* Timeout */ + } + else + { + /* Error occured */ + if (rc != -2 && seqserver_sock->sndrcv_errno != EAGAIN) + break; + } + } + + return NULL; +} + +static void start_seq_sctp_server() +{ + pthread_create(&seqserver_tid, NULL, sctp_seq_server_main, NULL); + while (sctp_seq_server_started == 0) + { + sleep(1); + } + return; +} + +static void stop_seq_sctp_server() +{ + net_close(seqserver_sock); + pthread_join(seqserver_tid, NULL); +} + +static void test_sctp1(abts_case *tc, void *data) +{ + int rc = 0; + net_sock_t *net_sock[TEST_MAX_NUM]; + char inputbuf[TEST_MAX_NUM][25]; + char outputbuf[TEST_MAX_NUM][25]; + int i; + + /* Start SCTP Server */ + start_stream_sctp_server(); + + /* Connect to invalid port */ + d_log_set_level(D_MSG_TO_STDOUT, D_LOG_LEVEL_FATAL); + for (i =0 ; isndrcv_errno == EAGAIN) + continue; + rc += n; + if (n == 0 || n == 6) + break; + } + ABTS_INT_EQUAL(tc, 6, rc); + ABTS_INT_EQUAL(tc, 6, strlen(outputbuf[i])+1); + ABTS_STR_EQUAL(tc, inputbuf[i], outputbuf[i]); + } + + for (i = 0 ; i< TEST_MAX_NUM; i++) + { + rc = net_close(net_sock[i]); + ABTS_INT_EQUAL(tc, 0, rc); + } + + stop_stream_sctp_server(); +} + +static void test_sctp2(abts_case *tc, void *data) +{ + int rc = 0; + net_sock_t *net_sock[TEST_MAX_NUM]; + char inputbuf[TEST_MAX_NUM][25]; + char outputbuf[TEST_MAX_NUM][25]; + int i; + + /* Connect to invalid port. + * In SCTP cases, net_open should be success always + */ + for (i =0 ; isndrcv_errno == EAGAIN) + continue; + rc += n; + if (n == 0 || n == 6) + break; + } + ABTS_INT_EQUAL(tc, 6, rc); + ABTS_INT_EQUAL(tc, 6, strlen(outputbuf[i])+1); + ABTS_STR_EQUAL(tc, inputbuf[i], outputbuf[i]); + } + + for (i = 0 ; i< TEST_MAX_NUM; i++) + { + rc = net_close(net_sock[i]); + ABTS_INT_EQUAL(tc, 0, rc); + } + + stop_seq_sctp_server(); +} + +abts_suite *testsctp(abts_suite *suite) +{ + suite = ADD_SUITE(suite); + + abts_run_test(suite, test_sctp1, NULL); + abts_run_test(suite, test_sctp2, NULL); + + return suite; +} diff --git a/lib/core/test/testutil.h b/lib/core/test/testutil.h index 709edc704..e71cba15a 100644 --- a/lib/core/test/testutil.h +++ b/lib/core/test/testutil.h @@ -63,6 +63,7 @@ abts_suite *testtlv(abts_suite *suite); abts_suite *testaes(abts_suite *suite); abts_suite *testsha2(abts_suite *suite); abts_suite *testnetlib(abts_suite *suite); +abts_suite *testsctp(abts_suite *suite); abts_suite *testtime(abts_suite *suite); abts_suite *testtimer(abts_suite *suite); abts_suite *testthread(abts_suite *suite);