[svn] commit: r1352 - in /trunk/src/bin/auth: ./ tests/ tests/testdata/
BIND 10 source code commits
bind10-changes at lists.isc.org
Fri Mar 12 05:35:20 UTC 2010
Author: jinmei
Date: Fri Mar 12 05:35:19 2010
New Revision: 1352
Log:
added tests for various kinds of responses (which must be silently dropped)
Added:
trunk/src/bin/auth/tests/testdata/iqueryresponse_fromWire
trunk/src/bin/auth/tests/testdata/iqueryresponse_fromWire.spec
trunk/src/bin/auth/tests/testdata/shortresponse_fromWire
trunk/src/bin/auth/tests/testdata/simpleresponse_fromWire
trunk/src/bin/auth/tests/testdata/simpleresponse_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 05:35:19 2010
@@ -14,13 +14,6 @@
// $Id$
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/select.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <stdlib.h>
-
#include <algorithm>
#include <cassert>
#include <iostream>
@@ -140,8 +133,7 @@
}
bool
-AuthSrv::processMessage(InputBuffer& request_buffer,
- Message& message,
+AuthSrv::processMessage(InputBuffer& request_buffer, Message& message,
MessageRenderer& response_renderer,
const bool udp_buffer, const bool verbose_mode)
{
@@ -161,6 +153,7 @@
return (false);
}
+ // Parse the message. On failure, return an appropriate error.
try {
message.fromWire(request_buffer);
} catch (const DNSProtocolError& error) {
@@ -177,9 +170,7 @@
cerr << "[AuthSrv] received a message:\n" << message.toText() << endl;
}
- //
- // Incoming Message Validation
- //
+ // Perform further protocol-level validation.
// In this implementation, we only support normal queries
if (message.getOpcode() != Opcode::QUERY()) {
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 05:35:19 2010
@@ -37,7 +37,7 @@
AuthSrvTest() : request_message(Message::RENDER),
parse_message(Message::PARSE), default_qid(0x1035),
opcode(Opcode(Opcode::QUERY())), qname("www.example.com"),
- qclass(RRClass::IN()), qtype(RRType::A()),
+ qclass(RRClass::IN()), qtype(RRType::A()), ibuffer(NULL),
request_obuffer(0), request_renderer(request_obuffer),
response_obuffer(0), response_renderer(response_obuffer)
{}
@@ -49,11 +49,14 @@
Name qname;
RRClass qclass;
RRType qtype;
+ InputBuffer* ibuffer;
OutputBuffer request_obuffer;
MessageRenderer request_renderer;
OutputBuffer response_obuffer;
MessageRenderer response_renderer;
vector<uint8_t> data;
+
+ void createDataFromFile(const char* const datafile);
};
// These are flags to indicate whether the corresponding flag bit of the
@@ -68,9 +71,12 @@
const unsigned int CD_FLAG = 0x40;
void
-createDataFromFile(const char* const datafile, vector<uint8_t>& data) {
+AuthSrvTest::createDataFromFile(const char* const datafile) {
+ delete ibuffer;
+ data.clear();
+
UnitTestUtil::readWireData(datafile, data);
- InputBuffer buffer(&data[0], data.size());
+ ibuffer = new InputBuffer(&data[0], data.size());
}
void
@@ -99,15 +105,14 @@
// Unsupported requests. Should result in NOTIMP.
TEST_F(AuthSrvTest, unsupportedRequest) {
- createDataFromFile("testdata/simplequery_fromWire", data);
for (unsigned int i = 1; i < 16; ++i) {
// set Opcode to 'i', which iterators over all possible codes except
// the standard query (0)
+ createDataFromFile("testdata/simplequery_fromWire");
data[2] = ((i << 3) & 0xff);
- InputBuffer buffer(&data[0], data.size());
parse_message.clear(Message::PARSE);
- EXPECT_EQ(true, server.processMessage(buffer, parse_message,
+ EXPECT_EQ(true, server.processMessage(*ibuffer, parse_message,
response_renderer, true, false));
headerCheck(parse_message, default_qid, Rcode::NOTIMP(), i, QR_FLAG,
0, 0, 0, 0);
@@ -116,9 +121,8 @@
// Multiple questions. Should result in FORMERR.
TEST_F(AuthSrvTest, multiQuestion) {
- createDataFromFile("testdata/multiquestion_fromWire", data);
- InputBuffer buffer(&data[0], data.size());
- EXPECT_EQ(true, server.processMessage(buffer, parse_message,
+ createDataFromFile("testdata/multiquestion_fromWire");
+ EXPECT_EQ(true, server.processMessage(*ibuffer, parse_message,
response_renderer, true, false));
headerCheck(parse_message, default_qid, Rcode::FORMERR(), opcode.getCode(),
QR_FLAG, 2, 0, 0, 0);
@@ -138,10 +142,30 @@
// Incoming data doesn't even contain the complete header. Must be silently
// dropped.
TEST_F(AuthSrvTest, shortMessage) {
- createDataFromFile("testdata/shortmessage_fromWire", data);
- InputBuffer buffer(&data[0], data.size());
- EXPECT_EQ(false, server.processMessage(buffer, parse_message,
+ createDataFromFile("testdata/shortmessage_fromWire");
+ EXPECT_EQ(false, server.processMessage(*ibuffer, parse_message,
response_renderer, true, false));
}
+// Response messages. Must be silently dropped, whether it's a valid response
+// or malformed or could otherwise cause a protocol error.
+TEST_F(AuthSrvTest, response) {
+ // A valid (although unusual) response
+ createDataFromFile("testdata/simpleresponse_fromWire");
+ EXPECT_EQ(false, server.processMessage(*ibuffer, parse_message,
+ response_renderer, true, false));
+
+ // A response with a broken question section. must be dropped rather than
+ // returning FORMERR.
+ createDataFromFile("testdata/shortresponse_fromWire");
+ EXPECT_EQ(false, server.processMessage(*ibuffer, parse_message,
+ response_renderer, true, false));
+
+ // A response to iquery. must be dropped rather than returning NOTIMP.
+ createDataFromFile("testdata/iqueryresponse_fromWire");
+ EXPECT_EQ(false, server.processMessage(*ibuffer, parse_message,
+ response_renderer, true, false));
+
}
+
+}
More information about the bind10-changes
mailing list