|
@@ -87,8 +87,7 @@ private:
|
|
|
MockIterator(const char** rrset_data_ptr, bool pass_empty_rrsig) :
|
|
|
rrset_data_ptr_(rrset_data_ptr),
|
|
|
pass_empty_rrsig_(pass_empty_rrsig)
|
|
|
- {
|
|
|
- }
|
|
|
+ {}
|
|
|
|
|
|
const char** rrset_data_ptr_;
|
|
|
// If true, emulate an unexpected bogus case where an RRSIG RRset is
|
|
@@ -124,6 +123,117 @@ public:
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+class MockIteratorRRSIGMixedCovered : public ZoneIterator {
|
|
|
+private:
|
|
|
+ MockIteratorRRSIGMixedCovered(RRClass rrclass) :
|
|
|
+ rrclass_(rrclass),
|
|
|
+ counter_(0)
|
|
|
+ {}
|
|
|
+
|
|
|
+ RRClass rrclass_;
|
|
|
+ int counter_;
|
|
|
+
|
|
|
+public:
|
|
|
+ virtual ConstRRsetPtr getNextRRset() {
|
|
|
+ RRsetPtr rrset;
|
|
|
+
|
|
|
+ switch (counter_) {
|
|
|
+ case 0:
|
|
|
+ rrset.reset(new RRset(Name("example.org"),
|
|
|
+ RRClass::IN(), RRType::SOA(), RRTTL(3600)));
|
|
|
+ rrset->addRdata(generic::SOA(Name("ns1.example.org"),
|
|
|
+ Name("bugs.x.w.example.org"),
|
|
|
+ 2010012601, 3600, 300, 3600000, 1200));
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 1: {
|
|
|
+ rrset.reset(new RRset(Name("example.org"),
|
|
|
+ RRClass::IN(), RRType::A(), RRTTL(3600)));
|
|
|
+ rrset->addRdata(in::A("192.0.2.1"));
|
|
|
+ rrset->addRdata(in::A("192.0.2.2"));
|
|
|
+
|
|
|
+ RRsetPtr rrsig(new RRset(Name("example.org"), rrclass_,
|
|
|
+ RRType::RRSIG(), RRTTL(300)));
|
|
|
+ rrsig->addRdata(generic::RRSIG("A 5 3 "
|
|
|
+ "3600 20000101000000 20000201000000 "
|
|
|
+ "12345 example.org. FAKEFAKEFAKE"));
|
|
|
+ rrsig->addRdata(generic::RRSIG("NS 5 3 "
|
|
|
+ "3600 20000101000000 20000201000000 "
|
|
|
+ "54321 example.org. "
|
|
|
+ "FAKEFAKEFAKEFAKE"));
|
|
|
+ rrset->addRRsig(rrsig);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ default:
|
|
|
+ rrset.reset();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (counter_ < 2) {
|
|
|
+ counter_++;
|
|
|
+ }
|
|
|
+
|
|
|
+ return (rrset);
|
|
|
+ }
|
|
|
+
|
|
|
+ virtual ConstRRsetPtr getSOA() const {
|
|
|
+ isc_throw(isc::NotImplemented, "Not implemented");
|
|
|
+ }
|
|
|
+
|
|
|
+ static ZoneIteratorPtr makeIterator(RRClass rrclass) {
|
|
|
+ return (ZoneIteratorPtr(new MockIteratorRRSIGMixedCovered(rrclass)));
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+class MockIteratorEmptyRRset : public ZoneIterator {
|
|
|
+private:
|
|
|
+ MockIteratorEmptyRRset(RRClass rrclass) :
|
|
|
+ rrclass_(rrclass),
|
|
|
+ counter_(0)
|
|
|
+ {}
|
|
|
+
|
|
|
+ RRClass rrclass_;
|
|
|
+ int counter_;
|
|
|
+
|
|
|
+public:
|
|
|
+ virtual ConstRRsetPtr getNextRRset() {
|
|
|
+ RRsetPtr rrset;
|
|
|
+
|
|
|
+ switch (counter_) {
|
|
|
+ case 0:
|
|
|
+ rrset.reset(new RRset(Name("example.org"),
|
|
|
+ RRClass::IN(), RRType::SOA(), RRTTL(3600)));
|
|
|
+ rrset->addRdata(generic::SOA(Name("ns1.example.org"),
|
|
|
+ Name("bugs.x.w.example.org"),
|
|
|
+ 2010012601, 3600, 300, 3600000, 1200));
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 1: {
|
|
|
+ rrset.reset(new RRset(Name("example.org"),
|
|
|
+ RRClass::IN(), RRType::A(), RRTTL(3600)));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ default:
|
|
|
+ rrset.reset();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (counter_ < 2) {
|
|
|
+ counter_++;
|
|
|
+ }
|
|
|
+
|
|
|
+ return (rrset);
|
|
|
+ }
|
|
|
+
|
|
|
+ virtual ConstRRsetPtr getSOA() const {
|
|
|
+ isc_throw(isc::NotImplemented, "Not implemented");
|
|
|
+ }
|
|
|
+
|
|
|
+ static ZoneIteratorPtr makeIterator(RRClass rrclass) {
|
|
|
+ return (ZoneIteratorPtr(new MockIteratorEmptyRRset(rrclass)));
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
class MemoryClientTest : public ::testing::Test {
|
|
|
protected:
|
|
|
MemoryClientTest() : zclass_(RRClass::IN()),
|
|
@@ -546,33 +656,15 @@ TEST_F(MemoryClientTest, loadRRSIGs) {
|
|
|
EXPECT_EQ(1, client_->getZoneCount());
|
|
|
}
|
|
|
|
|
|
-#if 0 // FIXME
|
|
|
-
|
|
|
TEST_F(MemoryClientTest, loadRRSIGsRdataMixedCoveredTypes) {
|
|
|
- client_->load(Name("example.org"),
|
|
|
- TEST_DATA_DIR "/example.org-rrsigs.zone");
|
|
|
-
|
|
|
- RRsetPtr rrset(new RRset(Name("example.org"),
|
|
|
- RRClass::IN(), RRType::A(), RRTTL(3600)));
|
|
|
- rrset->addRdata(in::A("192.0.2.1"));
|
|
|
- rrset->addRdata(in::A("192.0.2.2"));
|
|
|
-
|
|
|
- RRsetPtr rrsig(new RRset(Name("example.org"), zclass_,
|
|
|
- RRType::RRSIG(), RRTTL(300)));
|
|
|
- rrsig->addRdata(generic::RRSIG("A 5 3 3600 20000101000000 20000201000000 "
|
|
|
- "12345 example.org. FAKEFAKEFAKE"));
|
|
|
- rrsig->addRdata(generic::RRSIG("NS 5 3 3600 20000101000000 20000201000000 "
|
|
|
- "54321 example.org. FAKEFAKEFAKEFAKE"));
|
|
|
- rrset->addRRsig(rrsig);
|
|
|
-
|
|
|
- EXPECT_THROW(client_->add(Name("example.org"), rrset),
|
|
|
- ZoneDataUpdater::AddError);
|
|
|
-
|
|
|
+ // FIXME: This should throw, but it doesn't now.
|
|
|
+ EXPECT_THROW(
|
|
|
+ client_->load(Name("example.org"),
|
|
|
+ *MockIteratorRRSIGMixedCovered::makeIterator(zclass_)),
|
|
|
+ ZoneDataUpdater::AddError);
|
|
|
// Teardown checks for memory segment leaks
|
|
|
}
|
|
|
|
|
|
-#endif
|
|
|
-
|
|
|
TEST_F(MemoryClientTest, getZoneCount) {
|
|
|
EXPECT_EQ(0, client_->getZoneCount());
|
|
|
client_->load(Name("example.org"), TEST_DATA_DIR "/example.org-empty.zone");
|
|
@@ -662,79 +754,14 @@ TEST_F(MemoryClientTest, getIteratorGetSOAThrowsNotImplemented) {
|
|
|
EXPECT_THROW(iterator->getSOA(), isc::NotImplemented);
|
|
|
}
|
|
|
|
|
|
-#if 0 // FIXME
|
|
|
-
|
|
|
-TEST_F(MemoryClientTest, addRRsetToNonExistentZoneThrows) {
|
|
|
- // The zone "example.org" doesn't exist, so we can't add an RRset to
|
|
|
- // it.
|
|
|
- RRsetPtr rrset_a(new RRset(Name("example.org"), RRClass::IN(), RRType::A(),
|
|
|
- RRTTL(300)));
|
|
|
- rrset_a->addRdata(rdata::in::A("192.0.2.1"));
|
|
|
- EXPECT_THROW(client_->add(Name("example.org"), rrset_a), DataSourceError);
|
|
|
-}
|
|
|
-
|
|
|
-TEST_F(MemoryClientTest, addOutOfZoneThrows) {
|
|
|
- // Out of zone names should throw.
|
|
|
- client_->load(Name("example.org"),
|
|
|
- TEST_DATA_DIR "/example.org-empty.zone");
|
|
|
-
|
|
|
- RRsetPtr rrset_a(new RRset(Name("a.example.com"),
|
|
|
- RRClass::IN(), RRType::A(), RRTTL(300)));
|
|
|
- rrset_a->addRdata(rdata::in::A("192.0.2.1"));
|
|
|
-
|
|
|
- EXPECT_THROW(client_->add(Name("example.org"), rrset_a),
|
|
|
- OutOfZone);
|
|
|
- // Teardown checks for memory segment leaks
|
|
|
-}
|
|
|
-
|
|
|
-TEST_F(MemoryClientTest, addNullRRsetThrows) {
|
|
|
- client_->load(Name("example.org"),
|
|
|
- TEST_DATA_DIR "/example.org-rrsigs.zone");
|
|
|
-
|
|
|
- EXPECT_THROW(client_->add(Name("example.org"), ConstRRsetPtr()),
|
|
|
- ZoneDataUpdater::NullRRset);
|
|
|
-
|
|
|
- // Teardown checks for memory segment leaks
|
|
|
-}
|
|
|
-
|
|
|
TEST_F(MemoryClientTest, addEmptyRRsetThrows) {
|
|
|
- client_->load(Name("example.org"),
|
|
|
- TEST_DATA_DIR "/example.org-rrsigs.zone");
|
|
|
-
|
|
|
- RRsetPtr rrset_a(new RRset(Name("example.org"), RRClass::IN(), RRType::A(),
|
|
|
- RRTTL(300)));
|
|
|
- EXPECT_THROW(client_->add(Name("example.org"), rrset_a),
|
|
|
- ZoneDataUpdater::AddError);
|
|
|
-
|
|
|
+ EXPECT_THROW(
|
|
|
+ client_->load(Name("example.org"),
|
|
|
+ *MockIteratorEmptyRRset::makeIterator(zclass_)),
|
|
|
+ ZoneDataUpdater::AddError);
|
|
|
// Teardown checks for memory segment leaks
|
|
|
}
|
|
|
|
|
|
-TEST_F(MemoryClientTest, add) {
|
|
|
- client_->load(Name("example.org"), TEST_DATA_DIR "/example.org-empty.zone");
|
|
|
-
|
|
|
- // Add another RRset
|
|
|
- RRsetPtr rrset_a(new RRset(Name("example.org"), RRClass::IN(), RRType::A(),
|
|
|
- RRTTL(300)));
|
|
|
- rrset_a->addRdata(rdata::in::A("192.0.2.1"));
|
|
|
- client_->add(Name("example.org"), rrset_a);
|
|
|
-
|
|
|
- ZoneIteratorPtr iterator(client_->getIterator(Name("example.org")));
|
|
|
-
|
|
|
- // First we have the SOA
|
|
|
- ConstRRsetPtr rrset(iterator->getNextRRset());
|
|
|
- EXPECT_TRUE(rrset);
|
|
|
- EXPECT_EQ(RRType::A(), rrset->getType());
|
|
|
-
|
|
|
- rrset = iterator->getNextRRset();
|
|
|
- EXPECT_TRUE(rrset);
|
|
|
- EXPECT_EQ(RRType::SOA(), rrset->getType());
|
|
|
-
|
|
|
- // There's nothing else in this zone
|
|
|
- EXPECT_EQ(ConstRRsetPtr(), iterator->getNextRRset());
|
|
|
-}
|
|
|
-
|
|
|
-#endif
|
|
|
-
|
|
|
TEST_F(MemoryClientTest, findZoneData) {
|
|
|
client_->load(Name("example.org"),
|
|
|
TEST_DATA_DIR "/example.org-rrsigs.zone");
|