mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-27 19:33:23 +00:00
Rewrite the whole net/addr.rs
file
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
d814603504
commit
4deba9baca
@ -85,7 +85,10 @@ FN_TEST(getsockname)
|
||||
{
|
||||
struct sockaddr_in saddr = { .sin_port = 0xbeef };
|
||||
struct sockaddr *psaddr = (struct sockaddr *)&saddr;
|
||||
socklen_t addrlen = sizeof(saddr);
|
||||
socklen_t addrlen = 0;
|
||||
|
||||
TEST_RES(getsockname(sk_unbound, psaddr, &addrlen),
|
||||
addrlen == sizeof(saddr) && saddr.sin_port == 0xbeef);
|
||||
|
||||
TEST_RES(getsockname(sk_unbound, psaddr, &addrlen),
|
||||
addrlen == sizeof(saddr) && saddr.sin_port == 0);
|
||||
@ -190,6 +193,8 @@ FN_TEST(bind)
|
||||
struct sockaddr *psaddr = (struct sockaddr *)&sk_addr;
|
||||
socklen_t addrlen = sizeof(sk_addr);
|
||||
|
||||
TEST_ERRNO(bind(sk_unbound, psaddr, addrlen - 1), EINVAL);
|
||||
|
||||
TEST_ERRNO(bind(sk_bound, psaddr, addrlen), EINVAL);
|
||||
|
||||
TEST_ERRNO(bind(sk_listen, psaddr, addrlen), EINVAL);
|
||||
|
@ -57,7 +57,10 @@ FN_TEST(getsockname)
|
||||
{
|
||||
struct sockaddr_in saddr = { .sin_port = 0xbeef };
|
||||
struct sockaddr *psaddr = (struct sockaddr *)&saddr;
|
||||
socklen_t addrlen = sizeof(saddr);
|
||||
socklen_t addrlen = 0;
|
||||
|
||||
TEST_RES(getsockname(sk_unbound, psaddr, &addrlen),
|
||||
addrlen == sizeof(saddr) && saddr.sin_port == 0xbeef);
|
||||
|
||||
TEST_RES(getsockname(sk_unbound, psaddr, &addrlen),
|
||||
addrlen == sizeof(saddr) && saddr.sin_port == 0);
|
||||
@ -143,6 +146,8 @@ FN_TEST(bind)
|
||||
struct sockaddr *psaddr = (struct sockaddr *)&sk_addr;
|
||||
socklen_t addrlen = sizeof(sk_addr);
|
||||
|
||||
TEST_ERRNO(bind(sk_unbound, psaddr, addrlen - 1), EINVAL);
|
||||
|
||||
TEST_ERRNO(bind(sk_bound, psaddr, addrlen), EINVAL);
|
||||
|
||||
TEST_ERRNO(bind(sk_connected, psaddr, addrlen), EINVAL);
|
||||
|
78
test/apps/network/unix_err.c
Normal file
78
test/apps/network/unix_err.c
Normal file
@ -0,0 +1,78 @@
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
#include <sys/poll.h>
|
||||
#include <unistd.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include "test.h"
|
||||
|
||||
#define PATH_OFFSET offsetof(struct sockaddr_un, sun_path)
|
||||
|
||||
FN_TEST(socket_addresses)
|
||||
{
|
||||
int sk;
|
||||
socklen_t addrlen;
|
||||
struct sockaddr_un addr;
|
||||
|
||||
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||
|
||||
#define MAKE_TEST(path, path_copy_len, path_len_to_kernel, path_buf_len, \
|
||||
path_len_from_kernel, path_from_kernel) \
|
||||
sk = TEST_SUCC(socket(PF_UNIX, SOCK_STREAM, 0)); \
|
||||
\
|
||||
memset(&addr, 0, sizeof(addr)); \
|
||||
addr.sun_family = AF_UNIX; \
|
||||
memcpy(addr.sun_path, path, path_copy_len); \
|
||||
\
|
||||
TEST_SUCC(bind(sk, (struct sockaddr *)&addr, \
|
||||
PATH_OFFSET + path_len_to_kernel)); \
|
||||
\
|
||||
memset(&addr, 0, sizeof(addr)); \
|
||||
\
|
||||
addrlen = path_buf_len + PATH_OFFSET; \
|
||||
TEST_RES( \
|
||||
getsockname(sk, (struct sockaddr *)&addr, &addrlen), \
|
||||
addrlen == PATH_OFFSET + path_len_from_kernel && \
|
||||
0 == memcmp(addr.sun_path, path_from_kernel, \
|
||||
MIN(path_buf_len, path_len_from_kernel))); \
|
||||
\
|
||||
TEST_SUCC(close(sk));
|
||||
|
||||
#define LONG_PATH \
|
||||
"/tmp/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
|
||||
_Static_assert(sizeof(LONG_PATH) == sizeof(addr.sun_path),
|
||||
"LONG_PATH has a wrong length");
|
||||
|
||||
MAKE_TEST("/tmp/R0", 8, 8, 8, 8, "/tmp/R0");
|
||||
|
||||
MAKE_TEST("/tmp/R1", 8, 9, 8, 8, "/tmp/R1");
|
||||
|
||||
MAKE_TEST("/tmp/R2", 6, 6, 8, 7, "/tmp/R");
|
||||
|
||||
MAKE_TEST("/tmp/R3", 7, 7, 8, 8, "/tmp/R3");
|
||||
|
||||
MAKE_TEST("/tmp/R4", 7, 7, 7, 8, "/tmp/R4");
|
||||
|
||||
MAKE_TEST("/tmp/R5", 7, 7, 6, 8, "/tmp/R");
|
||||
|
||||
MAKE_TEST("/tmp/R6", 7, 7, 0, 8, "");
|
||||
|
||||
MAKE_TEST(LONG_PATH, 107, 107, 108, 108, LONG_PATH);
|
||||
|
||||
MAKE_TEST(LONG_PATH "a", 108, 108, 108, 109, LONG_PATH "a");
|
||||
|
||||
#undef LONG_PATH
|
||||
#undef MAKE_TEST
|
||||
|
||||
sk = TEST_SUCC(socket(PF_UNIX, SOCK_STREAM, 0));
|
||||
|
||||
TEST_ERRNO(bind(sk, (struct sockaddr *)&addr, -1), EINVAL);
|
||||
TEST_ERRNO(bind(sk, (struct sockaddr *)&addr, PATH_OFFSET - 1), EINVAL);
|
||||
TEST_ERRNO(bind(sk, (struct sockaddr *)&addr, sizeof(addr) + 1),
|
||||
EINVAL);
|
||||
|
||||
TEST_SUCC(close(sk));
|
||||
}
|
||||
END_TEST()
|
@ -23,5 +23,6 @@ echo "Start network test......"
|
||||
./http_client
|
||||
./tcp_err
|
||||
./udp_err
|
||||
./unix_err
|
||||
|
||||
echo "All network test passed"
|
||||
|
Reference in New Issue
Block a user