mysql_tests.sh.in 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. #!/bin/sh
  2. # Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC")
  3. #
  4. # Permission to use, copy, modify, and/or distribute this software for any
  5. # purpose with or without fee is hereby granted, provided that the above
  6. # copyright notice and this permission notice appear in all copies.
  7. #
  8. # THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
  9. # REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  10. # AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
  11. # INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  12. # LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  13. # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  14. # PERFORMANCE OF THIS SOFTWARE.
  15. # Include common test library.
  16. . @abs_top_builddir@/src/lib/testutils/dhcp_test_lib.sh
  17. # If the code is installed, include admin-utils.sh from the destination
  18. # directory. If not, include it from the sources.
  19. prefix=@prefix@
  20. if [ -e @datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh ]; then
  21. . @datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh
  22. else
  23. . @abs_top_builddir@/src/bin/admin/admin-utils.sh
  24. fi
  25. db_user="keatest"
  26. db_pass="keatest"
  27. db_name="keatest"
  28. # Set location of the kea-admin.
  29. keaadmin=@abs_top_builddir@/src/bin/admin/kea-admin
  30. # Wipe all tables from the DB:
  31. mysql_wipe() {
  32. printf "Wiping whole database %s\n" $db_name
  33. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  34. SET @tables = NULL;
  35. SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @tables
  36. FROM information_schema.tables
  37. WHERE table_schema = 'keatest';
  38. SET @tables = CONCAT('DROP TABLE ', @tables);
  39. PREPARE stmt FROM @tables;
  40. EXECUTE stmt;
  41. DEALLOCATE PREPARE stmt;
  42. EOF
  43. }
  44. mysql_lease_init_test() {
  45. test_start "mysql.lease-init"
  46. # Let's wipe the whole database
  47. mysql_wipe
  48. # Ok, now let's initalize the database
  49. ${keaadmin} lease-init mysql -u $db_user -p $db_pass -n $db_name -d @abs_top_srcdir@/src/bin/admin/scripts
  50. ERRCODE=$?
  51. assert_eq 0 $ERRCODE "kea-admin lease-init mysql returned non-zero status code %d, expected %d"
  52. # Ok, now let's check if the tables are indeed there.
  53. # First table: schema_version. Should have 2 columns: version and minor.
  54. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  55. SELECT version, minor FROM schema_version;
  56. EOF
  57. ERRCODE=$?
  58. assert_eq 0 $ERRCODE "schema_version table is missing or broken. (returned status code %d, expected %d)"
  59. # Second table: lease4
  60. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  61. SELECT address, hwaddr, client_id, valid_lifetime, expire, subnet_id, fqdn_fwd, fqdn_rev, hostname FROM lease4;
  62. EOF
  63. ERRCODE=$?
  64. assert_eq 0 $ERRCODE "lease4 table is missing or broken. (returned status code %d, expected %d)"
  65. # Third table: lease6
  66. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  67. 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;
  68. EOF
  69. ERRCODE=$?
  70. assert_eq 0 $ERRCODE "lease6 table is missing or broken. (returned status code %d, expected %d)"
  71. # Fourth table: lease6_types
  72. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  73. SELECT lease_type, name FROM lease6_types;
  74. EOF
  75. ERRCODE=$?
  76. assert_eq 0 $ERRCODE "lease6_types table is missing or broken. (returned status code %d, expected %d)"
  77. # Fifth table: lease_hwaddr_source
  78. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  79. SELECT hwaddr_source, name FROM lease_hwaddr_source;
  80. EOF
  81. ERRCODE=$?
  82. assert_eq 0 $ERRCODE "lease_hwaddr_source table is missing or broken. (returned status code %d, expected %d)"
  83. # Let's wipe the whole database
  84. mysql_wipe
  85. test_finish 0
  86. }
  87. mysql_lease_version_test() {
  88. test_start "mysql.lease-version"
  89. # Let's wipe the whole database
  90. mysql_wipe
  91. # Ok, now let's create a version 1.7
  92. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  93. CREATE TABLE schema_version (
  94. version INT PRIMARY KEY NOT NULL,
  95. minor INT
  96. );
  97. INSERT INTO schema_version VALUES (1, 7);
  98. EOF
  99. version=$(${keaadmin} lease-version mysql -u $db_user -p $db_pass -n $db_name)
  100. assert_str_eq "1.7" ${version} "Expected kea-admin to return %s, returned value was %s"
  101. # Let's wipe the whole database
  102. mysql_wipe
  103. test_finish 0
  104. }
  105. mysql_host_reservation_init_test() {
  106. test_start "mysql.host_reservation-init"
  107. # Let's wipe the whole database
  108. mysql_wipe
  109. # Ok, now let's initalize the database
  110. ${keaadmin} lease-init mysql -u $db_user -p $db_pass -n $db_name -d @abs_top_srcdir@/src/bin/admin/scripts
  111. ERRCODE=$?
  112. assert_eq 0 $ERRCODE "kea-admin lease-init mysql returned non-zero status code %d, expected %d"
  113. # Ok, now let's check if the tables are indeed there.
  114. # First table: schema_version. Should have 2 columns: version and minor.
  115. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  116. SELECT version, minor FROM schema_version;
  117. EOF
  118. ERRCODE=$?
  119. assert_eq 0 $ERRCODE "schema_version table is missing or broken. (returned status code %d, expected %d)"
  120. # Second table: hosts
  121. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  122. SELECT host_id, dhcp_identifier, dhcp_identifier_type, dhcp4_subnet_id, dhcp6_subnet_id, ipv4_address, hostname, dhcp4_client_classes, dhcp6_client_classes FROM hosts;
  123. EOF
  124. ERRCODE=$?
  125. assert_eq 0 $ERRCODE "hosts table is missing or broken. (returned status code %d, expected %d)"
  126. # Third table: ipv6_reservations
  127. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  128. SELECT reservation_id, address, prefix_len, type, dhcp6_iaid, host_id FROM ipv6_reservations;
  129. EOF
  130. ERRCODE=$?
  131. assert_eq 0 $ERRCODE "ipv6_reservations table is missing or broken. (returned status code %d, expected %d)"
  132. # Fourth table: dhcp4_options
  133. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  134. SELECT option_id, code, value, formatted_value, space, persistent, dhcp_client_class, dhcp4_subnet_id, host_id FROM dhcp4_options;
  135. EOF
  136. ERRCODE=$?
  137. assert_eq 0 $ERRCODE "dhcp4_options table is missing or broken. (returned status code %d, expected %d)"
  138. # Fifth table: dhcp6_options
  139. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  140. SELECT option_id, code, value, formatted_value, space, persistent, dhcp_client_class, dhcp6_subnet_id, host_id FROM dhcp6_options;
  141. EOF
  142. ERRCODE=$?
  143. assert_eq 0 $ERRCODE "dhcp6_options table is missing or broken. (returned status code %d, expected %d)"
  144. # Let's wipe the whole database
  145. mysql_wipe
  146. test_finish 0
  147. }
  148. mysql_upgrade_test() {
  149. test_start "mysql.host_reservation-upgrade"
  150. # Let's wipe the whole database
  151. mysql_wipe
  152. # Initialize database to scheme 1.0.
  153. mysql -u$db_user -p$db_pass $db_name < @abs_top_srcdir@/src/bin/admin/tests/dhcpdb_create_1.0.mysql
  154. # Sanity check - verify that it reports version 1.0.
  155. version=$(${keaadmin} lease-version mysql -u $db_user -p $db_pass -n $db_name -d @abs_top_srcdir@/src/bin/admin/scripts)
  156. assert_str_eq "1.0" ${version} "Expected kea-admin to return %s, returned value was %s"
  157. # Ok, we have a 1.0 database. Let's upgrade it to 3.0
  158. ${keaadmin} lease-upgrade mysql -u $db_user -p $db_pass -n $db_name -d @abs_top_srcdir@/src/bin/admin/scripts
  159. ERRCODE=$?
  160. assert_eq 0 $ERRCODE "kea-admin lease-upgrade mysql returned non-zero status code %d, expected %d"
  161. # Let's check that the new tables are indeed there.
  162. #table: lease6 (upgrade 1.0 -> 2.0)
  163. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  164. SELECT hwaddr, hwtype, hwaddr_source FROM lease6;
  165. EOF
  166. ERRCODE=$?
  167. assert_eq 0 $ERRCODE "lease6 table not upgraded to 2.0 (returned status code %d, expected %d)"
  168. #table: lease_hwaddr_source (upgrade 1.0 -> 2.0)
  169. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  170. SELECT hwaddr_source, name FROM lease_hwaddr_source;
  171. EOF
  172. ERRCODE=$?
  173. assert_eq 0 $ERRCODE "lease_hwaddr_source table is missing or broken. (returned status code %d, expected %d)"
  174. #table: hosts (upgrade 2.0 -> 3.0)
  175. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  176. SELECT host_id, dhcp_identifier, dhcp_identifier_type, dhcp4_subnet_id, dhcp6_subnet_id, ipv4_address, hostname, dhcp4_client_classes, dhcp6_client_classes FROM hosts;
  177. EOF
  178. ERRCODE=$?
  179. assert_eq 0 $ERRCODE "hosts table is missing or broken. (returned status code %d, expected %d)"
  180. #table: ipv6_reservations (upgrade 2.0 -> 3.0)
  181. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  182. SELECT reservation_id, address, prefix_len, type, dhcp6_iaid, host_id FROM ipv6_reservations;
  183. EOF
  184. ERRCODE=$?
  185. assert_eq 0 $ERRCODE "ipv6_reservations table is missing or broken. (returned status code %d, expected %d)"
  186. #table: dhcp4_options (upgrade 2.0 -> 3.0)
  187. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  188. SELECT option_id, code, value, formatted_value, space, persistent, dhcp_client_class, dhcp4_subnet_id, host_id FROM dhcp4_options;
  189. EOF
  190. ERRCODE=$?
  191. assert_eq 0 $ERRCODE "dhcp4_options table is missing or broken. (returned status code %d, expected %d)"
  192. #table: dhcp6_options (upgrade 2.0 -> 3.0)
  193. mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <<EOF
  194. SELECT option_id, code, value, formatted_value, space, persistent, dhcp_client_class, dhcp6_subnet_id, host_id FROM dhcp6_options;
  195. EOF
  196. ERRCODE=$?
  197. assert_eq 0 $ERRCODE "dhcp6_options table is missing or broken. (returned status code %d, expected %d)"
  198. # Verify that it reports version 3.0.
  199. version=$(${keaadmin} lease-version mysql -u $db_user -p $db_pass -n $db_name)
  200. assert_str_eq "3.0" ${version} "Expected kea-admin to return %s, returned value was %s"
  201. # Let's wipe the whole database
  202. mysql_wipe
  203. test_finish 0
  204. }
  205. mysql_lease_init_test
  206. mysql_host_reservation_init_test
  207. mysql_lease_version_test
  208. mysql_upgrade_test