|
@@ -14,17 +14,9 @@
|
|
|
|
|
|
// $Id$
|
|
// $Id$
|
|
|
|
|
|
-#include <config.h>
|
|
|
|
#include <recurse/recursor.h>
|
|
#include <recurse/recursor.h>
|
|
#include <testutils/srv_unittest.h>
|
|
#include <testutils/srv_unittest.h>
|
|
|
|
|
|
-using isc::UnitTestUtil;
|
|
|
|
-using namespace std;
|
|
|
|
-using namespace isc::cc;
|
|
|
|
-using namespace isc::dns;
|
|
|
|
-using namespace isc::data;
|
|
|
|
-using namespace asiolink;
|
|
|
|
-
|
|
|
|
namespace {
|
|
namespace {
|
|
const char* const TEST_PORT = "53535";
|
|
const char* const TEST_PORT = "53535";
|
|
|
|
|
|
@@ -101,218 +93,5 @@ TEST_F(RecursorTest, notifyFail) {
|
|
headerCheck(*parse_message, default_qid, Rcode::NOTAUTH(),
|
|
headerCheck(*parse_message, default_qid, Rcode::NOTAUTH(),
|
|
Opcode::NOTIFY().getCode(), QR_FLAG, 0, 0, 0, 0);
|
|
Opcode::NOTIFY().getCode(), QR_FLAG, 0, 0, 0, 0);
|
|
}
|
|
}
|
|
-class RecursorConfig : public ::testing::Test {
|
|
|
|
- public:
|
|
|
|
- IOService ios;
|
|
|
|
- DNSService dnss;
|
|
|
|
- Recursor server;
|
|
|
|
- RecursorConfig() :
|
|
|
|
- dnss(ios, NULL, NULL, NULL)
|
|
|
|
- {
|
|
|
|
- server.setDNSService(dnss);
|
|
|
|
- }
|
|
|
|
- void invalidTest(const string &JOSN);
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-TEST_F(RecursorConfig, forwardAddresses) {
|
|
|
|
- // Default value should be fully recursive
|
|
|
|
- EXPECT_TRUE(server.getForwardAddresses().empty());
|
|
|
|
- EXPECT_FALSE(server.isForwarding());
|
|
|
|
-
|
|
|
|
- // Try putting there some addresses
|
|
|
|
- vector<pair<string, uint16_t> > addresses;
|
|
|
|
- addresses.push_back(pair<string, uint16_t>(DEFAULT_REMOTE_ADDRESS, 53));
|
|
|
|
- addresses.push_back(pair<string, uint16_t>("::1", 53));
|
|
|
|
- server.setForwardAddresses(addresses);
|
|
|
|
- EXPECT_EQ(2, server.getForwardAddresses().size());
|
|
|
|
- EXPECT_EQ("::1", server.getForwardAddresses()[1].first);
|
|
|
|
- EXPECT_TRUE(server.isForwarding());
|
|
|
|
-
|
|
|
|
- // Is it independent from what we do with the vector later?
|
|
|
|
- addresses.clear();
|
|
|
|
- EXPECT_EQ(2, server.getForwardAddresses().size());
|
|
|
|
-
|
|
|
|
- // Did it return to fully recursive?
|
|
|
|
- server.setForwardAddresses(addresses);
|
|
|
|
- EXPECT_TRUE(server.getForwardAddresses().empty());
|
|
|
|
- EXPECT_FALSE(server.isForwarding());
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-TEST_F(RecursorConfig, forwardAddressConfig) {
|
|
|
|
- // Try putting there some address
|
|
|
|
- ElementPtr config(Element::fromJSON("{"
|
|
|
|
- "\"forward_addresses\": ["
|
|
|
|
- " {"
|
|
|
|
- " \"address\": \"192.0.2.1\","
|
|
|
|
- " \"port\": 53"
|
|
|
|
- " }"
|
|
|
|
- "]"
|
|
|
|
- "}"));
|
|
|
|
- ConstElementPtr result(server.updateConfig(config));
|
|
|
|
- EXPECT_EQ(result->toWire(), isc::config::createAnswer()->toWire());
|
|
|
|
- EXPECT_TRUE(server.isForwarding());
|
|
|
|
- ASSERT_EQ(1, server.getForwardAddresses().size());
|
|
|
|
- EXPECT_EQ("192.0.2.1", server.getForwardAddresses()[0].first);
|
|
|
|
- EXPECT_EQ(53, server.getForwardAddresses()[0].second);
|
|
|
|
-
|
|
|
|
- // And then remove all addresses
|
|
|
|
- config = Element::fromJSON("{"
|
|
|
|
- "\"forward_addresses\": null"
|
|
|
|
- "}");
|
|
|
|
- result = server.updateConfig(config);
|
|
|
|
- EXPECT_EQ(result->toWire(), isc::config::createAnswer()->toWire());
|
|
|
|
- EXPECT_FALSE(server.isForwarding());
|
|
|
|
- EXPECT_EQ(0, server.getForwardAddresses().size());
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void
|
|
|
|
-RecursorConfig::invalidTest(const string &JOSN) {
|
|
|
|
- ElementPtr config(Element::fromJSON(JOSN));
|
|
|
|
- EXPECT_FALSE(server.updateConfig(config)->equals(
|
|
|
|
- *isc::config::createAnswer())) << "Accepted config " << JOSN << endl;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-TEST_F(RecursorConfig, invalidForwardAddresses) {
|
|
|
|
- // Try torturing it with some invalid inputs
|
|
|
|
- invalidTest("{"
|
|
|
|
- "\"forward_addresses\": \"error\""
|
|
|
|
- "}");
|
|
|
|
- invalidTest("{"
|
|
|
|
- "\"forward_addresses\": [{}]"
|
|
|
|
- "}");
|
|
|
|
- invalidTest("{"
|
|
|
|
- "\"forward_addresses\": [{"
|
|
|
|
- " \"port\": 1.5,"
|
|
|
|
- " \"address\": \"192.0.2.1\""
|
|
|
|
- "}]}");
|
|
|
|
- invalidTest("{"
|
|
|
|
- "\"forward_addresses\": [{"
|
|
|
|
- " \"port\": -5,"
|
|
|
|
- " \"address\": \"192.0.2.1\""
|
|
|
|
- "}]}");
|
|
|
|
- invalidTest("{"
|
|
|
|
- "\"forward_addresses\": [{"
|
|
|
|
- " \"port\": 53,"
|
|
|
|
- " \"address\": \"bad_address\""
|
|
|
|
- "}]}");
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-TEST_F(RecursorConfig, listenAddresses) {
|
|
|
|
- // Default value should be fully recursive
|
|
|
|
- EXPECT_TRUE(server.getListenAddresses().empty());
|
|
|
|
-
|
|
|
|
- // Try putting there some addresses
|
|
|
|
- vector<pair<string, uint16_t> > addresses;
|
|
|
|
- addresses.push_back(pair<string, uint16_t>("127.0.0.1", 5300));
|
|
|
|
- addresses.push_back(pair<string, uint16_t>("::1", 5300));
|
|
|
|
- server.setListenAddresses(addresses);
|
|
|
|
- EXPECT_EQ(2, server.getListenAddresses().size());
|
|
|
|
- EXPECT_EQ("::1", server.getListenAddresses()[1].first);
|
|
|
|
-
|
|
|
|
- // Is it independent from what we do with the vector later?
|
|
|
|
- addresses.clear();
|
|
|
|
- EXPECT_EQ(2, server.getListenAddresses().size());
|
|
|
|
-
|
|
|
|
- // Did it return to fully recursive?
|
|
|
|
- server.setListenAddresses(addresses);
|
|
|
|
- EXPECT_TRUE(server.getListenAddresses().empty());
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-TEST_F(RecursorConfig, DISABLED_listenAddressConfig) {
|
|
|
|
- // Try putting there some address
|
|
|
|
- ElementPtr config(Element::fromJSON("{"
|
|
|
|
- "\"listen_on\": ["
|
|
|
|
- " {"
|
|
|
|
- " \"address\": \"127.0.0.1\","
|
|
|
|
- " \"port\": 5300"
|
|
|
|
- " }"
|
|
|
|
- "]"
|
|
|
|
- "}"));
|
|
|
|
- ConstElementPtr result(server.updateConfig(config));
|
|
|
|
- EXPECT_EQ(result->toWire(), isc::config::createAnswer()->toWire());
|
|
|
|
- ASSERT_EQ(1, server.getListenAddresses().size());
|
|
|
|
- EXPECT_EQ("127.0.0.1", server.getListenAddresses()[0].first);
|
|
|
|
- EXPECT_EQ(5300, server.getListenAddresses()[0].second);
|
|
|
|
-
|
|
|
|
- // As this is example address, the machine should not have it on
|
|
|
|
- // any interface
|
|
|
|
- // FIXME: This test aborts, because it tries to rollback and
|
|
|
|
- // it is impossible, since the sockets are not closed.
|
|
|
|
- // Once #388 is solved, enable this test.
|
|
|
|
- config = Element::fromJSON("{"
|
|
|
|
- "\"listen_on\": ["
|
|
|
|
- " {"
|
|
|
|
- " \"address\": \"192.0.2.0\","
|
|
|
|
- " \"port\": 5300"
|
|
|
|
- " }"
|
|
|
|
- "]"
|
|
|
|
- "}");
|
|
|
|
- result = server.updateConfig(config);
|
|
|
|
- EXPECT_FALSE(result->equals(*isc::config::createAnswer()));
|
|
|
|
- ASSERT_EQ(1, server.getListenAddresses().size());
|
|
|
|
- EXPECT_EQ("127.0.0.1", server.getListenAddresses()[0].first);
|
|
|
|
- EXPECT_EQ(5300, server.getListenAddresses()[0].second);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-TEST_F(RecursorConfig, invalidListenAddresses) {
|
|
|
|
- // Try torturing it with some invalid inputs
|
|
|
|
- invalidTest("{"
|
|
|
|
- "\"listen_on\": \"error\""
|
|
|
|
- "}");
|
|
|
|
- invalidTest("{"
|
|
|
|
- "\"listen_on\": [{}]"
|
|
|
|
- "}");
|
|
|
|
- invalidTest("{"
|
|
|
|
- "\"listen_on\": [{"
|
|
|
|
- " \"port\": 1.5,"
|
|
|
|
- " \"address\": \"192.0.2.1\""
|
|
|
|
- "}]}");
|
|
|
|
- invalidTest("{"
|
|
|
|
- "\"listen_on\": [{"
|
|
|
|
- " \"port\": -5,"
|
|
|
|
- " \"address\": \"192.0.2.1\""
|
|
|
|
- "}]}");
|
|
|
|
- invalidTest("{"
|
|
|
|
- "\"listen_on\": [{"
|
|
|
|
- " \"port\": 53,"
|
|
|
|
- " \"address\": \"bad_address\""
|
|
|
|
- "}]}");
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// Just test it sets and gets the values correctly
|
|
|
|
-TEST_F(RecursorConfig, timeouts) {
|
|
|
|
- server.setTimeouts(0, 1);
|
|
|
|
- EXPECT_EQ(0, server.getTimeouts().first);
|
|
|
|
- EXPECT_EQ(1, server.getTimeouts().second);
|
|
|
|
- server.setTimeouts();
|
|
|
|
- EXPECT_EQ(-1, server.getTimeouts().first);
|
|
|
|
- EXPECT_EQ(0, server.getTimeouts().second);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-TEST_F(RecursorConfig, timeoutsConfig) {
|
|
|
|
- ElementPtr config = Element::fromJSON("{"
|
|
|
|
- "\"timeout\": 1000,"
|
|
|
|
- "\"retries\": 3"
|
|
|
|
- "}");
|
|
|
|
- ConstElementPtr result(server.updateConfig(config));
|
|
|
|
- EXPECT_EQ(result->toWire(), isc::config::createAnswer()->toWire());
|
|
|
|
- EXPECT_EQ(1000, server.getTimeouts().first);
|
|
|
|
- EXPECT_EQ(3, server.getTimeouts().second);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-TEST_F(RecursorConfig, invalidTimeoutsConfig) {
|
|
|
|
- invalidTest("{"
|
|
|
|
- "\"timeout\": \"error\""
|
|
|
|
- "}");
|
|
|
|
- invalidTest("{"
|
|
|
|
- "\"timeout\": -2"
|
|
|
|
- "}");
|
|
|
|
- invalidTest("{"
|
|
|
|
- "\"retries\": \"error\""
|
|
|
|
- "}");
|
|
|
|
- invalidTest("{"
|
|
|
|
- "\"retries\": -1"
|
|
|
|
- "}");
|
|
|
|
-}
|
|
|
|
|
|
|
|
}
|
|
}
|