void
TransactionTest::setupForIPv4Transaction(dhcp_ddns::NameChangeType chg_type,
- int change_mask) {
+ int change_mask,
+ const std::string& key_name) {
const char* msg_str =
"{"
" \"change_type\" : 0 , "
forward_domain_.reset();
} else {
// Create the forward domain and then its servers.
- forward_domain_ = makeDomain("example.com.");
+ forward_domain_ = makeDomain("example.com.", key_name);
addDomainServer(forward_domain_, "forward.example.com",
"127.0.0.1", 5301);
addDomainServer(forward_domain_, "forward2.example.com",
reverse_domain_.reset();
} else {
// Create the reverse domain and its server.
- reverse_domain_ = makeDomain("2.168.192.in.addr.arpa.");
+ reverse_domain_ = makeDomain("2.168.192.in.addr.arpa.", key_name);
addDomainServer(reverse_domain_, "reverse.example.com",
"127.0.0.1", 5301);
addDomainServer(reverse_domain_, "reverse2.example.com",
void
TransactionTest::setupForIPv6Transaction(dhcp_ddns::NameChangeType chg_type,
- int change_mask) {
+ int change_mask,
+ const std::string& key_name) {
const char* msg_str =
"{"
" \"change_type\" : 0 , "
forward_domain_.reset();
} else {
// Create the forward domain and then its servers.
- forward_domain_ = makeDomain("example.com.");
+ forward_domain_ = makeDomain("example.com.", key_name);
addDomainServer(forward_domain_, "fwd6-server.example.com",
"::1", 5301);
addDomainServer(forward_domain_, "fwd6-server2.example.com",
reverse_domain_.reset();
} else {
// Create the reverse domain and its server.
- reverse_domain_ = makeDomain("1.2001.ip6.arpa.");
+ reverse_domain_ = makeDomain("1.2001.ip6.arpa.", key_name);
addDomainServer(reverse_domain_, "rev6-server.example.com",
"::1", 5301);
addDomainServer(reverse_domain_, "rev6-server2.example.com",
const std::string& key_name) {
DdnsDomainPtr domain;
DnsServerInfoStoragePtr servers(new DnsServerInfoStorage());
- domain.reset(new DdnsDomain(zone_name, servers, makeTSIGKey(key_name)));
+ domain.reset(new DdnsDomain(zone_name, servers, makeTSIGKeyInfo(key_name)));
return (domain);
}
-TSIGKeyInfoPtr makeTSIGKey(const std::string& key_name,
+TSIGKeyInfoPtr makeTSIGKeyInfo(const std::string& key_name,
const std::string& secret,
const std::string& algorithm) {
TSIGKeyInfoPtr key_info;
/// CHG_REMOVE.
/// @param change_mask determines which change directions are requested
/// FORWARD_CHG, REVERSE_CHG, or FWD_AND_REV_CHG.
+ /// @param key_name value to use to create TSIG key, if blank TSIG will not
+ /// be used.
void setupForIPv4Transaction(dhcp_ddns::NameChangeType change_type,
- int change_mask);
+ int change_mask,
+ const std::string& key_name = "");
/// @brief Creates a transaction which requests an IPv6 DNS update.
///
/// CHG_REMOVE.
/// @param change_mask determines which change directions are requested
/// FORWARD_CHG, REVERSE_CHG, or FWD_AND_REV_CHG.
+ /// @param key_name value to use to create TSIG key, if blank TSIG will not
+ /// be used.
void setupForIPv6Transaction(dhcp_ddns::NameChangeType change_type,
- int change_mask);
+ int change_mask,
+ const std::string& key_name = "");
};
/// the pointer will be empty.
/// @throw Underlying methods may throw.
extern
-TSIGKeyInfoPtr makeTSIGKey(const std::string& key_name,
- const std::string& secret = "",
- const std::string& algorithm = TSIGKeyInfo::MD5_STR);
+TSIGKeyInfoPtr makeTSIGKeyInfo(const std::string& key_name,
+ const std::string& secret = "",
+ const std::string& algorithm
+ = TSIGKeyInfo::MD5_STR);
/// @brief Creates a DnsServerInfo and adds it to the given DdnsDomain.
///
using NameChangeTransaction::addPtrRdata;
using NameChangeTransaction::responseString;
using NameChangeTransaction::transactionOutcomeString;
- using NameChangeTransaction::setTSIGKey;
};
// Declare them so Gtest can see them.
/// The transaction is constructed around a predefined (i.e "canned")
/// NameChangeRequest. The request has both forward and reverse DNS
/// changes requested, and both forward and reverse domains are populated.
- NameChangeStubPtr makeCannedTransaction() {
+ /// @param key_name value to use to create TSIG key, if blank TSIG will not
+ /// be used.
+ NameChangeStubPtr makeCannedTransaction(const std::string& key_name = "") {
// Creates IPv4 remove request, forward, and reverse domains.
- setupForIPv4Transaction(dhcp_ddns::CHG_ADD, FWD_AND_REV_CHG);
+ setupForIPv4Transaction(dhcp_ddns::CHG_ADD, FWD_AND_REV_CHG, key_name);
// Now create the test transaction as would occur in update manager.
// Instantiate the transaction as would be done by update manager.
/// @brief Tests that an unsigned response to a signed request is an error
TEST_F(NameChangeTransactionTest, tsigUnsignedResponse) {
NameChangeStubPtr name_change;
- ASSERT_NO_THROW(name_change = makeCannedTransaction());
+ ASSERT_NO_THROW(name_change = makeCannedTransaction("key_one"));
ASSERT_NO_THROW(name_change->initDictionaries());
ASSERT_TRUE(name_change->selectFwdServer());
FauxServer server(*io_service_, *(name_change->getCurrentServer()));
server.receive (FauxServer::USE_RCODE, dns::Rcode::NOERROR());
- // Create a key and manually set it as the transaction's TSIG key
- std::string secret ("key number one");
- dns::TSIGKeyPtr key_one;
- ASSERT_NO_THROW(key_one.reset(new
- dns::TSIGKey(dns::Name("one.com"),
- dns::TSIGKey::HMACMD5_NAME(),
- secret.c_str(), secret.size())));
- name_change->setTSIGKey(key_one);
+ // Do the udpate.
ASSERT_NO_FATAL_FAILURE(doOneExchange(name_change));
// Verify that next event is IO_COMPLETED_EVT and DNS status is
/// @brief Tests that a response signed with the wrong key is an error
TEST_F(NameChangeTransactionTest, tsigInvalidResponse) {
NameChangeStubPtr name_change;
- ASSERT_NO_THROW(name_change = makeCannedTransaction());
+ ASSERT_NO_THROW(name_change = makeCannedTransaction("key_one"));
ASSERT_NO_THROW(name_change->initDictionaries());
ASSERT_TRUE(name_change->selectFwdServer());
FauxServer server(*io_service_, *(name_change->getCurrentServer()));
server.receive (FauxServer::INVALID_TSIG, dns::Rcode::NOERROR());
- // Create a key and manually set it as the transaction's TSIG key
- std::string secret ("key number one");
- dns::TSIGKeyPtr key_one;
- ASSERT_NO_THROW(key_one.reset(new
- dns::TSIGKey(dns::Name("one.com"),
- dns::TSIGKey::HMACMD5_NAME(),
- secret.c_str(), secret.size())));
- name_change->setTSIGKey(key_one);
+ // Do the udpate.
ASSERT_NO_FATAL_FAILURE(doOneExchange(name_change));
// Verify that next event is IO_COMPLETED_EVT and DNS status is
/// the right key.
TEST_F(NameChangeTransactionTest, tsigValidExchange) {
NameChangeStubPtr name_change;
- ASSERT_NO_THROW(name_change = makeCannedTransaction());
+ ASSERT_NO_THROW(name_change = makeCannedTransaction("key_one"));
ASSERT_NO_THROW(name_change->initDictionaries());
ASSERT_TRUE(name_change->selectFwdServer());
- // Create a key
- std::string secret ("key number one");
- dns::TSIGKeyPtr key_one;
- ASSERT_NO_THROW(key_one.reset(new
- dns::TSIGKey(dns::Name("one.com"),
- dns::TSIGKey::HMACMD5_NAME(),
- secret.c_str(), secret.size())));
-
// Create a server, set its TSIG key, and then start it listening.
FauxServer server(*io_service_, *(name_change->getCurrentServer()));
- server.setTSIGKey(key_one);
+ TSIGKeyInfoPtr key_one = makeTSIGKeyInfo("key_one");
+ server.setTSIGKey(key_one->getTSIGKey());
server.receive (FauxServer::USE_RCODE, dns::Rcode::NOERROR());
- // Manually set the transaction's key to the same key as the server.
- name_change->setTSIGKey(key_one);
-
// Do the update.
ASSERT_NO_FATAL_FAILURE(doOneExchange(name_change));