} PutArgs;
static PutArgs mk_put_args(void) {
- return (PutArgs) {
+ PutArgs put_args = {
.cache_mode = DNS_CACHE_MODE_YES,
.protocol = DNS_PROTOCOL_DNS,
.key = NULL,
.rcode = DNS_RCODE_SUCCESS,
- .answer = NULL,
+ .answer = dns_answer_new(0),
.full_packet = NULL,
.query_flags = SD_RESOLVED_AUTHENTICATED | SD_RESOLVED_CONFIDENTIAL,
.dnssec_result = DNSSEC_UNSIGNED,
.owner_address = { .in.s_addr = htobe32(0x01020304) },
.stale_retention_usec = 0
};
+
+ ASSERT_NOT_NULL(put_args.answer);
+ return put_args;
}
static int cache_put(DnsCache *cache, PutArgs *args) {
dns_packet_unref(args->full_packet);
}
+static void answer_add_a(PutArgs *args, DnsResourceKey *key, int addr, int ttl, DnsAnswerFlags flags) {
+ _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
+
+ rr = dns_resource_record_new(key);
+ ASSERT_NOT_NULL(rr);
+ rr->a.in_addr.s_addr = htobe32(addr);
+ rr->ttl = ttl;
+ dns_answer_add(args->answer, rr, 1, flags, NULL);
+}
+
TEST(dns_a_success_is_cached) {
_cleanup_(dns_cache_unrefp) DnsCache cache = new_cache();
_cleanup_(put_args_unrefp) PutArgs put_args = mk_put_args();
- _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
- DnsAnswerFlags flags;
put_args.key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com");
ASSERT_NOT_NULL(put_args.key);
put_args.rcode = DNS_RCODE_SUCCESS;
-
- put_args.answer = dns_answer_new(1);
- ASSERT_NOT_NULL(put_args.answer);
-
- rr = dns_resource_record_new(put_args.key);
- ASSERT_NOT_NULL(rr);
- rr->a.in_addr.s_addr = htobe32(0xc0a8017f);
- rr->ttl = 3600;
- flags = DNS_ANSWER_CACHEABLE;
- dns_answer_add(put_args.answer, rr, 1, flags, NULL);
+ answer_add_a(&put_args, put_args.key, 0xc0a8017f, 3600, DNS_ANSWER_CACHEABLE);
ASSERT_OK(cache_put(&cache, &put_args));
ASSERT_FALSE(dns_cache_is_empty(&cache));
put_args.key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com");
ASSERT_NOT_NULL(put_args.key);
put_args.rcode = DNS_RCODE_SUCCESS;
- put_args.answer = dns_answer_new(0);
- ASSERT_NOT_NULL(put_args.answer);
ASSERT_OK(cache_put(&cache, &put_args));
ASSERT_TRUE(dns_cache_is_empty(&cache));
put_args.key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com");
ASSERT_NOT_NULL(put_args.key);
put_args.rcode = DNS_RCODE_NXDOMAIN;
-
- put_args.answer = dns_answer_new(1);
- ASSERT_NOT_NULL(put_args.answer);
dns_answer_add_soa(put_args.answer, "example.com", 3600, 0);
ASSERT_OK(cache_put(&cache, &put_args));
put_args.key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com");
ASSERT_NOT_NULL(put_args.key);
put_args.rcode = DNS_RCODE_SERVFAIL;
- put_args.answer = dns_answer_new(0);
- ASSERT_NOT_NULL(put_args.answer);
ASSERT_OK(cache_put(&cache, &put_args));
ASSERT_FALSE(dns_cache_is_empty(&cache));
put_args.key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com");
ASSERT_NOT_NULL(put_args.key);
put_args.rcode = DNS_RCODE_REFUSED;
- put_args.answer = dns_answer_new(0);
- ASSERT_NOT_NULL(put_args.answer);
ASSERT_OK(cache_put(&cache, &put_args));
ASSERT_TRUE(dns_cache_is_empty(&cache));
TEST(dns_a_success_zero_ttl_is_not_cached) {
_cleanup_(dns_cache_unrefp) DnsCache cache = new_cache();
_cleanup_(put_args_unrefp) PutArgs put_args = mk_put_args();
- _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
- DnsAnswerFlags flags;
put_args.key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com");
ASSERT_NOT_NULL(put_args.key);
put_args.rcode = DNS_RCODE_SUCCESS;
-
- put_args.answer = dns_answer_new(1);
- ASSERT_NOT_NULL(put_args.answer);
-
- rr = dns_resource_record_new(put_args.key);
- ASSERT_NOT_NULL(rr);
- rr->a.in_addr.s_addr = htobe32(0xc0a8017f);
- rr->ttl = 0;
- flags = DNS_ANSWER_CACHEABLE;
- dns_answer_add(put_args.answer, rr, 1, flags, NULL);
+ answer_add_a(&put_args, put_args.key, 0xc0a8017f, 0, DNS_ANSWER_CACHEABLE);
ASSERT_OK(cache_put(&cache, &put_args));
ASSERT_TRUE(dns_cache_is_empty(&cache));
TEST(dns_a_success_not_cacheable_is_not_cached) {
_cleanup_(dns_cache_unrefp) DnsCache cache = new_cache();
_cleanup_(put_args_unrefp) PutArgs put_args = mk_put_args();
- _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
- DnsAnswerFlags flags;
put_args.key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com");
ASSERT_NOT_NULL(put_args.key);
put_args.rcode = DNS_RCODE_SUCCESS;
-
- put_args.answer = dns_answer_new(1);
- ASSERT_NOT_NULL(put_args.answer);
-
- rr = dns_resource_record_new(put_args.key);
- ASSERT_NOT_NULL(rr);
- rr->a.in_addr.s_addr = htobe32(0xc0a8017f);
- rr->ttl = 3600;
- flags = 0;
- dns_answer_add(put_args.answer, rr, 1, flags, NULL);
+ answer_add_a(&put_args, put_args.key, 0xc0a8017f, 3600, 0);
ASSERT_OK(cache_put(&cache, &put_args));
ASSERT_TRUE(dns_cache_is_empty(&cache));