[svn] commit: r3635 - 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
Thu Nov 25 09:25:00 UTC 2010
Author: vorner
Date: Thu Nov 25 09:25:00 2010
New Revision: 3635
Log:
More ZoneEntry tests
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 Thu Nov 25 09:25:00 2010
@@ -294,11 +294,13 @@
RRTTL(1200)),
rrch_(Name(EXAMPLE_CO_UK), RRClass::CH(), RRType::A(), RRTTL(1200)),
rrns_(Name(EXAMPLE_CO_UK), RRClass::IN(), RRType::NS(), RRTTL(1200)),
- rr_single_(Name(EXAMPLE_CO_UK), RRClass::IN(), RRType::NS(), RRTTL(0)),
+ rr_single_(Name(EXAMPLE_CO_UK), RRClass::IN(), RRType::NS(),
+ RRTTL(600)),
rr_empty_(Name(EXAMPLE_CO_UK), RRClass::IN(), RRType::NS(),
RRTTL(600)),
rrv6_(Name(EXAMPLE_CO_UK), RRClass::IN(), RRType::AAAA(), RRTTL(900)),
- rrnet_(Name(EXAMPLE_NET), RRClass::IN(), RRType::A(), RRTTL(600))
+ rrnet_(Name(EXAMPLE_NET), RRClass::IN(), RRType::A(), RRTTL(600)),
+ ns_name_(ns_name_)
{}
/// \brief Add Rdata to RRsets
@@ -344,6 +346,7 @@
BasicRRset rr_empty_; ///< NS RRset without any nameservers
BasicRRset rrv6_; ///< Standard RRset, IN, AAAA, lowercase name
BasicRRset rrnet_; ///< example.net A RRset
+ Name ns_name_; ///< Nameserver name of ns.example.net
};
} // Empty namespace
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 Thu Nov 25 09:25:00 2010
@@ -18,6 +18,7 @@
#include <boost/shared_ptr.hpp>
#include <dns/rrclass.h>
+#include <dns/rdataclass.h>
#include "../asiolink.h"
#include "../zone_entry.h"
@@ -117,6 +118,8 @@
}
TEST_F(ZoneEntryTest, CallbackZeroTTL) {
+ // Make it zero TTL, so it expires right away
+ rr_single_.setTTL(RRTTL(0));
shared_ptr<InheritedZoneEntry> zone(new InheritedZoneEntry(resolver_,
rr_single_, vector<const AbstractRRset*>(), nameservers_hash_,
nameservers_lru_));
@@ -125,9 +128,96 @@
// It should not be answered yet, it should ask for the IP addresses
EXPECT_TRUE(callback_->successes_.empty());
EXPECT_EQ(0, callback_->unreachable_count_);
- resolver_->asksIPs(Name("ns.example.net."), 0, 1);
+ resolver_->asksIPs(ns_name_, 0, 1);
// It should reject another one, as it has zero TTL
EXPECT_FALSE(zone->addCallback(callback_, ANY_OK, zone));
}
+TEST_F(ZoneEntryTest, CallbacksAnswered) {
+ shared_ptr<InheritedZoneEntry> zone(new InheritedZoneEntry(resolver_,
+ rr_single_, vector<const AbstractRRset*>(), nameservers_hash_,
+ nameservers_lru_));
+ // It should be in NOT_ASKED state
+ EXPECT_EQ(Fetchable::NOT_ASKED, zone->getState());
+ // It should accept the callback
+ EXPECT_TRUE(zone->addCallback(callback_, ANY_OK, zone));
+ // It should not be answered yet, it should ask for the IP addresses
+ EXPECT_TRUE(callback_->successes_.empty());
+ EXPECT_EQ(0, callback_->unreachable_count_);
+ resolver_->asksIPs(ns_name_, 0, 1);
+ // We should be IN_PROGRESS
+ EXPECT_EQ(Fetchable::IN_PROGRESS, zone->getState());
+ // Give two more callbacks, with different address families
+ EXPECT_TRUE(zone->addCallback(callback_, V4_ONLY, zone));
+ EXPECT_TRUE(zone->addCallback(callback_, V6_ONLY, zone));
+ // Nothing more is asked
+ EXPECT_EQ(2, resolver_->requests.size());
+ resolver_->answer(0, ns_name_, RRType::A(), rdata::in::A("192.0.2.1"));
+ // Two are answered (ANY and V4)
+ ASSERT_EQ(2, callback_->successes_.size());
+ EXPECT_TRUE(IOAddress("192.0.2.1").equal(callback_->successes_[0]));
+ EXPECT_TRUE(IOAddress("192.0.2.1").equal(callback_->successes_[1]));
+ // None are rejected
+ EXPECT_EQ(0, callback_->unreachable_count_);
+ // We are still in progress, not everything arrived
+ EXPECT_EQ(Fetchable::IN_PROGRESS, zone->getState());
+ resolver_->answer(1, ns_name_, RRType::AAAA(),
+ rdata::in::A("2001:db8::1"));
+ // This should answer the third callback
+ ASSERT_EQ(3, callback_->successes_.size());
+ EXPECT_TRUE(IOAddress("2001:db8::1").equal(callback_->successes_[2]));
+ EXPECT_EQ(0, callback_->unreachable_count_);
+ // It should think it is ready
+ EXPECT_EQ(Fetchable::READY, zone->getState());
+ // When we ask something more, it should be answered right away
+ EXPECT_TRUE(zone->addCallback(callback_, V4_ONLY, zone));
+ EXPECT_EQ(2, resolver_->requests.size());
+ ASSERT_EQ(4, callback_->successes_.size());
+ EXPECT_TRUE(IOAddress("192.0.2.1").equal(callback_->successes_[3]));
+ EXPECT_EQ(0, callback_->unreachable_count_);
+}
+
+TEST_F(ZoneEntryTest, CallbacksAOnly) {
+ shared_ptr<InheritedZoneEntry> zone(new InheritedZoneEntry(resolver_,
+ rr_single_, vector<const AbstractRRset*>(), nameservers_hash_,
+ nameservers_lru_));
+ // It should be in NOT_ASKED state
+ EXPECT_EQ(Fetchable::NOT_ASKED, zone->getState());
+ // It should accept the callback
+ EXPECT_TRUE(zone->addCallback(callback_, ANY_OK, zone));
+ // It should not be answered yet, it should ask for the IP addresses
+ EXPECT_TRUE(callback_->successes_.empty());
+ EXPECT_EQ(0, callback_->unreachable_count_);
+ resolver_->asksIPs(ns_name_, 0, 1);
+ // We should be IN_PROGRESS
+ EXPECT_EQ(Fetchable::IN_PROGRESS, zone->getState());
+ // Give two more callbacks, with different address families
+ EXPECT_TRUE(zone->addCallback(callback_, V4_ONLY, zone));
+ EXPECT_TRUE(zone->addCallback(callback_, V6_ONLY, zone));
+ resolver_->requests[1].second->failure();
+ // One should be rejected, but two still stay, they have chance
+ EXPECT_EQ(0, callback_->successes_.size());
+ EXPECT_EQ(1, callback_->unreachable_count_);
+ EXPECT_EQ(Fetchable::IN_PROGRESS, zone->getState());
+ // Answer the A one and see it answers what can be answered
+ ASSERT_EQ(2, callback_->successes_.size());
+ resolver_->answer(0, ns_name_, RRType::A(), rdata::in::A("192.0.2.1"));
+ EXPECT_TRUE(IOAddress("192.0.2.1").equal(callback_->successes_[0]));
+ EXPECT_TRUE(IOAddress("192.0.2.1").equal(callback_->successes_[1]));
+ EXPECT_EQ(1, callback_->unreachable_count_);
+ // Everything arriwed, so we are ready
+ EXPECT_EQ(Fetchable::READY, zone->getState());
+ // Try asking something more
+ EXPECT_TRUE(zone->addCallback(callback_, V4_ONLY, zone));
+ EXPECT_EQ(2, resolver_->requests.size());
+ ASSERT_EQ(3, callback_->successes_.size());
+ EXPECT_TRUE(IOAddress("192.0.2.1").equal(callback_->successes_[2]));
+ EXPECT_EQ(1, callback_->unreachable_count_);
+
+ EXPECT_TRUE(zone->addCallback(callback_, V6_ONLY, zone));
+ EXPECT_EQ(2, resolver_->requests.size());
+ EXPECT_EQ(3, callback_->successes_.size());
+ EXPECT_EQ(2, callback_->unreachable_count_);
+}
+
} // namespace
More information about the bind10-changes
mailing list