tcp/udp bug is fixed

This commit is contained in:
Sukchan Lee 2017-11-15 15:17:55 +00:00
parent 221fd81bb2
commit e521d75e7a
2 changed files with 83 additions and 22 deletions

View file

@ -36,19 +36,19 @@ static void sock_test1(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, CORE_OK, rv);
}
static thread_id recv_thread;
static void *THREAD_FUNC recv_main(thread_id id, void *data)
static thread_id test2_thread;
static void *THREAD_FUNC test2_main(thread_id id, void *data)
{
abts_case *tc = data;
status_t rv;
sock_id tcp;
char buf[STRLEN];
char str[STRLEN];
ssize_t size;
rv = tcp_create(&tcp, AF_UNSPEC, NULL, 0, "::1", SRV_PORT, SOCK_F_CONNECT);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
size = sock_recv(tcp, buf, STRLEN, 0, NULL, NULL);
size = sock_recv(tcp, str, STRLEN, 0, NULL, NULL);
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
rv = sock_delete(tcp);
@ -67,7 +67,7 @@ static void sock_test2(abts_case *tc, void *data)
rv = tcp_create(&tcp, AF_INET6, NULL, SRV_PORT, NULL, 0, SOCK_F_BIND);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
rv = thread_create(&recv_thread, NULL, recv_main, tc);
rv = thread_create(&test2_thread, NULL, test2_main, tc);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
rv = sock_accept(&tcp2, tcp);
@ -76,7 +76,7 @@ static void sock_test2(abts_case *tc, void *data)
size = sock_send(tcp2, DATASTR, strlen(DATASTR), 0, NULL, 0);
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
thread_join(&rv, recv_thread);
thread_join(&rv, test2_thread);
ABTS_INT_EQUAL(tc, strlen(DATASTR), rv);
rv = sock_delete(tcp2);
@ -86,23 +86,29 @@ static void sock_test2(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, CORE_OK, rv);
}
static thread_id send_thread;
static void *THREAD_FUNC send_main(thread_id id, void *data)
static thread_id test3_thread;
static void *THREAD_FUNC test3_main(thread_id id, void *data)
{
abts_case *tc = data;
status_t rv;
sock_id udp;
struct sockaddr src_addr;
struct sockaddr_in dst_addr;
socklen_t addrlen;
char buf[STRLEN];
char str[STRLEN];
ssize_t size;
char temp[INET6_ADDRSTRLEN];
int rc;
rv = udp_create(&udp, AF_INET,
NULL, 0, "127.0.0.1", SRV_PORT, SOCK_F_CONNECT);
rv = udp_create(&udp, AF_INET, NULL, 0, NULL, 0, 0);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
size = sock_send(udp, DATASTR, strlen(DATASTR), 0, NULL, 0);
memset(&dst_addr, 0, sizeof(dst_addr));
dst_addr.sin_port = htons(SRV_PORT);
dst_addr.sin_family = AF_INET;
rc = inet_pton(AF_INET, "127.0.0.1", &(dst_addr.sin_addr));
ABTS_INT_EQUAL(tc, 1, rc);
size = sock_send(udp, DATASTR, strlen(DATASTR), 0,
(struct sockaddr *)&dst_addr, sizeof(struct sockaddr));
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
rv = sock_delete(udp);
@ -119,22 +125,75 @@ static void sock_test3(abts_case *tc, void *data)
ssize_t size;
struct sockaddr src_addr;
socklen_t addrlen;
char buf[STRLEN];
char temp[INET6_ADDRSTRLEN];
char str[STRLEN];
char buf[INET6_ADDRSTRLEN];
rv = udp_create(&udp, AF_INET, NULL, SRV_PORT, NULL, 0, SOCK_F_BIND);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
rv = thread_create(&send_thread, NULL, send_main, tc);
rv = thread_create(&test3_thread, NULL, test3_main, tc);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
size = sock_recv(udp, buf, STRLEN, 0, &src_addr, &addrlen);
size = sock_recv(udp, str, STRLEN, 0, &src_addr, &addrlen);
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
#if 0
printf("%s, %d\n", SOCK_NTOP(&src_addr, temp), addrlen);
#endif
ABTS_INT_EQUAL(tc, addrlen, sizeof(src_addr));
ABTS_STR_EQUAL(tc, SOCK_NTOP(&src_addr, buf), "127.0.0.1");
thread_join(&rv, send_thread);
thread_join(&rv, test3_thread);
ABTS_INT_EQUAL(tc, strlen(DATASTR), rv);
rv = sock_delete(udp);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
}
static thread_id test4_thread;
static void *THREAD_FUNC test4_main(thread_id id, void *data)
{
abts_case *tc = data;
status_t rv;
sock_id udp;
char str[STRLEN];
ssize_t size;
rv = udp_create(&udp, AF_UNSPEC,
NULL, 0, "127.0.0.1", SRV_PORT, SOCK_F_CONNECT);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
size = sock_send(udp, DATASTR, strlen(DATASTR), 0, NULL, 0);
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
size = sock_recv(udp, str, STRLEN, 0, NULL, NULL);
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
rv = sock_delete(udp);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
thread_exit(id, size);
return NULL;
}
static void sock_test4(abts_case *tc, void *data)
{
sock_id udp;
status_t rv;
ssize_t size;
struct sockaddr src_addr;
socklen_t addrlen;
char str[STRLEN];
rv = udp_create(&udp, AF_INET, NULL, SRV_PORT, NULL, 0, SOCK_F_BIND);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
rv = thread_create(&test4_thread, NULL, test4_main, tc);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
size = sock_recv(udp, str, STRLEN, 0, &src_addr, &addrlen);
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
size = sock_send(udp, DATASTR, strlen(DATASTR), 0, &src_addr, addrlen);
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
thread_join(&rv, test4_thread);
ABTS_INT_EQUAL(tc, strlen(DATASTR), rv);
rv = sock_delete(udp);
@ -153,6 +212,7 @@ abts_suite *testsock(abts_suite *suite)
abts_run_test(suite, sock_test1, NULL);
abts_run_test(suite, sock_test2, NULL);
abts_run_test(suite, sock_test3, NULL);
abts_run_test(suite, sock_test4, NULL);
return suite;
}