/// @brief Returns version info specific to D2
virtual std::string getVersionAddendum();
- /// @brief Constructor is declared protected to maintain the integrity of
- /// the singleton instance.
- D2Controller();
-
private:
/// @brief Creates an instance of the DHCP-DDNS specific application
/// process. This method is invoked during the process initialization
/// @throw BadValue if the file is empty
virtual isc::data::ConstElementPtr parseFile(const std::string& file_name);
+ /// @brief Constructor is declared protected to maintain the integrity of
+ /// the singleton instance.
+ D2Controller();
+
/// @brief Flag set to true when command channel is enabled.
bool has_command_channel_;
+
+ /// To facilitate unit testing.
+ friend class NakedD2Controller;
};
}; // namespace isc::d2
using namespace isc::process;
using namespace boost::asio;
+namespace isc {
+namespace d2 {
+
+class NakedD2Controller;
+typedef boost::shared_ptr<NakedD2Controller> NakedD2ControllerPtr;
+
+class NakedD2Controller : public D2Controller {
+ // "Naked" D2 controller, exposes internal methods.
+public:
+ static DControllerBasePtr& instance() {
+ if (!getController()) {
+ DControllerBasePtr controller_ptr(new NakedD2Controller());
+ setController(controller_ptr);
+ }
+
+ return (getController());
+ }
+
+ virtual ~NakedD2Controller() { }
+
+ using DControllerBase::getIOService;
+ using DControllerBase::initProcess;
+
+ D2ProcessPtr getProcess() {
+ return (boost::dynamic_pointer_cast<D2Process>(DControllerBase::getProcess()));
+ }
+
+private:
+ NakedD2Controller() { }
+};
+
+}; // namespace isc::d2
+}; // namespace isc
+
namespace {
/// @brief Simple RAII class which stops IO service upon destruction
};
-class NakedD2Controller;
-typedef boost::shared_ptr<NakedD2Controller> NakedD2ControllerPtr;
-
-class NakedD2Controller : public D2Controller {
- // "Naked" D2 controller, exposes internal methods.
-public:
- static DControllerBasePtr& instance() {
- if (!getController()) {
- DControllerBasePtr controller_ptr(new NakedD2Controller());
- setController(controller_ptr);
- }
-
- return (getController());
- }
-
- virtual ~NakedD2Controller() { }
-
- using DControllerBase::getIOService;
- using DControllerBase::initProcess;
- using DControllerBase::getProcess;
-
-private:
- NakedD2Controller() { }
-};
-
/// @brief Fixture class intended for testin control channel in D2.
class CtrlChannelD2Test : public ::testing::Test {
public:
DControllerBasePtr& server_;
/// @brief Cast controller object.
- NakedD2Controller* get() {
+ NakedD2Controller* d2Controller() {
return (dynamic_cast<NakedD2Controller*>(server_.get()));
}
/// @return Pointer to the server's IO service or null pointer if the
/// hasn't been created server.
IOServicePtr getIOService() {
- return (server_ ? get()->getIOService() : IOServicePtr());
+ return (server_ ? d2Controller()->getIOService() : IOServicePtr());
}
/// @brief Runs parser in DHCPDDNS mode
ConstElementPtr config;
ASSERT_NO_THROW(config = parseDHCPDDNS(config_txt, true));
- ASSERT_NO_THROW(get()->initProcess());
- D2ProcessPtr proc = boost::dynamic_pointer_cast<D2Process>(get()->getProcess());
+ ASSERT_NO_THROW(d2Controller()->initProcess());
+ D2ProcessPtr proc = d2Controller()->getProcess();
ASSERT_TRUE(proc);
ConstElementPtr answer = proc->configure(config, false);
ASSERT_TRUE(answer);
// Test bad syntax rejected by the process.
TEST_F(CtrlChannelD2Test, configure) {
ASSERT_TRUE(server_);
- ASSERT_NO_THROW(get()->initProcess());
- D2ProcessPtr proc = boost::dynamic_pointer_cast<D2Process>(get()->getProcess());
+ ASSERT_NO_THROW(d2Controller()->initProcess());
+ D2ProcessPtr proc = d2Controller()->getProcess();
ASSERT_TRUE(proc);
// no type.
ConstElementPtr config;
ASSERT_NO_THROW(config = parseDHCPDDNS(os.str(), true));
- ASSERT_NO_THROW(get()->initProcess());
- D2ProcessPtr proc = boost::dynamic_pointer_cast<D2Process>(get()->getProcess());
+ ASSERT_NO_THROW(d2Controller()->initProcess());
+ D2ProcessPtr proc = d2Controller()->getProcess();
ASSERT_TRUE(proc);
ConstElementPtr answer = proc->configure(config, false);
ASSERT_TRUE(answer);