From: James Coglan Date: Fri, 31 May 2024 14:42:18 +0000 (+0100) Subject: resolved: tests for dns_zone_put() X-Git-Tag: v257-rc1~838^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c7e3e5507e63d0318de6f182c6331f9e4da14ed1;p=thirdparty%2Fsystemd.git resolved: tests for dns_zone_put() --- diff --git a/src/resolve/meson.build b/src/resolve/meson.build index f4c868f2d65..b139afda6a2 100644 --- a/src/resolve/meson.build +++ b/src/resolve/meson.build @@ -210,6 +210,17 @@ executables += [ ], 'include_directories' : resolve_includes, }, + test_template + { + 'sources' : [ + files('test-dns-zone.c'), + basic_dns_sources, + systemd_resolved_sources, + ], + 'dependencies' : [ + systemd_resolved_dependencies, + ], + 'include_directories' : resolve_includes, + }, test_template + { 'sources' : [ files('test-resolved-link.c'), diff --git a/src/resolve/test-dns-zone.c b/src/resolve/test-dns-zone.c new file mode 100644 index 00000000000..c3cea1ac778 --- /dev/null +++ b/src/resolve/test-dns-zone.c @@ -0,0 +1,83 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include "dns-type.h" +#include "resolved-dns-rr.h" +#include "resolved-dns-scope.h" +#include "resolved-dns-zone.h" +#include "resolved-link.h" +#include "resolved-manager.h" + +#include "log.h" +#include "tests.h" + +static void dns_scope_freep(DnsScope **s) { + if (s != NULL && *s != NULL) + dns_scope_free(*s); +} + +/* ================================================================ + * dns_zone_put() + * ================================================================ */ + +TEST(dns_zone_put_simple) { + Manager manager = {}; + _cleanup_(dns_scope_freep) DnsScope *scope = NULL; + DnsZone *zone = NULL; + DnsZoneItem *item = NULL; + _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL; + + ASSERT_OK(dns_scope_new(&manager, &scope, NULL, DNS_PROTOCOL_DNS, AF_INET)); + ASSERT_NOT_NULL(scope); + zone = &scope->zone; + + rr = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com"); + ASSERT_NOT_NULL(rr); + + ASSERT_TRUE(dns_zone_is_empty(zone)); + + ASSERT_OK(dns_zone_put(zone, scope, rr, 0)); + + ASSERT_FALSE(dns_zone_is_empty(zone)); + + item = dns_zone_get(zone, rr); + ASSERT_NOT_NULL(item); + ASSERT_EQ((int)item->state, DNS_ZONE_ITEM_ESTABLISHED); +} + +TEST(dns_zone_put_any_class_is_invalid) { + Manager manager = {}; + _cleanup_(dns_scope_freep) DnsScope *scope = NULL; + DnsZone *zone = NULL; + _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL; + + dns_scope_new(&manager, &scope, NULL, DNS_PROTOCOL_DNS, AF_INET); + ASSERT_NOT_NULL(scope); + zone = &scope->zone; + + rr = dns_resource_record_new_full(DNS_CLASS_ANY, DNS_TYPE_A, "www.example.com"); + ASSERT_NOT_NULL(rr); + + ASSERT_ERROR(dns_zone_put(zone, scope, rr, 0), EINVAL); + + ASSERT_TRUE(dns_zone_is_empty(zone)); +} + +TEST(dns_zone_put_any_type_is_invalid) { + Manager manager = {}; + _cleanup_(dns_scope_freep) DnsScope *scope = NULL; + DnsZone *zone = NULL; + _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL; + + dns_scope_new(&manager, &scope, NULL, DNS_PROTOCOL_DNS, AF_INET); + ASSERT_NOT_NULL(scope); + zone = &scope->zone; + + rr = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_ANY, "www.example.com"); + ASSERT_NOT_NULL(rr); + + ASSERT_ERROR(dns_zone_put(zone, scope, rr, 0), EINVAL); + + ASSERT_TRUE(dns_zone_is_empty(zone)); +} + +DEFINE_TEST_MAIN(LOG_DEBUG);