]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
convert rdata_test
authorEvan Hunt <each@isc.org>
Thu, 25 Oct 2018 07:20:56 +0000 (00:20 -0700)
committerEvan Hunt <each@isc.org>
Thu, 15 Nov 2018 04:17:04 +0000 (20:17 -0800)
- also added code to dnstest.c to optionally suppress printing of errors
  from dns_rdata_fromtxt()

lib/dns/tests/Kyuafile
lib/dns/tests/Makefile.in
lib/dns/tests/dnstest.c
lib/dns/tests/dnstest.h
lib/dns/tests/nsec3_test.c
lib/dns/tests/rdata_test.c
lib/dns/tests/sigs_test.c

index 214cf34f278eab4e8e7251bfbf7ea1b5fd45cef1..a4f0bb9afeaa243a8a696df29b695a3a5cce4ecc 100644 (file)
@@ -19,7 +19,7 @@ tap_test_program{name='peer_test'}
 atf_test_program{name='private_test'}
 atf_test_program{name='rbt_serialize_test', is_exclusive=true}
 tap_test_program{name='rbt_test'}
-atf_test_program{name='rdata_test'}
+tap_test_program{name='rdata_test'}
 tap_test_program{name='rdataset_test'}
 tap_test_program{name='rdatasetstats_test'}
 atf_test_program{name='resolver_test'}
index 38b5204dacac96b8036f34011b78745dc63ed5ae..6f8c0bc02d0093c7bbda4abc4af875d9450175bf 100644 (file)
@@ -196,9 +196,9 @@ rbt_test@EXEEXT@: rbt_test.@O@ dnstest.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS}
                ${DNSLIBS} ${ISCLIBS} ${LIBS} ${CMOCKA_LIBS}
 
 rdata_test@EXEEXT@: rdata_test.@O@ dnstest.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS}
-       ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \
-                       rdata_test.@O@ dnstest.@O@ ${DNSLIBS} \
-                       ${ISCLIBS} ${LIBS}
+       ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${CMOCKA_CFLAGS} \
+               ${LDFLAGS} -o $@ rdata_test.@O@ dnstest.@O@ \
+               ${DNSLIBS} ${ISCLIBS} ${LIBS} ${CMOCKA_LIBS}
 
 rdataset_test@EXEEXT@: rdataset_test.@O@ dnstest.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS}
        ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${CMOCKA_CFLAGS} \
index ad348f3addaa762abb52e4d3103dd9cfbadcd86f..b574c59394ad5022257ce2d6a15a04293e744dc2 100644 (file)
@@ -37,6 +37,7 @@
 #include <isc/timer.h>
 #include <isc/util.h>
 
+#include <dns/callbacks.h>
 #include <dns/db.h>
 #include <dns/fixedname.h>
 #include <dns/log.h>
@@ -455,11 +456,21 @@ dns_test_getdata(const char *file, unsigned char *buf,
        return (result);
 }
 
+static void
+nullmsg(dns_rdatacallbacks_t *cb, const char *fmt, ...) {
+       va_list ap;
+
+       UNUSED(cb);
+       UNUSED(fmt);
+       UNUSED(ap);
+}
+
 isc_result_t
 dns_test_rdatafromstring(dns_rdata_t *rdata, dns_rdataclass_t rdclass,
                         dns_rdatatype_t rdtype, unsigned char *dst,
-                        size_t dstlen, const char *src)
+                        size_t dstlen, const char *src, bool warnings)
 {
+       dns_rdatacallbacks_t callbacks;
        isc_buffer_t source, target;
        isc_lex_t *lex = NULL;
        isc_result_t result;
@@ -498,11 +509,19 @@ dns_test_rdatafromstring(dns_rdata_t *rdata, dns_rdataclass_t rdclass,
         */
        isc_buffer_init(&target, dst, dstlen);
 
+       /*
+        * Set up callbacks so warnings and errors are not printed.
+        */
+       if (!warnings) {
+               dns_rdatacallbacks_init(&callbacks);
+               callbacks.warn = callbacks.error = nullmsg;
+       }
+
        /*
         * Parse input string, determining result.
         */
        result = dns_rdata_fromtext(rdata, rdclass, rdtype, lex, dns_rootname,
-                                   0, mctx, &target, NULL);
+                                   0, mctx, &target, &callbacks);
 
  destroy_lexer:
        isc_lex_destroy(&lex);
@@ -532,7 +551,9 @@ dns_test_namefromstring(const char *namestr, dns_fixedname_t *fname) {
 }
 
 isc_result_t
-dns_test_difffromchanges(dns_diff_t *diff, const zonechange_t *changes) {
+dns_test_difffromchanges(dns_diff_t *diff, const zonechange_t *changes,
+                        bool warnings)
+{
        isc_result_t result = ISC_R_SUCCESS;
        unsigned char rdata_buf[1024];
        dns_difftuple_t *tuple = NULL;
@@ -576,7 +597,8 @@ dns_test_difffromchanges(dns_diff_t *diff, const zonechange_t *changes) {
                result = dns_test_rdatafromstring(&rdata, dns_rdataclass_in,
                                                  rdatatype, rdata_buf,
                                                  sizeof(rdata_buf),
-                                                 changes[i].rdata);
+                                                 changes[i].rdata,
+                                                 warnings);
                if (result != ISC_R_SUCCESS) {
                        break;
                }
index 740fe53a1ae951c4e33a6a7e25f8a2803d606d9c..e54b9a9e3df04575373748093df7243adce2adb8 100644 (file)
@@ -116,11 +116,12 @@ dns_test_tohex(const unsigned char *data, size_t len, char *buf, size_t buflen);
  * Try parsing text form RDATA in "src" (of class "rdclass" and type "rdtype")
  * into a structure representing that RDATA at "rdata", storing the
  * uncompressed wire form of that RDATA at "dst", which is "dstlen" bytes long.
+ * Set 'warnings' to true to print logged warnings from dns_rdata_fromtext().
  */
 isc_result_t
 dns_test_rdatafromstring(dns_rdata_t *rdata, dns_rdataclass_t rdclass,
                         dns_rdatatype_t rdtype, unsigned char *dst,
-                        size_t dstlen, const char *src);
+                        size_t dstlen, const char *src, bool warnings);
 
 void
 dns_test_namefromstring(const char *namestr, dns_fixedname_t *fname);
@@ -128,6 +129,8 @@ dns_test_namefromstring(const char *namestr, dns_fixedname_t *fname);
 /*%
  * Given a pointer to an uninitialized dns_diff_t structure in 'diff', make it
  * contain diff tuples representing zone database changes listed in 'changes'.
+ * Set 'warnings' to true to print logged warnings from dns_rdata_fromtext().
  */
 isc_result_t
-dns_test_difffromchanges(dns_diff_t *diff, const zonechange_t *changes);
+dns_test_difffromchanges(dns_diff_t *diff, const zonechange_t *changes,
+                        bool warnings);
index 57576dfa2ec1c20e2e37bb83925abe8735829cd0..8a8ffff59922372ccd4cc8d7fb316f51028ebe58 100644 (file)
@@ -101,7 +101,7 @@ nsec3param_salttotext_test(const nsec3param_salttotext_test_params_t *params) {
        result = dns_test_rdatafromstring(&rdata, dns_rdataclass_in,
                                          dns_rdatatype_nsec3param, buf,
                                          sizeof(buf),
-                                         params->nsec3param_text);
+                                         params->nsec3param_text, false);
        assert_int_equal(result, ISC_R_SUCCESS);
        result = dns_rdata_tostruct(&rdata, &nsec3param, NULL);
        assert_int_equal(result, ISC_R_SUCCESS);
index b53490d48009caf46af9d0f292fe83bc9475ad59..46c30a4ad584ed4153feb6a11142e41756e9f3d4 100644 (file)
@@ -9,27 +9,32 @@
  * information regarding copyright ownership.
  */
 
-/*! \file */
-
 #include <config.h>
 
-#include <atf-c.h>
+#if HAVE_CMOCKA
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
 
 #include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
 
+#define UNIT_TESTING
+#include <cmocka.h>
+
 #include <isc/hex.h>
 #include <isc/lex.h>
+#include <isc/stdio.h>
 #include <isc/types.h>
+#include <isc/util.h>
 
-#include <dns/callbacks.h>
 #include <dns/rdata.h>
 
 #include "dnstest.h"
 
-/*****
- ***** Commonly used structures
- *****/
 /*
  * An array of these structures is passed to compare_ok().
  */
@@ -41,31 +46,44 @@ struct compare_ok {
 };
 typedef struct compare_ok compare_ok_t;
 
+static int
+_setup(void **state) {
+       isc_result_t result;
+
+       UNUSED(state);
+
+       result = dns_test_begin(NULL, false);
+       assert_int_equal(result, ISC_R_SUCCESS);
+
+       return (0);
+}
+
+static int
+_teardown(void **state) {
+       UNUSED(state);
+
+       dns_test_end();
+
+       return (0);
+}
+
 /*
  * An array of these structures is passed to check_text_ok().
  */
-struct text_ok {
+typedef struct text_ok {
        const char *text_in;            /* text passed to fromtext_*() */
        const char *text_out;           /* text expected from totext_*();
                                           NULL indicates text_in is invalid */
-       int lineno;                     /* source line defining this RDATA */
-};
-typedef struct text_ok text_ok_t;
+} text_ok_t;
 
 /*
  * An array of these structures is passed to check_wire_ok().
  */
-struct wire_ok {
+typedef struct wire_ok {
        unsigned char data[512];        /* RDATA in wire format */
        size_t len;                     /* octets of data to parse */
-       bool ok;                /* is this RDATA valid? */
-       int lineno;                     /* source line defining this RDATA */
-};
-typedef struct wire_ok wire_ok_t;
-
-/*****
- ***** Convenience macros for creating the above structures
- *****/
+       bool ok;                        /* is this RDATA valid? */
+} wire_ok_t;
 
 #define COMPARE(r1, r2, answer) \
        { r1, r2, answer, __LINE__ }
@@ -73,24 +91,20 @@ typedef struct wire_ok wire_ok_t;
        { NULL, NULL, 0, __LINE__ }
 
 #define TEXT_VALID_CHANGED(data_in, data_out) \
-                               { data_in, data_out, __LINE__ }
-#define TEXT_VALID(data)       { data, data, __LINE__ }
-#define TEXT_INVALID(data)     { data, NULL, __LINE__ }
+                               { data_in, data_out }
+#define TEXT_VALID(data)       { data, data }
+#define TEXT_INVALID(data)     { data, NULL }
 #define TEXT_SENTINEL()                TEXT_INVALID(NULL)
 
 #define VARGC(...)             (sizeof((unsigned char[]){ __VA_ARGS__ }))
 #define WIRE_TEST(ok, ...)     {                                             \
                                        { __VA_ARGS__ }, VARGC(__VA_ARGS__),  \
-                                       ok, __LINE__                          \
+                                       ok                                    \
                                }
 #define WIRE_VALID(...)                WIRE_TEST(true, __VA_ARGS__)
 #define WIRE_INVALID(...)      WIRE_TEST(false, __VA_ARGS__)
 #define WIRE_SENTINEL()                WIRE_TEST(false)
 
-/*****
- ***** Checking functions used by test cases
- *****/
-
 /*
  * Test whether converting rdata to a type-specific struct and then back to
  * rdata results in the same uncompressed wire form.  This checks whether
@@ -101,52 +115,37 @@ typedef struct wire_ok wire_ok_t;
  * check_text_ok_single() and check_wire_ok_single().
  */
 static void
-check_struct_conversions(dns_rdata_t *rdata, size_t structsize, int lineno) {
+check_struct_conversions(dns_rdata_t *rdata, size_t structsize) {
        dns_rdataclass_t rdclass = rdata->rdclass;
        dns_rdatatype_t type = rdata->type;
        isc_result_t result;
        isc_buffer_t target;
        void *rdata_struct;
-       char buf[1024], hex[BUFSIZ];
+       char buf[1024];
 
        rdata_struct = isc_mem_allocate(mctx, structsize);
-       ATF_REQUIRE(rdata_struct != NULL);
+       assert_non_null(rdata_struct);
 
        /*
         * Convert from uncompressed wire form into type-specific struct.
         */
        result = dns_rdata_tostruct(rdata, rdata_struct, NULL);
-       ATF_REQUIRE_EQ_MSG(result, ISC_R_SUCCESS,
-                          "%s (%u): dns_rdata_tostruct() failed",
-                          dns_test_tohex(rdata->data, rdata->length,
-                                         hex, sizeof(hex)),
-                          rdata->length);
+       assert_int_equal(result, ISC_R_SUCCESS);
+
        /*
         * Convert from type-specific struct into uncompressed wire form.
         */
        isc_buffer_init(&target, buf, sizeof(buf));
        result = dns_rdata_fromstruct(NULL, rdclass, type, rdata_struct,
                                      &target);
-       ATF_REQUIRE_EQ_MSG(result, ISC_R_SUCCESS,
-                          "line %d: %s (%u): dns_rdata_fromstruct() failed",
-                          lineno, dns_test_tohex(rdata->data, rdata->length,
-                                                 hex, sizeof(hex)),
-                          rdata->length);
+       assert_int_equal(result, ISC_R_SUCCESS);
+
        /*
         * Ensure results are consistent.
         */
-       ATF_REQUIRE_EQ_MSG(isc_buffer_usedlength(&target), rdata->length,
-                          "line %d: %s (%u): wire form data length changed "
-                          "after converting to type-specific struct and back",
-                          lineno, dns_test_tohex(rdata->data, rdata->length,
-                                                 hex, sizeof(hex)),
-                          rdata->length);
-       ATF_REQUIRE_EQ_MSG(memcmp(buf, rdata->data, rdata->length), 0,
-                          "line %d: %s (%u): wire form data different after "
-                          "converting to type-specific struct and back",
-                          lineno, dns_test_tohex(rdata->data, rdata->length,
-                                                 hex, sizeof(hex)),
-                          rdata->length);
+       assert_int_equal(isc_buffer_usedlength(&target), rdata->length);
+
+       assert_memory_equal(buf, rdata->data, rdata->length);
 
        isc_mem_free(mctx, rdata_struct);
 }
@@ -171,21 +170,16 @@ check_text_ok_single(const text_ok_t *text_ok, dns_rdataclass_t rdclass,
         */
        result = dns_test_rdatafromstring(&rdata, rdclass, type, buf_fromtext,
                                          sizeof(buf_fromtext),
-                                         text_ok->text_in);
+                                         text_ok->text_in, false);
        /*
         * Check whether result is as expected.
         */
        if (text_ok->text_out != NULL) {
-               ATF_REQUIRE_EQ_MSG(result, ISC_R_SUCCESS,
-                                  "line %d: '%s': "
-                                  "expected success, got failure",
-                                  text_ok->lineno, text_ok->text_in);
+               assert_int_equal(result, ISC_R_SUCCESS);
        } else {
-               ATF_REQUIRE_MSG(result != ISC_R_SUCCESS,
-                               "line %d: '%s': "
-                               "expected failure, got success",
-                               text_ok->lineno, text_ok->text_in);
+               assert_int_not_equal(result, ISC_R_SUCCESS);
        }
+
        /*
         * If text form RDATA was not parsed correctly, performing any
         * additional checks is pointless.
@@ -199,20 +193,14 @@ check_text_ok_single(const text_ok_t *text_ok, dns_rdataclass_t rdclass,
         */
        isc_buffer_init(&target, buf_totext, sizeof(buf_totext));
        result = dns_rdata_totext(&rdata, NULL, &target);
-       ATF_REQUIRE_EQ_MSG(result, ISC_R_SUCCESS,
-                          "line %d: '%s': "
-                          "failed to convert rdata back to text form",
-                          text_ok->lineno, text_ok->text_in);
-       ATF_REQUIRE_EQ_MSG(strcmp(buf_totext, text_ok->text_out), 0,
-                          "line %d: '%s': "
-                          "converts back to '%s', expected '%s'",
-                          text_ok->lineno, text_ok->text_in, buf_totext,
-                          text_ok->text_out);
+       assert_int_equal(result, ISC_R_SUCCESS);
+       assert_string_equal(buf_totext, text_ok->text_out);
+
        /*
         * Perform two-way conversion checks between uncompressed wire form and
         * type-specific struct.
         */
-       check_struct_conversions(&rdata, structsize, text_ok->lineno);
+       check_struct_conversions(&rdata, structsize);
 }
 
 /*
@@ -228,7 +216,6 @@ check_wire_ok_single(const wire_ok_t *wire_ok, dns_rdataclass_t rdclass,
        dns_decompress_t dctx;
        isc_result_t result;
        dns_rdata_t rdata;
-       char hex[BUFSIZ];
 
        /*
         * Set up len-octet buffer pointing at data.
@@ -252,28 +239,16 @@ check_wire_ok_single(const wire_ok_t *wire_ok, dns_rdataclass_t rdclass,
         * Check whether result is as expected.
         */
        if (wire_ok->ok) {
-               ATF_REQUIRE_EQ_MSG(result, ISC_R_SUCCESS,
-                                  "line %d: %s (%lu): "
-                                  "expected success, got failure",
-                                  wire_ok->lineno,
-                                  dns_test_tohex(wire_ok->data, wire_ok->len,
-                                                 hex, sizeof(hex)),
-                                  (unsigned long)wire_ok->len);
+               assert_int_equal(result, ISC_R_SUCCESS);
        } else {
-               ATF_REQUIRE_MSG(result != ISC_R_SUCCESS,
-                               "line %d: %s (%lu): "
-                               "expected failure, got success",
-                               wire_ok->lineno,
-                               dns_test_tohex(wire_ok->data, wire_ok->len,
-                                              hex, sizeof(hex)),
-                               (unsigned long)wire_ok->len);
+               assert_int_not_equal(result, ISC_R_SUCCESS);
        }
        /*
         * If data was parsed correctly, perform two-way conversion checks
         * between uncompressed wire form and type-specific struct.
         */
        if (result == ISC_R_SUCCESS) {
-               check_struct_conversions(&rdata, structsize, wire_ok->lineno);
+               check_struct_conversions(&rdata, structsize);
        }
 }
 
@@ -339,44 +314,42 @@ check_compare_ok_single(const compare_ok_t *compare_ok,
 
        result = dns_test_rdatafromstring(&rdata1, rdclass, type,
                                          buf1, sizeof(buf1),
-                                         compare_ok->text1);
-
-       ATF_REQUIRE_EQ_MSG(result, ISC_R_SUCCESS, "line %d: '%s': "
-                          "expected success, got failure",
-                          compare_ok->lineno, compare_ok->text1);
+                                         compare_ok->text1, false);
+       if (result != ISC_R_SUCCESS) {
+               fail_msg("# line %d: '%s': expected success, got failure",
+                        compare_ok->lineno, compare_ok->text1);
+       }
 
        result = dns_test_rdatafromstring(&rdata2, rdclass, type,
                                          buf2, sizeof(buf2),
-                                         compare_ok->text2);
+                                         compare_ok->text2, false);
 
-       ATF_REQUIRE_EQ_MSG(result, ISC_R_SUCCESS, "line %d: '%s': "
-                          "expected success, got failure",
-                          compare_ok->lineno, compare_ok->text2);
+       if (result != ISC_R_SUCCESS) {
+               fail_msg("# line %d: '%s': expected success, got failure",
+                        compare_ok->lineno, compare_ok->text2);
+       }
 
        answer = dns_rdata_compare(&rdata1, &rdata2);
-       if (compare_ok->answer == 0) {
-               ATF_REQUIRE_MSG(answer == 0,
-                               "line %d: dns_rdata_compare('%s', '%s'): "
-                               "expected equal, got %s",
-                               compare_ok->lineno,
-                               compare_ok->text1, compare_ok->text2,
-                               (answer > 0) ? "greater than" : "less than");
+       if (compare_ok->answer == 0 && answer != 0) {
+               fail_msg("# line %d: dns_rdata_compare('%s', '%s'): "
+                        "expected equal, got %s",
+                        compare_ok->lineno,
+                        compare_ok->text1, compare_ok->text2,
+                        (answer > 0) ? "greater than" : "less than");
        }
-       if (compare_ok->answer < 0) {
-               ATF_REQUIRE_MSG(answer < 0,
-                               "line %d: dns_rdata_compare('%s', '%s'): "
-                               "expected less than, got %s",
-                               compare_ok->lineno,
-                               compare_ok->text1, compare_ok->text2,
-                               (answer == 0) ? "equal" : "greater than");
+       if (compare_ok->answer < 0 && answer >= 0) {
+               fail_msg("# line %d: dns_rdata_compare('%s', '%s'): "
+                        "expected less than, got %s",
+                        compare_ok->lineno,
+                        compare_ok->text1, compare_ok->text2,
+                        (answer == 0) ? "equal" : "greater than");
        }
-       if (compare_ok->answer > 0) {
-               ATF_REQUIRE_MSG(answer > 0,
-                               "line %d: dns_rdata_compare('%s', '%s'): "
-                               "expected greater than, got %s",
-                               compare_ok->lineno,
-                               compare_ok->text1, compare_ok->text2,
-                               (answer == 0) ? "equal" : "less than");
+       if (compare_ok->answer > 0 && answer <= 0) {
+               fail_msg("line %d: dns_rdata_compare('%s', '%s'): "
+                        "expected greater than, got %s",
+                        compare_ok->lineno,
+                        compare_ok->text1, compare_ok->text2,
+                        (answer == 0) ? "equal" : "less than");
        }
 }
 
@@ -399,9 +372,7 @@ check_compare_ok(const compare_ok_t *compare_ok,
 
 /*
  * Test whether supplied sets of text form and/or wire form RDATA are handled
- * as expected.  This is just a helper function which should be the only
- * function called for a test case using it, due to the use of dns_test_begin()
- * and dns_test_end().
+ * as expected.
  *
  * The empty_ok argument denotes whether an attempt to parse a zero-length wire
  * data buffer should succeed or not (it is valid for some RR types).  There is
@@ -415,11 +386,6 @@ check_rdata(const text_ok_t *text_ok, const wire_ok_t *wire_ok,
            bool empty_ok, dns_rdataclass_t rdclass,
            dns_rdatatype_t type, size_t structsize)
 {
-       isc_result_t result;
-
-       result = dns_test_begin(NULL, false);
-       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
-
        if (text_ok != NULL) {
                check_text_ok(text_ok, rdclass, type, structsize);
        }
@@ -429,19 +395,11 @@ check_rdata(const text_ok_t *text_ok, const wire_ok_t *wire_ok,
        if (compare_ok != NULL) {
                check_compare_ok(compare_ok, rdclass, type);
        }
-
-       dns_test_end();
 }
 
-/*****
- ***** Individual unit tests
- *****/
-
-ATF_TC(apl);
-ATF_TC_HEAD(apl, tc) {
-       atf_tc_set_md_var(tc, "descr", "APL RDATA manipulations");
-}
-ATF_TC_BODY(apl, tc) {
+/* APL RDATA manipulations */
+static void
+apl(void **state) {
        text_ok_t text_ok[] = {
                /* empty list */
                TEXT_VALID(""),
@@ -489,17 +447,51 @@ ATF_TC_BODY(apl, tc) {
                WIRE_SENTINEL()
        };
 
-       UNUSED(tc);
+       UNUSED(state);
 
        check_rdata(text_ok, wire_ok, NULL, true, dns_rdataclass_in,
                    dns_rdatatype_apl, sizeof(dns_rdata_in_apl_t));
 }
 
-ATF_TC(atma);
-ATF_TC_HEAD(atma, tc) {
-       atf_tc_set_md_var(tc, "descr", "ATMA RDATA manipulations");
-}
-ATF_TC_BODY(atma, tc) {
+/*
+ * http://broadband-forum.org/ftp/pub/approved-specs/af-saa-0069.000.pdf
+ *
+ * ATMA RR’s have the following RDATA format:
+ *
+ *                                           1  1  1  1  1  1
+ *             0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
+ *          +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ *          |          FORMAT       |                       |
+ *          +--+--+--+--+--+--+--+--+                       |
+ *          /                    ADDRESS                    /
+ *          |                                               |
+ *          +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ *
+ * The fields have the following meaning:
+ *
+ * * FORMAT: One octet that indicates the format of ADDRESS. The two
+ *   possible values for FORMAT are value 0 indicating ATM End System Address
+ *   (AESA) format and value 1 indicating E.164 format.
+ *
+ * * ADDRESS: Variable length string of octets containing the ATM address of
+ *   the node to which this RR pertains.
+ *
+ * When the format value is 0, indicating that the address is in AESA format,
+ * the address is coded as described in ISO 8348/AD 2 using the preferred
+ * binary encoding of the ISO NSAP format. When the format value is 1,
+ * indicating that the address is in E.164 format, the Address/Number Digits
+ * appear in the order in which they would be entered on a numeric keypad.
+ * Digits are coded in IA5 characters with the leftmost bit of each digit set
+ * to 0.  This ATM address appears in ATM End System Address Octets field (AESA
+ * format) or the Address/Number Digits field (E.164 format) of the Called
+ * party number information element [ATMUNI3.1]. Subaddress information is
+ * intentionally not included because E.164 subaddress information is used for
+ * routing.
+ *
+ * ATMA RRs cause no additional section processing.
+ */
+static void
+atma(void **state) {
        text_ok_t text_ok[] = {
                TEXT_VALID("00"),
                TEXT_VALID_CHANGED("0.0", "00"),
@@ -564,7 +556,7 @@ ATF_TC_BODY(atma, tc) {
                WIRE_SENTINEL()
        };
 
-       UNUSED(tc);
+       UNUSED(state);
 
        check_rdata(text_ok, wire_ok, NULL, false, dns_rdataclass_in,
                    dns_rdatatype_atma, sizeof(dns_rdata_in_atma_t));
@@ -634,11 +626,8 @@ ATF_TC_BODY(atma, tc) {
  *    must understand the semantics associated with a bit in the Type Bit
  *    Map field that has been set to 1.
  */
-ATF_TC(csync);
-ATF_TC_HEAD(csync, tc) {
-       atf_tc_set_md_var(tc, "descr", "CSYNC RDATA manipulations");
-}
-ATF_TC_BODY(csync, tc) {
+static void
+csync(void **state) {
        text_ok_t text_ok[] = {
                TEXT_INVALID(""),
                TEXT_INVALID("0"),
@@ -695,7 +684,7 @@ ATF_TC_BODY(csync, tc) {
                WIRE_SENTINEL()
        };
 
-       UNUSED(tc);
+       UNUSED(state);
 
        check_rdata(text_ok, wire_ok, NULL, false, dns_rdataclass_in,
                    dns_rdatatype_csync, sizeof(dns_rdata_csync_t));
@@ -761,11 +750,8 @@ ATF_TC_BODY(csync, tc) {
  *    character ("-", ASCII 45).  White space is permitted within Base64
  *    data.
  */
-ATF_TC(doa);
-ATF_TC_HEAD(doa, tc) {
-       atf_tc_set_md_var(tc, "descr", "DOA RDATA manipulations");
-}
-ATF_TC_BODY(doa, tc) {
+static void
+doa(void **state) {
        text_ok_t text_ok[] = {
                /*
                 * Valid, non-empty DOA-DATA.
@@ -913,7 +899,7 @@ ATF_TC_BODY(doa, tc) {
                WIRE_SENTINEL()
        };
 
-       UNUSED(tc);
+       UNUSED(state);
 
        check_rdata(text_ok, wire_ok, NULL, false, dns_rdataclass_in,
                    dns_rdatatype_doa, sizeof(dns_rdata_doa_t));
@@ -979,12 +965,8 @@ ATF_TC_BODY(doa, tc) {
  *    All fields are in network byte order ("big-endian", per [RFC1700],
  *    Data Notation).
  */
-ATF_TC(edns_client_subnet);
-ATF_TC_HEAD(edns_client_subnet, tc) {
-       atf_tc_set_md_var(tc, "descr",
-                         "OPT RDATA with EDNS Client Subnet manipulations");
-}
-ATF_TC_BODY(edns_client_subnet, tc) {
+static void
+edns_client_subnet(void **state) {
        wire_ok_t wire_ok[] = {
                /*
                 * Option code with no content.
@@ -1079,7 +1061,7 @@ ATF_TC_BODY(edns_client_subnet, tc) {
                WIRE_SENTINEL()
        };
 
-       UNUSED(tc);
+       UNUSED(state);
 
        check_rdata(NULL, wire_ok, NULL, true, dns_rdataclass_in,
                    dns_rdatatype_opt, sizeof(dns_rdata_opt_t));
@@ -1094,11 +1076,8 @@ ATF_TC_BODY(edns_client_subnet, tc) {
  * significant.  For readability, whitespace may be included in the value
  * field and should be ignored when reading a master file.
  */
-ATF_TC(eid);
-ATF_TC_HEAD(eid, tc) {
-       atf_tc_set_md_var(tc, "descr", "EID RDATA manipulations");
-}
-ATF_TC_BODY(eid, tc) {
+static void
+eid(void **state) {
        text_ok_t text_ok[] = {
                TEXT_VALID("AABBCC"),
                TEXT_VALID_CHANGED("AA bb cc", "AABBCC"),
@@ -1120,21 +1099,17 @@ ATF_TC_BODY(eid, tc) {
                WIRE_SENTINEL()
        };
 
-       UNUSED(tc);
+       UNUSED(state);
 
        check_rdata(text_ok, wire_ok, NULL, false, dns_rdataclass_in,
                    dns_rdatatype_eid, sizeof(dns_rdata_in_eid_t));
 }
 
 /*
- * Successful load test.
+ * test that an oversized HIP record will be rejected
  */
-ATF_TC(hip);
-ATF_TC_HEAD(hip, tc) {
-       atf_tc_set_md_var(tc, "descr", "that a oversized HIP record will "
-                                      "be rejected");
-}
-ATF_TC_BODY(hip, tc) {
+static void
+hip(void **state) {
        unsigned char hipwire[DNS_RDATA_MAXLENGTH] = {
                                    0x01, 0x00, 0x00, 0x01, 0x00, 0x00,
                                    0x04, 0x41, 0x42, 0x43, 0x44, 0x00 };
@@ -1145,10 +1120,7 @@ ATF_TC_BODY(hip, tc) {
        isc_result_t result;
        size_t i;
 
-       UNUSED(tc);
-
-       result = dns_test_begin(NULL, false);
-       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+       UNUSED(state);
 
        /*
         * Fill the rest of input buffer with compression pointers.
@@ -1168,9 +1140,7 @@ ATF_TC_BODY(hip, tc) {
                                    dns_rdatatype_hip, &source, &dctx,
                                    0, &target);
        dns_decompress_invalidate(&dctx);
-       ATF_REQUIRE_EQ(result, DNS_R_FORMERR);
-
-       dns_test_end();
+       assert_int_equal(result, DNS_R_FORMERR);
 }
 
 /*
@@ -1234,11 +1204,8 @@ ATF_TC_BODY(hip, tc) {
  *    as one or two <character-string>s, i.e., count followed by
  *    characters.
  */
-ATF_TC(isdn);
-ATF_TC_HEAD(isdn, tc) {
-       atf_tc_set_md_var(tc, "descr", "ISDN RDATA manipulations");
-}
-ATF_TC_BODY(isdn, tc) {
+static void
+isdn(void **state) {
        wire_ok_t wire_ok[] = {
                /*
                 * "".
@@ -1262,7 +1229,7 @@ ATF_TC_BODY(isdn, tc) {
                WIRE_SENTINEL()
        };
 
-       UNUSED(tc);
+       UNUSED(state);
 
        check_rdata(NULL, wire_ok, NULL, false, dns_rdataclass_in,
                    dns_rdatatype_isdn, sizeof(dns_rdata_isdn_t));
@@ -1277,11 +1244,8 @@ ATF_TC_BODY(isdn, tc) {
  * significant.  For readability, whitespace may be included in the value
  * field and should be ignored when reading a master file.
  */
-ATF_TC(nimloc);
-ATF_TC_HEAD(nimloc, tc) {
-       atf_tc_set_md_var(tc, "descr", "NIMLOC RDATA manipulations");
-}
-ATF_TC_BODY(nimloc, tc) {
+static void
+nimloc(void **state) {
        text_ok_t text_ok[] = {
                TEXT_VALID("AABBCC"),
                TEXT_VALID_CHANGED("AA bb cc", "AABBCC"),
@@ -1303,7 +1267,7 @@ ATF_TC_BODY(nimloc, tc) {
                WIRE_SENTINEL()
        };
 
-       UNUSED(tc);
+       UNUSED(state);
 
        check_rdata(text_ok, wire_ok, NULL, false, dns_rdataclass_in,
                    dns_rdatatype_nimloc, sizeof(dns_rdata_in_nimloc_t));
@@ -1375,11 +1339,8 @@ ATF_TC_BODY(nimloc, tc) {
  *    Bits representing pseudo-types MUST be clear, as they do not appear
  *    in zone data.  If encountered, they MUST be ignored upon being read.
  */
-ATF_TC(nsec);
-ATF_TC_HEAD(nsec, tc) {
-       atf_tc_set_md_var(tc, "descr", "NSEC RDATA manipulations");
-}
-ATF_TC_BODY(nsec, tc) {
+static void
+nsec(void **state) {
        text_ok_t text_ok[] = {
                TEXT_INVALID(""),
                TEXT_INVALID("."),
@@ -1394,7 +1355,7 @@ ATF_TC_BODY(nsec, tc) {
                WIRE_INVALID()
        };
 
-       UNUSED(tc);
+       UNUSED(state);
 
        check_rdata(text_ok, wire_ok, NULL, false, dns_rdataclass_in,
                    dns_rdatatype_nsec, sizeof(dns_rdata_nsec_t));
@@ -1405,11 +1366,8 @@ ATF_TC_BODY(nsec, tc) {
  *
  * RFC 5155.
  */
-ATF_TC(nsec3);
-ATF_TC_HEAD(nsec3, tc) {
-       atf_tc_set_md_var(tc, "descr", "NSEC3 RDATA manipulations");
-}
-ATF_TC_BODY(nsec3, tc) {
+static void
+nsec3(void **state) {
        text_ok_t text_ok[] = {
                TEXT_INVALID(""),
                TEXT_INVALID("."),
@@ -1423,20 +1381,15 @@ ATF_TC_BODY(nsec3, tc) {
                TEXT_SENTINEL()
        };
 
-       UNUSED(tc);
+       UNUSED(state);
 
        check_rdata(text_ok, NULL, NULL, false, dns_rdataclass_in,
                    dns_rdatatype_nsec3, sizeof(dns_rdata_nsec3_t));
 }
 
-/*
- * NXT Tests.
- */
-ATF_TC(nxt);
-ATF_TC_HEAD(nxt, tc) {
-       atf_tc_set_md_var(tc, "descr", "NXT RDATA manipulations");
-}
-ATF_TC_BODY(nxt, tc) {
+/* NXT RDATA manipulations */
+static void
+nxt(void **state) {
        compare_ok_t compare_ok[] = {
                COMPARE("a. A SIG", "a. A SIG", 0),
                /*
@@ -1456,7 +1409,7 @@ ATF_TC_BODY(nxt, tc) {
                COMPARE_SENTINEL()
        };
 
-       UNUSED(tc);
+       UNUSED(state);
 
        check_rdata(NULL, NULL, compare_ok, false, dns_rdataclass_in,
                    dns_rdatatype_nxt, sizeof(dns_rdata_nxt_t));
@@ -1501,11 +1454,8 @@ ATF_TC_BODY(nxt, tc) {
  * port 25; if zero, SMTP service is not supported on the specified
  * address.
  */
-ATF_TC(wks);
-ATF_TC_HEAD(wks, tc) {
-       atf_tc_set_md_var(tc, "descr", "WKS RDATA manipulations");
-}
-ATF_TC_BODY(wks, tc) {
+static void
+wks(void **state) {
        text_ok_t text_ok[] = {
                /*
                 * Valid, IPv4 address in dotted-quad form.
@@ -1543,30 +1493,42 @@ ATF_TC_BODY(wks, tc) {
                WIRE_SENTINEL()
        };
 
-       UNUSED(tc);
+       UNUSED(state);
 
        check_rdata(text_ok, wire_ok, NULL, false, dns_rdataclass_in,
                    dns_rdatatype_wks, sizeof(dns_rdata_in_wks_t));
 }
 
-/*****
- ***** Main
- *****/
-
-ATF_TP_ADD_TCS(tp) {
-       ATF_TP_ADD_TC(tp, apl);
-       ATF_TP_ADD_TC(tp, atma);
-       ATF_TP_ADD_TC(tp, csync);
-       ATF_TP_ADD_TC(tp, doa);
-       ATF_TP_ADD_TC(tp, eid);
-       ATF_TP_ADD_TC(tp, edns_client_subnet);
-       ATF_TP_ADD_TC(tp, hip);
-       ATF_TP_ADD_TC(tp, isdn);
-       ATF_TP_ADD_TC(tp, nimloc);
-       ATF_TP_ADD_TC(tp, nsec);
-       ATF_TP_ADD_TC(tp, nsec3);
-       ATF_TP_ADD_TC(tp, nxt);
-       ATF_TP_ADD_TC(tp, wks);
-
-       return (atf_no_error());
+int
+main(void) {
+       const struct CMUnitTest tests[] = {
+               cmocka_unit_test_setup_teardown(apl, _setup, _teardown),
+               cmocka_unit_test_setup_teardown(atma, _setup, _teardown),
+               cmocka_unit_test_setup_teardown(csync, _setup, _teardown),
+               cmocka_unit_test_setup_teardown(doa, _setup, _teardown),
+               cmocka_unit_test_setup_teardown(eid, _setup, _teardown),
+               cmocka_unit_test_setup_teardown(edns_client_subnet,
+                                               _setup, _teardown),
+               cmocka_unit_test_setup_teardown(hip, _setup, _teardown),
+               cmocka_unit_test_setup_teardown(isdn, _setup, _teardown),
+               cmocka_unit_test_setup_teardown(nimloc, _setup, _teardown),
+               cmocka_unit_test_setup_teardown(nsec, _setup, _teardown),
+               cmocka_unit_test_setup_teardown(nsec3, _setup, _teardown),
+               cmocka_unit_test_setup_teardown(nxt, _setup, _teardown),
+               cmocka_unit_test_setup_teardown(wks, _setup, _teardown),
+       };
+
+       return (cmocka_run_group_tests(tests, NULL, NULL));
 }
+
+#else /* HAVE_CMOCKA */
+
+#include <stdio.h>
+
+int
+main(void) {
+       printf("1..0 # Skipped: cmocka not available\n");
+       return (0);
+}
+
+#endif
index 7374d3e3ecd55b5d09d6e1dd2656b13b48fcaa7d..15f4e665957da8d1104159e0baa1d78697011e14 100644 (file)
@@ -218,7 +218,7 @@ updatesigs_test(const updatesigs_test_params_t *test, dns_zone_t *zone,
        /*
         * Create a diff representing the supplied changes.
         */
-       result = dns_test_difffromchanges(&raw_diff, test->changes);
+       result = dns_test_difffromchanges(&raw_diff, test->changes, false);
        ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
 
        /*