From 9be3bccf6d487f3850970e0c13dbad00dec1d87a Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 25 Mar 2026 16:15:42 +1100 Subject: [PATCH] Test the ability to walk the iterators multiple times It should be possible to walk APL, HIP, HTTPS and SVBC record elements multiple times. We now test this. (cherry picked from commit aa2a41b2d1dd37092e06203b776f33a7aeb160a1) --- tests/dns/rdata_test.c | 94 ++++++++++++++++++++++++------------------ 1 file changed, 54 insertions(+), 40 deletions(-) diff --git a/tests/dns/rdata_test.c b/tests/dns/rdata_test.c index 4f724774a2..6dd6e0c0da 100644 --- a/tests/dns/rdata_test.c +++ b/tests/dns/rdata_test.c @@ -257,7 +257,6 @@ check_struct_conversions(dns_rdata_t *rdata, size_t structsize, isc_buffer_t target; void *rdata_struct; char buf[1024]; - unsigned int count = 0; rdata_struct = isc_mem_allocate(mctx, structsize); assert_non_null(rdata_struct); @@ -292,64 +291,79 @@ check_struct_conversions(dns_rdata_t *rdata, size_t structsize, case dns_rdatatype_apl: { dns_rdata_in_apl_t *apl = rdata_struct; - for (result = dns_rdata_apl_first(apl); result == ISC_R_SUCCESS; - result = dns_rdata_apl_next(apl)) - { - dns_rdata_apl_ent_t apl_ent; - dns_rdata_apl_current(apl, &apl_ent); - count++; + for (size_t pass = 1; pass < 3; pass++) { + unsigned int count = 0; + for (result = dns_rdata_apl_first(apl); + result == ISC_R_SUCCESS; + result = dns_rdata_apl_next(apl)) + { + dns_rdata_apl_ent_t apl_ent; + dns_rdata_apl_current(apl, &apl_ent); + count++; + } + assert_int_equal(result, ISC_R_NOMORE); + assert_int_equal(count, loop); } - assert_int_equal(result, ISC_R_NOMORE); - assert_int_equal(count, loop); break; } case dns_rdatatype_hip: { dns_rdata_hip_t *hip = rdata_struct; - for (result = dns_rdata_hip_first(hip); result == ISC_R_SUCCESS; - result = dns_rdata_hip_next(hip)) - { - dns_name_t name; - dns_name_init(&name, NULL); - dns_rdata_hip_current(hip, &name); - assert_int_not_equal(dns_name_countlabels(&name), 0); - assert_true(dns_name_isabsolute(&name)); - count++; + for (size_t pass = 1; pass < 3; pass++) { + unsigned int count = 0; + for (result = dns_rdata_hip_first(hip); + result == ISC_R_SUCCESS; + result = dns_rdata_hip_next(hip)) + { + dns_name_t name; + dns_name_init(&name, NULL); + dns_rdata_hip_current(hip, &name); + assert_int_not_equal( + dns_name_countlabels(&name), 0); + assert_true(dns_name_isabsolute(&name)); + count++; + } + assert_int_equal(result, ISC_R_NOMORE); + assert_int_equal(count, loop); } - assert_int_equal(result, ISC_R_NOMORE); - assert_int_equal(count, loop); break; } case dns_rdatatype_https: { dns_rdata_in_https_t *https = rdata_struct; - for (result = dns_rdata_in_https_first(https); - result == ISC_R_SUCCESS; - result = dns_rdata_in_https_next(https)) - { - isc_region_t region; - dns_rdata_in_https_current(https, ®ion); - assert_true(region.length >= 4); - count++; + for (size_t pass = 1; pass < 3; pass++) { + unsigned int count = 0; + for (result = dns_rdata_in_https_first(https); + result == ISC_R_SUCCESS; + result = dns_rdata_in_https_next(https)) + { + isc_region_t region; + dns_rdata_in_https_current(https, ®ion); + assert_true(region.length >= 4); + count++; + } + assert_int_equal(result, ISC_R_NOMORE); + assert_int_equal(count, loop); } - assert_int_equal(result, ISC_R_NOMORE); - assert_int_equal(count, loop); break; } case dns_rdatatype_svcb: { dns_rdata_in_svcb_t *svcb = rdata_struct; - for (result = dns_rdata_in_svcb_first(svcb); - result == ISC_R_SUCCESS; - result = dns_rdata_in_svcb_next(svcb)) - { - isc_region_t region; - dns_rdata_in_svcb_current(svcb, ®ion); - assert_true(region.length >= 4); - count++; + for (size_t pass = 1; pass < 3; pass++) { + unsigned int count = 0; + for (result = dns_rdata_in_svcb_first(svcb); + result == ISC_R_SUCCESS; + result = dns_rdata_in_svcb_next(svcb)) + { + isc_region_t region; + dns_rdata_in_svcb_current(svcb, ®ion); + assert_true(region.length >= 4); + count++; + } + assert_int_equal(result, ISC_R_NOMORE); + assert_int_equal(count, loop); } - assert_int_equal(result, ISC_R_NOMORE); - assert_int_equal(count, loop); break; } }