From: Francis Dupont Date: Tue, 25 Sep 2018 15:17:26 +0000 (+0200) Subject: [65-libyang-control-socket_rebased] Fixed rebase conflicts X-Git-Tag: 165-netbsd-8-fixes_base^2~3^2^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=47db32743c5bcf7965c60388fc8552f0480871ac;p=thirdparty%2Fkea.git [65-libyang-control-socket_rebased] Fixed rebase conflicts --- 47db32743c5bcf7965c60388fc8552f0480871ac diff --cc src/lib/yang/Makefile.am index 4761a7127d,f29158cc9d..c6e463102d --- a/src/lib/yang/Makefile.am +++ b/src/lib/yang/Makefile.am @@@ -5,11 -5,10 +5,13 @@@ AM_CPPFLAGS += $(BOOST_INCLUDES) $(SYSR AM_CXXFLAGS = $(KEA_CXXFLAGS) lib_LTLIBRARIES = libkea-yang.la -libkea_yang_la_SOURCES = sysrepo_error.h +libkea_yang_la_SOURCES = adaptor.cc adaptor.h +libkea_yang_la_SOURCES += sysrepo_error.h libkea_yang_la_SOURCES += translator.cc translator.h + libkea_yang_la_SOURCES += translator_control_socket.cc + libkea_yang_la_SOURCES += translator_control_socket.h +libkea_yang_la_SOURCES += translator_option_data.cc +libkea_yang_la_SOURCES += translator_option_data.h libkea_yang_la_LIBADD = $(top_builddir)/src/lib/asiolink/libkea-asiolink.la libkea_yang_la_LIBADD += $(top_builddir)/src/lib/cc/libkea-cc.la @@@ -24,26 -23,10 +26,27 @@@ libkea_yang_la_LDFLAGS = -no-undefined # Specify the headers for copying into the installation directory tree. libkea_yang_includedir = $(pkgincludedir)/yang libkea_yang_include_HEADERS = \ + adaptor.h \ sysrepo_error.h \ translator.h \ - translator_control_socket.h ++ translator_control_socket.h \ + translator_option_data.h EXTRA_DIST = yang.dox +# Distribute yang models. +EXTRA_DIST += models/ietf-dhcpv6-client.yang +EXTRA_DIST += models/ietf-dhcpv6-options.yang +EXTRA_DIST += models/ietf-dhcpv6-relay.yang +EXTRA_DIST += models/ietf-dhcpv6-server.yang +EXTRA_DIST += models/ietf-dhcpv6-types.yang +EXTRA_DIST += models/ietf-inet-types.yang +EXTRA_DIST += models/ietf-yang-types.yang +EXTRA_DIST += models/kea-ctrl-agent.yang +EXTRA_DIST += models/kea-dhcp-ddns.yang +EXTRA_DIST += models/kea-dhcp-types.yang +EXTRA_DIST += models/kea-dhcp4-server.yang +EXTRA_DIST += models/kea-dhcp6-server.yang +EXTRA_DIST += models/kea-logging.yang +EXTRA_DIST += models/kea-types.yang CLEANFILES = *.gcno *.gcda diff --cc src/lib/yang/tests/Makefile.am index 5e593f1d19,b9585f0512..a3cd3eaf86 --- a/src/lib/yang/tests/Makefile.am +++ b/src/lib/yang/tests/Makefile.am @@@ -17,10 -17,8 +17,11 @@@ EXTRA_DIST = keatest-module.yan TESTS = if HAVE_GTEST TESTS += run_unittests -run_unittests_SOURCES = translator_unittests.cc +run_unittests_SOURCES = adaptor_unittests.cc +run_unittests_SOURCES += sysrepo_setup.h +run_unittests_SOURCES += translator_unittests.cc + run_unittests_SOURCES += translator_control_socket_unittests.cc +run_unittests_SOURCES += translator_option_data_unittests.cc run_unittests_SOURCES += run_unittests.cc run_unittests_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES) run_unittests_LDFLAGS = $(AM_LDFLAGS) $(GTEST_LDFLAGS) diff --cc src/lib/yang/tests/translator_control_socket_unittests.cc index 0000000000,8e3da5dd6c..24fad8bff5 mode 000000,100644..100644 --- a/src/lib/yang/tests/translator_control_socket_unittests.cc +++ b/src/lib/yang/tests/translator_control_socket_unittests.cc @@@ -1,0 -1,157 +1,152 @@@ + // Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC") + // + // This Source Code Form is subject to the terms of the Mozilla Public + // License, v. 2.0. If a copy of the MPL was not distributed with this + // file, You can obtain one at http://mozilla.org/MPL/2.0/. + + #include + + #include ++#include + -#include + #include + + using namespace std; + using namespace isc; + using namespace isc::data; + using namespace isc::yang; ++using namespace isc::yang::test; + + namespace { + -// Test get empty control socket using the Kea ad hoc model. -TEST(TranslatorControlSocketTest, getEmpty) { - // Get a translator control socket object to play with. - S_Connection conn(new Connection("translator control socket unittests")); - S_Session sess(new Session(conn, SR_DS_CANDIDATE)); - boost::scoped_ptr tcs_obj; ++/// @brief Translator name. ++extern char const control_socket[] = "control socket"; + - // Use the ad hoc model. - const string& model = "kea-dhcp4-server"; - EXPECT_NO_THROW(tcs_obj.reset(new TranslatorControlSocket(sess, model))); ++/// @brief Test fixture class for @ref TranslatorControlSocket. ++class TranslatorControlSocketTest : ++ public GenericTranslatorTest { ++public: ++ ++ /// Constructor. ++ TranslatorControlSocketTest() { } ++ ++ /// Destructor (does nothing). ++ virtual ~TranslatorControlSocketTest() { } ++}; ++ ++// This test verifies that an empty control socket can be properly ++// translated from YANG to JSON. ++TEST_F(TranslatorControlSocketTest, getEmpty) { ++ useModel("kea-dhcp4-server"); + + // Get empty. + const string& xpath = "/kea-dhcp4-server:config/control-socket"; + ConstElementPtr sock; - EXPECT_NO_THROW(sock = tcs_obj->getControlSocket(xpath)); ++ EXPECT_NO_THROW(sock = t_obj_->getControlSocket(xpath)); + EXPECT_FALSE(sock); + } + -// Test get not empty control socket using the Kea ad hoc model. -TEST(TranslatorControlSocketTest, get) { - // Get a translator control socket object to play with. - S_Connection conn(new Connection("translator control socket unittests")); - S_Session sess(new Session(conn, SR_DS_CANDIDATE)); - boost::scoped_ptr tcs_obj; - - // Use the ad hoc model. - const string& model = "kea-dhcp6-server"; - EXPECT_NO_THROW(tcs_obj.reset(new TranslatorControlSocket(sess, model))); ++// This test verifies that a not empty control socket can be properly ++// translated from YANG to JSON. ++TEST_F(TranslatorControlSocketTest, get) { ++ useModel("kea-dhcp6-server"); + + // Set a value. + const string& xpath = "/kea-dhcp6-server:config/control-socket"; + const string& xname = xpath + "/socket-name"; + const string& xtype = xpath + "/socket-type"; + const string& xcontext = xpath + "/user-context"; + S_Val s_name(new Val("/tmp/kea.sock")); - EXPECT_NO_THROW(sess->set_item(xname.c_str(), s_name)); ++ EXPECT_NO_THROW(sess_->set_item(xname.c_str(), s_name)); + S_Val s_type(new Val("unix", SR_ENUM_T)); - EXPECT_NO_THROW(sess->set_item(xtype.c_str(), s_type)); ++ EXPECT_NO_THROW(sess_->set_item(xtype.c_str(), s_type)); + S_Val s_context(new Val("{ \"foo\": 1 }")); - EXPECT_NO_THROW(sess->set_item(xcontext.c_str(), s_context)); ++ EXPECT_NO_THROW(sess_->set_item(xcontext.c_str(), s_context)); + + // Get it. + ConstElementPtr sock; - EXPECT_NO_THROW(sock = tcs_obj->getControlSocket(xpath)); ++ EXPECT_NO_THROW(sock = t_obj_->getControlSocket(xpath)); + ASSERT_TRUE(sock); + ASSERT_EQ(Element::map, sock->getType()); + EXPECT_EQ(3, sock->size()); + ConstElementPtr type = sock->get("socket-type"); + ASSERT_TRUE(type); + ASSERT_EQ(Element::string, type->getType()); + EXPECT_EQ("unix", type->stringValue()); + ConstElementPtr name = sock->get("socket-name"); + ASSERT_TRUE(name); + ASSERT_EQ(Element::string, name->getType()); + EXPECT_EQ("/tmp/kea.sock", name->stringValue()); + ConstElementPtr context = sock->get("user-context"); + ASSERT_TRUE(context); + EXPECT_EQ("{ \"foo\": 1 }", context->str()); + } + -// Test set not empty control socket using the Kea ad hoc model. -TEST(TranslatorControlSocketTest, set) { - // Get a translator control socket object to play with. - S_Connection conn(new Connection("translator control socket unittests")); - S_Session sess(new Session(conn, SR_DS_CANDIDATE)); - boost::scoped_ptr tcs_obj; - - // Use the ad hoc model. - const string& model = "kea-ctrl-agent"; - EXPECT_NO_THROW(tcs_obj.reset(new TranslatorControlSocket(sess, model))); ++// This test verifies that a not empty control socket can be properly ++// translated from JSON to YANG. ++TEST_F(TranslatorControlSocketTest, set) { ++ useModel("kea-ctrl-agent"); + + // Set a value. + const string& xpath = + "/kea-ctrl-agent:config/control-sockets/socket[server-type='dhcp4']/control-socket"; + ElementPtr sock = Element::createMap(); + sock->set("socket-name", Element::create(string("/tmp/kea.sock"))); + sock->set("socket-type", Element::create(string("unix"))); + sock->set("comment", Element::create(string("a comment"))); + try { - tcs_obj->setControlSocket(xpath, sock); ++ t_obj_->setControlSocket(xpath, sock); + } catch (const std::exception& ex) { + cerr << "setControlSocket fail with " << ex.what() << endl; + } - ASSERT_NO_THROW(tcs_obj->setControlSocket(xpath, sock)); ++ ASSERT_NO_THROW(t_obj_->setControlSocket(xpath, sock)); + + // Get it back. + ConstElementPtr got; - EXPECT_NO_THROW(got = tcs_obj->getControlSocket(xpath)); ++ EXPECT_NO_THROW(got = t_obj_->getControlSocket(xpath)); + ASSERT_TRUE(got); + ASSERT_EQ(Element::map, got->getType()); + EXPECT_EQ(3, got->size()); + ConstElementPtr name = got->get("socket-name"); + ASSERT_TRUE(name); + ASSERT_EQ(Element::string, name->getType()); + EXPECT_EQ("/tmp/kea.sock", name->stringValue()); + ConstElementPtr type = got->get("socket-type"); + ASSERT_TRUE(type); + ASSERT_EQ(Element::string, type->getType()); + EXPECT_EQ("unix", type->stringValue()); + ConstElementPtr context = got->get("user-context"); + ASSERT_TRUE(context); + EXPECT_EQ("{ \"comment\": \"a comment\" }", context->str()); -} + -// Test set empty control socket using the Kea ad hoc model. -TEST(TranslatorControlSocketTest, setEmpty) { - // Get a translator control socket object to play with. - S_Connection conn(new Connection("translator control socket unittests")); - S_Session sess(new Session(conn, SR_DS_CANDIDATE)); - boost::scoped_ptr tcs_obj; ++ // Check it validates. ++ EXPECT_NO_THROW(sess_->validate()); ++} + - // Use the ad hoc model. - const string& model = "kea-dhcp4-server"; - EXPECT_NO_THROW(tcs_obj.reset(new TranslatorControlSocket(sess, model))); ++// This test verifies that an empty control socket can be properly ++// translated from JSON to YANG. ++TEST_F(TranslatorControlSocketTest, setEmpty) { ++ useModel("kea-dhcp4-server"); + + // Set a value. + const string& xpath = "/kea-dhcp4-server:config/control-socket"; + const string& xname = xpath + "/socket-name"; + const string& xtype = xpath + "/socket-type"; + const string& xcontext = xpath + "/user-context"; + S_Val s_name(new Val("/tmp/kea.sock")); - EXPECT_NO_THROW(sess->set_item(xname.c_str(), s_name)); ++ EXPECT_NO_THROW(sess_->set_item(xname.c_str(), s_name)); + S_Val s_type(new Val("unix", SR_ENUM_T)); - EXPECT_NO_THROW(sess->set_item(xtype.c_str(), s_type)); ++ EXPECT_NO_THROW(sess_->set_item(xtype.c_str(), s_type)); + S_Val s_context(new Val("{ \"foo\": 1 }")); - EXPECT_NO_THROW(sess->set_item(xcontext.c_str(), s_context)); ++ EXPECT_NO_THROW(sess_->set_item(xcontext.c_str(), s_context)); + + // Reset to empty. - ASSERT_NO_THROW(tcs_obj->setControlSocket(xpath, ConstElementPtr())); ++ ASSERT_NO_THROW(t_obj_->setControlSocket(xpath, ConstElementPtr())); + + // Get it back. + ConstElementPtr sock; - EXPECT_NO_THROW(sock = tcs_obj->getControlSocket(xpath)); ++ EXPECT_NO_THROW(sock = t_obj_->getControlSocket(xpath)); + EXPECT_FALSE(sock); + } + + }; // end of anonymous namespace