renderer.getLength());
}
+void
+installDataSrcClientLists(AuthSrv& server, ClientListMapPtr lists) {
+ // For now, we use explicit swap than reconfigure() because the latter
+ // involves a separate thread and cannot guarantee the new config is
+ // available for the subsequent test.
+ server.getDataSrcClientsMgr().setDataSrcClientLists(lists);
+}
+
+void
+updateDatabase(AuthSrv& server, const char* params) {
+ const ConstElementPtr config(Element::fromJSON("{"
+ "\"IN\": [{"
+ " \"type\": \"sqlite3\","
+ " \"params\": " + string(params) +
+ "}]}"));
+ installDataSrcClientLists(server, configureDataSource(config));
+}
+
+// Note: if with_static is set to true, the corresponding test should be
+// disabled in case of USE_STATIC_LINK.
+void
+updateInMemory(AuthSrv& server, const char* origin, const char* filename,
+ bool with_static = true)
+{
+ string spec_txt = "{"
+ "\"IN\": [{"
+ " \"type\": \"MasterFiles\","
+ " \"params\": {"
+ " \"" + string(origin) + "\": \"" + string(filename) + "\""
+ " },"
+ " \"cache-enable\": true"
+ "}]";
+ if (with_static) {
+ spec_txt += ", \"CH\": [{"
+ " \"type\": \"static\","
+ " \"params\": \"" + string(STATIC_DSRC_FILE) + "\""
+ "}]";
+ }
+ spec_txt += "}";
+
+ const ConstElementPtr config(Element::fromJSON(spec_txt));
+ installDataSrcClientLists(server, configureDataSource(config));
+}
+
+// Note: tests using this function should be disabled in case of
+// USE_STATIC_LINK.
+void
+updateBuiltin(AuthSrv& server) {
+ const ConstElementPtr config(Element::fromJSON("{"
+ "\"CH\": [{"
+ " \"type\": \"static\","
+ " \"params\": \"" + string(STATIC_DSRC_FILE) + "\""
+ "}]}"));
+ installDataSrcClientLists(server, configureDataSource(config));
+}
+
// We did not configure any client lists. Therefore it should be REFUSED
TEST_F(AuthSrvTest, noClientList) {
UnitTestUtil::createRequestMessage(request_message, Opcode::QUERY(),
}
TEST_F(AuthSrvTest, notify) {
+ updateInMemory(server, "example.", CONFIG_INMEMORY_EXAMPLE, false);
+
UnitTestUtil::createRequestMessage(request_message, Opcode::NOTIFY(),
- default_qid, Name("example.com"),
+ default_qid, Name("example"),
RRClass::IN(), RRType::SOA());
request_message.setHeaderFlag(Message::HEADERFLAG_AA);
createRequestPacket(request_message, IPPROTO_UDP);
stringValue());
ConstElementPtr notify_args =
notify_session.getSentMessage()->get("command")->get(1);
- EXPECT_EQ("example.com.", notify_args->get("zone_name")->stringValue());
+ EXPECT_EQ("example.", notify_args->get("zone_name")->stringValue());
EXPECT_EQ(DEFAULT_REMOTE_ADDRESS,
notify_args->get("master")->stringValue());
EXPECT_EQ("IN", notify_args->get("zone_class")->stringValue());
// The question must be identical to that of the received notify
ConstQuestionPtr question = *parse_message->beginQuestion();
- EXPECT_EQ(Name("example.com"), question->getName());
+ EXPECT_EQ(Name("example"), question->getName());
EXPECT_EQ(RRClass::IN(), question->getClass());
EXPECT_EQ(RRType::SOA(), question->getType());
checkStatisticsCounters(stats_after, expect);
}
+#ifdef USE_STATIC_LINK
+TEST_F(AuthSrvTest, DISABLED_notifyForCHClass) {
+#else
TEST_F(AuthSrvTest, notifyForCHClass) {
- // Same as the previous test, but for the CH RRClass.
+#endif
+ // Same as the previous test, but for the CH RRClass (so we install the
+ // builtin (static) data source.
+ updateBuiltin(server);
+
UnitTestUtil::createRequestMessage(request_message, Opcode::NOTIFY(),
- default_qid, Name("example.com"),
+ default_qid, Name("bind"),
RRClass::CH(), RRType::SOA());
request_message.setHeaderFlag(Message::HEADERFLAG_AA);
createRequestPacket(request_message, IPPROTO_UDP);
}
TEST_F(AuthSrvTest, notifyWithoutAA) {
+ updateInMemory(server, "example.", CONFIG_INMEMORY_EXAMPLE, false);
+
// implicitly leave the AA bit off. our implementation will accept it.
UnitTestUtil::createRequestMessage(request_message, Opcode::NOTIFY(),
- default_qid, Name("example.com"),
+ default_qid, Name("example"),
RRClass::IN(), RRType::SOA());
createRequestPacket(request_message, IPPROTO_UDP);
server.processMessage(*io_message, *parse_message, *response_obuffer,
}
TEST_F(AuthSrvTest, notifyWithErrorRcode) {
+ updateInMemory(server, "example.", CONFIG_INMEMORY_EXAMPLE, false);
+
UnitTestUtil::createRequestMessage(request_message, Opcode::NOTIFY(),
- default_qid, Name("example.com"),
+ default_qid, Name("example"),
RRClass::IN(), RRType::SOA());
request_message.setHeaderFlag(Message::HEADERFLAG_AA);
request_message.setRcode(Rcode::SERVFAIL());
}
TEST_F(AuthSrvTest, notifyWithoutSession) {
+ updateInMemory(server, "example.", CONFIG_INMEMORY_EXAMPLE, false);
+
server.setXfrinSession(NULL);
UnitTestUtil::createRequestMessage(request_message, Opcode::NOTIFY(),
- default_qid, Name("example.com"),
+ default_qid, Name("example"),
RRClass::IN(), RRType::SOA());
request_message.setHeaderFlag(Message::HEADERFLAG_AA);
createRequestPacket(request_message, IPPROTO_UDP);
}
TEST_F(AuthSrvTest, notifySendFail) {
+ updateInMemory(server, "example.", CONFIG_INMEMORY_EXAMPLE, false);
+
notify_session.disableSend();
UnitTestUtil::createRequestMessage(request_message, Opcode::NOTIFY(),
- default_qid, Name("example.com"),
+ default_qid, Name("example"),
RRClass::IN(), RRType::SOA());
request_message.setHeaderFlag(Message::HEADERFLAG_AA);
createRequestPacket(request_message, IPPROTO_UDP);
}
TEST_F(AuthSrvTest, notifyReceiveFail) {
+ updateInMemory(server, "example.", CONFIG_INMEMORY_EXAMPLE, false);
+
notify_session.disableReceive();
UnitTestUtil::createRequestMessage(request_message, Opcode::NOTIFY(),
- default_qid, Name("example.com"),
+ default_qid, Name("example"),
RRClass::IN(), RRType::SOA());
request_message.setHeaderFlag(Message::HEADERFLAG_AA);
createRequestPacket(request_message, IPPROTO_UDP);
}
TEST_F(AuthSrvTest, notifyWithBogusSessionMessage) {
+ updateInMemory(server, "example.", CONFIG_INMEMORY_EXAMPLE, false);
+
notify_session.setMessage(Element::fromJSON("{\"foo\": 1}"));
UnitTestUtil::createRequestMessage(request_message, Opcode::NOTIFY(),
- default_qid, Name("example.com"),
+ default_qid, Name("example"),
RRClass::IN(), RRType::SOA());
request_message.setHeaderFlag(Message::HEADERFLAG_AA);
createRequestPacket(request_message, IPPROTO_UDP);
}
TEST_F(AuthSrvTest, notifyWithSessionMessageError) {
+ updateInMemory(server, "example.", CONFIG_INMEMORY_EXAMPLE, false);
+
notify_session.setMessage(
Element::fromJSON("{\"result\": [1, \"FAIL\"]}"));
UnitTestUtil::createRequestMessage(request_message, Opcode::NOTIFY(),
- default_qid, Name("example.com"),
+ default_qid, Name("example"),
RRClass::IN(), RRType::SOA());
request_message.setHeaderFlag(Message::HEADERFLAG_AA);
createRequestPacket(request_message, IPPROTO_UDP);
&dnsserv);
EXPECT_FALSE(dnsserv.hasAnswer());
}
-
-void
-installDataSrcClientLists(AuthSrv& server, ClientListMapPtr lists) {
- // For now, we use explicit swap than reconfigure() because the latter
- // involves a separate thread and cannot guarantee the new config is
- // available for the subsequent test.
- server.getDataSrcClientsMgr().setDataSrcClientLists(lists);
-}
-
-void
-updateDatabase(AuthSrv& server, const char* params) {
- const ConstElementPtr config(Element::fromJSON("{"
- "\"IN\": [{"
- " \"type\": \"sqlite3\","
- " \"params\": " + string(params) +
- "}]}"));
- installDataSrcClientLists(server, configureDataSource(config));
-}
-
-void
-updateInMemory(AuthSrv& server, const char* origin, const char* filename) {
- const ConstElementPtr config(Element::fromJSON("{"
- "\"IN\": [{"
- " \"type\": \"MasterFiles\","
- " \"params\": {"
- " \"" + string(origin) + "\": \"" + string(filename) + "\""
- " },"
- " \"cache-enable\": true"
- "}],"
- "\"CH\": [{"
- " \"type\": \"static\","
- " \"params\": \"" + string(STATIC_DSRC_FILE) + "\""
- "}]}"));
- installDataSrcClientLists(server, configureDataSource(config));
-}
-
-void
-updateBuiltin(AuthSrv& server) {
- const ConstElementPtr config(Element::fromJSON("{"
- "\"CH\": [{"
- " \"type\": \"static\","
- " \"params\": \"" + string(STATIC_DSRC_FILE) + "\""
- "}]}"));
- installDataSrcClientLists(server, configureDataSource(config));
-}
-
// Try giving the server a TSIG signed request and see it can anwer signed as
// well
#ifdef USE_STATIC_LINK