[svn] commit: r3755 - in /branches/trac408/src/lib/nsas/tests: nsas_test.h zone_entry_unittest.cc
BIND 10 source code commits
bind10-changes at lists.isc.org
Tue Dec 7 14:46:31 UTC 2010
Author: vorner
Date: Tue Dec 7 14:46:30 2010
New Revision: 3755
Log:
Improve ZoneEntry test
It tests more conditions with timeouting NS entries.
Modified:
branches/trac408/src/lib/nsas/tests/nsas_test.h
branches/trac408/src/lib/nsas/tests/zone_entry_unittest.cc
Modified: branches/trac408/src/lib/nsas/tests/nsas_test.h
==============================================================================
--- branches/trac408/src/lib/nsas/tests/nsas_test.h (original)
+++ branches/trac408/src/lib/nsas/tests/nsas_test.h Tue Dec 7 14:46:30 2010
@@ -384,7 +384,7 @@
rrns_->addRdata(rdata::generic::NS("example.de"));
// Single NS record with 0 TTL
- rr_single_->addRdata(rdata::generic::NS( "ns.example.net."));
+ rr_single_->addRdata(rdata::generic::NS(ns_name_));
// AAAA records
rrv6_->addRdata(ConstRdataPtr(new RdataTest<AAAA>("2001::1002")));
Modified: branches/trac408/src/lib/nsas/tests/zone_entry_unittest.cc
==============================================================================
--- branches/trac408/src/lib/nsas/tests/zone_entry_unittest.cc (original)
+++ branches/trac408/src/lib/nsas/tests/zone_entry_unittest.cc Tue Dec 7 14:46:30 2010
@@ -117,8 +117,13 @@
EXPECT_EQ(1, callback_->unreachable_count_);
}
-// Check it accepts the first callback with 0 TTL
-TEST_F(ZoneEntryTest, CallbackZeroTTL) {
+/*
+ * This checks that:
+ * * The question is answered even with 0 TTL
+ * * It is answered only once, other query triggers another upstream query.
+ * * When we answer with different one, it should ask for a different zone.
+ */
+TEST_F(ZoneEntryTest, ChangedNS) {
// Make it zero TTL, so it expires right away
rr_single_->setTTL(RRTTL(0));
shared_ptr<InheritedZoneEntry> zone(getZone());
@@ -131,9 +136,43 @@
EXPECT_TRUE(callback_->successes_.empty());
EXPECT_EQ(0, callback_->unreachable_count_);
resolver_->asksIPs(ns_name_, 1, 2);
+ resolver_->answer(1, ns_name_, RRType::A(), rdata::in::A("192.0.2.1"));
+ ASSERT_EQ(1, callback_->successes_.size());
+ EXPECT_TRUE(IOAddress("192.0.2.1").equal(callback_->successes_[0]));
+ resolver_->answer(2, ns_name_, RRType::AAAA(),
+ rdata::in::AAAA("2001:db8::1"));
+ EXPECT_EQ(1, callback_->successes_.size());
// It should request the NSs again, as TTL is 0
zone->addCallback(callback_, ANY_OK);
EXPECT_EQ(4, resolver_->requests.size());
+ EXPECT_EQ(Fetchable::IN_PROGRESS, zone->getState());
+
+ Name different_name("ns.example.com");
+ // Create a different answer
+ RRsetPtr different_ns(new RRset(Name(EXAMPLE_CO_UK), RRClass::IN(),
+ RRType::NS(), RRTTL(0)));
+ different_ns->addRdata(rdata::generic::NS(different_name));
+ EXPECT_NO_THROW(resolver_->provideNS(3, different_ns));
+ // It should become ready and ask for the new name
+ EXPECT_EQ(Fetchable::READY, zone->getState());
+ // Answer one of the IP addresses, we should get an address now
+ resolver_->asksIPs(different_name, 4, 5);
+ resolver_->answer(4, different_name, RRType::A(),
+ rdata::in::A("192.0.2.2"));
+ ASSERT_EQ(2, callback_->successes_.size());
+ EXPECT_TRUE(IOAddress("192.0.2.2").equal(callback_->successes_[1]));
+
+ // And now, switch back, as it timed out again
+ zone->addCallback(callback_, ANY_OK);
+ EXPECT_EQ(7, resolver_->requests.size());
+ EXPECT_EQ(Fetchable::IN_PROGRESS, zone->getState());
+ // When we answer with the original, it should still be cached and
+ // we should get the answer
+ EXPECT_NO_THROW(resolver_->provideNS(0, rr_single_));
+ EXPECT_EQ(7, resolver_->requests.size());
+ EXPECT_EQ(Fetchable::READY, zone->getState());
+ ASSERT_EQ(3, callback_->successes_.size());
+ EXPECT_TRUE(IOAddress("192.0.2.1").equal(callback_->successes_[0]));
}
// Check it answers callbacks when we give it addresses
@@ -335,9 +374,6 @@
/*
* TODO: There should be more tests for sure. Some ideas:
- * - What happens when some things start timing out.
- * - What happens if they are different after the timeout.
- * - What happens if they return to previous state (changes and changes back).
* - Combine this direct answering.
* - Look what happens when the nameservers are already in some different
* states and not just newly created.
More information about the bind10-changes
mailing list