zephyr/tests/net/socket/socket_helpers.h
Jukka Rissanen 960e6d9504 tests: net: getaddrinfo: Fix test to check the query is sent
As the getaddrinfo() test is suppose to be self contained, then
we will need to install handler for the sent DNS query. After we
receive the query in process_dns() thread, we verify that the
query was sent properly. We do not return DNS reply back to
the caller in this case as we do not want to create DNS server
just for this simple test application. This can be changed later
if we get DNS server functionality in Zephyr network stack.

Fixes #15193

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-04-30 09:56:01 -07:00

123 lines
3.2 KiB
C

/*
* Copyright (c) 2018 Linaro Limited
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <ztest_assert.h>
#include <net/socket.h>
#define clear_buf(buf) memset(buf, 0, sizeof(buf))
static inline int prepare_listen_sock_udp_v4(struct sockaddr_in *addr)
{
int ret, sock;
zassert_not_null(addr, "null sockaddr");
ret = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
zassert_true(ret >= 0, "socket open failed");
sock = ret;
zassert_equal(addr->sin_family, AF_INET, "Invalid family");
ret = bind(sock, (struct sockaddr *)addr, sizeof(*addr));
zassert_equal(ret, 0, "bind failed (%d/%d)", ret, errno);
return sock;
}
static inline int prepare_listen_sock_udp_v6(struct sockaddr_in6 *addr)
{
int ret, sock;
zassert_not_null(addr, "null sockaddr");
ret = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
zassert_true(ret >= 0, "socket open failed");
sock = ret;
zassert_equal(addr->sin6_family, AF_INET6, "Invalid family");
ret = bind(sock, (struct sockaddr *)addr, sizeof(*addr));
zassert_equal(ret, 0, "bind failed (%d/%d)", ret, errno);
return sock;
}
static inline void prepare_sock_udp_v4(const char *addr, u16_t port,
int *sock, struct sockaddr_in *sockaddr)
{
int rv;
zassert_not_null(addr, "null addr");
zassert_not_null(sock, "null sock");
zassert_not_null(sockaddr, "null sockaddr");
*sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
zassert_true(*sock >= 0, "socket open failed");
sockaddr->sin_family = AF_INET;
sockaddr->sin_port = htons(port);
rv = inet_pton(AF_INET, addr, &sockaddr->sin_addr);
zassert_equal(rv, 1, "inet_pton failed");
}
static inline void prepare_sock_udp_v6(const char *addr, u16_t port,
int *sock, struct sockaddr_in6 *sockaddr)
{
int rv;
zassert_not_null(addr, "null addr");
zassert_not_null(sock, "null sock");
zassert_not_null(sockaddr, "null sockaddr");
*sock = zsock_socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
zassert_true(*sock >= 0, "socket open failed");
(void)memset(sockaddr, 0, sizeof(*sockaddr));
sockaddr->sin6_family = AF_INET6;
sockaddr->sin6_port = htons(port);
rv = zsock_inet_pton(AF_INET6, addr, &sockaddr->sin6_addr);
zassert_equal(rv, 1, "inet_pton failed");
}
static inline void prepare_sock_tcp_v4(const char *addr, u16_t port,
int *sock, struct sockaddr_in *sockaddr)
{
int rv;
zassert_not_null(addr, "null addr");
zassert_not_null(sock, "null sock");
zassert_not_null(sockaddr, "null sockaddr");
*sock = zsock_socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
zassert_true(*sock >= 0, "socket open failed");
sockaddr->sin_family = AF_INET;
sockaddr->sin_port = htons(port);
rv = zsock_inet_pton(AF_INET, addr, &sockaddr->sin_addr);
zassert_equal(rv, 1, "inet_pton failed");
}
static inline void prepare_sock_tcp_v6(const char *addr, u16_t port,
int *sock, struct sockaddr_in6 *sockaddr)
{
int rv;
zassert_not_null(addr, "null addr");
zassert_not_null(sock, "null sock");
zassert_not_null(sockaddr, "null sockaddr");
*sock = zsock_socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
zassert_true(*sock >= 0, "socket open failed");
sockaddr->sin6_family = AF_INET6;
sockaddr->sin6_port = htons(port);
rv = zsock_inet_pton(AF_INET6, addr, &sockaddr->sin6_addr);
zassert_equal(rv, 1, "inet_pton failed");
}