]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[2097] added test case for too-many-RDATAs exceeding the threshold.
authorJINMEI Tatuya <jinmei@isc.org>
Wed, 15 Aug 2012 17:14:20 +0000 (10:14 -0700)
committerJINMEI Tatuya <jinmei@isc.org>
Wed, 15 Aug 2012 17:14:20 +0000 (10:14 -0700)
as suggested in review.
also updated getRRSIGWithRdataCount() to generate the data from write,
not from text as I found it took much longer time if I did it from text
(which is simpler).  with large number of RRSIGs it's noticeable and not
good for unittests to run frequently.

src/lib/datasrc/memory/tests/rdataset_unittest.cc

index e8832da343ea1974e7531fa9c277bf8b923acb87..5e7d4b9900bf70178b3162018b3cc8bf413a5363 100644 (file)
@@ -143,6 +143,11 @@ TEST_F(RdataSetTest, createManyRRs) {
                                   getRRsetWithRdataCount(8192),
                                   ConstRRsetPtr()),
                  RdataSetError);
+    // To be very sure even try larger number than the threshold
+    EXPECT_THROW(RdataSet::create(mem_sgmt_, encoder_,
+                                  getRRsetWithRdataCount(65535),
+                                  ConstRRsetPtr()),
+                 RdataSetError);
 }
 
 TEST_F(RdataSetTest, createWithRRSIG) {
@@ -169,12 +174,22 @@ ConstRRsetPtr
 getRRSIGWithRdataCount(size_t sig_count) {
     RRsetPtr rrset(new RRset(Name("example.com"), RRClass::IN(),
                              RRType::RRSIG(), RRTTL(3600)));
+    // We use a base wire-format image and tweak the original TTL field to
+    // generate unique RDATAs in the loop.  (Creating them from corresponding
+    // text is simpler, but doing so for a large number of RRSIGs is
+    // relatively heavy and could be too long for unittests).
+    ConstRdataPtr rrsig_base =
+        rdata::createRdata(RRType::RRSIG(), RRClass::IN(),
+                           "A 5 2 3600 20120814220826 20120715220826 1234 "
+                           "example.com. FAKE");
+    isc::util::OutputBuffer ob(0);
+    rrsig_base->toWire(ob);
     for (size_t i = 0; i < sig_count; ++i) {
-        rrset->addRdata(rdata::createRdata(
-                            RRType::RRSIG(), RRClass::IN(),
-                            "A 5 2 3600 20120814220826 20120715220826 " +
-                            lexical_cast<std::string>(i) +
-                            " example.com. FAKE"));
+        ob.writeUint16At((i >> 16) & 0xffff, 4);
+        ob.writeUint16At(i & 0xffff, 6);
+        isc::util::InputBuffer ib(ob.getData(), ob.getLength());
+        rrset->addRdata(rdata::createRdata(RRType::RRSIG(), RRClass::IN(),
+                                           ib, ib.getLength()));
     }
     return (rrset);
 }
@@ -205,6 +220,10 @@ TEST_F(RdataSetTest, createManyRRSIGs) {
     EXPECT_THROW(RdataSet::create(mem_sgmt_, encoder_, a_rrset_,
                                   getRRSIGWithRdataCount(65536)),
                  RdataSetError);
+    // To be very sure even try larger number than the threshold
+    EXPECT_THROW(RdataSet::create(mem_sgmt_, encoder_, a_rrset_,
+                                  getRRSIGWithRdataCount(70000)),
+                 RdataSetError);
 }
 
 TEST_F(RdataSetTest, createWithRRSIGOnly) {