mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
sock_dns_cache: move to dns_cache
Also piggy-back some fixes to the unittests and submodule handling
This commit is contained in:
parent
1761726024
commit
8bec9c1115
@ -54,6 +54,7 @@ PSEUDOMODULES += dhcpv6_client_ia_pd
|
|||||||
PSEUDOMODULES += dhcpv6_client_ia_na
|
PSEUDOMODULES += dhcpv6_client_ia_na
|
||||||
PSEUDOMODULES += dhcpv6_client_mud_url
|
PSEUDOMODULES += dhcpv6_client_mud_url
|
||||||
PSEUDOMODULES += dhcpv6_relay
|
PSEUDOMODULES += dhcpv6_relay
|
||||||
|
PSEUDOMODULES += dns_cache
|
||||||
PSEUDOMODULES += dns_msg
|
PSEUDOMODULES += dns_msg
|
||||||
PSEUDOMODULES += ecc_%
|
PSEUDOMODULES += ecc_%
|
||||||
PSEUDOMODULES += ethos_stdio
|
PSEUDOMODULES += ethos_stdio
|
||||||
@ -215,7 +216,6 @@ PSEUDOMODULES += sock_async
|
|||||||
PSEUDOMODULES += sock_aux_local
|
PSEUDOMODULES += sock_aux_local
|
||||||
PSEUDOMODULES += sock_aux_rssi
|
PSEUDOMODULES += sock_aux_rssi
|
||||||
PSEUDOMODULES += sock_aux_timestamp
|
PSEUDOMODULES += sock_aux_timestamp
|
||||||
PSEUDOMODULES += sock_dns_cache
|
|
||||||
PSEUDOMODULES += sock_dtls
|
PSEUDOMODULES += sock_dtls
|
||||||
PSEUDOMODULES += sock_ip
|
PSEUDOMODULES += sock_ip
|
||||||
PSEUDOMODULES += sock_tcp
|
PSEUDOMODULES += sock_tcp
|
||||||
|
@ -602,8 +602,7 @@ ifneq (,$(filter sock_dns,$(USEMODULE)))
|
|||||||
USEMODULE += posix_headers
|
USEMODULE += posix_headers
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq (,$(filter sock_dns_cache,$(USEMODULE)))
|
ifneq (,$(filter dns_cache,$(USEMODULE)))
|
||||||
USEMODULE += sock_dns
|
|
||||||
USEMODULE += ztimer_msec
|
USEMODULE += ztimer_msec
|
||||||
USEMODULE += checksum
|
USEMODULE += checksum
|
||||||
endif
|
endif
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup net_sock_dns
|
* @defgroup net_dns_cache DNS cache
|
||||||
|
* @ingroup net_dns
|
||||||
*
|
*
|
||||||
* @brief DNS cache
|
* @brief DNS cache
|
||||||
*
|
*
|
||||||
@ -29,23 +30,39 @@
|
|||||||
* @author Benjamin Valentin <benjamin.valentin@ml-pa.com>
|
* @author Benjamin Valentin <benjamin.valentin@ml-pa.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef DNS_CACHE_H
|
#ifndef NET_DNS_CACHE_H
|
||||||
#define DNS_CACHE_H
|
#define NET_DNS_CACHE_H
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "kernel_defines.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Number of DNS cache entries
|
* @brief Maximum number of DNS cache entries
|
||||||
*/
|
*/
|
||||||
#ifndef CONFIG_DNS_CACHE_SIZE
|
#ifndef CONFIG_DNS_CACHE_SIZE
|
||||||
#define CONFIG_DNS_CACHE_SIZE 4
|
#define CONFIG_DNS_CACHE_SIZE 4
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if IS_USED(MODULE_SOCK_DNS_CACHE) || DOXYGEN
|
/**
|
||||||
|
* @brief Handle to cache A records
|
||||||
|
*/
|
||||||
|
#ifndef CONFIG_DNS_CACHE_A
|
||||||
|
#define CONFIG_DNS_CACHE_A IS_USED(MODULE_IPV4)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Handle to cache AAAA records
|
||||||
|
*/
|
||||||
|
#ifndef CONFIG_DNS_CACHE_AAAA
|
||||||
|
#define CONFIG_DNS_CACHE_AAAA IS_USED(MODULE_IPV6)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if IS_USED(MODULE_DNS_CACHE) || DOXYGEN
|
||||||
/**
|
/**
|
||||||
* @brief Get IP address for a DNS name from the DNS cache
|
* @brief Get IP address for a DNS name from the DNS cache
|
||||||
*
|
*
|
||||||
@ -56,7 +73,7 @@ extern "C" {
|
|||||||
* @return the size of the resolved address on success
|
* @return the size of the resolved address on success
|
||||||
* @return <= 0 otherwise
|
* @return <= 0 otherwise
|
||||||
*/
|
*/
|
||||||
int sock_dns_cache_query(const char *domain_name, void *addr_out, int family);
|
int dns_cache_query(const char *domain_name, void *addr_out, int family);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Add an IP address for a DNS name to the DNS cache
|
* @brief Add an IP address for a DNS name to the DNS cache
|
||||||
@ -66,10 +83,9 @@ int sock_dns_cache_query(const char *domain_name, void *addr_out, int family);
|
|||||||
* @param[in] addr_len length of the address in bytes
|
* @param[in] addr_len length of the address in bytes
|
||||||
* @param[in] ttl lifetime of the entry in seconds
|
* @param[in] ttl lifetime of the entry in seconds
|
||||||
*/
|
*/
|
||||||
void sock_dns_cache_add(const char *domain_name, const void *addr, int addr_len, uint32_t ttl);
|
void dns_cache_add(const char *domain_name, const void *addr, int addr_len, uint32_t ttl);
|
||||||
#else
|
#else
|
||||||
static inline int sock_dns_cache_query(const char *domain_name,
|
static inline int dns_cache_query(const char *domain_name, void *addr_out, int family)
|
||||||
void *addr_out, int family)
|
|
||||||
{
|
{
|
||||||
(void)domain_name;
|
(void)domain_name;
|
||||||
(void)addr_out;
|
(void)addr_out;
|
||||||
@ -77,8 +93,8 @@ static inline int sock_dns_cache_query(const char *domain_name,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void sock_dns_cache_add(const char *domain_name, const void *addr,
|
static inline void dns_cache_add(const char *domain_name, const void *addr,
|
||||||
int addr_len, uint32_t ttl)
|
int addr_len, uint32_t ttl)
|
||||||
{
|
{
|
||||||
(void)domain_name;
|
(void)domain_name;
|
||||||
(void)addr;
|
(void)addr;
|
||||||
@ -91,5 +107,5 @@ static inline void sock_dns_cache_add(const char *domain_name, const void *addr,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* DNS_CACHE_H */
|
#endif /* NET_DNS_CACHE_H */
|
||||||
/** @} */
|
/** @} */
|
@ -25,4 +25,28 @@ config DNS_MSG_LEN
|
|||||||
default 128
|
default 128
|
||||||
|
|
||||||
endif # KCONFIG_USEMODULE_DNS_MSG
|
endif # KCONFIG_USEMODULE_DNS_MSG
|
||||||
|
|
||||||
|
menuconfig KCONFIG_USEMODULE_DNS_CACHE
|
||||||
|
bool "Configure DNS cache"
|
||||||
|
depends on USEMODULE_DNS_CACHE
|
||||||
|
help
|
||||||
|
Configure DNS cache using Kconfig.
|
||||||
|
|
||||||
|
if KCONFIG_USEMODULE_DNS_CACHE
|
||||||
|
|
||||||
|
config DNS_CACHE_SIZE
|
||||||
|
int "Maximum number of DNS cache entries"
|
||||||
|
default 4
|
||||||
|
|
||||||
|
config DNS_CACHE_A
|
||||||
|
bool "Handle to cache A records"
|
||||||
|
default y if USEMODULE_IPV4
|
||||||
|
default n
|
||||||
|
|
||||||
|
config DNS_CACHE_AAAA
|
||||||
|
bool "Handle to cache AAAA records"
|
||||||
|
default y if USEMODULE_IPV6
|
||||||
|
default n
|
||||||
|
|
||||||
|
endif # KCONFIG_USEMODULE_DNS_SIZE
|
||||||
endif # KCONFIG_USEMODULE_DNS
|
endif # KCONFIG_USEMODULE_DNS
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
SRC :=
|
SRC :=
|
||||||
|
|
||||||
SUBMODULE := 1
|
SUBMODULES := 1
|
||||||
|
|
||||||
include $(RIOTBASE)/Makefile.base
|
include $(RIOTBASE)/Makefile.base
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup net_sock_dns
|
* @ingroup net_dns_cache
|
||||||
* @{
|
* @{
|
||||||
* @file
|
* @file
|
||||||
* @brief DNS cache implementation
|
* @brief DNS cache implementation
|
||||||
@ -17,9 +17,11 @@
|
|||||||
|
|
||||||
#include "bitfield.h"
|
#include "bitfield.h"
|
||||||
#include "checksum/fletcher32.h"
|
#include "checksum/fletcher32.h"
|
||||||
#include "net/sock/dns.h"
|
|
||||||
#include "time_units.h"
|
#include "time_units.h"
|
||||||
#include "dns_cache.h"
|
#include "net/af.h"
|
||||||
|
#include "net/dns/cache.h"
|
||||||
|
#include "net/ipv4/addr.h"
|
||||||
|
#include "net/ipv6/addr.h"
|
||||||
#include "ztimer.h"
|
#include "ztimer.h"
|
||||||
|
|
||||||
#define ENABLE_DEBUG 0
|
#define ENABLE_DEBUG 0
|
||||||
@ -29,29 +31,29 @@ static struct dns_cache_entry {
|
|||||||
uint32_t hash;
|
uint32_t hash;
|
||||||
uint32_t expires;
|
uint32_t expires;
|
||||||
union {
|
union {
|
||||||
#if IS_ACTIVE(SOCK_HAS_IPV4)
|
#if IS_ACTIVE(CONFIG_DNS_CACHE_A)
|
||||||
ipv4_addr_t v4;
|
ipv4_addr_t v4;
|
||||||
#endif
|
#endif
|
||||||
#if IS_ACTIVE(SOCK_HAS_IPV6)
|
#if IS_ACTIVE(CONFIG_DNS_CACHE_AAAA)
|
||||||
ipv6_addr_t v6;
|
ipv6_addr_t v6;
|
||||||
#endif
|
#endif
|
||||||
} addr;
|
} addr;
|
||||||
} cache[CONFIG_DNS_CACHE_SIZE];
|
} cache[CONFIG_DNS_CACHE_SIZE];
|
||||||
|
|
||||||
#if IS_ACTIVE(SOCK_HAS_IPV4) && IS_ACTIVE(SOCK_HAS_IPV6)
|
#if IS_ACTIVE(CONFIG_DNS_CACHE_A) && IS_ACTIVE(CONFIG_DNS_CACHE_AAAA)
|
||||||
BITFIELD(cache_is_v6, CONFIG_DNS_CACHE_SIZE);
|
BITFIELD(cache_is_v6, CONFIG_DNS_CACHE_SIZE);
|
||||||
|
|
||||||
static inline uint8_t _get_len(unsigned idx)
|
static inline uint8_t _get_len(unsigned idx)
|
||||||
{
|
{
|
||||||
return bf_isset(cache_is_v6, idx) ? 16 : 4;
|
return bf_isset(cache_is_v6, idx) ? 16 : 4;
|
||||||
}
|
}
|
||||||
#elif IS_ACTIVE(SOCK_HAS_IPV4)
|
#elif IS_ACTIVE(CONFIG_DNS_CACHE_A)
|
||||||
static inline uint8_t _get_len(unsigned idx)
|
static inline uint8_t _get_len(unsigned idx)
|
||||||
{
|
{
|
||||||
(void)idx;
|
(void)idx;
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
#elif IS_ACTIVE(SOCK_HAS_IPV6)
|
#elif IS_ACTIVE(CONFIG_DNS_CACHE_AAAA)
|
||||||
static inline uint8_t _get_len(unsigned idx)
|
static inline uint8_t _get_len(unsigned idx)
|
||||||
{
|
{
|
||||||
(void)idx;
|
(void)idx;
|
||||||
@ -61,7 +63,7 @@ static inline uint8_t _get_len(unsigned idx)
|
|||||||
|
|
||||||
static void _set_len(unsigned idx, uint8_t len)
|
static void _set_len(unsigned idx, uint8_t len)
|
||||||
{
|
{
|
||||||
#if IS_ACTIVE(SOCK_HAS_IPV4) && IS_ACTIVE(SOCK_HAS_IPV6)
|
#if IS_ACTIVE(CONFIG_DNS_CACHE_A) && IS_ACTIVE(CONFIG_DNS_CACHE_AAAA)
|
||||||
if (len == 16) {
|
if (len == 16) {
|
||||||
bf_set(cache_is_v6, idx);
|
bf_set(cache_is_v6, idx);
|
||||||
} else {
|
} else {
|
||||||
@ -94,11 +96,11 @@ static void _set_empty(unsigned idx)
|
|||||||
static uint8_t _addr_len(int family)
|
static uint8_t _addr_len(int family)
|
||||||
{
|
{
|
||||||
switch (family) {
|
switch (family) {
|
||||||
#if IS_ACTIVE(SOCK_HAS_IPV4)
|
#if IS_ACTIVE(CONFIG_DNS_CACHE_A)
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
return sizeof(ipv4_addr_t);
|
return sizeof(ipv4_addr_t);
|
||||||
#endif
|
#endif
|
||||||
#if IS_ACTIVE(SOCK_HAS_IPV6)
|
#if IS_ACTIVE(CONFIG_DNS_CACHE_AAAA)
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
return sizeof(ipv6_addr_t);
|
return sizeof(ipv6_addr_t);
|
||||||
#endif
|
#endif
|
||||||
@ -114,7 +116,7 @@ static uint32_t _hash(const void *data, size_t len)
|
|||||||
return fletcher32(data, (len + 1) / 2);
|
return fletcher32(data, (len + 1) / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
int sock_dns_cache_query(const char *domain_name, void *addr_out, int family)
|
int dns_cache_query(const char *domain_name, void *addr_out, int family)
|
||||||
{
|
{
|
||||||
uint32_t now = ztimer_now(ZTIMER_MSEC) / MS_PER_SEC;
|
uint32_t now = ztimer_now(ZTIMER_MSEC) / MS_PER_SEC;
|
||||||
uint32_t hash = _hash(domain_name, strlen(domain_name));
|
uint32_t hash = _hash(domain_name, strlen(domain_name));
|
||||||
@ -153,7 +155,7 @@ static void _add_entry(uint8_t i, uint32_t hash, const void *addr_out,
|
|||||||
_set_len(i, addr_len);
|
_set_len(i, addr_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sock_dns_cache_add(const char *domain_name, const void *addr_out,
|
void dns_cache_add(const char *domain_name, const void *addr_out,
|
||||||
int addr_len, uint32_t ttl)
|
int addr_len, uint32_t ttl)
|
||||||
{
|
{
|
||||||
uint32_t now = ztimer_now(ZTIMER_MSEC) / MS_PER_SEC;
|
uint32_t now = ztimer_now(ZTIMER_MSEC) / MS_PER_SEC;
|
@ -1,7 +1,3 @@
|
|||||||
SRC += dns.c
|
SRC += dns.c
|
||||||
|
|
||||||
ifneq (,$(filter sock_dns_cache, $(USEMODULE)))
|
|
||||||
SRC += dns_cache.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
include $(RIOTBASE)/Makefile.base
|
include $(RIOTBASE)/Makefile.base
|
||||||
|
@ -22,10 +22,10 @@
|
|||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
#include "net/dns.h"
|
#include "net/dns.h"
|
||||||
|
#include "net/dns/cache.h"
|
||||||
#include "net/dns/msg.h"
|
#include "net/dns/msg.h"
|
||||||
#include "net/sock/udp.h"
|
#include "net/sock/udp.h"
|
||||||
#include "net/sock/dns.h"
|
#include "net/sock/dns.h"
|
||||||
#include "dns_cache.h"
|
|
||||||
|
|
||||||
/* min domain name length is 1, so minimum record length is 7 */
|
/* min domain name length is 1, so minimum record length is 7 */
|
||||||
#define DNS_MIN_REPLY_LEN (unsigned)(sizeof(dns_hdr_t) + 7)
|
#define DNS_MIN_REPLY_LEN (unsigned)(sizeof(dns_hdr_t) + 7)
|
||||||
@ -80,7 +80,7 @@ int sock_dns_query(const char *domain_name, void *addr_out, int family)
|
|||||||
return -ENOSPC;
|
return -ENOSPC;
|
||||||
}
|
}
|
||||||
|
|
||||||
res = sock_dns_cache_query(domain_name, addr_out, family);
|
res = dns_cache_query(domain_name, addr_out, family);
|
||||||
if (res) {
|
if (res) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -104,7 +104,7 @@ int sock_dns_query(const char *domain_name, void *addr_out, int family)
|
|||||||
uint32_t ttl;
|
uint32_t ttl;
|
||||||
if ((res = dns_msg_parse_reply(dns_buf, res, family,
|
if ((res = dns_msg_parse_reply(dns_buf, res, family,
|
||||||
addr_out, &ttl)) > 0) {
|
addr_out, &ttl)) > 0) {
|
||||||
sock_dns_cache_add(domain_name, addr_out, res, ttl);
|
dns_cache_add(domain_name, addr_out, res, ttl);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
4
tests/unittests/tests-dns_cache/Makefile.include
Normal file
4
tests/unittests/tests-dns_cache/Makefile.include
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
USEMODULE += dns_cache
|
||||||
|
USEMODULE += ipv4
|
||||||
|
USEMODULE += ipv6
|
||||||
|
USEMODULE += ztimer_usec
|
54
tests/unittests/tests-dns_cache/tests-dns_cache.c
Normal file
54
tests/unittests/tests-dns_cache/tests-dns_cache.c
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 ML!PA Consulting GmbH
|
||||||
|
*
|
||||||
|
* This file is subject to the terms and conditions of the GNU Lesser
|
||||||
|
* General Public License v2.1. See the file LICENSE in the top level
|
||||||
|
* directory for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "net/af.h"
|
||||||
|
#include "net/ipv6.h"
|
||||||
|
#include "ztimer.h"
|
||||||
|
|
||||||
|
#include "net/dns/cache.h"
|
||||||
|
|
||||||
|
#include "tests-dns_cache.h"
|
||||||
|
|
||||||
|
static void test_dns_cache_add(void)
|
||||||
|
{
|
||||||
|
ipv6_addr_t addr_in = IPV6_ADDR_ALL_NODES_IF_LOCAL;
|
||||||
|
ipv6_addr_t addr_out;
|
||||||
|
|
||||||
|
TEST_ASSERT_EQUAL_INT(0, dns_cache_query("example.com", &addr_out, AF_INET6));
|
||||||
|
|
||||||
|
/* add DNS entry, set it to expire in 1s */
|
||||||
|
dns_cache_add("example.com", &addr_in, sizeof(addr_in), 1);
|
||||||
|
TEST_ASSERT_EQUAL_INT(sizeof(addr_out), dns_cache_query("example.com", &addr_out, AF_INET6));
|
||||||
|
TEST_ASSERT_EQUAL_INT(0, memcmp(&addr_in, &addr_out, sizeof(addr_in)));
|
||||||
|
|
||||||
|
TEST_ASSERT_EQUAL_INT(0, dns_cache_query("example.com", &addr_out, AF_INET));
|
||||||
|
TEST_ASSERT_EQUAL_INT(0, dns_cache_query("alt.example.com", &addr_out, AF_INET6));
|
||||||
|
TEST_ASSERT_EQUAL_INT(0, dns_cache_query("example.comm", &addr_out, AF_INET6));
|
||||||
|
TEST_ASSERT_EQUAL_INT(0, dns_cache_query("example.co", &addr_out, AF_INET6));
|
||||||
|
|
||||||
|
ztimer_sleep(ZTIMER_USEC, 2000000);
|
||||||
|
TEST_ASSERT_EQUAL_INT(0, dns_cache_query("example.com", &addr_out, AF_INET6));
|
||||||
|
}
|
||||||
|
|
||||||
|
Test *tests_dns_cache_tests(void)
|
||||||
|
{
|
||||||
|
EMB_UNIT_TESTFIXTURES(fixtures) {
|
||||||
|
new_TestFixture(test_dns_cache_add),
|
||||||
|
};
|
||||||
|
|
||||||
|
EMB_UNIT_TESTCALLER(dns_cache_tests, NULL, NULL, fixtures);
|
||||||
|
|
||||||
|
return (Test *)&dns_cache_tests;
|
||||||
|
}
|
||||||
|
|
||||||
|
void tests_dns_cache(void)
|
||||||
|
{
|
||||||
|
TESTS_RUN(tests_dns_cache_tests());
|
||||||
|
}
|
@ -11,12 +11,12 @@
|
|||||||
* @{
|
* @{
|
||||||
*
|
*
|
||||||
* @file
|
* @file
|
||||||
* @brief Unittests for the ``sock_dns_cache`` module
|
* @brief Unittests for the ``dns_cache`` module
|
||||||
*
|
*
|
||||||
* @author Benjamin Valentin <benjamin.valentin@ml-pa.com>
|
* @author Benjamin Valentin <benjamin.valentin@ml-pa.com>
|
||||||
*/
|
*/
|
||||||
#ifndef TESTS_SOCK_DNS_CACHE_H
|
#ifndef TESTS_DNS_CACHE_H
|
||||||
#define TESTS_SOCK_DNS_CACHE_H
|
#define TESTS_DNS_CACHE_H
|
||||||
|
|
||||||
#include "embUnit.h"
|
#include "embUnit.h"
|
||||||
|
|
||||||
@ -27,18 +27,18 @@ extern "C" {
|
|||||||
/**
|
/**
|
||||||
* @brief The entry point of this test suite.
|
* @brief The entry point of this test suite.
|
||||||
*/
|
*/
|
||||||
void tests_sock_dns_cache(void);
|
void tests_dns_cache(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Generates tests for sock_dns_cache
|
* @brief Generates tests for dns_cache
|
||||||
*
|
*
|
||||||
* @return embUnit tests if successful, NULL if not.
|
* @return embUnit tests if successful, NULL if not.
|
||||||
*/
|
*/
|
||||||
Test *tests_sock_dns_cache_tests(void);
|
Test *tests_dns_cache_tests(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* TESTS_SOCK_DNS_CACHE_H */
|
#endif /* TESTS_DNS_CACHE_H */
|
||||||
/** @} */
|
/** @} */
|
@ -1,2 +0,0 @@
|
|||||||
USEMODULE += gnrc_ipv6
|
|
||||||
USEMODULE += sock_dns_cache
|
|
@ -1,53 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2022 ML!PA Consulting GmbH
|
|
||||||
*
|
|
||||||
* This file is subject to the terms and conditions of the GNU Lesser
|
|
||||||
* General Public License v2.1. See the file LICENSE in the top level
|
|
||||||
* directory for more details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "net/af.h"
|
|
||||||
#include "net/ipv6.h"
|
|
||||||
#include "ztimer.h"
|
|
||||||
|
|
||||||
#include "tests-sock_dns_cache.h"
|
|
||||||
#include "../net/application_layer/sock_dns/dns_cache.h"
|
|
||||||
|
|
||||||
static void test_dns_cache_add(void)
|
|
||||||
{
|
|
||||||
ipv6_addr_t addr_in = IPV6_ADDR_ALL_NODES_IF_LOCAL;
|
|
||||||
ipv6_addr_t addr_out;
|
|
||||||
|
|
||||||
TEST_ASSERT_EQUAL_INT(0, sock_dns_cache_query("example.com", &addr_out, AF_INET6));
|
|
||||||
|
|
||||||
/* add DNS entry, set it to expire in 1s */
|
|
||||||
sock_dns_cache_add("example.com", &addr_in, sizeof(addr_in), 1);
|
|
||||||
TEST_ASSERT_EQUAL_INT(sizeof(addr_out), sock_dns_cache_query("example.com", &addr_out, AF_INET6));
|
|
||||||
TEST_ASSERT_EQUAL_INT(0, memcmp(&addr_in, &addr_out, sizeof(addr_in)));
|
|
||||||
|
|
||||||
TEST_ASSERT_EQUAL_INT(0, sock_dns_cache_query("example.com", &addr_out, AF_INET));
|
|
||||||
TEST_ASSERT_EQUAL_INT(0, sock_dns_cache_query("alt.example.com", &addr_out, AF_INET6));
|
|
||||||
TEST_ASSERT_EQUAL_INT(0, sock_dns_cache_query("example.comm", &addr_out, AF_INET6));
|
|
||||||
TEST_ASSERT_EQUAL_INT(0, sock_dns_cache_query("example.co", &addr_out, AF_INET6));
|
|
||||||
|
|
||||||
ztimer_sleep(ZTIMER_USEC, 2000000);
|
|
||||||
TEST_ASSERT_EQUAL_INT(0, sock_dns_cache_query("example.com", &addr_out, AF_INET6));
|
|
||||||
}
|
|
||||||
|
|
||||||
Test *tests_sock_dns_cache_tests(void)
|
|
||||||
{
|
|
||||||
EMB_UNIT_TESTFIXTURES(fixtures) {
|
|
||||||
new_TestFixture(test_dns_cache_add),
|
|
||||||
};
|
|
||||||
|
|
||||||
EMB_UNIT_TESTCALLER(sock_dns_cache_tests, NULL, NULL, fixtures);
|
|
||||||
|
|
||||||
return (Test *)&sock_dns_cache_tests;
|
|
||||||
}
|
|
||||||
|
|
||||||
void tests_sock_dns_cache(void)
|
|
||||||
{
|
|
||||||
TESTS_RUN(tests_sock_dns_cache_tests());
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user