// This is a configuration that uses the in-memory data source containing
// a signed example zone.
-const char* const CONFIG_INMEMORY_EXAMPLE = TEST_DATA_DIR "/rfc5155-example.zone.signed";
+const char* const CONFIG_INMEMORY_EXAMPLE =
+ TEST_DATA_DIR "/rfc5155-example.zone.signed";
class AuthSrvTest : public SrvTestBase {
protected:
// Helper for checking Rcode statistic counters;
// Checks for one specific Rcode statistics counter value
- void checkRcodeCounter(const std::string& rcode_name, const int rcode_value,
+ void checkRcodeCounter(const std::string& rcode_name,
+ const int rcode_value,
const int expected_value) const
{
EXPECT_EQ(expected_value, rcode_value) <<
// We did not configure any client lists. Therefore it should be REFUSED
TEST_F(AuthSrvTest, noClientList) {
+ // The counters should be initialized to 0.
+ ConstElementPtr stats_init = server.getStatistics()->
+ get("zones")->get("_SERVER_");
+ expectCounterItem(stats_init->get("opcode"), "query", 0);
+ expectCounterItem(stats_init, "responses", 0);
+ expectCounterItem(stats_init->get("rcode"), "refused", 0);
+
UnitTestUtil::createRequestMessage(request_message, Opcode::QUERY(),
default_qid, Name("version.bind"),
RRClass::CH(), RRType::TXT());
EXPECT_TRUE(dnsserv.hasAnswer());
headerCheck(*parse_message, default_qid, Rcode::REFUSED(),
opcode.getCode(), QR_FLAG, 1, 0, 0, 0);
+
+ ConstElementPtr stats_after = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_after->get("opcode"), "query", 1);
+ expectCounterItem(stats_after, "responses", 1);
+ expectCounterItem(stats_after->get("rcode"), "refused", 1);
}
// Unsupported requests. Should result in NOTIMP.
// Incoming data doesn't even contain the complete header. Must be silently
// dropped.
TEST_F(AuthSrvTest, shortMessage) {
+ // The counters should be initialized to 0.
+ ConstElementPtr stats_init = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_init, "responses", 0);
+
shortMessage();
+
checkAllRcodeCountersZero();
+ ConstElementPtr stats_after = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_after, "responses", 0);
}
// 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) {
+ // The counters should be initialized to 0.
+ ConstElementPtr stats_init = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_init, "responses", 0);
+
response();
+
checkAllRcodeCountersZero();
+ ConstElementPtr stats_after = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_after, "responses", 0);
}
// Query with a broken question
// Query with unsupported version of EDNS.
TEST_F(AuthSrvTest, ednsBadVers) {
+ // The counters should be initialized to 0.
+ ConstElementPtr stats_init = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_init, "responses", 0);
+ expectCounterItem(stats_init->get("request"), "badednsver", 0);
+
ednsBadVers();
+
checkAllRcodeCountersZeroExcept(Rcode::BADVERS(), 1);
+ ConstElementPtr stats_after = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_after, "responses", 1);
+ expectCounterItem(stats_after->get("request"), "badednsver", 1);
}
TEST_F(AuthSrvTest, AXFROverUDP) {
}
TEST_F(AuthSrvTest, AXFRSuccess) {
+ // The counters should be initialized to 0.
+ ConstElementPtr stats_init = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_init->get("opcode"), "query", 0);
+ expectCounterItem(stats_init, "responses", 0);
+ expectCounterItem(stats_init->get("response"), "truncated", 0);
+
EXPECT_FALSE(xfrout.isConnected());
UnitTestUtil::createRequestMessage(request_message, opcode, default_qid,
Name("example.com"), RRClass::IN(),
&dnsserv);
EXPECT_FALSE(dnsserv.hasAnswer());
EXPECT_TRUE(xfrout.isConnected());
+
checkAllRcodeCountersZero();
+ ConstElementPtr stats_after = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_after->get("opcode"), "query", 1);
+ expectCounterItem(stats_after, "responses", 0);
+ expectCounterItem(stats_after->get("response"), "truncated", 0);
}
// Give the server a signed request, but don't give it the key. It will
// not be able to verify it, returning BADKEY
TEST_F(AuthSrvTest, TSIGSignedBadKey) {
+ // The counters should be initialized to 0.
+ ConstElementPtr stats_init = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_init->get("request"), "tsig", 0);
+ expectCounterItem(stats_init->get("request"), "badsig", 0);
+ expectCounterItem(stats_init, "responses", 0);
+ expectCounterItem(stats_init->get("response"), "tsig", 0);
+
TSIGKey key("key:c2VjcmV0Cg==:hmac-sha1");
TSIGContext context(key);
UnitTestUtil::createRequestMessage(request_message, opcode, default_qid,
EXPECT_EQ(0, tsig->getRdata().getMACSize()) <<
"It should be unsigned with this error";
+ // check Rcode counters and TSIG counters
checkAllRcodeCountersZeroExcept(Rcode::NOTAUTH(), 1);
+ ConstElementPtr stats_after = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_after->get("request"), "tsig", 1);
+ expectCounterItem(stats_after->get("request"), "badsig", 1);
+ expectCounterItem(stats_after, "responses", 1);
+ expectCounterItem(stats_after->get("response"), "tsig", 1);
}
// Give the server a signed request, but signed by a different key
// (with the same name). It should return BADSIG
TEST_F(AuthSrvTest, TSIGBadSig) {
+ // The counters should be initialized to 0.
+ ConstElementPtr stats_init = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_init->get("request"), "tsig", 0);
+ expectCounterItem(stats_init->get("request"), "badsig", 0);
+ expectCounterItem(stats_init, "responses", 0);
+ expectCounterItem(stats_init->get("response"), "tsig", 0);
+
TSIGKey key("key:c2VjcmV0Cg==:hmac-sha1");
TSIGContext context(key);
UnitTestUtil::createRequestMessage(request_message, opcode, default_qid,
"It should be unsigned with this error";
checkAllRcodeCountersZeroExcept(Rcode::NOTAUTH(), 1);
+ ConstElementPtr stats_after = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_after->get("request"), "tsig", 1);
+ expectCounterItem(stats_after->get("request"), "badsig", 1);
+ expectCounterItem(stats_after, "responses", 1);
+ expectCounterItem(stats_after->get("response"), "tsig", 1);
}
// Give the server a signed unsupported request with a bad signature.
// This checks the server first verifies the signature before anything
// else.
TEST_F(AuthSrvTest, TSIGCheckFirst) {
+ // The counters should be initialized to 0.
+ ConstElementPtr stats_init = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_init->get("request"), "tsig", 0);
+ expectCounterItem(stats_init->get("request"), "badsig", 0);
+ expectCounterItem(stats_init, "responses", 0);
+ expectCounterItem(stats_init->get("response"), "tsig", 0);
+ expectCounterItem(stats_init->get("opcode"), "other", 0);
+
TSIGKey key("key:c2VjcmV0Cg==:hmac-sha1");
TSIGContext context(key);
// Pass a wrong opcode there. The server shouldn't know what to do
EXPECT_EQ(TSIGError::BAD_SIG_CODE, tsig->getRdata().getError());
EXPECT_EQ(0, tsig->getRdata().getMACSize()) <<
"It should be unsigned with this error";
+
+ ConstElementPtr stats_after = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_after->get("request"), "tsig", 1);
+ expectCounterItem(stats_after->get("request"), "badsig", 1);
+ expectCounterItem(stats_after, "responses", 1);
+ expectCounterItem(stats_after->get("response"), "tsig", 1);
// TSIG should have failed, and so the per opcode counter shouldn't be
// incremented.
- ConstElementPtr stats = server.getStatistics();
- expectCounterItem(stats->get("zones")->get("_SERVER_")->get("opcode"),
- "other", 0);
-
+ expectCounterItem(stats_after->get("opcode"), "other", 0);
checkAllRcodeCountersZeroExcept(Rcode::NOTAUTH(), 1);
}
}
TEST_F(AuthSrvTest, notify) {
+ // The counters should be initialized to 0.
+ ConstElementPtr stats_init = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_init->get("opcode"), "notify", 0);
+ expectCounterItem(stats_init, "responses", 0);
+
UnitTestUtil::createRequestMessage(request_message, Opcode::NOTIFY(),
default_qid, Name("example.com"),
RRClass::IN(), RRType::SOA());
// external module. Check them.
EXPECT_EQ("Zonemgr", notify_session.getMessageDest());
EXPECT_EQ("notify",
- notify_session.getSentMessage()->get("command")->get(0)->stringValue());
+ notify_session.getSentMessage()->get("command")->get(0)->
+ stringValue());
ConstElementPtr notify_args =
notify_session.getSentMessage()->get("command")->get(1);
EXPECT_EQ("example.com.", notify_args->get("zone_name")->stringValue());
EXPECT_EQ(RRType::SOA(), question->getType());
checkAllRcodeCountersZeroExcept(Rcode::NOERROR(), 1);
+ ConstElementPtr stats_after = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_after->get("opcode"), "notify", 1);
+ expectCounterItem(stats_after, "responses", 1);
}
TEST_F(AuthSrvTest, notifyForCHClass) {
+ // The counters should be initialized to 0.
+ ConstElementPtr stats_init = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_init->get("opcode"), "notify", 0);
+ expectCounterItem(stats_init, "responses", 0);
+
// Same as the previous test, but for the CH RRClass.
UnitTestUtil::createRequestMessage(request_message, Opcode::NOTIFY(),
default_qid, Name("example.com"),
ConstElementPtr notify_args =
notify_session.getSentMessage()->get("command")->get(1);
EXPECT_EQ("CH", notify_args->get("zone_class")->stringValue());
+
+ checkAllRcodeCountersZeroExcept(Rcode::NOERROR(), 1);
+ ConstElementPtr stats_after = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_after->get("opcode"), "notify", 1);
+ expectCounterItem(stats_after, "responses", 1);
}
TEST_F(AuthSrvTest, notifyEmptyQuestion) {
+ // The counters should be initialized to 0.
+ ConstElementPtr stats_init = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_init->get("opcode"), "notify", 0);
+ expectCounterItem(stats_init, "responses", 0);
+ expectCounterItem(stats_init->get("rcode"), "formerr", 0);
+
request_message.clear(Message::RENDER);
request_message.setOpcode(Opcode::NOTIFY());
request_message.setRcode(Rcode::NOERROR());
EXPECT_TRUE(dnsserv.hasAnswer());
headerCheck(*parse_message, default_qid, Rcode::FORMERR(),
Opcode::NOTIFY().getCode(), QR_FLAG, 0, 0, 0, 0);
+
+ ConstElementPtr stats_after = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_after->get("opcode"), "notify", 1);
+ expectCounterItem(stats_after, "responses", 1);
+ expectCounterItem(stats_after->get("rcode"), "formerr", 1);
}
TEST_F(AuthSrvTest, notifyMultiQuestions) {
#else
TEST_F(AuthSrvTest, TSIGSigned) {
#endif
+ // The counters should be initialized to 0.
+ ConstElementPtr stats_init = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_init->get("request"), "tsig", 0);
+ expectCounterItem(stats_init->get("request"), "sig0", 0);
+ expectCounterItem(stats_init->get("request"), "badsig", 0);
+ expectCounterItem(stats_init, "responses", 0);
+ expectCounterItem(stats_init, "qryauthans", 0);
+
// Prepare key, the client message, etc
updateBuiltin(&server);
const TSIGKey key("key:c2VjcmV0Cg==:hmac-sha1");
"The server signed the response, but it doesn't seem to be valid";
checkAllRcodeCountersZeroExcept(Rcode::NOERROR(), 1);
+ ConstElementPtr stats_after = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats_after->get("request"), "tsig", 1);
+ expectCounterItem(stats_after->get("request"), "sig0", 0);
+ expectCounterItem(stats_after->get("request"), "badsig", 0);
+ expectCounterItem(stats_after, "responses", 1);
+ expectCounterItem(stats_after, "qryauthans", 1);
}
// Same test emulating the UDPServer class behavior (defined in libasiolink).
server.processMessage(*io_message, *parse_message, *response_obuffer,
&dnsserv);
EXPECT_TRUE(dnsserv.hasAnswer());
- headerCheck(*parse_message, default_qid, Rcode::NOERROR(), opcode.getCode(),
- QR_FLAG | AA_FLAG, 1, 1, 1, 0);
+ headerCheck(*parse_message, default_qid, Rcode::NOERROR(),
+ opcode.getCode(), QR_FLAG | AA_FLAG, 1, 1, 1, 0);
}
#ifdef USE_STATIC_LINK
EXPECT_TRUE(dnsserv.hasAnswer());
headerCheck(*parse_message, default_qid, Rcode::SERVFAIL(),
opcode.getCode(), QR_FLAG, 1, 0, 0, 0);
+
+ checkAllRcodeCountersZeroExcept(Rcode::SERVFAIL(), 1);
+ ConstElementPtr stats = server.getStatistics()->get("zones")->
+ get("_SERVER_");
+ expectCounterItem(stats, "responses", 1);
}
#ifdef USE_STATIC_LINK
// The counters should be initialized to 0.
ConstElementPtr stats_init = server.getStatistics()->
get("zones")->get("_SERVER_");
+ expectCounterItem(stats_init->get("request"), "v4", 0);
+ expectCounterItem(stats_init->get("request"), "v6", 0);
expectCounterItem(stats_init->get("request"), "udp", 0);
expectCounterItem(stats_init->get("request"), "tcp", 0);
+ expectCounterItem(stats_init->get("request"), "edns0", 0);
+ expectCounterItem(stats_init->get("request"), "badednsver", 0);
+ expectCounterItem(stats_init->get("request"), "tsig", 0);
+ expectCounterItem(stats_init->get("request"), "sig0", 0);
+ expectCounterItem(stats_init->get("request"), "badsig", 0);
+ expectCounterItem(stats_init->get("request"), "dnssec_ok", 0);
expectCounterItem(stats_init->get("opcode"), "query", 0);
+ expectCounterItem(stats_init, "responses", 0);
+ expectCounterItem(stats_init->get("response"), "truncated", 0);
+ expectCounterItem(stats_init->get("response"), "edns0", 0);
+ expectCounterItem(stats_init->get("response"), "tsig", 0);
+ expectCounterItem(stats_init->get("response"), "sig0", 0);
expectCounterItem(stats_init->get("rcode"), "refused", 0);
+ expectCounterItem(stats_init, "qrysuccess", 0);
+ expectCounterItem(stats_init, "qryauthans", 0);
+ expectCounterItem(stats_init, "qrynoauthans", 0);
+ expectCounterItem(stats_init, "qryreferral", 0);
+ expectCounterItem(stats_init, "qrynxrrset", 0);
+ expectCounterItem(stats_init, "authqryrej", 0);
+ //
// Create UDP message and process.
UnitTestUtil::createRequestMessage(request_message, Opcode::QUERY(),
default_qid, Name("example.com"),
createRequestPacket(request_message, IPPROTO_UDP);
server.processMessage(*io_message, *parse_message, *response_obuffer,
&dnsserv);
- // After processing the UDP query, these counters should be incremented:
- // request.udp, opcode.query, rcode.refused
- // and these counters should not be incremented:
- // request.tcp
+
ConstElementPtr stats_after = server.getStatistics()->
get("zones")->get("_SERVER_");
+ expectCounterItem(stats_after->get("request"), "v4", 1);
+ expectCounterItem(stats_after->get("request"), "v6", 0);
expectCounterItem(stats_after->get("request"), "udp", 1);
expectCounterItem(stats_after->get("request"), "tcp", 0);
+ expectCounterItem(stats_after->get("request"), "edns0", 0);
+ expectCounterItem(stats_after->get("request"), "badednsver", 0);
+ expectCounterItem(stats_after->get("request"), "tsig", 0);
+ expectCounterItem(stats_after->get("request"), "sig0", 0);
+ expectCounterItem(stats_after->get("request"), "badsig", 0);
+ expectCounterItem(stats_after->get("request"), "dnssec_ok", 0);
expectCounterItem(stats_after->get("opcode"), "query", 1);
+ expectCounterItem(stats_after, "responses", 1);
+ expectCounterItem(stats_after->get("response"), "truncated", 0);
+ expectCounterItem(stats_after->get("response"), "edns0", 0);
+ expectCounterItem(stats_after->get("response"), "tsig", 0);
+ expectCounterItem(stats_after->get("response"), "sig0", 0);
expectCounterItem(stats_after->get("rcode"), "refused", 1);
+ expectCounterItem(stats_after, "qrysuccess", 0);
+ expectCounterItem(stats_after, "qryauthans", 0);
+ expectCounterItem(stats_after, "qrynoauthans", 1);
+ expectCounterItem(stats_after, "qryreferral", 0);
+ expectCounterItem(stats_after, "qrynxrrset", 0);
+ expectCounterItem(stats_after, "authqryrej", 1);
}
-// Submit TCP normal query and check query counter
-TEST_F(AuthSrvTest, queryCounterTCPNormal) {
+// Submit UDP normal query with DNSSEC and check query counter
+TEST_F(AuthSrvTest, queryCounterUDPNormalWithDNSSEC) {
// The counters should be initialized to 0.
ConstElementPtr stats_init = server.getStatistics()->
get("zones")->get("_SERVER_");
+ expectCounterItem(stats_init->get("request"), "v4", 0);
+ expectCounterItem(stats_init->get("request"), "v6", 0);
expectCounterItem(stats_init->get("request"), "udp", 0);
expectCounterItem(stats_init->get("request"), "tcp", 0);
+ expectCounterItem(stats_init->get("request"), "edns0", 0);
+ expectCounterItem(stats_init->get("request"), "badednsver", 0);
+ expectCounterItem(stats_init->get("request"), "tsig", 0);
+ expectCounterItem(stats_init->get("request"), "sig0", 0);
+ expectCounterItem(stats_init->get("request"), "badsig", 0);
+ expectCounterItem(stats_init->get("request"), "dnssec_ok", 0);
expectCounterItem(stats_init->get("opcode"), "query", 0);
+ expectCounterItem(stats_init, "responses", 0);
+ expectCounterItem(stats_init->get("response"), "truncated", 0);
+ expectCounterItem(stats_init->get("response"), "edns0", 0);
+ expectCounterItem(stats_init->get("response"), "tsig", 0);
+ expectCounterItem(stats_init->get("response"), "sig0", 0);
expectCounterItem(stats_init->get("rcode"), "refused", 0);
+ expectCounterItem(stats_init, "qrysuccess", 0);
+ expectCounterItem(stats_init, "qryauthans", 0);
+ expectCounterItem(stats_init, "qrynoauthans", 0);
+ expectCounterItem(stats_init, "qryreferral", 0);
+ expectCounterItem(stats_init, "qrynxrrset", 0);
+ expectCounterItem(stats_init, "authqryrej", 0);
+ //
+ // Create UDP message and process.
+ UnitTestUtil::createDNSSECRequestMessage(request_message, Opcode::QUERY(),
+ default_qid, Name("example.com"),
+ RRClass::IN(), RRType::NS());
+ createRequestPacket(request_message, IPPROTO_UDP);
+ server.processMessage(*io_message, *parse_message, *response_obuffer,
+ &dnsserv);
+
+ ConstElementPtr stats_after = server.getStatistics()->
+ get("zones")->get("_SERVER_");
+ expectCounterItem(stats_after->get("request"), "v4", 1);
+ expectCounterItem(stats_after->get("request"), "v6", 0);
+ expectCounterItem(stats_after->get("request"), "udp", 1);
+ expectCounterItem(stats_after->get("request"), "tcp", 0);
+ expectCounterItem(stats_after->get("request"), "edns0", 1);
+ expectCounterItem(stats_after->get("request"), "badednsver", 0);
+ expectCounterItem(stats_after->get("request"), "tsig", 0);
+ expectCounterItem(stats_after->get("request"), "sig0", 0);
+ expectCounterItem(stats_after->get("request"), "badsig", 0);
+ expectCounterItem(stats_after->get("request"), "dnssec_ok", 1);
+ expectCounterItem(stats_after->get("opcode"), "query", 1);
+ expectCounterItem(stats_after, "responses", 1);
+ expectCounterItem(stats_after->get("response"), "truncated", 0);
+ // XXX: with the current implementation, EDNS0 is omitted in
+ // makeErrorMessage.
+ expectCounterItem(stats_after->get("response"), "edns0", 0);
+ expectCounterItem(stats_after->get("response"), "tsig", 0);
+ expectCounterItem(stats_after->get("response"), "sig0", 0);
+ expectCounterItem(stats_after->get("rcode"), "refused", 1);
+ expectCounterItem(stats_after, "qrysuccess", 0);
+ expectCounterItem(stats_after, "qryauthans", 0);
+ expectCounterItem(stats_after, "qrynoauthans", 1);
+ expectCounterItem(stats_after, "qryreferral", 0);
+ expectCounterItem(stats_after, "qrynxrrset", 0);
+ expectCounterItem(stats_after, "authqryrej", 1);
+}
+
+// Submit TCP normal query and check query counter
+TEST_F(AuthSrvTest, queryCounterTCPNormal) {
+ // The counters should be initialized to 0.
+ ConstElementPtr stats_init = server.getStatistics()->
+ get("zones")->get("_SERVER_");
+ expectCounterItem(stats_init->get("request"), "udp", 0);
+ expectCounterItem(stats_init->get("request"), "tcp", 0);
// Create TCP message and process.
UnitTestUtil::createRequestMessage(request_message, Opcode::QUERY(),
default_qid, Name("example.com"),
get("zones")->get("_SERVER_");
expectCounterItem(stats_after->get("request"), "udp", 0);
expectCounterItem(stats_after->get("request"), "tcp", 1);
- expectCounterItem(stats_after->get("opcode"), "query", 1);
- expectCounterItem(stats_after->get("rcode"), "refused", 1);
}
// Submit TCP AXFR query and check query counter
// The counters should be initialized to 0.
ConstElementPtr stats_init = server.getStatistics()->
get("zones")->get("_SERVER_");
- expectCounterItem(stats_init->get("request"), "udp", 0);
- expectCounterItem(stats_init->get("request"), "tcp", 0);
expectCounterItem(stats_init->get("opcode"), "query", 0);
+ expectCounterItem(stats_init, "responses", 0);
+ expectCounterItem(stats_init->get("response"), "truncated", 0);
UnitTestUtil::createRequestMessage(request_message, opcode, default_qid,
Name("example.com"), RRClass::IN(), RRType::AXFR());
createRequestPacket(request_message, IPPROTO_TCP);
server.processMessage(*io_message, *parse_message, *response_obuffer,
&dnsserv);
EXPECT_FALSE(dnsserv.hasAnswer());
- // After processing the TCP AXFR query, these counters should be
- // incremented:
- // request.tcp, opcode.query
- // and these counters should not be incremented:
- // request.udp, response
+
ConstElementPtr stats_after = server.getStatistics()->
get("zones")->get("_SERVER_");
- expectCounterItem(stats_after->get("request"), "udp", 0);
- expectCounterItem(stats_after->get("request"), "tcp", 1);
expectCounterItem(stats_after->get("opcode"), "query", 1);
+ expectCounterItem(stats_after, "responses", 0);
+ expectCounterItem(stats_after->get("response"), "truncated", 0);
}
// Submit TCP IXFR query and check query counter
// The counters should be initialized to 0.
ConstElementPtr stats_init = server.getStatistics()->
get("zones")->get("_SERVER_");
- expectCounterItem(stats_init->get("request"), "udp", 0);
- expectCounterItem(stats_init->get("request"), "tcp", 0);
expectCounterItem(stats_init->get("opcode"), "query", 0);
+ expectCounterItem(stats_init, "responses", 0);
+ expectCounterItem(stats_init->get("response"), "truncated", 0);
UnitTestUtil::createRequestMessage(request_message, opcode, default_qid,
Name("example.com"), RRClass::IN(), RRType::IXFR());
createRequestPacket(request_message, IPPROTO_TCP);
server.processMessage(*io_message, *parse_message, *response_obuffer,
&dnsserv);
EXPECT_FALSE(dnsserv.hasAnswer());
- // After processing the TCP IXFR query, these counters should be
- // incremented:
- // request.tcp, opcode.query
- // and these counters should not be incremented:
- // request.udp, response
+
ConstElementPtr stats_after = server.getStatistics()->
get("zones")->get("_SERVER_");
- expectCounterItem(stats_after->get("request"), "udp", 0);
- expectCounterItem(stats_after->get("request"), "tcp", 1);
expectCounterItem(stats_after->get("opcode"), "query", 1);
+ expectCounterItem(stats_after, "responses", 0);
+ expectCounterItem(stats_after->get("response"), "truncated", 0);
}
TEST_F(AuthSrvTest, queryCounterOpcodes) {
int other_expected = 0;
- for (int i = 0; i < 16; ++i) {
+ for (int i = 0; i < isc::auth::statistics::num_opcode_to_msgcounter; ++i) {
std::string item_name;
int expected;
if (isc::auth::statistics::opcode_to_msgcounter[i] ==