2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-30 21:45:37 +00:00

[#2438] set @json_supported for a MySQL connection

This commit is contained in:
Andrei Pavel
2022-06-21 13:27:32 +03:00
parent d7d2be841b
commit ed2c00232b

View File

@@ -408,16 +408,28 @@ mysql_upgrade_13_to_14_test() {
# -- lease counting tests --
# Clean up.
# Check that @json_supported is NULL by default.
query='SELECT @json_supported'
run_command \
mysql_execute 'DELETE FROM lease4; DELETE FROM lease6;'
assert_eq 0 "${EXIT_CODE}" 'DELETE FROM lease'
mysql_execute "${query}"
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq "NULL" "${OUTPUT}" "${query}: expected output %s, returned %s"
# Populate the lease tables.
# Clean up.
query='DELETE FROM lease4; DELETE FROM lease6;'
run_command \
mysql_execute "${query}"
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq "" "${OUTPUT}" "${query}: expected output %s, returned %s"
# Populate the lease tables. Also check that @json_supported is NULL at
# first, and then it is set after inserting leases.
run_command \
mysql_execute "
SELECT @json_supported;
INSERT INTO lease4 (address, subnet_id, state, user_context) VALUES (100,1,0,
'{\"ISC\": {\"client-classes\": [\"ALL\", \"KNOWN\", \"bar\", \"foo\"] } }');
SELECT @json_supported;
INSERT INTO lease4 (address, subnet_id, state, user_context) VALUES (101,1,1,
'{\"ISC\": {\"client-classes\": [\"ALL\", \"KNOWN\", \"bar\", \"foo\"] } }');
INSERT INTO lease4 (address, subnet_id, state, user_context) VALUES (102,1,2,
@@ -444,8 +456,17 @@ mysql_upgrade_13_to_14_test() {
'{\"ISC\": {\"client-classes\": [\"ALL\", \"KNOWN\", \"bar\", \"foo\"] } }');
INSERT INTO lease6 (address, lease_type, subnet_id, state, user_context) VALUES (107,2,1,1,
'{\"ISC\": {\"client-classes\": [\"ALL\", \"KNOWN\", \"bar\", \"foo\"] } }');
SELECT @json_supported;
"
assert_eq 0 "${EXIT_CODE}" 'INSERT INTO leases when upgrading from 13 to 14 failed. expected %d, returned %d'
one_line=$(printf '%s' "${OUTPUT}" | tr '\n' ' ')
json_supported=$(printf '%s' "${one_line}" | grep -Eo '[0-1]$') || true
if test "${json_supported}" != 0 && test "${json_supported}" != 1; then
assert_str_eq '[01]' "${json_supported}" "INSERT INTO leases when upgrading from 13 to 14 does not set @json_supported. expected '[01]', returned '${json_supported}'"
fi
if ! printf '%s' "${one_line}" | grep -E "NULL ${json_supported} ${json_supported}" > /dev/null; then
assert_str_eq 'NULL [01] [01]' "${one_line}" "INSERT INTO leases when upgrading from 13 to 14 does not set @json_supported. expected 'NULL [01] [01]', returned '${one_line}'"
fi
for v in 4 6; do
if test "${v}" = 4; then
@@ -459,68 +480,148 @@ mysql_upgrade_13_to_14_test() {
run_command \
mysql_execute "${query}"
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq 2 "${OUTPUT}" "${query}: expected output %s, returned %s"
if test "${json_supported}" = 1; then
assert_str_eq 2 "${OUTPUT}" "${query}: expected output %s, returned %s"
else
assert_str_eq 0 "${OUTPUT}" "${query}: expected output %s, returned %s"
fi
# -- Verify some calls to checkLeaseXLimits(). --
query="SELECT checkLease${v}Limits('');"
run_command \
mysql_execute "${query}"
# Should fail with ERROR 4037 (HY000): Unexpected end of JSON text in argument 1 to function 'json_extract'
assert_eq 1 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq '' "${OUTPUT}" "${query}: expected output %s, returned %s"
query="SELECT checkLease${v}Limits('{}');"
run_command \
mysql_execute "${query}"
if test "${json_supported}" = 1; then
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
else
# Should fail with ERROR 1305 (42000) at line 1: FUNCTION keatest.JSON_EXTRACT does not exist
assert_eq 1 "${EXIT_CODE}" "${query}: expected %d, returned %d"
fi
assert_str_eq '' "${OUTPUT}" "${query}: expected output %s, returned %s"
query="SELECT checkLease${v}Limits('{ \"ISC\": { \"limits\": { \"client-classes\": [ { \"name\": \"foo\", \"address-limit\": 1 } ] } } }');"
run_command \
mysql_execute "${query}"
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq "{\"limit-type\": \"client-class\", \"name\": \"foo\", \"lease-type\": \"${lease_type}\", \"limit\": 1, \"count\": 2}" "${OUTPUT}" "${query}: expected output %s, returned %s"
if test "${json_supported}" = 1; then
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq "{\"limit-type\": \"client-class\", \"name\": \"foo\", \"lease-type\": \"${lease_type}\", \"limit\": 1, \"count\": 2}" "${OUTPUT}" "${query}: expected output %s, returned %s"
else
# Should fail with ERROR 1305 (42000) at line 1: FUNCTION keatest.JSON_EXTRACT does not exist
assert_eq 1 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq '' "${OUTPUT}" "${query}: expected output %s, returned %s"
fi
query="SELECT checkLease${v}Limits('{ \"ISC\": { \"limits\": { \"subnet\": { \"id\": 1, \"address-limit\": 1 } } } }');"
run_command \
mysql_execute "${query}"
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq "{\"limit-type\": \"subnet\", \"id\": 1, \"lease-type\": \"${lease_type}\", \"limit\": 1, \"count\": 2}" "${OUTPUT}" "${query}: expected output %s, returned %s"
if test "${json_supported}" = 1; then
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq "{\"limit-type\": \"subnet\", \"id\": 1, \"lease-type\": \"${lease_type}\", \"limit\": 1, \"count\": 2}" "${OUTPUT}" "${query}: expected output %s, returned %s"
else
# Should fail with ERROR 1305 (42000) at line 1: FUNCTION keatest.JSON_EXTRACT does not exist
assert_eq 1 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq '' "${OUTPUT}" "${query}: expected output %s, returned %s"
fi
query="SELECT checkLease${v}Limits('{ \"ISC\": { \"limits\": { \"client-classes\": [ { \"name\": \"foo\", \"address-limit\": 2 } ] } } }');"
run_command \
mysql_execute "${query}"
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq "{\"limit-type\": \"client-class\", \"name\": \"foo\", \"lease-type\": \"${lease_type}\", \"limit\": 2, \"count\": 2}" "${OUTPUT}" "${query}: expected output %s, returned %s"
if test "${json_supported}" = 1; then
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq "{\"limit-type\": \"client-class\", \"name\": \"foo\", \"lease-type\": \"${lease_type}\", \"limit\": 2, \"count\": 2}" "${OUTPUT}" "${query}: expected output %s, returned %s"
else
# Should fail with ERROR 1305 (42000) at line 1: FUNCTION keatest.JSON_EXTRACT does not exist
assert_eq 1 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq '' "${OUTPUT}" "${query}: expected output %s, returned %s"
fi
query="SELECT checkLease${v}Limits('{ \"ISC\": { \"limits\": { \"subnet\": { \"id\": 1, \"address-limit\": 2 } } } }');"
run_command \
mysql_execute "${query}"
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq "{\"limit-type\": \"subnet\", \"id\": 1, \"lease-type\": \"${lease_type}\", \"limit\": 2, \"count\": 2}" "${OUTPUT}" "${query}: expected output %s, returned %s"
if test "${json_supported}" = 1; then
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq "{\"limit-type\": \"subnet\", \"id\": 1, \"lease-type\": \"${lease_type}\", \"limit\": 2, \"count\": 2}" "${OUTPUT}" "${query}: expected output %s, returned %s"
else
# Should fail with ERROR 1305 (42000) at line 1: FUNCTION keatest.JSON_EXTRACT does not exist
assert_eq 1 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq '' "${OUTPUT}" "${query}: expected output %s, returned %s"
fi
query="SELECT checkLease${v}Limits('{ \"ISC\": { \"limits\": { \"client-classes\": [ { \"name\": \"foo\", \"address-limit\": 4 } ] } } }');"
run_command \
mysql_execute "${query}"
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
if test "${json_supported}" = 1; then
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
else
# Should fail with ERROR 1305 (42000) at line 1: FUNCTION keatest.JSON_EXTRACT does not exist
assert_eq 1 "${EXIT_CODE}" "${query}: expected %d, returned %d"
fi
assert_str_eq '' "${OUTPUT}" "${query}: expected output %s, returned %s"
query="SELECT checkLease${v}Limits('{ \"ISC\": { \"limits\": { \"subnet\": { \"id\": 1, \"address-limit\": 4 } } } }');"
run_command \
mysql_execute "${query}"
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
if test "${json_supported}" = 1; then
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
else
# Should fail with ERROR 1305 (42000) at line 1: FUNCTION keatest.JSON_EXTRACT does not exist
assert_eq 1 "${EXIT_CODE}" "${query}: expected %d, returned %d"
fi
assert_str_eq '' "${OUTPUT}" "${query}: expected output %s, returned %s"
query="SELECT checkLease${v}Limits('{ \"ISC\": { \"limits\": { \"client-classes\": [ { \"name\": \"foo\", \"address-limit\": 1 }, { \"name\": \"bar\", \"address-limit\": 1 } ], \"subnet\": { \"id\": 1, \"address-limit\": 1 } } } }');"
run_command \
mysql_execute "${query}"
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq "{\"limit-type\": \"client-class\", \"name\": \"foo\", \"lease-type\": \"${lease_type}\", \"limit\": 1, \"count\": 2}" "${OUTPUT}" "${query}: expected output %s, returned %s"
if test "${json_supported}" = 1; then
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq "{\"limit-type\": \"client-class\", \"name\": \"foo\", \"lease-type\": \"${lease_type}\", \"limit\": 1, \"count\": 2}" "${OUTPUT}" "${query}: expected output %s, returned %s"
else
# Should fail with ERROR 1305 (42000) at line 1: FUNCTION keatest.JSON_EXTRACT does not exist
assert_eq 1 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq '' "${OUTPUT}" "${query}: expected output %s, returned %s"
fi
query="SELECT checkLease${v}Limits('{ \"ISC\": { \"limits\": { \"client-classes\": [ { \"name\": \"foo\", \"address-limit\": 2 }, { \"name\": \"bar\", \"address-limit\": 4 } ], \"subnet\": { \"id\": 1, \"address-limit\": 4 } } } }');"
run_command \
mysql_execute "${query}"
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq "{\"limit-type\": \"client-class\", \"name\": \"foo\", \"lease-type\": \"${lease_type}\", \"limit\": 2, \"count\": 2}" "${OUTPUT}" "${query}: expected output %s, returned %s"
if test "${json_supported}" = 1; then
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq "{\"limit-type\": \"client-class\", \"name\": \"foo\", \"lease-type\": \"${lease_type}\", \"limit\": 2, \"count\": 2}" "${OUTPUT}" "${query}: expected output %s, returned %s"
else
# Should fail with ERROR 1305 (42000) at line 1: FUNCTION keatest.JSON_EXTRACT does not exist
assert_eq 1 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq '' "${OUTPUT}" "${query}: expected output %s, returned %s"
fi
query="SELECT checkLease${v}Limits('{ \"ISC\": { \"limits\": { \"client-classes\": [ { \"name\": \"foo\", \"address-limit\": 4 }, { \"name\": \"bar\", \"address-limit\": 4 } ], \"subnet\": { \"id\": 1, \"address-limit\": 2 } } } }');"
run_command \
mysql_execute "${query}"
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq "{\"limit-type\": \"subnet\", \"id\": 1, \"lease-type\": \"${lease_type}\", \"limit\": 2, \"count\": 2}" "${OUTPUT}" "${query}: expected output %s, returned %s"
if test "${json_supported}" = 1; then
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq "{\"limit-type\": \"subnet\", \"id\": 1, \"lease-type\": \"${lease_type}\", \"limit\": 2, \"count\": 2}" "${OUTPUT}" "${query}: expected output %s, returned %s"
else
# Should fail with ERROR 1305 (42000) at line 1: FUNCTION keatest.JSON_EXTRACT does not exist
assert_eq 1 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq '' "${OUTPUT}" "${query}: expected output %s, returned %s"
fi
query="SELECT checkLease${v}Limits('{ \"ISC\": { \"limits\": { \"client-classes\": [ { \"name\": \"foo\", \"address-limit\": 4 }, { \"name\": \"bar\", \"address-limit\": 4 } ], \"subnet\": { \"id\": 1, \"address-limit\": 4 } } } }');"
run_command \
mysql_execute "${query}"
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
if test "${json_supported}" = 1; then
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
else
# Should fail with ERROR 1305 (42000) at line 1: FUNCTION keatest.JSON_EXTRACT does not exist
assert_eq 1 "${EXIT_CODE}" "${query}: expected %d, returned %d"
fi
assert_str_eq '' "${OUTPUT}" "${query}: expected output %s, returned %s"
done
@@ -529,6 +630,7 @@ mysql_upgrade_13_to_14_test() {
run_command \
mysql_execute "${query}"
assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
assert_str_eq "" "${OUTPUT}" "${query}: expected output %s, returned %s"
}
mysql_upgrade_test() {