]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
tests/libdnssec: Rewrite NSEC bitmap test and make it extensible.
authorMark Karpilovskij <mark.karpilovskij@nic.cz>
Thu, 16 Aug 2018 15:27:23 +0000 (17:27 +0200)
committerMark Karpilovskij <mark.karpilovskij@nic.cz>
Sat, 18 Aug 2018 13:12:56 +0000 (15:12 +0200)
tests/libdnssec/test_nsec_bitmap.c

index cf52269bbf355a72d312531c303fe124bb91ca9c..37676fe0a92a104ab9a3d19eee34d0792a6b4053 100644 (file)
 #include "nsec.h"
 #include "libknot/descriptor.h"
 
+#define TEST_BITMAP_SIZE 18
+
 int main(void)
 {
        plan_lazy();
 
+       // Which rrtypes will be contained in the bitmap.
+       int test_contains_count = 8;
+       enum knot_rr_type test_contains[] = {
+               KNOT_RRTYPE_A,
+               KNOT_RRTYPE_NS,
+               KNOT_RRTYPE_SOA,
+               KNOT_RRTYPE_RRSIG,
+               KNOT_RRTYPE_NSEC,
+               KNOT_RRTYPE_DNSKEY,
+               KNOT_RRTYPE_SPF,
+               KNOT_RRTYPE_CAA
+       };
+
+       // Which rrtypes will not be contained in the bitmap.
+       int test_not_contains_count = 4;
+       enum knot_rr_type test_not_contains[] = {
+               KNOT_RRTYPE_AAAA,
+               KNOT_RRTYPE_MX,
+               KNOT_RRTYPE_AXFR,
+               KNOT_RRTYPE_CNAME
+       };
+
+       // Allocate new bitmap.
        dnssec_nsec_bitmap_t *bitmap = dnssec_nsec_bitmap_new();
        ok(bitmap != NULL, "allocate bitmap");
        if (!bitmap) {
                return 1;
        }
 
-       dnssec_nsec_bitmap_add(bitmap, 1);      // A
-       dnssec_nsec_bitmap_add(bitmap, 2);      // NS
-       dnssec_nsec_bitmap_add(bitmap, 6);      // SOA
-       dnssec_nsec_bitmap_add(bitmap, 15);     // MX
-       dnssec_nsec_bitmap_add(bitmap, 16);     // TXT
-       dnssec_nsec_bitmap_add(bitmap, 28);     // AAAA
-       dnssec_nsec_bitmap_add(bitmap, 44);     // SSHFP
-       dnssec_nsec_bitmap_add(bitmap, 46);     // RRSIG
-       dnssec_nsec_bitmap_add(bitmap, 47);     // NSEC
-       dnssec_nsec_bitmap_add(bitmap, 48);     // DNSKEY
+       // Add the desired RR types to bitmap.
+       for (int i = 0; i < test_contains_count; i++) {
+               dnssec_nsec_bitmap_add(bitmap, test_contains[i]);
+       }
 
        size_t size = dnssec_nsec_bitmap_size(bitmap);
-       ok(size == 9, "valid bitmap size");
-       if (size != 9) {
+       ok(size == TEST_BITMAP_SIZE, "valid bitmap size");
+       if (size != TEST_BITMAP_SIZE) {
                dnssec_nsec_bitmap_free(bitmap);
                return 1;
        }
 
-       const uint8_t expected[9] = {
-               0x00, 0x07, 0x62, 0x01, 0x80, 0x08, 0x00, 0x0b, 0x80
+       const uint8_t expected[TEST_BITMAP_SIZE] = {
+               0x00, 0x0D, 0x62, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+               0x01, 0x01, 0x40
        };
-       uint8_t encoded[9] = { 0 };
+       uint8_t encoded[TEST_BITMAP_SIZE] = { 0 };
        dnssec_nsec_bitmap_write(bitmap, encoded);
 
-       ok(memcmp(encoded, expected, 9) == 0, "valid bitmap");
+       ok(memcmp(encoded, expected, TEST_BITMAP_SIZE) == 0, "valid bitmap");
 
-       bool contains = dnssec_nsec_bitmap_contains(expected, 9, KNOT_RRTYPE_AAAA);
-       ok(contains, "bitmap contains AAAA");
-       contains = dnssec_nsec_bitmap_contains(expected, 9, KNOT_RRTYPE_CNAME);
-       ok(!contains, "bitmap does not contain CNAME");
+       // Test contained types.
+       char rrtype_str[50];
+       for (int i = 0; i < test_contains_count; i++) {
+               bool contains = dnssec_nsec_bitmap_contains(encoded, size, test_contains[i]);
+               (void)knot_rrtype_to_string(test_contains[i], rrtype_str, 50);
+               ok(contains, "bitmap contains %s", rrtype_str);
+       }
+
+       // Test not contained types.
+       for (int i = 0; i < test_not_contains_count; i++) {
+               bool contains = dnssec_nsec_bitmap_contains(encoded, size, test_not_contains[i]);
+               (void)knot_rrtype_to_string(test_not_contains[i], rrtype_str, 50);
+               ok(!contains, "bitmap does not contain %s", rrtype_str);
+       }
 
        dnssec_nsec_bitmap_clear(bitmap);
        ok(dnssec_nsec_bitmap_size(bitmap) == 0, "bitmap clear");
 
        dnssec_nsec_bitmap_free(bitmap);
-
        return 0;
 }