[svn] commit: r1374 - in /trunk/src/bin/auth: ./ tests/ tests/testdata/
BIND 10 source code commits
bind10-changes at lists.isc.org
Fri Mar 12 22:33:58 UTC 2010
Author: jinmei
Date: Fri Mar 12 22:33:58 2010
New Revision: 1374
Log:
added more tests for auth server:
- load and lookup a test data source
- lookup for a broken data source entry, and confirm it will result in
SERVFAIL
- in the auth server code, only catch isc::Exceptions.
Added:
trunk/src/bin/auth/tests/testdata/badExampleQuery_fromWire
trunk/src/bin/auth/tests/testdata/badExampleQuery_fromWire.spec
trunk/src/bin/auth/tests/testdata/example.com
trunk/src/bin/auth/tests/testdata/example.sqlite3 (with props)
trunk/src/bin/auth/tests/testdata/examplequery_fromWire
trunk/src/bin/auth/tests/testdata/examplequery_fromWire.spec
Modified:
trunk/src/bin/auth/auth_srv.cc
trunk/src/bin/auth/tests/auth_srv_unittest.cc
Modified: trunk/src/bin/auth/auth_srv.cc
==============================================================================
--- trunk/src/bin/auth/auth_srv.cc (original)
+++ trunk/src/bin/auth/auth_srv.cc Fri Mar 12 22:33:58 2010
@@ -217,8 +217,13 @@
try {
Query query(message, dnssec_ok);
impl_->data_sources_.doQuery(query);
- } catch(...) {
- message.setRcode(Rcode::SERVFAIL());
+ } catch (const Exception& ex) {
+ if (verbose_mode) {
+ cerr << "Internal error, returning SERVFAIL: " << ex.what() << endl;
+ }
+ makeErrorMessage(message, response_renderer, Rcode::SERVFAIL(),
+ verbose_mode);
+ return (true);
}
response_renderer.setLengthLimit(udp_buffer ? remote_bufsize : 65535);
Modified: trunk/src/bin/auth/tests/auth_srv_unittest.cc
==============================================================================
--- trunk/src/bin/auth/tests/auth_srv_unittest.cc (original)
+++ trunk/src/bin/auth/tests/auth_srv_unittest.cc Fri Mar 12 22:33:58 2010
@@ -23,6 +23,8 @@
#include <dns/rrclass.h>
#include <dns/rrtype.h>
+#include <cc/data.h>
+
#include <auth/auth_srv.h>
#include <dns/tests/unittest_util.h>
@@ -30,8 +32,11 @@
using isc::UnitTestUtil;
using namespace std;
using namespace isc::dns;
+using namespace isc::data;
namespace {
+const char* CONFIG_TESTDB = "{\"database_file\": \"testdata/example.sqlite3\"}";
+
class AuthSrvTest : public ::testing::Test {
protected:
AuthSrvTest() : request_message(Message::RENDER),
@@ -89,13 +94,13 @@
EXPECT_EQ(qid, message.getQid());
EXPECT_EQ(rcode, message.getRcode());
EXPECT_EQ(opcodeval, message.getOpcode().getCode());
- EXPECT_EQ((flags & QR_FLAG) == 1, message.getHeaderFlag(MessageFlag::QR()));
- EXPECT_EQ((flags & AA_FLAG) == 1, message.getHeaderFlag(MessageFlag::AA()));
- EXPECT_EQ((flags & TC_FLAG) == 1, message.getHeaderFlag(MessageFlag::TC()));
- EXPECT_EQ((flags & RA_FLAG) == 1, message.getHeaderFlag(MessageFlag::RA()));
- EXPECT_EQ((flags & RD_FLAG) == 1, message.getHeaderFlag(MessageFlag::RD()));
- EXPECT_EQ((flags & AD_FLAG) == 1, message.getHeaderFlag(MessageFlag::AD()));
- EXPECT_EQ((flags & CD_FLAG) == 1, message.getHeaderFlag(MessageFlag::CD()));
+ EXPECT_EQ((flags & QR_FLAG) != 0, message.getHeaderFlag(MessageFlag::QR()));
+ EXPECT_EQ((flags & AA_FLAG) != 0, message.getHeaderFlag(MessageFlag::AA()));
+ EXPECT_EQ((flags & TC_FLAG) != 0, message.getHeaderFlag(MessageFlag::TC()));
+ EXPECT_EQ((flags & RA_FLAG) != 0, message.getHeaderFlag(MessageFlag::RA()));
+ EXPECT_EQ((flags & RD_FLAG) != 0, message.getHeaderFlag(MessageFlag::RD()));
+ EXPECT_EQ((flags & AD_FLAG) != 0, message.getHeaderFlag(MessageFlag::AD()));
+ EXPECT_EQ((flags & CD_FLAG) != 0, message.getHeaderFlag(MessageFlag::CD()));
EXPECT_EQ(qdcount, message.getRRCount(Section::QUESTION()));
EXPECT_EQ(ancount, message.getRRCount(Section::ANSWER()));
@@ -212,4 +217,43 @@
EXPECT_FALSE(parse_message.isDNSSECSupported());
}
-}
+void
+updateConfig(AuthSrv* server, const char* const dbfile) {
+ const ElementPtr config_answer =
+ server->updateConfig(Element::createFromString(dbfile));
+ EXPECT_EQ(Element::map, config_answer->getType());
+ EXPECT_TRUE(config_answer->contains("result"));
+
+ const ElementPtr result = config_answer->get("result");
+ EXPECT_EQ(Element::list, result->getType());
+ EXPECT_EQ(0, result->get(0)->intValue());
+}
+
+// Install a Sqlite3 data source with testing data.
+TEST_F(AuthSrvTest, updateConfig) {
+ updateConfig(&server, CONFIG_TESTDB);
+
+ // query for existent data in the installed data source. The resulting
+ // response should have the AA flag on, and have an RR in each answer
+ // and authority section.
+ createDataFromFile("testdata/examplequery_fromWire");
+ EXPECT_EQ(true, server.processMessage(*ibuffer, parse_message,
+ response_renderer, true, false));
+ headerCheck(parse_message, default_qid, Rcode::NOERROR(), opcode.getCode(),
+ QR_FLAG | AA_FLAG, 1, 1, 1, 0);
+}
+
+TEST_F(AuthSrvTest, datasourceFail) {
+ updateConfig(&server, CONFIG_TESTDB);
+
+ // This query will hit a corrupted entry of the data source (the zoneload
+ // tool and the data source itself naively accept it). This will result
+ // in a SERVFAIL response, and the answer and authority sections should
+ // be empty.
+ createDataFromFile("testdata/badExampleQuery_fromWire");
+ EXPECT_EQ(true, server.processMessage(*ibuffer, parse_message,
+ response_renderer, true, false));
+ headerCheck(parse_message, default_qid, Rcode::SERVFAIL(), opcode.getCode(),
+ QR_FLAG, 1, 0, 0, 0);
+}
+}
More information about the bind10-changes
mailing list