]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
unit test upgrade.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 7 May 2007 14:22:30 +0000 (14:22 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 7 May 2007 14:22:30 +0000 (14:22 +0000)
git-svn-id: file:///svn/unbound/trunk@292 be551aaa-1e26-0410-a405-d3ace91eadb9

testcode/unitmsgparse.c
util/data/msgreply.c
util/data/msgreply.h

index 0af2c1acb073a893d20374382d89945894ca772c..9f2bfb5b495144e9b10b3175bcbc0b388fd090bc 100644 (file)
@@ -267,6 +267,7 @@ testpkt(ldns_buffer* pkt, struct alloc_cache* alloc, ldns_buffer* out,
                        checkformerr(pkt);
                unit_assert(ret != LDNS_RCODE_SERVFAIL);
        } else {
+               const size_t lim = 512;
                ret = reply_info_encode(&qi, rep, id, flags, out, timenow,
                        region, 65535);
                unit_assert(ret != 0); /* udp packets should fit */
@@ -275,6 +276,24 @@ testpkt(ldns_buffer* pkt, struct alloc_cache* alloc, ldns_buffer* out,
                        (unsigned)ldns_buffer_limit(pkt),
                        (unsigned)ldns_buffer_limit(out));
                test_buffers(pkt, out);
+
+               if(ldns_buffer_limit(out) > lim) {
+                       ret = reply_info_encode(&qi, rep, id, flags, out, 
+                               timenow, region, 
+                               lim - calc_edns_field_size(&edns));
+                       unit_assert(ret != 0); /* should fit, but with TC */
+                       attach_edns_record(out, &edns);
+                       if( LDNS_QDCOUNT(ldns_buffer_begin(out)) !=
+                               LDNS_QDCOUNT(ldns_buffer_begin(pkt)) ||
+                               LDNS_ANCOUNT(ldns_buffer_begin(out)) !=
+                               LDNS_ANCOUNT(ldns_buffer_begin(pkt)) ||
+                               LDNS_NSCOUNT(ldns_buffer_begin(out)) !=
+                               LDNS_NSCOUNT(ldns_buffer_begin(pkt)))
+                               unit_assert(
+                               LDNS_TC_WIRE(ldns_buffer_begin(out)));
+                               /* must set TC bit if shortened */
+                       unit_assert(ldns_buffer_limit(out) <= lim);
+               }
        } 
 
        query_info_clear(&qi);
index cad215dacf64e47e32e8f8e04f7b66bbe8e7612c..7c09f89ab9af08b62442efb32848974a66196941 100644 (file)
@@ -1066,8 +1066,7 @@ int reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
        return 1;
 }
 
-/** estimate size of EDNS field in packet */
-static uint16_t
+uint16_t
 calc_edns_field_size(struct edns_data* edns)
 {
        if(!edns || !edns->edns_present) 
index 0abb62573549f238ba17d2fb5fa7b670b38131e7..d8e6c94de337058a1e6a778dc683d430cad1565b 100644 (file)
@@ -298,6 +298,13 @@ int reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
 struct msgreply_entry* query_info_entrysetup(struct query_info* q,
        struct reply_info* r, hashvalue_t h);
 
+/**
+ * Estimate size of EDNS record in packet. EDNS record will be no larger.
+ * @param edns: edns data or NULL.
+ * @return octets to reserve for EDNS.
+ */
+uint16_t calc_edns_field_size(struct edns_data* edns);
+
 /**
  * Attach EDNS record to buffer. Buffer has complete packet. There must
  * be enough room left for the EDNS record.