EXPECT_EQ(RRTTL(5), restoreTTL(rdataset->getTTLData()));
RdataSet::destroy(mem_sgmt_, rdataset, rrclass);
}
+
+// Creation of rdataset with bad params, with create and subtract
+TEST_F(RdataSetTest, badParams) {
+ const ConstRRsetPtr empty_rrset(new RRset(Name("www.example.com"),
+ RRClass::IN(), RRType::A(),
+ RRTTL(3600)));
+ const ConstRRsetPtr a_rrset = textToRRset("www.example.com. 3600 IN A "
+ "192.0.2.1");
+ const ConstRRsetPtr aaaa_rrset = textToRRset("www.example.com. 3600 IN AAAA "
+ "2001:db8::1");
+ const ConstRRsetPtr sig_rrset = textToRRset("www.example.com. 3600 IN RRSIG "
+ "A 5 2 3600 20120814220826 "
+ "20120715220826 1234 "
+ "example.com. FAKE");
+ const ConstRRsetPtr sig_rrset_ch = textToRRset("www.example.com. 3600 CH RRSIG "
+ "A 5 2 3600 20120814220826 "
+ "20120715220826 1234 "
+ "example.com. FAKE",
+ RRClass::CH());
+ SegmentObjectHolder<RdataSet, RRClass> holder(mem_sgmt_, rrclass);
+ holder.set(RdataSet::create(mem_sgmt_, encoder_, a_rrset, sig_rrset));
+ // Empty RRset as rdata
+ EXPECT_THROW(RdataSet::create(mem_sgmt_, encoder_, empty_rrset, sig_rrset),
+ isc::BadValue);
+ // The same for rrsig
+ EXPECT_THROW(RdataSet::create(mem_sgmt_, encoder_, a_rrset, empty_rrset),
+ isc::BadValue);
+ // Similar for subtract
+ EXPECT_THROW(RdataSet::subtract(mem_sgmt_, encoder_, empty_rrset,
+ sig_rrset, *holder.get()),
+ isc::BadValue);
+ EXPECT_THROW(RdataSet::subtract(mem_sgmt_, encoder_, a_rrset, empty_rrset,
+ *holder.get()),
+ isc::BadValue);
+ // Class mismatch
+ EXPECT_THROW(RdataSet::create(mem_sgmt_, encoder_, a_rrset, sig_rrset_ch),
+ isc::BadValue);
+ EXPECT_THROW(RdataSet::subtract(mem_sgmt_, encoder_, a_rrset,
+ sig_rrset_ch, *holder.get()),
+ isc::BadValue);
+ // Bad rrtype
+ EXPECT_THROW(RdataSet::create(mem_sgmt_, encoder_, aaaa_rrset,
+ ConstRRsetPtr(), holder.get()),
+ isc::BadValue);
+ EXPECT_THROW(RdataSet::subtract(mem_sgmt_, encoder_, aaaa_rrset,
+ ConstRRsetPtr(), *holder.get()),
+ isc::BadValue);
+}
}