|
@@ -12,6 +12,8 @@
|
|
|
// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
|
// PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
|
|
+#include <exceptions/exceptions.h>
|
|
|
+
|
|
|
#include <util/buffer.h>
|
|
|
#include <util/memory_segment_local.h>
|
|
|
|
|
@@ -38,13 +40,16 @@ protected:
|
|
|
RdataSetTest() :
|
|
|
// 1076895760 = 0x40302010. Use this so we fill in all 8-bit "field"
|
|
|
// of the 32-bit TTL
|
|
|
- a_rrset_(textToRRset("www.example.com. 1076895760 IN A 192.0.2.1"))
|
|
|
+ a_rrset_(textToRRset("www.example.com. 1076895760 IN A 192.0.2.1")),
|
|
|
+ rrsig_rrset_(textToRRset("www.example.com. 1076895760 IN RRSIG "
|
|
|
+ "A 5 2 3600 20120814220826 20120715220826 "
|
|
|
+ "1234 example.com. FAKE"))
|
|
|
{}
|
|
|
void TearDown() {
|
|
|
EXPECT_TRUE(mem_sgmt_.allMemoryDeallocated());
|
|
|
}
|
|
|
|
|
|
- ConstRRsetPtr a_rrset_;
|
|
|
+ ConstRRsetPtr a_rrset_, rrsig_rrset_;
|
|
|
isc::util::MemorySegmentLocal mem_sgmt_;
|
|
|
RdataEncoder encoder_;
|
|
|
};
|
|
@@ -70,4 +75,73 @@ TEST_F(RdataSetTest, create) {
|
|
|
EXPECT_EQ(0, rdataset->getSigRdataCount());
|
|
|
RdataSet::destroy(mem_sgmt_, RRClass::IN(), rdataset);
|
|
|
}
|
|
|
+
|
|
|
+TEST_F(RdataSetTest, createWithRRSIG) {
|
|
|
+ // Normal case.
|
|
|
+ RdataSet* rdataset = RdataSet::create(mem_sgmt_, encoder_, a_rrset_,
|
|
|
+ rrsig_rrset_);
|
|
|
+ EXPECT_EQ(RRTTL(1076895760), restoreTTL(rdataset->getTTLData()));
|
|
|
+ EXPECT_EQ(1, rdataset->getSigRdataCount());
|
|
|
+ RdataSet::destroy(mem_sgmt_, RRClass::IN(), rdataset);
|
|
|
+
|
|
|
+ // Unusual case: TTL doesn't match. This implementation accepts that,
|
|
|
+ // using the TTL of the covered RRset.
|
|
|
+ ConstRRsetPtr rrsig_badttl(textToRRset(
|
|
|
+ "www.example.com. 3600 IN RRSIG "
|
|
|
+ "A 5 2 3600 20120814220826 "
|
|
|
+ "20120715220826 1234 example.com. FAKE"));
|
|
|
+ rdataset = RdataSet::create(mem_sgmt_, encoder_, a_rrset_, rrsig_badttl);
|
|
|
+ EXPECT_EQ(RRTTL(1076895760), restoreTTL(rdataset->getTTLData()));
|
|
|
+ RdataSet::destroy(mem_sgmt_, RRClass::IN(), rdataset);
|
|
|
+}
|
|
|
+
|
|
|
+TEST_F(RdataSetTest, createWithRRSIGOnly) {
|
|
|
+ // A rare, but allowed, case: RdataSet without the main RRset but with
|
|
|
+ // RRSIG.
|
|
|
+ RdataSet* rdataset = RdataSet::create(mem_sgmt_, encoder_, ConstRRsetPtr(),
|
|
|
+ rrsig_rrset_);
|
|
|
+ EXPECT_EQ(RRType::A(), rdataset->type); // type covered is used as type
|
|
|
+ EXPECT_EQ(RRTTL(1076895760), restoreTTL(rdataset->getTTLData()));
|
|
|
+ EXPECT_EQ(0, rdataset->getRdataCount());
|
|
|
+ EXPECT_EQ(1, rdataset->getSigRdataCount());
|
|
|
+ RdataSet::destroy(mem_sgmt_, RRClass::IN(), rdataset);
|
|
|
+}
|
|
|
+
|
|
|
+TEST_F(RdataSetTest, badCeate) {
|
|
|
+ // Neither the RRset nor RRSIG RRset is given
|
|
|
+ EXPECT_THROW(RdataSet::create(mem_sgmt_, encoder_, ConstRRsetPtr(),
|
|
|
+ ConstRRsetPtr()), isc::BadValue);
|
|
|
+
|
|
|
+ // Empty RRset (An RRset without RDATA)
|
|
|
+ ConstRRsetPtr empty_rrset(new RRset(Name("example.com"), RRClass::IN(),
|
|
|
+ RRType::A(), RRTTL(3600)));
|
|
|
+ EXPECT_THROW(RdataSet::create(mem_sgmt_, encoder_, empty_rrset,
|
|
|
+ ConstRRsetPtr()), isc::BadValue);
|
|
|
+ ConstRRsetPtr empty_rrsig(new RRset(Name("example.com"), RRClass::IN(),
|
|
|
+ RRType::RRSIG(), RRTTL(3600)));
|
|
|
+ EXPECT_THROW(RdataSet::create(mem_sgmt_, encoder_, ConstRRsetPtr(),
|
|
|
+ empty_rrsig), isc::BadValue);
|
|
|
+
|
|
|
+ // The RRset type and RRSIG's type covered don't match
|
|
|
+ ConstRRsetPtr bad_rrsig(textToRRset(
|
|
|
+ "www.example.com. 1076895760 IN RRSIG "
|
|
|
+ "NS 5 2 3600 20120814220826 20120715220826 "
|
|
|
+ "1234 example.com. FAKE"));
|
|
|
+ EXPECT_THROW(RdataSet::create(mem_sgmt_, encoder_, a_rrset_, bad_rrsig),
|
|
|
+ isc::BadValue);
|
|
|
+
|
|
|
+ // Pass non RRSIG for the sig parameter
|
|
|
+ EXPECT_THROW(RdataSet::create(mem_sgmt_, encoder_, a_rrset_, a_rrset_),
|
|
|
+ isc::BadValue);
|
|
|
+
|
|
|
+ // RR class doesn't match between RRset and RRSIG
|
|
|
+ ConstRRsetPtr badclass_rrsig(textToRRset(
|
|
|
+ "www.example.com. 1076895760 CH RRSIG "
|
|
|
+ "A 5 2 3600 20120814220826 "
|
|
|
+ "20120715220826 1234 example.com. FAKE",
|
|
|
+ RRClass::CH()));
|
|
|
+ EXPECT_THROW(RdataSet::create(mem_sgmt_, encoder_, a_rrset_,
|
|
|
+ badclass_rrsig),
|
|
|
+ isc::BadValue);
|
|
|
+}
|
|
|
}
|