--- /dev/null
+# Copyright (C) 2016 Internet Systems Consortium.
+#
+# 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/.
+
+# Turn off foreign key checks as CASCADE isn't really supported in MySQL
+SET SESSION FOREIGN_KEY_CHECKS = 0;
+DROP TABLE IF EXISTS lease4;
+DROP TABLE IF EXISTS lease6;
+DROP TABLE IF EXISTS lease6_types;
+DROP TABLE IF EXISTS lease_hwaddr_source;
+DROP TABLE IF EXISTS schema_version;
+DROP TABLE IF EXISTS ipv6_reservations;
+DROP TABLE IF EXISTS hosts;
+DROP TABLE IF EXISTS dhcp4_options;
+DROP TABLE IF EXISTS dhcp6_options;
+DROP TABLE IF EXISTS host_identifier_type;
+DROP TABLE IF EXISTS lease_state;
+DROP TRIGGER IF EXISTS host_BDEL;
+DROP PROCEDURE IF EXISTS lease4DumpHeader;
+DROP PROCEDURE IF EXISTS lease4DumpData;
+DROP PROCEDURE IF EXISTS lease6DumpHeader;
+DROP PROCEDURE IF EXISTS lease6DumpData;
--- /dev/null
+-- Copyright (C) 2016 Internet Systems Consortium.
+
+-- 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/.
+
+DROP TABLE IF EXISTS lease4 CASCADE;
+DROP TABLE IF EXISTS lease6 CASCADE;
+DROP TABLE IF EXISTS lease6_types CASCADE;
+DROP TABLE IF EXISTS schema_version CASCADE;
+DROP TABLE IF EXISTS lease_state CASCADE;
+DROP FUNCTION IF EXISTS lease4DumpHeader();
+DROP FUNCTION IF EXISTS lease4DumpData();
+DROP FUNCTION IF EXISTS lease6DumpHeader();
+DROP FUNCTION IF EXISTS lease6DumpData();
mysql_wipe() {
printf "Wiping whole database %s\n" $db_name
- # First we build the list of drop table commands
- # We don't bother with "cascade" because as of MySQL
- # 5.1 it is only there to ease porting, it doesn't
- # actually do anything.
- qry="\
-SELECT CONCAT('DROP TABLE ', table_schema, '.', table_name, ';') \
-FROM information_schema.tables \
-WHERE table_schema = 'keatest';"
-
- drop_sql=`mysql_execute "${qry}"`
+ drop_script="@abs_top_srcdir@/src/bin/admin/scripts/mysql/dhcpdb_drop.mysql"
+ mysql -u$db_user -p$db_password $db_name >/dev/null 2>&1 < $drop_script
ERRCODE=$?
- assert_eq 0 $ERRCODE "mysql-wipe: table query failed, exit code %d, expected %d"
- # We need to turn off referrential integrity checks so tables
- # are dropped regardless of whether they are used in foreign keys.
- # (This is what cascade would normally do)
- mysql_execute "SET SESSION FOREIGN_KEY_CHECKS = 0;$drop_sql"
- ERRCODE=$?
assert_eq 0 $ERRCODE "mysql-wipe: drop table sql failed, exit code %d, expected %d"
}
#!/bin/sh
-# Copyright (C) 2015 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2015-2016 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
printf "Wiping whole database %s\n" $db_name
export PGPASSWORD=$db_password
- # Make a set of drop commands, one for each table owned by keatest
- RESULT=`pgsql_execute "SELECT 'drop table if exists '||t.tablename || ' cascade;' as dcmd FROM pg_catalog.pg_tables t WHERE t.tableowner = 'keatest';"`
- assert_eq 0 $? "pgsql_wipe select failed, expected exit code: %d, actual: %d"
-
- # Now execute the set of drop commands from the result set returned
- RESULT=`pgsql_execute "$RESULT"`
- assert_eq 0 $? "pgsql_wipe drop failed, expected exit code: %d, actual: %d"
+ drop_script="@abs_top_srcdir@/src/bin/admin/scripts/pgsql/dhcpdb_drop.pgsql"
+ cat $drop_script | psql --set ON_ERROR_STOP=1 -A -t -q -U keatest -d keatest >/dev/null 2>&1
+ assert_eq 0 $? "pgsql_wipe drop failed, expected exit code: %d, actual: %d"
}
pgsql_lease_init_test() {
TEST(MySqlOpenTest, OpenDatabase) {
// Schema needs to be created for the test to work.
- destroyMySQLSchema();
+ destroyMySQLSchema(true);
createMySQLSchema(true);
// Check that lease manager open the database opens correctly and tidy up.
NoDatabaseName);
// Tidy up after the test
- destroyMySQLSchema();
+ destroyMySQLSchema(true);
}
/// @brief Check the getType() method
TEST(PgSqlOpenTest, OpenDatabase) {
// Schema needs to be created for the test to work.
- destroyPgSQLSchema();
- createPgSQLSchema();
+ destroyPgSQLSchema(true);
+ createPgSQLSchema(true);
// Check that lease manager open the database opens correctly and tidy up.
// If it fails, print the error message.
NoDatabaseName);
// Tidy up after the test
- destroyPgSQLSchema();
+ destroyPgSQLSchema(true);
}
/// @brief Check the getType() method
VALID_USER, VALID_PASSWORD));
}
-void destroyMySQLSchema() {
- MySqlHolder mysql;
- // @todo - replace this with call to drop script once it exists
- const char* destroy_statement[] = {
- // Turning off referential integrity checks ensures tables get dropped
- "SET SESSION FOREIGN_KEY_CHECKS = 0",
- "DROP TABLE IF EXISTS lease4",
- "DROP TABLE IF EXISTS lease6",
- "DROP TABLE IF EXISTS lease6_types",
- "DROP TABLE IF EXISTS lease_hwaddr_source",
- "DROP TABLE IF EXISTS schema_version",
- "DROP TABLE IF EXISTS ipv6_reservations",
- "DROP TABLE IF EXISTS hosts",
- "DROP TABLE IF EXISTS dhcp4_options",
- "DROP TABLE IF EXISTS dhcp6_options",
- "DROP TABLE IF EXISTS host_identifier_type",
- "DROP TABLE IF EXISTS lease_state",
- "DROP TRIGGER IF EXISTS host_BDEL",
- "DROP PROCEDURE IF EXISTS lease4DumpHeader",
- "DROP PROCEDURE IF EXISTS lease4DumpData",
- "DROP PROCEDURE IF EXISTS lease6DumpHeader",
- "DROP PROCEDURE IF EXISTS lease6DumpData",
- NULL
- };
-
- // Open database
- (void) mysql_real_connect(mysql, "localhost", "keatest",
- "keatest", "keatest", 0, NULL, 0);
-
- // Get rid of everything in it.
- for (int i = 0; destroy_statement[i] != NULL; ++i) {
- (void) mysql_query(mysql, destroy_statement[i]);
- }
+void destroyMySQLSchema(bool show_err) {
+ runMySQLScript(TEST_ADMIN_SCRIPTS_DIR, "mysql/dhcpdb_drop.mysql", show_err);
}
void createMySQLSchema(bool show_err) {
/// @brief Clear everything from the database
///
-/// There is no error checking in this code: if something fails, one of the
-/// tests will (should) fall over.
-void destroyMySQLSchema();
+/// Submits the current schema drop script:
+///
+/// <TEST_ADMIN_SCRIPTS_DIR>/mysql/dhcpdb_drop.mysql
+///
+/// to the unit test MySQL 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 destroyMySQLSchema(bool show_err = false);
-// @brief Run a MySQL SQL script against the Postgresql unit test database
-//
-// Submits the given SQL script to MySQL via mysql 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.
+/// @brief Create the MySQL Schema
+///
+/// Submits the current schema creation script:
+///
+/// <TEST_ADMIN_SCRIPTS_DIR>/mysql/dhcpdb_create.mysql
+///
+/// to the unit test MySQL 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 createMySQLSchema(bool show_err = false);
+
+/// @brief Run a MySQL SQL script against the Postgresql unit test database
+///
+/// Submits the given SQL script to MySQL via mysql 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 runMySQLScript(const std::string& path, const std::string& script_name,
bool show_err);
-// @brief Create the MySQL Schema
-//
-// Submits the current schema creation script:
-//
-// <TEST_ADMIN_SCRIPTS_DIR>/mysql/dhcpdb_create.mysql
-//
-// to the unit test MySQL 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 createMySQLSchema(bool show_err = false);
-
};
};
};
VALID_USER, VALID_PASSWORD));
}
-void destroyPgSQLSchema() {
- // @todo - replace this call to run drop script once the script exists
- const char* destroy_statement[] = {
- "DROP TABLE lease4 CASCADE",
- "DROP TABLE LEASE6 CASCADE",
- "DROP TABLE lease6_types CASCADE",
- "DROP TABLE schema_version CASCADE",
- "DROP TABLE lease_state CASCADE",
- "DROP FUNCTION lease4DumpHeader()",
- "DROP FUNCTION lease4DumpData()",
- "DROP FUNCTION lease6DumpHeader()",
- "DROP FUNCTION lease6DumpData()",
- NULL
- };
-
- // Open database
- PGconn* conn = 0;
- conn = PQconnectdb("host = 'localhost' user = 'keatest'"
- " password = 'keatest' dbname = 'keatest'");
-
- // Get rid of everything in it.
- for (int i = 0; destroy_statement[i] != NULL; ++i) {
- PGresult* r = PQexec(conn, destroy_statement[i]);
- PQclear(r);
- }
-
- PQfinish(conn);
+void destroyPgSQLSchema(bool show_err) {
+ runPgSQLScript(TEST_ADMIN_SCRIPTS_DIR, "pgsql/dhcpdb_drop.pgsql",
+ show_err);
}
void createPgSQLSchema(bool show_err) {
/// @brief Clear everything from the database
///
-/// There is no error checking in this code: if something fails, one of the
-/// tests will (should) fall over.
-void destroyPgSQLSchema();
+/// 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.
+/// @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.
+/// @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);