tests: net: socket: Add getpeername() tests
Add tests for new getpeername() function. Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
This commit is contained in:
parent
81b92fcbb3
commit
cea2c8de3d
2 changed files with 101 additions and 2 deletions
|
@ -9,7 +9,7 @@ CONFIG_NET_LOOPBACK=y
|
|||
CONFIG_NET_IPV4=y
|
||||
CONFIG_NET_IPV6=y
|
||||
CONFIG_NET_UDP=y
|
||||
CONFIG_NET_TCP=n
|
||||
CONFIG_NET_TCP=y
|
||||
CONFIG_NET_SOCKETS=y
|
||||
CONFIG_NET_SOCKETS_POSIX_NAMES=y
|
||||
CONFIG_NET_L2_DUMMY=y
|
||||
|
@ -37,6 +37,9 @@ CONFIG_NET_IF_MAX_IPV4_COUNT=3
|
|||
CONFIG_MAIN_STACK_SIZE=2048
|
||||
CONFIG_ZTEST=y
|
||||
|
||||
# TCP handshake requires more packets
|
||||
CONFIG_NET_PKT_TX_COUNT=10
|
||||
|
||||
# User mode requirements
|
||||
CONFIG_TEST_USERSPACE=y
|
||||
CONFIG_HEAP_MEM_POOL_SIZE=128
|
||||
|
|
|
@ -100,6 +100,9 @@ static int dummy_send(const struct device *dev, struct net_pkt *pkt)
|
|||
|
||||
/* Report it back to the interface. */
|
||||
recv_pkt = net_pkt_clone(pkt, K_NO_WAIT);
|
||||
if (recv_pkt == NULL) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
ret = net_recv_data(net_pkt_iface(recv_pkt), recv_pkt);
|
||||
zassert_equal(ret, 0, "Cannot receive data (%d)", ret);
|
||||
|
@ -331,6 +334,97 @@ void test_ipv6_so_bindtodevice(void)
|
|||
sizeof(bind_addr));
|
||||
}
|
||||
|
||||
#define ADDR_SIZE(family) ((family == AF_INET) ? \
|
||||
sizeof(struct sockaddr_in) : \
|
||||
sizeof(struct sockaddr_in6))
|
||||
|
||||
void test_getpeername(int family)
|
||||
{
|
||||
int ret;
|
||||
int sock_c;
|
||||
int sock_s;
|
||||
struct sockaddr peer_addr;
|
||||
socklen_t peer_addr_len;
|
||||
struct sockaddr srv_addr = { 0 };
|
||||
|
||||
srv_addr.sa_family = family;
|
||||
if (family == AF_INET) {
|
||||
net_sin(&srv_addr)->sin_port = htons(DST_PORT);
|
||||
ret = inet_pton(AF_INET, CONFIG_NET_CONFIG_MY_IPV4_ADDR,
|
||||
&net_sin(&srv_addr)->sin_addr);
|
||||
} else {
|
||||
net_sin6(&srv_addr)->sin6_port = htons(DST_PORT);
|
||||
ret = inet_pton(AF_INET6, CONFIG_NET_CONFIG_MY_IPV6_ADDR,
|
||||
&net_sin6(&srv_addr)->sin6_addr);
|
||||
}
|
||||
zassert_equal(ret, 1, "inet_pton failed");
|
||||
|
||||
/* UDP socket */
|
||||
sock_c = socket(family, SOCK_DGRAM, IPPROTO_UDP);
|
||||
zassert_true(sock_c >= 0, "socket open failed");
|
||||
|
||||
peer_addr_len = ADDR_SIZE(family);
|
||||
ret = getpeername(sock_c, &peer_addr, &peer_addr_len);
|
||||
zassert_equal(ret, -1, "getpeername shouldn've failed");
|
||||
zassert_equal(errno, ENOTCONN, "getpeername returned invalid error");
|
||||
|
||||
ret = connect(sock_c, &srv_addr, ADDR_SIZE(family));
|
||||
zassert_equal(ret, 0, "connect failed");
|
||||
|
||||
memset(&peer_addr, 0, sizeof(peer_addr));
|
||||
peer_addr_len = ADDR_SIZE(family);
|
||||
ret = getpeername(sock_c, &peer_addr, &peer_addr_len);
|
||||
zassert_equal(ret, 0, "getpeername failed");
|
||||
zassert_mem_equal(&peer_addr, &srv_addr, ADDR_SIZE(family),
|
||||
"obtained wrong address");
|
||||
|
||||
ret = close(sock_c);
|
||||
zassert_equal(ret, 0, "close failed, %d", errno);
|
||||
|
||||
/* TCP socket */
|
||||
sock_c = socket(family, SOCK_STREAM, IPPROTO_TCP);
|
||||
zassert_true(sock_c >= 0, "socket open failed");
|
||||
sock_s = socket(family, SOCK_STREAM, IPPROTO_TCP);
|
||||
zassert_true(sock_s >= 0, "socket open failed");
|
||||
|
||||
ret = bind(sock_s, &srv_addr, ADDR_SIZE(family));
|
||||
zassert_equal(ret, 0, "bind failed, %d", errno);
|
||||
|
||||
ret = listen(sock_s, 1);
|
||||
zassert_equal(ret, 0, "listen failed, %d", errno);
|
||||
|
||||
peer_addr_len = ADDR_SIZE(family);
|
||||
ret = getpeername(sock_c, &peer_addr, &peer_addr_len);
|
||||
zassert_equal(ret, -1, "getpeername shouldn've failed");
|
||||
zassert_equal(errno, ENOTCONN, "getpeername returned invalid error");
|
||||
|
||||
ret = connect(sock_c, &srv_addr, ADDR_SIZE(family));
|
||||
zassert_equal(ret, 0, "connect failed");
|
||||
|
||||
memset(&peer_addr, 0, sizeof(peer_addr));
|
||||
peer_addr_len = ADDR_SIZE(family);
|
||||
ret = getpeername(sock_c, &peer_addr, &peer_addr_len);
|
||||
zassert_equal(ret, 0, "getpeername failed");
|
||||
zassert_mem_equal(&peer_addr, &srv_addr, ADDR_SIZE(family),
|
||||
"obtained wrong address");
|
||||
|
||||
ret = close(sock_c);
|
||||
zassert_equal(ret, 0, "close failed, %d", errno);
|
||||
ret = close(sock_s);
|
||||
zassert_equal(ret, 0, "close failed, %d", errno);
|
||||
}
|
||||
|
||||
|
||||
void test_ipv4_getpeername(void)
|
||||
{
|
||||
test_getpeername(AF_INET);
|
||||
}
|
||||
|
||||
void test_ipv6_getpeername(void)
|
||||
{
|
||||
test_getpeername(AF_INET6);
|
||||
}
|
||||
|
||||
void test_main(void)
|
||||
{
|
||||
k_thread_system_pool_assign(k_current_get());
|
||||
|
@ -339,7 +433,9 @@ void test_main(void)
|
|||
ztest_user_unit_test(test_gethostname),
|
||||
ztest_user_unit_test(test_inet_pton),
|
||||
ztest_user_unit_test(test_ipv4_so_bindtodevice),
|
||||
ztest_user_unit_test(test_ipv6_so_bindtodevice));
|
||||
ztest_user_unit_test(test_ipv6_so_bindtodevice),
|
||||
ztest_user_unit_test(test_ipv4_getpeername),
|
||||
ztest_user_unit_test(test_ipv6_getpeername));
|
||||
|
||||
ztest_run_test_suite(socket_misc);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue