src/lib/cryptolink/tests/Makefile
src/lib/database/Makefile
src/lib/database/tests/Makefile
+ src/lib/database/testutils/Makefile
src/lib/dhcp/Makefile
src/lib/dhcp/tests/Makefile
src/lib/dhcp_ddns/Makefile
src/lib/log/tests/severity_test.sh
src/lib/log/tests/tempdir.h
src/lib/mysql/Makefile
+ src/lib/mysql/testutils/Makefile
src/lib/pgsql/Makefile
src/lib/pgsql/tests/Makefile
+ src/lib/pgsql/testutils/Makefile
src/lib/cql/Makefile
src/lib/cql/tests/Makefile
+ src/lib/cql/testutils/Makefile
src/lib/process/Makefile
src/lib/process/tests/Makefile
src/lib/process/testutils/Makefile
dhcp4_unittests_LDADD += $(top_builddir)/src/lib/dhcp/tests/libdhcptest.la
if HAVE_MYSQL
+dhcp4_unittests_LDADD += $(top_builddir)/src/lib/mysql/testutils/libmysqltest.la
dhcp4_unittests_LDADD += $(top_builddir)/src/lib/mysql/libkea-mysql.la
endif
if HAVE_PGSQL
+dhcp4_unittests_LDADD += $(top_builddir)/src/lib/pgsql/testutils/libpgsqltest.la
dhcp4_unittests_LDADD += $(top_builddir)/src/lib/pgsql/libkea-pgsql.la
endif
if HAVE_CQL
+dhcp4_unittests_LDADD += $(top_builddir)/src/lib/cql/testutils/libcqltest.la
dhcp4_unittests_LDADD += $(top_builddir)/src/lib/cql/libkea-cql.la
endif
+dhcp4_unittests_LDADD += $(top_builddir)/src/lib/database/testutils/libdatabasetest.la
dhcp4_unittests_LDADD += $(top_builddir)/src/lib/database/libkea-database.la
dhcp4_unittests_LDADD += $(top_builddir)/src/lib/asiolink/libkea-asiolink.la
dhcp4_unittests_LDADD += $(top_builddir)/src/lib/cc/libkea-cc.la
#include <dhcpsrv/host.h>
#include <dhcpsrv/host_mgr.h>
#include <dhcpsrv/subnet_id.h>
-#include <dhcpsrv/testutils/cql_schema.h>
-#include <dhcpsrv/testutils/mysql_schema.h>
-#include <dhcpsrv/testutils/pgsql_schema.h>
+
+#ifdef HAVE_CQL
+#include <cql/testutils/cql_schema.h>
+#endif
+
+#ifdef HAVE_MYSQL
+#include <mysql/testutils/mysql_schema.h>
+#endif
+
+#ifdef HAVE_PGSQL
+#include <pgsql/testutils/pgsql_schema.h>
+#endif
+
#include <dhcp4/tests/dhcp4_test_utils.h>
#include <dhcp4/tests/dhcp4_client.h>
#include <boost/shared_ptr.hpp>
using namespace isc;
using namespace isc::asiolink;
using namespace isc::data;
+using namespace isc::db::test;
using namespace isc::dhcp;
using namespace isc::dhcp::test;
#include <dhcpsrv/host.h>
#include <dhcpsrv/host_mgr.h>
#include <dhcpsrv/subnet_id.h>
-#include <dhcpsrv/testutils/cql_schema.h>
-#include <dhcpsrv/testutils/mysql_schema.h>
-#include <dhcpsrv/testutils/pgsql_schema.h>
#include <dhcp4/tests/dhcp4_test_utils.h>
#include <dhcp4/tests/dhcp4_client.h>
#include <boost/shared_ptr.hpp>
#include <dhcpsrv/cfgmgr.h>
#include <dhcpsrv/lease.h>
#include <dhcpsrv/lease_mgr_factory.h>
-#include <dhcpsrv/testutils/mysql_schema.h>
+
+#ifdef HAVE_MYSQL
+#include <mysql/testutils/mysql_schema.h>
+#endif
+
#include <log/logger_support.h>
#include <util/stopwatch.h>
using namespace isc::asiolink;
using namespace isc::config;
using namespace isc::data;
+using namespace isc::db::test;
using namespace isc::dhcp;
using namespace isc::dhcp::test;
using namespace isc::hooks;
dhcp6_unittests_LDADD += $(top_builddir)/src/lib/dhcp/tests/libdhcptest.la
if HAVE_MYSQL
+dhcp6_unittests_LDADD += $(top_builddir)/src/lib/mysql/testutils/libmysqltest.la
dhcp6_unittests_LDADD += $(top_builddir)/src/lib/mysql/libkea-mysql.la
endif
if HAVE_PGSQL
+dhcp6_unittests_LDADD += $(top_builddir)/src/lib/pgsql/testutils/libpgsqltest.la
dhcp6_unittests_LDADD += $(top_builddir)/src/lib/pgsql/libkea-pgsql.la
endif
if HAVE_CQL
+dhcp6_unittests_LDADD += $(top_builddir)/src/lib/cql/testutils/libcqltest.la
dhcp6_unittests_LDADD += $(top_builddir)/src/lib/cql/libkea-cql.la
endif
+dhcp6_unittests_LDADD += $(top_builddir)/src/lib/database/testutils/libdatabasetest.la
dhcp6_unittests_LDADD += $(top_builddir)/src/lib/database/libkea-database.la
-
dhcp6_unittests_LDADD += $(top_builddir)/src/lib/asiolink/libkea-asiolink.la
dhcp6_unittests_LDADD += $(top_builddir)/src/lib/cc/libkea-cc.la
dhcp6_unittests_LDADD += $(top_builddir)/src/lib/dns/libkea-dns++.la
#include <dhcpsrv/cfgmgr.h>
#include <dhcpsrv/lease.h>
#include <dhcpsrv/lease_mgr_factory.h>
-#include <dhcpsrv/testutils/mysql_schema.h>
+
+#ifdef HAVE_MYSQL
+#include <mysql/testutils/mysql_schema.h>
+#endif
+
#include <log/logger_support.h>
#include <util/stopwatch.h>
using namespace isc::asiolink;
using namespace isc::config;
using namespace isc::data;
+using namespace isc::db::test;
using namespace isc::dhcp;
using namespace isc::dhcp::test;
using namespace isc::hooks;
-SUBDIRS = . tests
+SUBDIRS = . testutils tests
AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib
AM_CPPFLAGS += $(BOOST_INCLUDES) $(CQL_CPPFLAGS)
--- /dev/null
+SUBDIRS = .
+
+AM_CPPFLAGS = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib
+AM_CPPFLAGS += -DDATABASE_SCRIPTS_DIR=\"$(abs_top_srcdir)/src/share/database/scripts\"
+AM_CPPFLAGS += $(BOOST_INCLUDES)
+
+AM_CXXFLAGS = $(KEA_CXXFLAGS)
+
+CLEANFILES = *.gcno *.gcda
+
+if HAVE_GTEST
+
+noinst_LTLIBRARIES = libcqltest.la
+
+libcqltest_la_SOURCES = cql_schema.cc cql_schema.h
+
+libcqltest_la_CXXFLAGS = $(AM_CXXFLAGS)
+libcqltest_la_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES) $(CQL_CPPFLAGS)
+libcqltest_la_LDFLAGS = $(AM_LDFLAGS) $(CQL_LIBS)
+
+libcqltest_la_LIBADD = $(top_builddir)/src/lib/database/testutils/libdatabasetest.la
+
+endif
--- /dev/null
+// Copyright (C) 2015-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 <config.h>
+
+#include <cassandra.h>
+
+#include <cql/cql_connection.h>
+#include <dhcpsrv/testutils/cql_schema.h>
+
+#include <stdlib.h>
+
+#include <fstream>
+#include <iostream>
+#include <sstream>
+#include <string>
+
+namespace isc {
+namespace db {
+namespace test {
+
+const char* CQL_VALID_TYPE = "type=cql";
+
+std::string
+validCqlConnectionString() {
+ return (connectionString(CQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER,
+ VALID_PASSWORD));
+}
+
+bool
+softWipeEnabled() {
+ const char* const env = getenv("KEA_TEST_CASSANDRA_WIPE");
+ if (env && (std::string(env) == std::string("soft"))) {
+ return (true);
+ }
+
+ return (false);
+}
+
+void
+destroyCqlSchema(bool force_wipe, bool show_err) {
+ if (force_wipe || !softWipeEnabled()) {
+ // Do full wipe
+ runCqlScript(DATABASE_SCRIPTS_DIR, "cql/dhcpdb_drop.cql", show_err);
+ } else {
+ // do soft wipe (just remove the data, not the structures)
+ runCqlScript(DATABASE_SCRIPTS_DIR, "cql/soft_wipe.cql", show_err);
+ }
+}
+
+void
+createCqlSchema(bool force_wipe, bool show_err) {
+ if (force_wipe || !softWipeEnabled()) {
+ runCqlScript(DATABASE_SCRIPTS_DIR, "cql/dhcpdb_create.cql", show_err);
+ }
+}
+
+void
+runCqlScript(const std::string& path,
+ const std::string& script_name,
+ bool show_err) {
+ std::ostringstream cmd;
+ cmd << "cqlsh -u keatest -p keatest -k keatest";
+ if (!show_err) {
+ cmd << " 2>/dev/null ";
+ }
+
+ cmd << " -f";
+
+ if (!path.empty()) {
+ cmd << path << "/";
+ }
+
+ cmd << script_name;
+
+ int32_t retval = ::system(cmd.str().c_str());
+ if (retval) {
+ std::cerr << "runCqlSchema failed:" << cmd.str() << std::endl;
+ }
+}
+
+} // namespace test
+} // namespace dhcp
+} // namespace isc
--- /dev/null
+// Copyright (C) 2015-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/.
+
+#ifndef TEST_CQL_SCHEMA_H
+#define TEST_CQL_SCHEMA_H
+
+#include <config.h>
+#include <database/testutils/schema.h>
+#include <string>
+
+namespace isc {
+namespace db {
+namespace test {
+
+extern const char* CQL_VALID_TYPE;
+
+/// Return valid connection string
+///
+/// @return valid CQL connection string.
+std::string validCqlConnectionString();
+
+/// @brief Clear everything from the database
+///
+/// Submits the current schema drop script:
+///
+/// <TEST_ADMIN_SCRIPTS_DIR>/cql/dhcpdb_drop.cql
+///
+/// to the unit test CQL database. If the script fails, the invoking test
+/// will fail. The output of stderr is suppressed unless the parameter,
+/// show_err is true.
+///
+/// @param force_wipe forces wipe of the database, even if
+/// KEA_TEST_CASSANDRA_WIPE is set.
+/// @param show_err flag which governs whether or not stderr is suppressed.
+void destroyCqlSchema(bool force_wipe, bool show_err = false);
+
+/// @brief Create the CQL Schema
+///
+/// Submits the current schema creation script:
+///
+/// <TEST_ADMIN_SCRIPTS_DIR>/cql/dhcpdb_create.cql
+///
+/// to the unit test CQL database. If the script fails, the invoking test
+/// will fail. The output of stderr is suppressed unless the parameter,
+/// show_err is true.
+///
+/// @param force_wipe forces wipe of the database, even if
+/// KEA_TEST_CASSANDRA_WIPE is set.
+/// @param show_err flag which governs whether or not stderr is suppressed.
+void createCqlSchema(bool force_wipe, bool show_err = false);
+
+/// @brief Run a CQL script against the CQL unit test database
+///
+/// Submits the given CQL script to CQL via cqlsh CLI. The output of
+/// stderr is suppressed unless the parameter, show_err is true. The is done
+/// to suppress warnings that might otherwise make test output needlessly
+/// noisy. A gtest assertion occurs if the script fails to execute.
+///
+/// @param path - path (if not blank) of the script to execute
+/// @param script_name - file name of the path to execute
+/// @param show_err flag which governs whether or not stderr is suppressed.
+void runCqlScript(const std::string& path, const std::string& script_name,
+ bool show_err);
+
+/// @brief Returns status if the soft-wipe is enabled or not.
+///
+/// In some deployments (In case of Tomek's dev system) Cassandra tests take
+/// a very long time to execute. This was traced back to slow table/indexes
+/// creation/deletion. With full wipe and recreation of all structures, it
+/// took over 60 seconds for each test to execute. To avoid this problem, a
+/// feature called soft-wipe has been implemented. If enabled, it does not
+/// remove the structures, just the data from essential tables. To enable
+/// it set KEA_TEST_CASSANDRA_WIPE environment variable to 'soft'. Make sure
+/// that the database schema is set up properly before running in soft-wipe
+/// mode.
+///
+/// For example to use soft-wipe mode, you can:
+///
+/// $ cqlsh -u keatest -p keatest -k keatest
+/// -f src/share/database/scripts/cql/dhcpdb_create.cql
+/// $ export KEA_TEST_CASSANDRA_WIPE=soft
+/// $ cd src/lib/dhcpsrv
+/// $ make -j9
+/// $ tests/libdhcpsrv_unittests --gtest_filter=CqlLeaseMgrTest.*
+///
+/// @return true if soft-wipe is enabled, false otherwise
+bool softWipeEnabled();
+};
+};
+};
+
+#endif
-SUBDIRS = . tests
+SUBDIRS = . testutils tests
AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib
AM_CPPFLAGS += $(BOOST_INCLUDES)
--- /dev/null
+SUBDIRS = .
+
+AM_CPPFLAGS = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib
+
+AM_CXXFLAGS = $(KEA_CXXFLAGS)
+
+CLEANFILES = *.gcno *.gcda
+
+if HAVE_GTEST
+
+noinst_LTLIBRARIES = libdatabasetest.la
+
+libdatabasetest_la_SOURCES = schema.cc schema.h
+
+libdatabasetest_la_CXXFLAGS = $(AM_CXXFLAGS)
+libdatabasetest_la_CPPFLAGS = $(AM_CPPFLAGS)
+libdatabasetest_la_LDFLAGS = $(AM_LDFLAGS)
+
+endif
-// Copyright (C) 2016 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2016-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
using namespace std;
namespace isc {
-namespace dhcp {
+namespace db {
namespace test {
// Connection strings.
-// Copyright (C) 2016 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2016-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
#include <string>
namespace isc {
-namespace dhcp {
+namespace db {
namespace test {
extern const char* INVALID_TYPE;
endif
libdhcpsrv_unittests_LDADD = $(top_builddir)/src/lib/dhcpsrv/testutils/libdhcpsrvtest.la
+
+if HAVE_MYSQL
+libdhcpsrv_unittests_LDADD += $(top_builddir)/src/lib/mysql/testutils/libmysqltest.la
+endif
+
+if HAVE_PGSQL
+libdhcpsrv_unittests_LDADD += $(top_builddir)/src/lib/pgsql/testutils/libpgsqltest.la
+endif
+
+if HAVE_CQL
+libdhcpsrv_unittests_LDADD += $(top_builddir)/src/lib/cql/testutils/libcqltest.la
+endif
+
+libdhcpsrv_unittests_LDADD += $(top_builddir)/src/lib/database/testutils/libdatabasetest.la
libdhcpsrv_unittests_LDADD += $(top_builddir)/src/lib/dhcpsrv/libkea-dhcpsrv.la
libdhcpsrv_unittests_LDADD += $(top_builddir)/src/lib/eval/libkea-eval.la
libdhcpsrv_unittests_LDADD += $(top_builddir)/src/lib/dhcp_ddns/libkea-dhcp_ddns.la
#include <dhcpsrv/host_mgr.h>
#include <dhcpsrv/lease_mgr.h>
#include <dhcpsrv/lease_mgr_factory.h>
-#include <dhcpsrv/testutils/mysql_schema.h>
+#include <mysql/testutils/mysql_schema.h>
#include <testutils/test_to_element.h>
#include <gtest/gtest.h>
using namespace isc;
+using namespace isc::db::test;
using namespace isc::dhcp;
-using namespace isc::dhcp::test;
using namespace isc::test;
namespace {
#include <dhcpsrv/tests/test_utils.h>
#if defined HAVE_MYSQL
-#include <dhcpsrv/testutils/mysql_schema.h>
+#include <mysql/testutils/mysql_schema.h>
#endif
#if defined HAVE_PGSQL
-#include <dhcpsrv/testutils/pgsql_schema.h>
+#include <pgsql/testutils/pgsql_schema.h>
#endif
#if defined HAVE_CQL
using namespace isc;
using namespace isc::db;
+using namespace isc::db::test;
using namespace isc::dhcp;
+using namespace isc::dhcp::test;
using namespace isc::asiolink;
namespace {
// Find the most recently opened socket. Our SQL client's socket should
// be the next one.
- int last_open_socket = test::findLastSocketFd();
+ int last_open_socket = findLastSocketFd();
// Connect to the host backend.
ASSERT_NO_THROW(HostMgr::addBackend(validConnectString()));
// Find the SQL client socket.
- int sql_socket = test::findLastSocketFd();
+ int sql_socket = findLastSocketFd();
ASSERT_TRUE(sql_socket > last_open_socket);
// Clear the callback invocation marker.
HostMgrTest::SetUp();
// Ensure schema is the correct one.
- test::destroyMySQLSchema();
- test::createMySQLSchema();
+ destroyMySQLSchema();
+ createMySQLSchema();
// Connect to the database
try {
- HostMgr::addBackend(test::validMySQLConnectionString());
+ HostMgr::addBackend(validMySQLConnectionString());
} catch (...) {
std::cerr << "*** ERROR: unable to open database. The test\n"
"*** environment is broken and must be fixed before\n"
MySQLHostMgrTest::TearDown() {
HostMgr::instance().getHostDataSource()->rollback();
HostMgr::delBackend("mysql");
- test::destroyMySQLSchema();
+ destroyMySQLSchema();
}
/// @brief Test fixture class for validating @c HostMgr using
class MySQLHostMgrDbLostCallbackTest : public HostMgrDbLostCallbackTest {
public:
virtual void destroySchema() {
- test::destroyMySQLSchema();
+ destroyMySQLSchema();
}
virtual void createSchema() {
- test::createMySQLSchema();
+ createMySQLSchema();
}
virtual std::string validConnectString() {
- return (test::validMySQLConnectionString());
+ return (validMySQLConnectionString());
}
};
HostMgrTest::SetUp();
// Ensure schema is the correct one.
- test::destroyPgSQLSchema();
- test::createPgSQLSchema();
+ destroyPgSQLSchema();
+ createPgSQLSchema();
// Connect to the database
try {
- HostMgr::addBackend(test::validPgSQLConnectionString());
+ HostMgr::addBackend(validPgSQLConnectionString());
} catch (...) {
std::cerr << "*** ERROR: unable to open database. The test\n"
"*** environment is broken and must be fixed before\n"
PostgreSQLHostMgrTest::TearDown() {
HostMgr::instance().getHostDataSource()->rollback();
HostMgr::delBackend("postgresql");
- test::destroyPgSQLSchema();
+ destroyPgSQLSchema();
}
/// @brief Test fixture class for validating @c HostMgr using
class PostgreSQLHostMgrDbLostCallbackTest : public HostMgrDbLostCallbackTest {
public:
virtual void destroySchema() {
- test::destroyPgSQLSchema();
+ destroyPgSQLSchema();
}
virtual void createSchema() {
- test::createPgSQLSchema();
+ createPgSQLSchema();
}
virtual std::string validConnectString() {
- return (test::validPgSQLConnectionString());
+ return (validPgSQLConnectionString());
}
};
HostMgrTest::SetUp();
// Ensure schema is the correct one.
- test::destroyCqlSchema(false, true);
- test::createCqlSchema(false, true);
+ destroyCqlSchema(false, true);
+ createCqlSchema(false, true);
// Connect to the database
try {
- HostMgr::addBackend(test::validCqlConnectionString());
+ HostMgr::addBackend(validCqlConnectionString());
} catch (...) {
std::cerr << "*** ERROR: unable to open database. The test\n"
"*** environment is broken and must be fixed before\n"
CQLHostMgrTest::TearDown() {
HostMgr::instance().getHostDataSource()->rollback();
HostMgr::delBackend("cql");
- test::destroyCqlSchema(false, true);
+ destroyCqlSchema(false, true);
}
// This test verifies that reservations for a particular client can
#include <dhcpsrv/host.h>
#include <dhcpsrv/mysql_host_data_source.h>
#include <dhcpsrv/testutils/generic_host_data_source_unittest.h>
-#include <dhcpsrv/testutils/mysql_schema.h>
#include <dhcpsrv/testutils/host_data_source_utils.h>
#include <dhcpsrv/host_mgr.h>
#include <dhcpsrv/host_data_source_factory.h>
#include <mysql/mysql_connection.h>
+#include <mysql/testutils/mysql_schema.h>
#include <gtest/gtest.h>
using namespace isc;
using namespace isc::asiolink;
using namespace isc::db;
+using namespace isc::db::test;
using namespace isc::dhcp;
using namespace isc::dhcp::test;
using namespace isc::data;
#include <dhcpsrv/mysql_lease_mgr.h>
#include <dhcpsrv/tests/test_utils.h>
#include <dhcpsrv/tests/generic_lease_mgr_unittest.h>
-#include <dhcpsrv/testutils/mysql_schema.h>
#include <exceptions/exceptions.h>
#include <mysql/mysql_connection.h>
+#include <mysql/testutils/mysql_schema.h>
#include <gtest/gtest.h>
using namespace isc;
using namespace isc::asiolink;
using namespace isc::db;
+using namespace isc::db::test;
using namespace isc::dhcp;
using namespace isc::dhcp::test;
using namespace std;
class MySQLLeaseMgrDbLostCallbackTest : public LeaseMgrDbLostCallbackTest {
public:
virtual void destroySchema() {
- test::destroyMySQLSchema();
+ destroyMySQLSchema();
}
virtual void createSchema() {
- test::createMySQLSchema();
+ createMySQLSchema();
}
virtual std::string validConnectString() {
- return (test::validMySQLConnectionString());
+ return (validMySQLConnectionString());
}
virtual std::string invalidConnectString() {
#include <dhcpsrv/host.h>
#include <dhcpsrv/pgsql_host_data_source.h>
#include <dhcpsrv/testutils/generic_host_data_source_unittest.h>
-#include <dhcpsrv/testutils/pgsql_schema.h>
#include <dhcpsrv/testutils/host_data_source_utils.h>
#include <dhcpsrv/host_mgr.h>
#include <dhcpsrv/host_data_source_factory.h>
#include <pgsql/pgsql_connection.h>
+#include <pgsql/testutils/pgsql_schema.h>
#include <gtest/gtest.h>
using namespace isc;
using namespace isc::asiolink;
using namespace isc::db;
+using namespace isc::db::test;
using namespace isc::dhcp;
using namespace isc::dhcp::test;
using namespace isc::data;
#include <config.h>
#include <asiolink/io_address.h>
+#include <exceptions/exceptions.h>
#include <dhcpsrv/lease_mgr_factory.h>
#include <dhcpsrv/pgsql_lease_mgr.h>
#include <dhcpsrv/tests/test_utils.h>
#include <dhcpsrv/tests/generic_lease_mgr_unittest.h>
-#include <dhcpsrv/testutils/pgsql_schema.h>
#include <pgsql/pgsql_connection.h>
-#include <exceptions/exceptions.h>
+#include <pgsql/testutils/pgsql_schema.h>
#include <gtest/gtest.h>
using namespace isc;
using namespace isc::asiolink;
using namespace isc::db;
+using namespace isc::db::test;
using namespace isc::dhcp;
using namespace isc::dhcp::test;
using namespace std;
class PgSqlLeaseMgrDbLostCallbackTest : public LeaseMgrDbLostCallbackTest {
public:
virtual void destroySchema() {
- test::destroyPgSQLSchema();
+ destroyPgSQLSchema();
}
virtual void createSchema() {
- test::createPgSQLSchema();
+ createPgSQLSchema();
}
virtual std::string validConnectString() {
- return (test::validPgSQLConnectionString());
+ return (validPgSQLConnectionString());
}
virtual std::string invalidConnectString() {
libdhcpsrvtest_la_SOURCES += host_data_source_utils.cc host_data_source_utils.h
libdhcpsrvtest_la_SOURCES += memory_host_data_source.cc memory_host_data_source.h
libdhcpsrvtest_la_SOURCES += generic_host_data_source_unittest.cc generic_host_data_source_unittest.h
-
-libdhcpsrvtest_la_SOURCES += schema.cc schema.h
libdhcpsrvtest_la_SOURCES += lease_file_io.cc lease_file_io.h
-if HAVE_MYSQL
-libdhcpsrvtest_la_SOURCES += mysql_schema.cc mysql_schema.h
-endif
-if HAVE_PGSQL
-libdhcpsrvtest_la_SOURCES += pgsql_schema.cc pgsql_schema.h
-endif
-if HAVE_CQL
-libdhcpsrvtest_la_SOURCES += cql_schema.cc cql_schema.h
-endif
-
libdhcpsrvtest_la_CXXFLAGS = $(AM_CXXFLAGS)
libdhcpsrvtest_la_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES)
-// Copyright (C) 2015-2016 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2015-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
#define TEST_CQL_SCHEMA_H
#include <config.h>
-#include <dhcpsrv/testutils/schema.h>
+#include <database/testutils/schema.h>
#include <string>
namespace isc {
#include <dhcpsrv/host_data_source_factory.h>
#include <dhcpsrv/testutils/generic_host_data_source_unittest.h>
#include <dhcpsrv/testutils/host_data_source_utils.h>
-#include <dhcpsrv/testutils/schema.h>
+#include <database/testutils/schema.h>
#include <util/buffer.h>
#include <boost/foreach.hpp>
using namespace std;
using namespace isc::asiolink;
using namespace isc::db;
+using namespace isc::db::test;
using namespace isc::util;
using namespace isc::data;
-SUBDIRS = .
+SUBDIRS = . testutils
AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib
AM_CPPFLAGS += $(BOOST_INCLUDES) $(MYSQL_CPPFLAGS)
--- /dev/null
+SUBDIRS = .
+
+AM_CPPFLAGS = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib
+AM_CPPFLAGS += -DDATABASE_SCRIPTS_DIR=\"$(abs_top_srcdir)/src/share/database/scripts\"
+AM_CPPFLAGS += $(BOOST_INCLUDES)
+
+AM_CXXFLAGS = $(KEA_CXXFLAGS)
+
+CLEANFILES = *.gcno *.gcda
+
+if HAVE_GTEST
+
+noinst_LTLIBRARIES = libmysqltest.la
+
+libmysqltest_la_SOURCES = mysql_schema.cc mysql_schema.h
+
+libmysqltest_la_CXXFLAGS = $(AM_CXXFLAGS)
+libmysqltest_la_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES) $(MYSQL_CPPFLAGS)
+libmysqltest_la_LDFLAGS = $(AM_LDFLAGS) $(MYSQL_LIBS)
+
+libmysqltest_la_LIBADD = $(top_builddir)/src/lib/database/testutils/libdatabasetest.la
+
+endif
#include <config.h>
#include <string>
#include <mysql.h>
-#include <dhcpsrv/testutils/mysql_schema.h>
+#include <mysql/testutils/mysql_schema.h>
#include <mysql/mysql_connection.h>
#include <fstream>
using namespace std;
namespace isc {
-namespace dhcp {
+namespace db {
namespace test {
const char* MYSQL_VALID_TYPE = "type=mysql";
}
} // namespace test
-} // namespace dhcp
+} // namespace db
} // namespace isc
-// Copyright (C) 2015-2016 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2015-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
#define TEST_MYSQL_SCHEMA_H
#include <config.h>
-#include <dhcpsrv/testutils/schema.h>
+#include <database/testutils/schema.h>
#include <string>
namespace isc {
-namespace dhcp {
+namespace db {
namespace test {
extern const char* MYSQL_VALID_TYPE;
-SUBDIRS = . tests
+SUBDIRS = . testutils tests
AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib
AM_CPPFLAGS += $(BOOST_INCLUDES) $(PGSQL_CPPFLAGS)
-// Copyright (C) 2016 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2016-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
#include <config.h>
#include <string>
-#include <dhcpsrv/testutils/pgsql_schema.h>
+#include <pgsql/testutils/pgsql_schema.h>
#include <libpq-fe.h>
--- /dev/null
+SUBDIRS = .
+
+AM_CPPFLAGS = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib
+AM_CPPFLAGS += -DDATABASE_SCRIPTS_DIR=\"$(abs_top_srcdir)/src/share/database/scripts\"
+AM_CPPFLAGS += $(BOOST_INCLUDES)
+
+AM_CXXFLAGS = $(KEA_CXXFLAGS)
+
+CLEANFILES = *.gcno *.gcda
+
+if HAVE_GTEST
+
+noinst_LTLIBRARIES = libpgsqltest.la
+
+libpgsqltest_la_SOURCES = pgsql_schema.cc pgsql_schema.h
+
+libpgsqltest_la_CXXFLAGS = $(AM_CXXFLAGS)
+libpgsqltest_la_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES) $(PGSQL_CPPFLAGS)
+libpgsqltest_la_LDFLAGS = $(AM_LDFLAGS) $(PGSQL_LIBS)
+
+libpgsqltest_la_LIBADD = $(top_builddir)/src/lib/database/testutils/libdatabasetest.la
+
+endif
--- /dev/null
+// Copyright (C) 2016-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 <config.h>
+#include <string>
+#include <pgsql/testutils/pgsql_schema.h>
+
+#include <libpq-fe.h>
+
+#include <fstream>
+#include <iostream>
+#include <sstream>
+#include <stdlib.h>
+
+using namespace std;
+
+namespace isc {
+namespace db {
+namespace test {
+
+const char* PGSQL_VALID_TYPE = "type=postgresql";
+
+string
+validPgSQLConnectionString() {
+ return (connectionString(PGSQL_VALID_TYPE, VALID_NAME, VALID_HOST,
+ VALID_USER, VALID_PASSWORD));
+}
+
+void destroyPgSQLSchema(bool show_err) {
+ runPgSQLScript(DATABASE_SCRIPTS_DIR, "pgsql/dhcpdb_drop.pgsql", show_err);
+}
+
+void createPgSQLSchema(bool show_err) {
+ runPgSQLScript(DATABASE_SCRIPTS_DIR, "pgsql/dhcpdb_create.pgsql", show_err);
+}
+
+void runPgSQLScript(const std::string& path, const std::string& script_name,
+ bool show_err) {
+ std::ostringstream cmd;
+
+ cmd << "export PGPASSWORD=keatest; cat ";
+ if (!path.empty()) {
+ cmd << " < " << path << "/";
+ }
+
+ cmd << script_name
+ << " | psql --set ON_ERROR_STOP=1 -A -t -h localhost -q -U keatest -d keatest";
+
+ if (!show_err) {
+ cmd << " 2>/dev/null ";
+ }
+
+ int retval = ::system(cmd.str().c_str());
+ if (retval) {
+ std::cerr << "runPgSQLSchema failed:" << cmd.str() << std::endl;
+ }
+}
+
+} // namespace test
+} // namespace dhcp
+} // namespace isc
--- /dev/null
+// Copyright (C) 2016-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/.
+
+#ifndef TEST_PGSQL_SCHEMA_H
+#define TEST_PGSQL_SCHEMA_H
+
+#include <config.h>
+#include <database/testutils/schema.h>
+#include <string>
+
+namespace isc {
+namespace db {
+namespace test {
+
+extern const char* PGSQL_VALID_TYPE;
+
+/// Return valid connection string
+///
+/// @return valid PgSQL connection string.
+std::string validPgSQLConnectionString();
+
+/// @brief Clear everything from the database
+///
+/// Submits the current schema drop script:
+///
+/// <TEST_ADMIN_SCRIPTS_DIR>/pgsql/dhcpdb_drop.pgsql
+///
+/// to the unit test Postgresql database. If the script fails, the invoking
+/// test will fail. The output of stderr is suppressed unless the parameter,
+/// show_err is true.
+///
+/// @param show_err flag which governs whether or not stderr is suppressed.
+void destroyPgSQLSchema(bool show_err = false);
+
+/// @brief Create the Postgresql Schema
+///
+/// Submits the current schema creation script:
+///
+/// <TEST_ADMIN_SCRIPTS_DIR>/pgsql/dhcpdb_create.pgsql
+///
+/// to the unit test Postgresql database. If the script fails, the invoking
+/// test will fail. The output of stderr is suppressed unless the parameter,
+/// show_err is true.
+///
+/// @param show_err flag which governs whether or not stderr is suppressed.
+void createPgSQLSchema(bool show_err = false);
+
+/// @brief Run a PgSQL SQL script against the Postgresql unit test database
+///
+/// Submits the given SQL script to Postgresql via psql CLI. The output of
+/// stderr is suppressed unless the parameter, show_err is true. The is done
+/// to suppress warnings that might otherwise make test output needlessly
+/// noisy. A gtest assertion occurs if the script fails to execute.
+///
+/// @param path - path (if not blank) of the script to execute
+/// @param script_name - file name of the path to execute
+/// @param show_err flag which governs whether or not stderr is suppressed.
+void runPgSQLScript(const std::string& path, const std::string& script_name,
+ bool show_err);
+
+};
+};
+};
+
+#endif