[svn] commit: r3731 - in /branches/trac408/src/lib/nsas/tests: nameserver_entry_unittest.cc nsas_test.h
BIND 10 source code commits
bind10-changes at lists.isc.org
Mon Dec 6 15:25:28 UTC 2010
Author: vorner
Date: Mon Dec 6 15:25:27 2010
New Revision: 3731
Log:
Do direct answers more generically
They will be needed for zone tests
Modified:
branches/trac408/src/lib/nsas/tests/nameserver_entry_unittest.cc
branches/trac408/src/lib/nsas/tests/nsas_test.h
Modified: branches/trac408/src/lib/nsas/tests/nameserver_entry_unittest.cc
==============================================================================
--- branches/trac408/src/lib/nsas/tests/nameserver_entry_unittest.cc (original)
+++ branches/trac408/src/lib/nsas/tests/nameserver_entry_unittest.cc Mon Dec 6 15:25:27 2010
@@ -324,34 +324,6 @@
}
/*
- * The resolver for DirectAnswer test.
- * It answers right away, from inside resolve. I tried to put it
- * inside the function, but shared_ptr complains for some reason there.
- */
-class DirectResolver : public ResolverInterface {
- public:
- DirectResolver(RRsetPtr rrv4, RRsetPtr rrv6) :
- rrv4_(rrv4), rrv6_(rrv6)
- { }
- virtual void resolve(QuestionPtr question, CallbackPtr callback) {
- if (question->getClass() == RRClass::IN()) {
- EXPECT_EQ(Name(EXAMPLE_CO_UK), question->getName());
- if (question->getType() == RRType::A()) {
- callback->success(rrv4_);
- } else if (question->getType() == RRType::AAAA()) {
- callback->success(rrv6_);
- } else {
- ADD_FAILURE() << "Unknow rrtype asked";
- }
- } else {
- callback->failure();
- }
- }
- private:
- RRsetPtr rrv4_, rrv6_;
-};
-
-/*
* Tests that it works even when we provide the answer right away, directly
* from resolve.
*/
@@ -359,10 +331,19 @@
shared_ptr<NameserverEntry> entry(new NameserverEntry(EXAMPLE_CO_UK,
RRClass::IN()));
shared_ptr<Callback> callback(new Callback);
- shared_ptr<ResolverInterface> resolver(new DirectResolver(rrv4_, rrv6_));
+ shared_ptr<TestResolver> resolver(new TestResolver);
+ resolver->addPresetAnswer(Question(Name(EXAMPLE_CO_UK), RRClass::IN(),
+ RRType::A()), rrv4_);
+ resolver->addPresetAnswer(Question(Name(EXAMPLE_CO_UK), RRClass::IN(),
+ RRType::AAAA()), rrv6_);
+ resolver->addPresetAnswer(Question(Name(EXAMPLE_NET), RRClass::IN(),
+ RRType::A()), shared_ptr<AbstractRRset>());
+ resolver->addPresetAnswer(Question(Name(EXAMPLE_NET), RRClass::IN(),
+ RRType::AAAA()), shared_ptr<AbstractRRset>());
// A successfull test first
entry->askIP(resolver, callback, ANY_OK);
+ EXPECT_EQ(0, resolver->requests.size());
EXPECT_EQ(1, callback->count);
NameserverEntry::AddressVector addresses;
EXPECT_EQ(Fetchable::READY, entry->getAddresses(addresses));
@@ -370,8 +351,9 @@
// An unsuccessfull test
callback->count = 0;
- entry.reset(new NameserverEntry(EXAMPLE_CO_UK, RRClass::CH()));
+ entry.reset(new NameserverEntry(EXAMPLE_NET, RRClass::IN()));
entry->askIP(resolver, callback, ANY_OK);
+ EXPECT_EQ(0, resolver->requests.size());
EXPECT_EQ(1, callback->count);
addresses.clear();
EXPECT_EQ(Fetchable::UNREACHABLE, entry->getAddresses(addresses));
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 Mon Dec 6 15:25:27 2010
@@ -224,11 +224,35 @@
bool checkIndex(size_t index) {
return (requests.size() > index);
}
+
+ typedef std::map<isc::dns::Question, boost::shared_ptr<AbstractRRset> >
+ PresetAnswers;
+ PresetAnswers answers_;
public:
typedef pair<QuestionPtr, CallbackPtr> Request;
vector<Request> requests;
virtual void resolve(QuestionPtr q, CallbackPtr c) {
- requests.push_back(Request(q, c));
+ PresetAnswers::iterator it(answers_.find(*q));
+ if (it == answers_.end()) {
+ requests.push_back(Request(q, c));
+ } else {
+ if (it->second) {
+ c->success(it->second);
+ } else {
+ c->failure();
+ }
+ }
+ }
+
+ /*
+ * Add a preset answer. If shared_ptr() is passed (eg. NULL),
+ * it will generate failure. If the question is not preset,
+ * it goes to requests and you can answer later.
+ */
+ void addPresetAnswer(const isc::dns::Question& question,
+ boost::shared_ptr<AbstractRRset> answer)
+ {
+ answers_[question] = answer;
}
// Thrown if the query at the given index does not exist.
More information about the bind10-changes
mailing list