Commit 990a0d72 authored by Thomas Markwalder's avatar Thomas Markwalder
Browse files

[master] Merged branch 'trac3883'

    3883 adds PostgreSQL support to kea-admin
parents d203f8f5 e83cb2ed
......@@ -1453,9 +1453,10 @@ AC_CONFIG_FILES([compatcheck/Makefile
src/bin/admin/tests/Makefile
src/bin/admin/tests/memfile_tests.sh
src/bin/admin/tests/mysql_tests.sh
src/bin/admin/tests/pgsql_tests.sh
src/bin/admin/scripts/mysql/Makefile
src/bin/admin/scripts/mysql/upgrade_1.0_to_2.0.sh
src/bin/admin/scripts/mysql/upgrade_2.0_to_3.0.sh
src/bin/admin/scripts/mysql/upgrade_2.0_to_3.0.sh
src/bin/admin/scripts/pgsql/Makefile
src/hooks/Makefile
src/hooks/dhcp/Makefile
......
# Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
......@@ -42,3 +42,44 @@ mysql_version_print() {
mysql_version "$@"
printf "%s" $_RESULT
}
pgsql_execute() {
QUERY=$1
shift
if [ $# -gt 0 ]; then
_RESULT=$(echo $QUERY | psql --set ON_ERROR_STOP=1 -A -t -q $*)
retcode=$?
else
export PGPASSWORD=$db_password
_RESULT=$(echo $QUERY | psql --set ON_ERROR_STOP=1 -A -t -q -U $db_user -d $db_name)
retcode=$?
fi
return $retcode
}
pgsql_execute_script() {
file=$1
shift
if [ $# -gt 0 ]; then
_RESULT=$(psql --set ON_ERROR_STOP=1 -A -t -q -f $file $*)
retcode=$?
else
export PGPASSWORD=$db_password
_RESULT=$(psql --set ON_ERROR_STOP=1 -A -t -q -U $db_user -d $db_name -f $file)
retcode=$?
fi
return $retcode
}
pgsql_version() {
pgsql_execute "SELECT version || '.' || minor FROM schema_version" "$@"
return $?
}
pgsql_version_print() {
pgsql_version "$@"
retcode=$?
printf "%s" $_RESULT
return $?
}
#!/bin/sh
# Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
......@@ -158,8 +158,31 @@ mysql_init() {
}
pgsql_init() {
log_error "NOT IMPLEMENTED"
exit 1
printf "Checking if there is a database initialized already. Please ignore errors.\n"
# Let's try to count the number of tables. Anything above 0 means that there
# is some database in place. If there is anything, we abort.
pgsql_execute "\d"
COUNT=`echo "$_RESULT" | wc -w`
if [ $COUNT -gt 0 ]; then
printf "\n"
log_error "Expected empty database $db_name, but the following tables are present \n$_RESULT. Aborting."
exit 2
fi
init_script="$scripts_dir/pgsql/dhcpdb_create.pgsql"
printf "Initializing database using script %s\n" $init_script
pgsql_execute_script $init_script
ERRCODE=$?
if [ "$ERRCODE" -ne 0 ]; then
log_error "Database initialization failed, status code: $ERRCODE?"
exit 1
fi
printf "Lease DB version reported after initialization: "
pgsql_version_print
printf "\n"
exit 0
}
### Functions that implement database version checking commands
......@@ -169,11 +192,6 @@ memfile_version() {
exit 1
}
pgsql_version() {
log_error "NOT IMPLEMENTED"
exit 1
}
### Functions used for upgrade
memfile_upgrade() {
# @todo Implement this as part of #3601
......@@ -218,7 +236,34 @@ mysql_upgrade() {
}
pgsql_upgrade() {
log_error "NOT IMPLEMENTED"
# @todo - When PostgreSQL has a schema greater than 1.0, this will need
# to be implemented. See ticket #3600
pgsql_version_print
printf "\n"
# Check if the scripts directory exists at all.
if [ ! -d ${scripts_dir}/pgsql ]; then
log_error "Invalid scripts directory: ${scripts_dir}/pgsql"
exit 1
fi
# Check if there are any files in it
num_files=$(find ${scripts_dir}/pgsql/upgrade*.sh -type f | wc -l)
if [ $num_files -eq 0 ]; then
log_error "No scripts in ${scripts_dir}/pgsql or the directory is not readable or does not have any upgrade* scripts."
exit 1
fi
for script in ${scripts_dir}/pgsql/upgrade*.sh
do
echo "Processing $script file..."
sh ${script} --user=${db_user} --password=${db_password} ${db_name}
done
printf "Lease DB version reported after upgrade: "
pgsql_version_print
printf "\n"
exit 0
}
......@@ -329,7 +374,7 @@ case ${command} in
printf "\n"
;;
pgsql)
pgsql_version
pgsql_version_print
;;
esac
;;
......
/memfile_tests.sh
/mysql_tests.sh
/pgsql_tests.sh
......@@ -6,12 +6,16 @@ if HAVE_MYSQL
SHTESTS += mysql_tests.sh
endif
if HAVE_PGSQL
SHTESTS += pgsql_tests.sh
endif
noinst_SCRIPTS = $(SHTESTS)
EXTRA_DIST = dhcpdb_create_1.0.mysql
CLEANFILES = *.log
DISTCLEANFILES = memfile_tests.sh mysql_tests.sh
DISTCLEANFILES = memfile_tests.sh mysql_tests.sh pgsql_tests.sh
# Execute all test scripts.
check-local:
......
#!/bin/sh
# Copyright (C) 2015 Internet Systems Consortium, Inc. ("ISC")
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
# Include common test library.
. @abs_top_builddir@/src/lib/testutils/dhcp_test_lib.sh
# If the code is installed, include admin-utils.sh from the destination
# directory. If not, include it from the sources.
prefix=@prefix@
if [ -e @datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh ]; then
. @datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh
else
. @abs_top_builddir@/src/bin/admin/admin-utils.sh
fi
db_user="keatest"
db_password="keatest"
db_name="keatest"
# Set location of the kea-admin.
keaadmin=@abs_top_builddir@/src/bin/admin/kea-admin
# Set location of scripts directory
scripts_dir=@abs_top_srcdir@/src/bin/admin/scripts
# Wipe all tables from the DB:
pgsql_wipe() {
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
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
pgsql_execute "$_RESULT"
assert_eq 0 $? "pgsql_wipe drop failed, expected exit code: %d, actual: %d"
}
pgsql_lease_init_test() {
test_start "pgsql.lease-init"
# Let's wipe the whole database
pgsql_wipe
# Create the database
${keaadmin} lease-init pgsql -u $db_user -p $db_password -n $db_name -d $scripts_dir
assert_eq 0 $? "kea-admin lease-init pgsql failed, expected exit code: %d, actual: %d"
# Verify that all the expected tables exist
# Check schema_version table
pgsql_execute "SELECT version, minor FROM schema_version;"
assert_eq 0 $? "schema_vesion table check failed, expected exit code: %d, actual: %d"
# Check lease4 table
pgsql_execute "SELECT address, hwaddr, client_id, valid_lifetime, expire, subnet_id, fqdn_fwd, fqdn_rev, hostname FROM lease4;"
assert_eq 0 $? "lease4 table check failed, expected exit code: %d, actual: %d"
# Check lease6 table
pgsql_execute "SELECT address, duid, valid_lifetime, expire, subnet_id, pref_lifetime, lease_type, iaid, prefix_len, fqdn_fwd, fqdn_rev, hostname FROM lease6;"
assert_eq 0 $? "lease6 table check failed, expected exit code: %d, actual: %d"
# Check lease6_types table
pgsql_execute "SELECT lease_type, name FROM lease6_types;"
assert_eq 0 $? "lease6_types table check failed, expected exit code: %d, actual: %d"
# Trying to create it again should fail. This verifies the db present
# check
echo ""
echo "DB created successfully, make sure we aren't allowed to try it again:"
${keaadmin} lease-init pgsql -u $db_user -p $db_password -n $db_name -d $scripts_dir
assert_eq 2 $? "kea-admin failed to deny lease-init, expected exit code: %d, actual: %d"
# Let's wipe the whole database
pgsql_wipe
test_finish 0
}
pgsql_lease_version_test() {
test_start "pgsql.lease-version"
# Wipe the whole database
pgsql_wipe
# Create the database
${keaadmin} lease-init pgsql -u $db_user -p $db_password -n $db_name -d $scripts_dir
assert_eq 0 $? "cannot initialize the database, expected exit code: %d, actual: %d"
# Verfiy that kea-admin lease-version returns the correct version
version=$(${keaadmin} lease-version pgsql -u $db_user -p $db_password -n $db_name)
assert_str_eq "1.0" ${version} "Expected kea-admin to return %s, returned value was %s"
# Let's wipe the whole database
pgsql_wipe
test_finish 0
}
pgsql_upgrade_test() {
test_start "pgsql.upgrade-test"
# Wipe the whole database
pgsql_wipe
# Create the database
${keaadmin} lease-init pgsql -u $db_user -p $db_password -n $db_name -d $scripts_dir
assert_eq 0 $? "cannot initialize the database, expected exit code: %d, actual: %d"
${keaadmin} lease-upgrade pgsql -u $db_user -p $db_password -n $db_name -d $scripts_dir
assert_eq 1 $? "lease-upgrade should have failed, expected exit code: %d, actual: %d"
# Let's wipe the whole database
pgsql_wipe
test_finish 0
}
pgsql_lease_init_test
pgsql_lease_version_test
pgsql_upgrade_test
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment