Added tests in order to verify the functionality of the newly added DNS cache. Signed-off-by: Carlo Kirchmeier <carlo.kirchmeier@zuehlke.com>
136 lines
4.7 KiB
C
136 lines
4.7 KiB
C
/*
|
|
* Copyright (c) 2024 Endress+Hauser AG
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
#include <zephyr/fff.h>
|
|
#include <zephyr/ztest.h>
|
|
#include "dns_cache.h"
|
|
|
|
#define TEST_DNS_CACHE_SIZE 12
|
|
#define TEST_DNS_CACHE_DEFAULT_TTL 1
|
|
DNS_CACHE_DEFINE(test_dns_cache, TEST_DNS_CACHE_SIZE);
|
|
|
|
void clear_cache(void *fixture)
|
|
{
|
|
ARG_UNUSED(fixture);
|
|
dns_cache_flush(&test_dns_cache);
|
|
}
|
|
|
|
ZTEST_SUITE(net_dns_cache_test, NULL, NULL, clear_cache, NULL, NULL);
|
|
|
|
ZTEST(net_dns_cache_test, test_simple_cache_entry)
|
|
{
|
|
struct dns_addrinfo info_write = {.ai_family = AF_INET};
|
|
struct dns_addrinfo info_read = {0};
|
|
const char *query = "example.com";
|
|
|
|
zassert_ok(dns_cache_add(&test_dns_cache, query, &info_write, TEST_DNS_CACHE_DEFAULT_TTL),
|
|
"Cache entry adding should work.");
|
|
zassert_equal(1, dns_cache_find(&test_dns_cache, query, &info_read, 1));
|
|
zassert_equal(AF_INET, info_read.ai_family);
|
|
}
|
|
|
|
ZTEST(net_dns_cache_test, test_not_cached)
|
|
{
|
|
struct dns_addrinfo info_read = {0};
|
|
const char *query = "example.com";
|
|
|
|
zassert_equal(0, dns_cache_find(&test_dns_cache, query, &info_read, 1));
|
|
zassert_equal(0, info_read.ai_family);
|
|
}
|
|
|
|
ZTEST(net_dns_cache_test, test_fill_cache)
|
|
{
|
|
struct dns_addrinfo info_write = {.ai_family = AF_INET};
|
|
struct dns_addrinfo info_read[TEST_DNS_CACHE_SIZE] = {0};
|
|
const char *query = "example.com";
|
|
|
|
for (size_t i = 0; i < TEST_DNS_CACHE_SIZE; i++) {
|
|
zassert_ok(dns_cache_add(&test_dns_cache, query, &info_write,
|
|
TEST_DNS_CACHE_DEFAULT_TTL),
|
|
"Cache entry adding should work.");
|
|
}
|
|
zassert_equal(TEST_DNS_CACHE_SIZE,
|
|
dns_cache_find(&test_dns_cache, query, info_read, TEST_DNS_CACHE_SIZE));
|
|
zassert_equal(AF_INET, info_read[TEST_DNS_CACHE_SIZE - 1].ai_family);
|
|
}
|
|
|
|
ZTEST(net_dns_cache_test, test_flush)
|
|
{
|
|
struct dns_addrinfo info_write = {.ai_family = AF_INET};
|
|
struct dns_addrinfo info_read[TEST_DNS_CACHE_SIZE] = {0};
|
|
const char *query = "example.com";
|
|
|
|
for (size_t i = 0; i < TEST_DNS_CACHE_SIZE; i++) {
|
|
zassert_ok(dns_cache_add(&test_dns_cache, query, &info_write,
|
|
TEST_DNS_CACHE_DEFAULT_TTL),
|
|
"Cache entry adding should work.");
|
|
}
|
|
zassert_ok(dns_cache_flush(&test_dns_cache));
|
|
zassert_equal(0, dns_cache_find(&test_dns_cache, query, info_read, TEST_DNS_CACHE_SIZE));
|
|
zassert_equal(0, info_read[TEST_DNS_CACHE_SIZE - 1].ai_family);
|
|
}
|
|
|
|
ZTEST(net_dns_cache_test, test_fill_cache_to_small)
|
|
{
|
|
struct dns_addrinfo info_write = {.ai_family = AF_INET};
|
|
struct dns_addrinfo info_read[TEST_DNS_CACHE_SIZE - 1] = {0};
|
|
const char *query = "example.com";
|
|
|
|
for (size_t i = 0; i < TEST_DNS_CACHE_SIZE; i++) {
|
|
zassert_ok(dns_cache_add(&test_dns_cache, query, &info_write,
|
|
TEST_DNS_CACHE_DEFAULT_TTL),
|
|
"Cache entry adding should work.");
|
|
}
|
|
zassert_equal(-ENOSR,
|
|
dns_cache_find(&test_dns_cache, query, info_read, TEST_DNS_CACHE_SIZE - 1));
|
|
zassert_equal(AF_INET, info_read[TEST_DNS_CACHE_SIZE - 2].ai_family);
|
|
}
|
|
|
|
ZTEST(net_dns_cache_test, test_closest_expiry_removed)
|
|
{
|
|
struct dns_addrinfo info_write = {.ai_family = AF_INET};
|
|
struct dns_addrinfo info_read = {0};
|
|
const char *closest_expiry = "example.com";
|
|
|
|
zassert_ok(dns_cache_add(&test_dns_cache, closest_expiry, &info_write,
|
|
TEST_DNS_CACHE_DEFAULT_TTL),
|
|
"Cache entry adding should work.");
|
|
k_sleep(K_MSEC(1));
|
|
for (size_t i = 0; i < TEST_DNS_CACHE_SIZE; i++) {
|
|
zassert_ok(dns_cache_add(&test_dns_cache, "example2.com", &info_write,
|
|
TEST_DNS_CACHE_DEFAULT_TTL),
|
|
"Cache entry adding should work.");
|
|
}
|
|
zassert_equal(0, dns_cache_find(&test_dns_cache, closest_expiry, &info_read, 1));
|
|
zassert_equal(0, info_read.ai_family);
|
|
}
|
|
|
|
ZTEST(net_dns_cache_test, test_expired_entries_removed)
|
|
{
|
|
struct dns_addrinfo info_write = {.ai_family = AF_INET};
|
|
struct dns_addrinfo info_read[3] = {0};
|
|
const char *query = "example.com";
|
|
|
|
zassert_ok(dns_cache_add(&test_dns_cache, query, &info_write, TEST_DNS_CACHE_DEFAULT_TTL),
|
|
"Cache entry adding should work.");
|
|
zassert_ok(
|
|
dns_cache_add(&test_dns_cache, query, &info_write, TEST_DNS_CACHE_DEFAULT_TTL * 2),
|
|
"Cache entry adding should work.");
|
|
zassert_ok(
|
|
dns_cache_add(&test_dns_cache, query, &info_write, TEST_DNS_CACHE_DEFAULT_TTL * 3),
|
|
"Cache entry adding should work.");
|
|
zassert_equal(3, dns_cache_find(&test_dns_cache, query, info_read, 3));
|
|
zassert_equal(AF_INET, info_read[0].ai_family);
|
|
k_sleep(K_MSEC(TEST_DNS_CACHE_DEFAULT_TTL * 1000 + 1));
|
|
zassert_equal(2, dns_cache_find(&test_dns_cache, query, info_read, 3));
|
|
zassert_equal(AF_INET, info_read[0].ai_family);
|
|
k_sleep(K_MSEC(TEST_DNS_CACHE_DEFAULT_TTL * 1000 + 1));
|
|
zassert_equal(1, dns_cache_find(&test_dns_cache, query, info_read, 3));
|
|
zassert_equal(AF_INET, info_read[0].ai_family);
|
|
k_sleep(K_MSEC(1));
|
|
zassert_equal(1, dns_cache_find(&test_dns_cache, query, info_read, 3));
|
|
zassert_equal(AF_INET, info_read[0].ai_family);
|
|
}
|