Commit e6df9bca authored by Thomas Markwalder's avatar Thomas Markwalder

[3087] Added state handler unit tests for D2::NameAddTransaction

Created unit tests for all of the states implemented by NameAddTransaction
in b10-dhcp-ddns.  The class lacks only proper construction of DNS update
requests.
parent 4c16336d
......@@ -259,7 +259,7 @@ NameChangeRequest correctly. Some or all of the DNS updates requested as part
of this update did not succeed. This is a programmatic error and should be
reported.
% DHCP_DDNS_FORWARD_ADD_REJECTED DNS Server, %1, rejected a DNS update request to add the address mapping for FQDN, %1, with an RCODE: %3
% DHCP_DDNS_FORWARD_ADD_REJECTED DNS Server, %1, rejected a DNS update request to add the address mapping for FQDN, %2, with an RCODE: %3
This is an error message issued when an udpate was rejected by the DNS server itwas sent to for the reason given by the RCODE. The rcode values are defined in
RFC 2136.
......@@ -277,7 +277,7 @@ This is an error message issued when a unexpected error condition error occurs
while DHCP_DDNS is carrying out a forward address update. The request will be
be aborted. This is most likely a programmatic issue and should be reported.
% DHCP_DDNS_FORWARD_REPLACE_REJECTED DNS Server, %1, rejected a DNS update request to replace the address mapping for FQDN, %1, with an RCODE: %3
% DHCP_DDNS_FORWARD_REPLACE_REJECTED DNS Server, %1, rejected a DNS update request to replace the address mapping for FQDN, %2, with an RCODE: %3
This is an error message issued when an udpate was rejected by the DNS server itwas sent to for the reason given by the RCODE. The rcode values are defined in
RFC 2136.
......@@ -295,7 +295,7 @@ This is an error message issued when a unexpected error condition error occurs
while DHCP_DDNS is carrying out a forward address update. The request will be
be aborted. This is most likely a programmatic issue and should be reported.
% DHCP_DDNS_REVERSE_REPLACE_REJECTED DNS Server, %1, rejected a DNS update request to replace the reverse mapping for FQDN, %1, with an RCODE: %3
% DHCP_DDNS_REVERSE_REPLACE_REJECTED DNS Server, %1, rejected a DNS update request to replace the reverse mapping for FQDN, %2, with an RCODE: %3
This is an error message issued when an udpate was rejected by the DNS server itwas sent to for the reason given by the RCODE. The rcode values are defined in
RFC 2136.
......
......@@ -201,8 +201,8 @@ NameAddTransaction::addingFwdAddrsHandler() {
// If we get not authorized should we try the next server in
// the list? @todo This needs some discussion perhaps.
LOG_ERROR(dctl_logger, DHCP_DDNS_FORWARD_ADD_REJECTED)
.arg(getNcr()->getFqdn())
.arg(getCurrentServer()->getIpAddress())
.arg(getNcr()->getFqdn())
.arg(rcode.getCode());
transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
}
......@@ -301,8 +301,8 @@ NameAddTransaction::replacingFwdAddrsHandler() {
// If we get not authorized should try the next server in
// the list? @todo This needs some discussion perhaps.
LOG_ERROR(dctl_logger, DHCP_DDNS_FORWARD_REPLACE_REJECTED)
.arg(getNcr()->getFqdn())
.arg(getCurrentServer()->getIpAddress())
.arg(getNcr()->getFqdn())
.arg(rcode.getCode());
transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
}
......@@ -422,15 +422,12 @@ NameAddTransaction::replacingRevPtrsHandler() {
// If we get not authorized should try the next server in
// the list? @todo This needs some discussion perhaps.
LOG_ERROR(dctl_logger, DHCP_DDNS_REVERSE_REPLACE_REJECTED)
.arg(getNcr()->getFqdn())
.arg(getCurrentServer()->getIpAddress())
.arg(getNcr()->getFqdn())
.arg(rcode.getCode());
transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
}
// @todo clearing request seems clunky here
// safest thing to do is to always rebuild it
clearDnsUpdateRequest();
break;
}
......@@ -514,17 +511,23 @@ NameAddTransaction::processAddFailedHandler() {
void
NameAddTransaction::buildAddFwdAddressRequest() {
isc_throw(NotImplemented, "buildAddFwdAddressRequest");
// @todo For now construct a blank outbound message.
D2UpdateMessagePtr msg(new D2UpdateMessage(D2UpdateMessage::OUTBOUND));
setDnsUpdateRequest(msg);
}
void
NameAddTransaction::buildReplaceFwdAddressRequest() {
isc_throw(NotImplemented, "buildReplaceFwdAddressRequest");
// @todo For now construct a blank outbound message.
D2UpdateMessagePtr msg(new D2UpdateMessage(D2UpdateMessage::OUTBOUND));
setDnsUpdateRequest(msg);
}
void
NameAddTransaction::buildReplaceRevPtrsRequest() {
isc_throw(NotImplemented, "buildReplaceRevPtrsRequest");
// @todo For now construct a blank outbound message.
D2UpdateMessagePtr msg(new D2UpdateMessage(D2UpdateMessage::OUTBOUND));
setDnsUpdateRequest(msg);
}
} // namespace isc::d2
......
......@@ -198,7 +198,7 @@ public:
protected:
/// @todo
void sendUpdate(bool use_tsig_ = false);
virtual void sendUpdate(bool use_tsig_ = false);
/// @brief Adds events defined by NameChangeTransaction to the event set.
///
......
......@@ -92,27 +92,13 @@ StateModel::~StateModel(){
void
StateModel::startModel(const int start_state) {
// First let's build and verify the dictionary of events.
try {
defineEvents();
verifyEvents();
} catch (const std::exception& ex) {
isc_throw(StateModelError, "Event set is invalid: " << ex.what());
}
// Next let's build and verify the dictionary of states.
try {
defineStates();
verifyStates();
} catch (const std::exception& ex) {
isc_throw(StateModelError, "State set is invalid: " << ex.what());
}
// Record that we are good to go.
dictionaries_initted_ = true;
// Intialize dictionaries of events and states.
initDictionaries();
// Set the current state to starting state and enter the run loop.
setState(start_state);
// Start running the model.
runModel(START_EVT);
}
......@@ -149,6 +135,27 @@ void
StateModel::nopStateHandler() {
}
void
StateModel::initDictionaries() {
// First let's build and verify the dictionary of events.
try {
defineEvents();
verifyEvents();
} catch (const std::exception& ex) {
isc_throw(StateModelError, "Event set is invalid: " << ex.what());
}
// Next let's build and verify the dictionary of states.
try {
defineStates();
verifyStates();
} catch (const std::exception& ex) {
isc_throw(StateModelError, "State set is invalid: " << ex.what());
}
// Record that we are good to go.
dictionaries_initted_ = true;
}
void
StateModel::defineEvent(unsigned int event_value, const std::string& label) {
......
......@@ -275,10 +275,9 @@ public:
/// @brief Begins execution of the model.
///
/// This method invokes the define and verify methods for both events and
/// states to initialize their respective dictionaries. It then starts
/// the model execution setting the current state to the given start state,
/// and the event to START_EVT.
/// This method invokes initDictionaries method to initialize the event
/// and state dictionaries and then starts the model execution setting
/// the current state to the given start state, and the event to START_EVT.
///
/// @param start_state is the state in which to begin execution.
///
......@@ -323,6 +322,15 @@ public:
void nopStateHandler();
protected:
/// @brief Initializes the event and state dictionaries.
///
/// This method invokes the define and verify methods for both events and
/// states to initialize their respective dictionaries.
///
/// @throw StateModelError or others indirectly, as this method calls
/// dictionary define and verify methods.
void initDictionaries();
/// @brief Populates the set of events.
///
/// This method is used to construct the set of valid events. Each class
......
This diff is collapsed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment