[svn] commit: r1340 - in /trunk/src/bin/auth/tests: auth_srv_unittest.cc testdata/iquery_fromWire testdata/iquery_fromWire.spec testdata/simplequery_fromWire testdata/simplequery_fromWire.spec
BIND 10 source code commits
bind10-changes at lists.isc.org
Thu Mar 11 23:37:23 UTC 2010
Author: jinmei
Date: Thu Mar 11 23:37:23 2010
New Revision: 1340
Log:
test for requests with unknown opcodes
Added:
trunk/src/bin/auth/tests/testdata/simplequery_fromWire
- copied, changed from r1329, trunk/src/bin/auth/tests/testdata/iquery_fromWire
trunk/src/bin/auth/tests/testdata/simplequery_fromWire.spec
- copied, changed from r1329, trunk/src/bin/auth/tests/testdata/iquery_fromWire.spec
Removed:
trunk/src/bin/auth/tests/testdata/iquery_fromWire
trunk/src/bin/auth/tests/testdata/iquery_fromWire.spec
Modified:
trunk/src/bin/auth/tests/auth_srv_unittest.cc
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 Thu Mar 11 23:37:23 2010
@@ -35,7 +35,7 @@
class AuthSrvTest : public ::testing::Test {
protected:
AuthSrvTest() : request_message(Message::RENDER),
- parse_message(Message::PARSE),
+ parse_message(Message::PARSE), default_qid(0x1035),
qname("www.example.com"),
qclass(RRClass::IN()), qtype(RRType::A()),
request_obuffer(0), request_renderer(request_obuffer),
@@ -44,6 +44,7 @@
AuthSrv server;
Message request_message;
Message parse_message;
+ qid_t default_qid;
Name qname;
RRClass qclass;
RRType qtype;
@@ -54,16 +55,61 @@
vector<uint8_t> data;
};
-static void
+// These are flags to indicate whether the corresponding flag bit of the
+// DNS header is to be set in the test cases. (Note that the flag values
+// is irrelevant to their wire-format values)
+const unsigned int QR_FLAG = 0x1;
+const unsigned int AA_FLAG = 0x2;
+const unsigned int TC_FLAG = 0x4;
+const unsigned int RD_FLAG = 0x8;
+const unsigned int RA_FLAG = 0x10;
+const unsigned int AD_FLAG = 0x20;
+const unsigned int CD_FLAG = 0x40;
+
+void
createDataFromFile(const char* const datafile, vector<uint8_t>& data) {
UnitTestUtil::readWireData(datafile, data);
InputBuffer buffer(&data[0], data.size());
}
-TEST_F(AuthSrvTest, ManyQuery) {
- createDataFromFile("testdata/iquery_fromWire", data);
- InputBuffer buffer(&data[0], data.size());
- EXPECT_EQ(0, server.processMessage(buffer, parse_message, response_renderer,
- true, false));
+void
+headerCheck(const Message& message, const qid_t qid, const Rcode& rcode,
+ const uint16_t opcodeval, const unsigned int flags,
+ const unsigned int qdcount,
+ const unsigned int ancount, const unsigned int nscount,
+ const unsigned int arcount)
+{
+ 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(qdcount, message.getRRCount(Section::QUESTION()));
+ EXPECT_EQ(ancount, message.getRRCount(Section::ANSWER()));
+ EXPECT_EQ(nscount, message.getRRCount(Section::AUTHORITY()));
+ EXPECT_EQ(arcount, message.getRRCount(Section::ADDITIONAL()));
+}
+
+// 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)
+ data[2] = ((i << 3) & 0xff);
+
+ InputBuffer buffer(&data[0], data.size());
+ parse_message.clear(Message::PARSE);
+ EXPECT_EQ(0, server.processMessage(buffer, parse_message,
+ response_renderer, true, false));
+ headerCheck(parse_message, default_qid, Rcode::NOTIMP(), i, QR_FLAG,
+ 0, 0, 0, 0);
+ }
}
}
More information about the bind10-changes
mailing list