From: Marcin Siodelski Date: Fri, 8 Feb 2019 11:58:27 +0000 (+0100) Subject: [#451,!227] Added unit tests for createBinding/createTriplet methods. X-Git-Tag: 458-config-backend-support-in-src-lib_base~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5ec9a55528fbcfff4e0c808f9a745b9fd3a5dfae;p=thirdparty%2Fkea.git [#451,!227] Added unit tests for createBinding/createTriplet methods. As a result of a review. --- diff --git a/src/hooks/dhcp/mysql_cb/mysql_cb_impl.cc b/src/hooks/dhcp/mysql_cb/mysql_cb_impl.cc index 2f3834b3d7..39a2d71930 100644 --- a/src/hooks/dhcp/mysql_cb/mysql_cb_impl.cc +++ b/src/hooks/dhcp/mysql_cb/mysql_cb_impl.cc @@ -87,7 +87,7 @@ MySqlConfigBackendImpl::~MySqlConfigBackendImpl() { } MySqlBindingPtr -MySqlConfigBackendImpl::createBinding(const Triplet& triplet) const { +MySqlConfigBackendImpl::createBinding(const Triplet& triplet) { if (triplet.unspecified()) { return (MySqlBinding::createNull()); } @@ -95,7 +95,7 @@ MySqlConfigBackendImpl::createBinding(const Triplet& triplet) const { } Triplet -MySqlConfigBackendImpl::createTriplet(const MySqlBindingPtr& binding) const { +MySqlConfigBackendImpl::createTriplet(const MySqlBindingPtr& binding) { if (!binding) { isc_throw(Unexpected, "MySQL configuration backend internal error: " "binding pointer is NULL when creating a triplet value"); diff --git a/src/hooks/dhcp/mysql_cb/mysql_cb_impl.h b/src/hooks/dhcp/mysql_cb/mysql_cb_impl.h index 0d1171de3c..f947251f69 100644 --- a/src/hooks/dhcp/mysql_cb/mysql_cb_impl.h +++ b/src/hooks/dhcp/mysql_cb/mysql_cb_impl.h @@ -112,7 +112,7 @@ public: /// @return Pointer to a null binding if the triplet is "unspecified" or /// a pointer to a binding representing 32-bit unsigned integer value /// otherwise. - db::MySqlBindingPtr createBinding(const Triplet& triplet) const; + static db::MySqlBindingPtr createBinding(const Triplet& triplet); /// @brief Creates @c Triplet object from MySQL binding. /// @@ -123,7 +123,7 @@ public: /// @throw isc::Unexpected if the provided binding pointer is NULL. /// @throw isc::InvalidOperation if the binding does not represent /// a 32-bit unsigned integer. - Triplet createTriplet(const db::MySqlBindingPtr& binding) const; + static Triplet createTriplet(const db::MySqlBindingPtr& binding); /// @brief Returns server tags associated with the particular selector. /// diff --git a/src/hooks/dhcp/mysql_cb/tests/Makefile.am b/src/hooks/dhcp/mysql_cb/tests/Makefile.am index 6ba01c6eca..251575aeec 100644 --- a/src/hooks/dhcp/mysql_cb/tests/Makefile.am +++ b/src/hooks/dhcp/mysql_cb/tests/Makefile.am @@ -2,7 +2,7 @@ SUBDIRS = . AM_CPPFLAGS = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib AM_CPPFLAGS += -I$(top_builddir)/src/hooks/dhcp/mysql_cb -I$(top_srcdir)/src/hooks/dhcp/mysql_cb -AM_CPPFLAGS += $(BOOST_INCLUDES) +AM_CPPFLAGS += $(BOOST_INCLUDES) $(MYSQL_CPPFLAGS) AM_CPPFLAGS += -DINSTALL_PROG=\"$(abs_top_srcdir)/install-sh\" AM_CXXFLAGS = $(KEA_CXXFLAGS) @@ -25,6 +25,7 @@ TESTS += mysql_cb_unittests mysql_cb_unittests_SOURCES = mysql_cb_dhcp4_unittest.cc mysql_cb_unittests_SOURCES += mysql_cb_dhcp4_mgr_unittest.cc +mysql_cb_unittests_SOURCES += mysql_cb_impl_unittest.cc mysql_cb_unittests_SOURCES += run_unittests.cc mysql_cb_unittests_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES) $(LOG4CPLUS_INCLUDES) diff --git a/src/hooks/dhcp/mysql_cb/tests/mysql_cb_impl_unittest.cc b/src/hooks/dhcp/mysql_cb/tests/mysql_cb_impl_unittest.cc new file mode 100644 index 0000000000..b2d76beb88 --- /dev/null +++ b/src/hooks/dhcp/mysql_cb/tests/mysql_cb_impl_unittest.cc @@ -0,0 +1,61 @@ +// Copyright (C) 2019 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 + +using namespace isc::db; +using namespace isc::dhcp; + +namespace { + +// Test that the MySQL binding can be created from a triplet. +TEST(MySqlConfigBackendImplTest, createBindingFromTriplet) { + // Create a binding from an unspecified triplet. + auto binding = MySqlConfigBackendImpl::createBinding(Triplet()); + // The binding pointer should be non-null but the type of the binding + // should be null. + ASSERT_TRUE(binding); + EXPECT_TRUE(binding->amNull()); + + // This time create a triplet encapsulating a number. + binding = MySqlConfigBackendImpl::createBinding(Triplet(123)); + ASSERT_TRUE(binding); + // The binding type should be non-null. + ASSERT_FALSE(binding->amNull()); + ASSERT_EQ(MYSQL_TYPE_LONG, binding->getType()); + // Check that the correct value was stored in the binding. + EXPECT_EQ(123, binding->getInteger()); +} + +// Test that the triplet can be created from the MySQL binding. +TEST(MySqlConfigBackendImplTest, createTripletFromBinding) { + // Create a binding encapsulating a number and try to create a triplet + // from this binding. + MySqlBindingPtr binding = MySqlBinding::createInteger(234); + Triplet triplet; + ASSERT_NO_THROW(triplet = MySqlConfigBackendImpl::createTriplet(binding)); + + // The triplet should be specified and equal to the value stored in the + // binding. + ASSERT_FALSE(triplet.unspecified()); + EXPECT_EQ(234, triplet.get()); + + // Create a null binding and then use it to create a triplet. + binding = MySqlBinding::createNull(); + ASSERT_NO_THROW(triplet = MySqlConfigBackendImpl::createTriplet(binding)); + // This time the triplet should be unspecified. + EXPECT_TRUE(triplet.unspecified()); + + // Finally, make sure that the null binding pointer is rejected. + EXPECT_THROW(MySqlConfigBackendImpl::createTriplet(MySqlBindingPtr()), + isc::Unexpected); +} + + +} +