# 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}"
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
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
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
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
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
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.
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
pgsql_lease_stat_recount_test
pgsql_unused_subnet_id_test
pgsql_update_empty_duid_test
+pgsql_update_v6_addresses_to_binary