From: Thomas Markwalder Date: Tue, 20 Jun 2023 19:49:13 +0000 (-0400) Subject: [#2909] Addressed review comments X-Git-Tag: Kea-2.4.0~142 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ff5997c7e9b9d93cd61e855958365e579ffc6351;p=thirdparty%2Fkea.git [#2909] Addressed review comments src/bin/admin/tests/pgsql_tests.sh.in Adjusted v6 address values Added pgsql_update_v6_addresses_to_binary() to verify conversion --- diff --git a/src/bin/admin/tests/pgsql_tests.sh.in b/src/bin/admin/tests/pgsql_tests.sh.in index a6b1e6d3de..c86c5066a3 100644 --- a/src/bin/admin/tests/pgsql_tests.sh.in +++ b/src/bin/admin/tests/pgsql_tests.sh.in @@ -387,7 +387,7 @@ pgsql_upgrade_7_0_to_8_0_test() { # Check lease6Dump*(). run_command \ - pgsql_execute "INSERT INTO lease6 VALUES('::10',E'\\\\x3230',30,TO_TIMESTAMP(1678900000),40,50,1,60,70,'t','t','one,example,com',0,E'\\\\x3830',16,0,'{ \"a\": 1, \"b\": 2 }',0)" + pgsql_execute "INSERT INTO lease6 VALUES(cast('::10' as inet),E'\\\\x3230',30,TO_TIMESTAMP(1678900000),40,50,1,60,70,'t','t','one,example,com',0,E'\\\\x3830',16,0,'{ \"a\": 1, \"b\": 2 }',0)" assert_eq 0 "${EXIT_CODE}" 'INSERT INTO lease6 failed, expected exit code %d, actual %d' assert_str_eq '' "${OUTPUT}" @@ -1391,7 +1391,7 @@ pgsql_lease6_stat_per_type() { ltype=$1 # insert a lease6 for addr and ltype, state assigned - qry="insert into lease6 (address, lease_type, subnet_id, state) values ('$addr',$ltype,1,0)" + qry="insert into lease6 (address, lease_type, subnet_id, state) values (cast('$addr' as inet),$ltype,1,0)" run_statement "#2" "$qry" # assigned stat should be 1 @@ -1403,7 +1403,7 @@ pgsql_lease6_stat_per_type() { run_statement "#4" "$qry" 1 # update the lease, changing state to declined - qry="update lease6 set state = 1 where address = '$addr'" + qry="update lease6 set state = 1 where address = cast('$addr' as inet)" run_statement "#5" "$qry" # leases stat for assigned state should be 0 @@ -1435,7 +1435,7 @@ pgsql_lease6_stat_per_type() { run_statement "#12" "$qry" 0 # insert a lease6 for addr and ltype, state assigned - qry="insert into lease6 (address, lease_type, subnet_id, pool_id, state) values ('$addr1',$ltype,1,1,0)" + qry="insert into lease6 (address, lease_type, subnet_id, pool_id, state) values (cast('$addr1' as inet),$ltype,1,1,0)" run_statement "#13" "$qry" # assigned stat should be 1 @@ -1447,7 +1447,7 @@ pgsql_lease6_stat_per_type() { run_statement "#15" "$qry" 1 # insert a lease6 for addr and ltype, state assigned - qry="insert into lease6 (address, lease_type, subnet_id, pool_id, state) values ('$addr2',$ltype,1,2,0)" + qry="insert into lease6 (address, lease_type, subnet_id, pool_id, state) values (cast('$addr2' as inet),$ltype,1,2,0)" run_statement "#16" "$qry" # assigned stat should be 2 @@ -1482,10 +1482,10 @@ pgsql_lease6_stat_test() { run_statement "#1" "$qry" # Test for address 111, NA lease type - pgsql_lease6_stat_per_type "111" "112" "113" "0" + pgsql_lease6_stat_per_type "::11" "::12" "::13" "0" # Test for address 222, PD lease type - pgsql_lease6_stat_per_type "222" "223" "224" "1" + pgsql_lease6_stat_per_type "::22" "::23" "::24" "1" # Let's wipe the whole database pgsql_wipe @@ -1734,12 +1734,12 @@ pgsql_lease_stat_recount_test() { run_statement "insert v4 leases" "$qry" qry=\ -"insert into lease6 (address, lease_type, subnet_id, state) values (111,0,40,0);\ - insert into lease6 (address, lease_type, subnet_id, pool_id, state) values (222,0,40,1,1);\ - insert into lease6 (address, lease_type, subnet_id, state) values (333,1,40,0);\ - insert into lease6 (address, lease_type, subnet_id, state) values (444,1,50,0);\ - insert into lease6 (address, lease_type, subnet_id, pool_id, state) values (555,1,50,2,0);\ - insert into lease6 (address, lease_type, subnet_id, state) values (666,1,40,2)" +"insert into lease6 (address, lease_type, subnet_id, state) values (cast('::11' as inet),0,40,0);\ + insert into lease6 (address, lease_type, subnet_id, pool_id, state) values (cast('::22' as inet),0,40,1,1);\ + insert into lease6 (address, lease_type, subnet_id, state) values (cast('::33' as inet),1,40,0);\ + insert into lease6 (address, lease_type, subnet_id, state) values (cast('::44' as inet),1,50,0);\ + insert into lease6 (address, lease_type, subnet_id, pool_id, state) values (cast('::55' as inet),1,50,2,0);\ + insert into lease6 (address, lease_type, subnet_id, state) values (cast('::66' as inet),1,40,2)" run_statement "insert v6 leases" "$qry" # Now we change some counters. @@ -1996,10 +1996,58 @@ pgsql_update_empty_duid_test() { test_finish 0 } -# Run tests. -pgsql_lease4_upload_test -exit 0 +# Verifies that converting from lease6.address to binary column works +# while preserving data. +pgsql_update_v6_addresses_to_binary() { + test_start "pgsql.update_v6_address_to_binary" + + # Let's wipe the whole database + pgsql_wipe + # Initialize database to schema 1.0. + pgsql_execute_script "/home/tmark/labs/build/keadev/sandbox/git.pgsql-2909/kea/src/bin/admin/tests/dhcpdb_create_1.0.pgsql" + assert_eq 0 "${EXIT_CODE}" "cannot initialize 1.0 database, expected exit code: %d, actual: %d" + + # Now upgrade to schema 16.0 + pgsql_upgrade_schema_to_version 16.0 + + sql=\ +"insert into lease6 (address, lease_type, subnet_id) values('2601:19e:8100:1e10:b1b:51a8:f616:cf14', 1, 1); +insert into lease6 (address, lease_type, subnet_id) values('2601:19e:8100:1e10:b1b:51a8:f616:cf15', 1, 1);" + + run_statement "insert v6 leases" "$sql" + + # Insert ipv6_reservations address is binary. + sql=\ +"insert into hosts(host_id, dhcp_identifier, dhcp_identifier_type) values (18219, '18219', 1); \ +insert into ipv6_reservations (address, prefix_len, type, dhcp6_iaid, host_id) \ + values ('2601:19e:8100:1e10:b1b:51a8:f616:cf16', 128, 1, 123, 18219);" + + run_statement "insert an ipv6 reservation" "$sql" + + # Let's upgrade it to the latest version. + run_command \ + "${kea_admin}" db-upgrade pgsql -u "${db_user}" -p "${db_password}" -n "${db_name}" -d "${db_scripts_dir}" + + # leases count for declined state should be 1 with DUID updated (0x000000) + qry="select count(*) from lease6 where address = cast('2601:19e:8100:1e10:b1b:51a8:f616:cf14' as inet);" + run_statement "#2" "$qry" 1 + + # leases count for non declined state should be 1 with DUID unchanged (0x323033) + qry="select count(*) from lease6 where address = cast('2601:19e:8100:1e10:b1b:51a8:f616:cf15' as inet);" + run_statement "#3" "$qry" 1 + + # verify the reservation is intact + qry="select host(address) from ipv6_reservations where host_id = 18219;" + run_statement "ipv6_reservations_insert" "$qry" "2601:19e:8100:1e10:b1b:51a8:f616:cf16" + + # Let's wipe the whole database + pgsql_wipe + + test_finish 0 +} + +# Run tests. pgsql_db_init_test pgsql_db_version_test pgsql_upgrade_test @@ -2017,3 +2065,4 @@ pgsql_lease_stat_upgrade_test pgsql_lease_stat_recount_test pgsql_unused_subnet_id_test pgsql_update_empty_duid_test +pgsql_update_v6_addresses_to_binary