]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add dns_name_totext unit test 12395/head
authorMark Andrews <marka@isc.org>
Tue, 7 Jul 2026 04:32:35 +0000 (14:32 +1000)
committerMark Andrews <marka@isc.org>
Mon, 13 Jul 2026 22:31:59 +0000 (08:31 +1000)
Tests dns_name_text output for various labels with various flag
combination.

tests/dns/name_test.c

index dab4bbb4c943e2cd8fcf36ba791bb49f7cfbf5da..52ab63add66091f2d8af563f7842c267d4901534 100644 (file)
@@ -929,6 +929,148 @@ ISC_RUN_TEST_IMPL(maxlabels) {
        assert_int_equal(dns_name_countlabels(name), DNS_NAME_MAXLABELS);
 }
 
+#define VARGC(...) (sizeof((unsigned char[]){ __VA_ARGS__ }))
+#define TOTEXT_TEST(flags, text, ...) \
+       { { __VA_ARGS__ }, VARGC(__VA_ARGS__), flags, text }
+
+ISC_RUN_TEST_IMPL(totext) {
+       isc_result_t result;
+       struct {
+               unsigned char data[255];
+               size_t length;
+               int flags;
+               const char *text;
+       } totext[] = {
+               /* Root name tests. */
+               TOTEXT_TEST(0, ".", 0x00),
+               TOTEXT_TEST(DNS_NAME_OMITFINALDOT, ".", 0x00),
+       /* Plain label tests. */
+#define WIRE_DATA 0x07, 'e', 'x', 'a', 'm', 'p', 'l', 'e', 0x00
+               TOTEXT_TEST(0, "example.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_OMITFINALDOT, "example", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED, "example.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED | DNS_NAME_OMITFINALDOT, "example",
+                           WIRE_DATA),
+       /* Embbeded NUL in label tests. */
+#undef WIRE_DATA
+#define WIRE_DATA 0x03, 'a', '\0', 'b', 0x00
+               TOTEXT_TEST(0, "a\\000b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_OMITFINALDOT, "a\\000b", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED, "a\\000b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED | DNS_NAME_OMITFINALDOT, "a\\000b",
+                           WIRE_DATA),
+       /* Embbeded period in label tests. */
+#undef WIRE_DATA
+#define WIRE_DATA 0x03, 'a', '.', 'b', 0x00
+               TOTEXT_TEST(0, "a\\.b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_OMITFINALDOT, "a\\.b", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED, "a\\.b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED | DNS_NAME_OMITFINALDOT, "a\\.b",
+                           WIRE_DATA),
+       /* Embbeded space in label tests. */
+#undef WIRE_DATA
+#define WIRE_DATA 0x03, 'a', ' ', 'b', 0x00
+               TOTEXT_TEST(0, "a\\032b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_OMITFINALDOT, "a\\032b", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED, "a b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED | DNS_NAME_OMITFINALDOT, "a b",
+                           WIRE_DATA),
+       /* Embbeded semi-colon in label tests. */
+#undef WIRE_DATA
+#define WIRE_DATA 0x03, 'a', ';', 'b', 0x00
+               TOTEXT_TEST(0, "a\\;b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_OMITFINALDOT, "a\\;b", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED, "a;b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED | DNS_NAME_OMITFINALDOT, "a;b",
+                           WIRE_DATA),
+       /* Embeded backslash in label test. */
+#undef WIRE_DATA
+#define WIRE_DATA 0x03, 'a', '\\', 'b', 0x00
+               TOTEXT_TEST(0, "a\\\\b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_OMITFINALDOT, "a\\\\b", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED, "a\\\\b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED | DNS_NAME_OMITFINALDOT, "a\\\\b",
+                           WIRE_DATA),
+       /* Embeded double quote in label test. */
+#undef WIRE_DATA
+#define WIRE_DATA 0x03, 'a', '"', 'b', 0x00
+               TOTEXT_TEST(0, "a\\\"b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_OMITFINALDOT, "a\\\"b", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED, "a\\\"b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED | DNS_NAME_OMITFINALDOT, "a\\\"b",
+                           WIRE_DATA),
+       /* Embeded commercial at in label test. */
+#undef WIRE_DATA
+#define WIRE_DATA 0x03, 'a', '@', 'b', 0x00
+               TOTEXT_TEST(0, "a\\@b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_OMITFINALDOT, "a\\@b", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_PRINCIPAL, "a@b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_PRINCIPAL | DNS_NAME_OMITFINALDOT, "a@b",
+                           WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED, "a@b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED | DNS_NAME_OMITFINALDOT, "a@b",
+                           WIRE_DATA),
+       /* Embeded dollar symbol in label test. */
+#undef WIRE_DATA
+#define WIRE_DATA 0x03, 'a', '$', 'b', 0x00
+               TOTEXT_TEST(0, "a\\$b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_OMITFINALDOT, "a\\$b", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_PRINCIPAL, "a$b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_PRINCIPAL | DNS_NAME_OMITFINALDOT, "a$b",
+                           WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED, "a$b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED | DNS_NAME_OMITFINALDOT, "a$b",
+                           WIRE_DATA),
+       /* Embeded left parenthesis label test. */
+#undef WIRE_DATA
+#define WIRE_DATA 0x03, 'a', '(', 'b', 0x00
+               TOTEXT_TEST(0, "a\\(b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_OMITFINALDOT, "a\\(b", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED, "a(b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED | DNS_NAME_OMITFINALDOT, "a(b",
+                           WIRE_DATA),
+       /* Embeded right parenthesis label test. */
+#undef WIRE_DATA
+#define WIRE_DATA 0x03, 'a', ')', 'b', 0x00
+               TOTEXT_TEST(0, "a\\)b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_OMITFINALDOT, "a\\)b", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED, "a)b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED | DNS_NAME_OMITFINALDOT, "a)b",
+                           WIRE_DATA),
+       /* Embeded left curly bracket label test. */
+#undef WIRE_DATA
+#define WIRE_DATA 0x03, 'a', '{', 'b', 0x00
+               TOTEXT_TEST(0, "a{b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_OMITFINALDOT, "a{b", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED, "a{b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED | DNS_NAME_OMITFINALDOT, "a{b",
+                           WIRE_DATA),
+       /* Embeded right curly bracket label test. */
+#undef WIRE_DATA
+#define WIRE_DATA 0x03, 'a', '}', 'b', 0x00
+               TOTEXT_TEST(0, "a}b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_OMITFINALDOT, "a}b", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED, "a}b.", WIRE_DATA),
+               TOTEXT_TEST(DNS_NAME_QUOTED | DNS_NAME_OMITFINALDOT, "a}b",
+                           WIRE_DATA),
+       };
+       char namebuf[DNS_NAME_FORMATSIZE];
+
+       for (size_t i = 0; i < ARRAY_SIZE(totext); i++) {
+               isc_region_t r = { .base = totext[i].data,
+                                  .length = totext[i].length };
+               isc_buffer_t b;
+               dns_name_t name = DNS_NAME_INITEMPTY;
+
+               dns_name_fromregion(&name, &r);
+               isc_buffer_init(&b, namebuf, sizeof(namebuf));
+
+               result = dns_name_totext(&name, totext[i].flags, &b);
+               assert_int_equal(result, ISC_R_SUCCESS);
+               assert_string_equal(namebuf, totext[i].text);
+       }
+}
+
 #ifdef DNS_BENCHMARK_TESTS
 
 /*
@@ -1011,21 +1153,22 @@ ISC_RUN_TEST_IMPL(benchmark) {
 #endif /* DNS_BENCHMARK_TESTS */
 
 ISC_TEST_LIST_START
-ISC_TEST_ENTRY(fullcompare)
-ISC_TEST_ENTRY(compression)
+ISC_TEST_ENTRY(buffer)
 ISC_TEST_ENTRY(collision)
+ISC_TEST_ENTRY(compression)
+ISC_TEST_ENTRY(countlabels)
 ISC_TEST_ENTRY(fromregion)
-ISC_TEST_ENTRY(istat)
+ISC_TEST_ENTRY(fullcompare)
+ISC_TEST_ENTRY(getlabel)
+ISC_TEST_ENTRY(getlabelsequence)
+ISC_TEST_ENTRY(hash)
 ISC_TEST_ENTRY(init)
 ISC_TEST_ENTRY(invalidate)
-ISC_TEST_ENTRY(buffer)
 ISC_TEST_ENTRY(isabsolute)
-ISC_TEST_ENTRY(hash)
 ISC_TEST_ENTRY(issubdomain)
-ISC_TEST_ENTRY(countlabels)
-ISC_TEST_ENTRY(getlabel)
-ISC_TEST_ENTRY(getlabelsequence)
+ISC_TEST_ENTRY(istat)
 ISC_TEST_ENTRY(maxlabels)
+ISC_TEST_ENTRY(totext)
 #ifdef DNS_BENCHMARK_TESTS
 ISC_TEST_ENTRY(benchmark)
 #endif /* DNS_BENCHMARK_TESTS */