Parcourir la source

[trac3802] Added unit tests for mysql lease_dump

src/bin/admin/admin-utils.sh
    modified mysql_execute to return mysql's exit status

src/bin/admin/tests/mysql_tests.sh.in
    added new tests: mysql_lease4_dump_test and mysql_lease4_dump_test

Added two data files used by the new tests for checking lease dump correctness:
    src/bin/admin/tests/data/mysql.lease4_dump_test.reference.csv
    src/bin/admin/tests/data/mysql.lease6_dump_test.reference.csv

NOTE that lease-dump for Postgresql has been implemented but lacks unit tests.
The unit tests will be completed once admin-utils.sh and kea-admin fully
support Postgres see #3883 and #3884.
Thomas Markwalder il y a 10 ans
Parent
commit
c2ca51d996

+ 5 - 4
src/bin/admin/admin-utils.sh

@@ -22,16 +22,17 @@
 #     more convenient to use if the script didn't parse db_user db_password
 #     and db_name.
 #
-# @todo: Catch mysql return code. I tried to use PIPESTATUS[X], but it doesn't
-# seem to work (or at least I don't know how to use it).
 mysql_execute() {
     if [ $# -gt 1 ]; then
-        QUERY=$1
+        QUERY="$1"
         shift
-        _RESULT=`echo $QUERY | mysql -N -B $@`
+        _RESULT=$(mysql -N -B  $* -e "${QUERY}")
+        retcode=$?
     else
         _RESULT=$(mysql -N -B --user=$db_user --password=$db_password -e "${1}" $db_name)
+        retcode=$?
     fi
+    return $retcode
 }
 
 mysql_version() {

+ 2 - 0
src/bin/admin/tests/data/mysql.lease4_dump_test.reference.csv

@@ -0,0 +1,2 @@
+address,hwaddr,client_id,valid_lifetime,expire,subnet_id,fqdn_fwd,fqdn_rev,hostname
+0.0.0.10,3230,3330,40,0000-00-00 00:00:00,50,1,1,example.com

+ 2 - 0
src/bin/admin/tests/data/mysql.lease6_dump_test.reference.csv

@@ -0,0 +1,2 @@
+address,duid,valid_lifetime,expire,subnet_id,pref_lifetime,lease_type,iaid,prefix_len,fqdn_fwd,fqdn_rev,hostname,hwaddr,hwtype,hwaddr_source
+10,3230,30,0000-00-00 00:00:00,40,50,IA_TA,60,70,1,1,example.com,3830,90,100

+ 102 - 16
src/bin/admin/tests/mysql_tests.sh.in

@@ -28,7 +28,7 @@ else
 fi
 
 db_user="keatest"
-db_pass="keatest"
+db_password="keatest"
 db_name="keatest"
 
 # Set location of the kea-admin.
@@ -37,7 +37,7 @@ keaadmin=@abs_top_builddir@/src/bin/admin/kea-admin
 # Wipe all tables from the DB:
 mysql_wipe() {
     printf "Wiping whole database %s\n" $db_name
-    mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
+    mysql -u$db_user -p$db_password $db_name >/dev/null 2>&1 <<EOF
 SET @tables = NULL;
 SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @tables
   FROM information_schema.tables
@@ -57,42 +57,42 @@ mysql_lease_init_test() {
     mysql_wipe
 
     # Ok, now let's initalize the database
-    ${keaadmin} lease-init mysql -u $db_user -p $db_pass -n $db_name -d @abs_top_srcdir@/src/bin/admin/scripts
+    ${keaadmin} lease-init mysql -u $db_user -p $db_password -n $db_name -d @abs_top_srcdir@/src/bin/admin/scripts
     ERRCODE=$?
 
     assert_eq 0 $ERRCODE "kea-admin lease-init mysql returned non-zero status code %d, expected %d"
 
     # Ok, now let's check if the tables are indeed there.
     # First table: schema_version. Should have 2 columns: version and minor.
-    mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
+    mysql -u$db_user -p$db_password $db_name >/dev/null 2>&1 <<EOF
     SELECT version, minor FROM schema_version;
 EOF
     ERRCODE=$?
     assert_eq 0 $ERRCODE "schema_version table is missing or broken. (returned status code %d, expected %d)"
 
     # Second table: lease4
-    mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
+    mysql -u$db_user -p$db_password $db_name >/dev/null 2>&1 <<EOF
     SELECT address, hwaddr, client_id, valid_lifetime, expire, subnet_id, fqdn_fwd, fqdn_rev, hostname FROM lease4;
 EOF
     ERRCODE=$?
     assert_eq 0 $ERRCODE "lease4 table is missing or broken. (returned status code %d, expected %d)"
 
     # Third table: lease6
-    mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
+    mysql -u$db_user -p$db_password $db_name >/dev/null 2>&1 <<EOF
     SELECT address, duid, valid_lifetime, expire, subnet_id, pref_lifetime, lease_type, iaid, prefix_len, fqdn_fwd, fqdn_rev, hostname, hwaddr, hwtype, hwaddr_source FROM lease6;
 EOF
     ERRCODE=$?
     assert_eq 0 $ERRCODE "lease6 table is missing or broken. (returned status code %d, expected %d)"
 
     # Fourth table: lease6_types
-    mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
+    mysql -u$db_user -p$db_password $db_name >/dev/null 2>&1 <<EOF
     SELECT lease_type, name FROM lease6_types;
 EOF
     ERRCODE=$?
     assert_eq 0 $ERRCODE "lease6_types table is missing or broken. (returned status code %d, expected %d)"
 
     # Fifth table: lease_hwaddr_source
-    mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
+    mysql -u$db_user -p$db_password $db_name >/dev/null 2>&1 <<EOF
     SELECT hwaddr_source, name FROM lease_hwaddr_source;
 EOF
     ERRCODE=$?
@@ -111,7 +111,7 @@ mysql_lease_version_test() {
     mysql_wipe
 
     # Ok, now let's create a version 1.7
-    mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
+    mysql -u$db_user -p$db_password $db_name >/dev/null 2>&1 <<EOF
 CREATE TABLE schema_version (
     version INT PRIMARY KEY NOT NULL,
     minor INT
@@ -119,7 +119,7 @@ CREATE TABLE schema_version (
 INSERT INTO schema_version VALUES (1, 7);
 EOF
 
-    version=$(${keaadmin} lease-version mysql -u $db_user -p $db_pass -n $db_name)
+    version=$(${keaadmin} lease-version mysql -u $db_user -p $db_password -n $db_name)
 
     assert_str_eq "1.7" ${version} "Expected kea-admin to return %s, returned value was %s"
 
@@ -139,15 +139,15 @@ mysql_lease_upgrade_test() {
     mysql_wipe
 
     # Initialize database to scheme 1.0.
-    mysql -u$db_user -p$db_pass $db_name < @abs_top_srcdir@/src/bin/admin/tests/dhcpdb_create_1.0.mysql
+    mysql -u$db_user -p$db_password $db_name < @abs_top_srcdir@/src/bin/admin/tests/dhcpdb_create_1.0.mysql
 
     # Sanity check - verify that it reports version 1.0.
-    version=$(${keaadmin} lease-version mysql -u $db_user -p $db_pass -n $db_name -d @abs_top_srcdir@/src/bin/admin/scripts)
+    version=$(${keaadmin} lease-version mysql -u $db_user -p $db_password -n $db_name -d @abs_top_srcdir@/src/bin/admin/scripts)
 
     assert_str_eq "1.0" ${version} "Expected kea-admin to return %s, returned value was %s"
 
     # Ok, we have a 1.0 database. Let's upgrade it to 2.0
-    ${keaadmin} lease-upgrade mysql -u $db_user -p $db_pass -n $db_name -d @abs_top_srcdir@/src/bin/admin/scripts
+    ${keaadmin} lease-upgrade mysql -u $db_user -p $db_password -n $db_name -d @abs_top_srcdir@/src/bin/admin/scripts
     ERRCODE=$?
 
     assert_eq 0 $ERRCODE "kea-admin lease-upgrade mysql returned non-zero status code %d, expected %d"
@@ -155,21 +155,21 @@ mysql_lease_upgrade_test() {
     # Let's check that the new tables are indeed there.
 
     # Third table: lease6
-    mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
+    mysql -u$db_user -p$db_password $db_name >/dev/null 2>&1 <<EOF
     SELECT hwaddr, hwtype, hwaddr_source FROM lease6;
 EOF
     ERRCODE=$?
     assert_eq 0 $ERRCODE "lease6 table not upgraded to 2.0 (returned status code %d, expected %d)"
 
     # Fifth table: lease_hwaddr_source
-    mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
+    mysql -u$db_user -p$db_password $db_name >/dev/null 2>&1 <<EOF
     SELECT hwaddr_source, name FROM lease_hwaddr_source;
 EOF
     ERRCODE=$?
     assert_eq 0 $ERRCODE "lease_hwaddr_source table is missing or broken. (returned status code %d, expected %d)"
 
     # Verify that it reports version 2.0.
-    version=$(${keaadmin} lease-version mysql -u $db_user -p $db_pass -n $db_name)
+    version=$(${keaadmin} lease-version mysql -u $db_user -p $db_password -n $db_name)
 
     assert_str_eq "2.0" ${version} "Expected kea-admin to return %s, returned value was %s"
 
@@ -179,6 +179,92 @@ EOF
     test_finish 0
 }
 
+mysql_lease4_dump_test() {
+    test_start "mysql.lease4_dump_test"
+
+    test_dir="@abs_top_srcdir@/src/bin/admin/tests"
+    script_dir="@abs_top_srcdir@/src/bin/admin/scripts"
+    output_file="$test_dir/data/lease4_dump_test.output.csv"
+    ref_file="$test_dir/data/mysql.lease4_dump_test.reference.csv"
+
+    # Let's wipe the whole database
+    mysql_wipe
+
+    # Ok, now let's initalize the database
+    ${keaadmin} lease-init mysql -u $db_user -p $db_password -n $db_name -d $script_dir
+    ERRCODE=$?
+    assert_eq 0 $ERRCODE "could not create database,  status code %d"
+
+    # Insert the reference record
+    insert_sql="insert into lease4 values(10,20,30,40,0,50,1,1,\"example.com\");"
+    mysql_execute "$insert_sql"
+    ERRCODE=$?
+    assert_eq 0 $ERRCODE "insert into lease4 failed, status code %d"
+
+    # Dump lease4 to output_file
+    ${keaadmin} lease-dump mysql -4 -u $db_user -p $db_password -n $db_name -d $script_dir -o $output_file
+    ERRCODE=$?
+    assert_eq 0 $ERRCODE "kea-admin lease-dump -4 failed,  status code %d"
+
+    # Compare the dump output to reference file, they should be identical
+    cmp -s $output_file  $ref_file
+    ERRCODE=$?
+    assert_eq 0 $ERRCODE "dump file does not match reference file"
+
+    # remove the output file
+    rm $output_file
+
+    # Let's wipe the whole database
+    mysql_wipe
+
+    test_finish 0
+}
+
+mysql_lease6_dump_test() {
+    test_start "mysql.lease6_dump_test"
+
+    test_dir="@abs_top_srcdir@/src/bin/admin/tests"
+    script_dir="@abs_top_srcdir@/src/bin/admin/scripts"
+    output_file="$test_dir/data/lease6_dump_test.output.csv"
+    ref_file="$test_dir/data/mysql.lease6_dump_test.reference.csv"
+
+    # Let's wipe the whole database
+    mysql_wipe
+
+    # Ok, now let's initalize the database
+    ${keaadmin} lease-init mysql -u $db_user -p $db_password -n $db_name -d $script_dir
+    ERRCODE=$?
+    assert_eq 0 $ERRCODE "could not create database,  status code %d"
+
+    # Insert the reference record
+    insert_sql="insert into lease6 values(10,20,30,0,40,50,1,60,70,1,1,\"example.com\",80,90,100);"
+
+    mysql_execute "$insert_sql"
+    ERRCODE=$?
+    assert_eq 0 $ERRCODE "insert into lease6 failed, status code %d"
+
+    # Dump lease4 to output_file
+    ${keaadmin} lease-dump mysql -6 -u $db_user -p $db_password -n $db_name -d $script_dir -o $output_file
+    ERRCODE=$?
+    assert_eq 0 $ERRCODE "kea-admin lease-dump -6 failed, status code %d"
+
+    # Compare the dump output to reference file, they should be identical
+    cmp -s $output_file  $ref_file
+    ERRCODE=$?
+    assert_eq 0 $ERRCODE "dump file does not match reference file"
+
+    # remove the output file
+    rm $output_file
+
+    # Let's wipe the whole database
+    mysql_wipe
+
+    test_finish 0
+}
+
+
 mysql_lease_init_test
 mysql_lease_version_test
 mysql_lease_upgrade_test
+mysql_lease4_dump_test
+mysql_lease6_dump_test