[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