From 557591967a3b5b2a137b45c595c0308bd39685c0 Mon Sep 17 00:00:00 2001 From: dani <29378233+kheina@users.noreply.github.com> Date: Thu, 5 Sep 2024 11:03:05 -0400 Subject: [PATCH] add tests for sql ip address columns to ensure ipv6 capabiltiy (#5062) --- internal/db/sqltest/Makefile | 1 + .../tests/history/static_host_ipv6.sql | 42 ++++++++++ .../sqltest/tests/host/static_host_ipv6.sql | 42 ++++++++++ internal/db/sqltest/tests/server/ipv6.sql | 76 +++++++++++++++++++ .../tests/session/session_connection_ipv6.sql | 73 ++++++++++++++++++ .../tests/wh/session_connection/ipv6.sql | 61 +++++++++++++++ 6 files changed, 295 insertions(+) create mode 100644 internal/db/sqltest/tests/history/static_host_ipv6.sql create mode 100644 internal/db/sqltest/tests/host/static_host_ipv6.sql create mode 100644 internal/db/sqltest/tests/server/ipv6.sql create mode 100644 internal/db/sqltest/tests/session/session_connection_ipv6.sql create mode 100644 internal/db/sqltest/tests/wh/session_connection/ipv6.sql diff --git a/internal/db/sqltest/Makefile b/internal/db/sqltest/Makefile index ee5868db77..3633401728 100644 --- a/internal/db/sqltest/Makefile +++ b/internal/db/sqltest/Makefile @@ -37,6 +37,7 @@ TESTS ?= tests/setup/*.sql \ tests/purge/*.sql \ tests/pagination/*.sql \ tests/policy/*.sql \ + tests/host/*.sql \ tests/server/*.sql POSTGRES_DOCKER_IMAGE_BASE ?= postgres diff --git a/internal/db/sqltest/tests/history/static_host_ipv6.sql b/internal/db/sqltest/tests/history/static_host_ipv6.sql new file mode 100644 index 0000000000..9adff0bf76 --- /dev/null +++ b/internal/db/sqltest/tests/history/static_host_ipv6.sql @@ -0,0 +1,42 @@ +-- Copyright (c) HashiCorp, Inc. +-- SPDX-License-Identifier: BUSL-1.1 + +begin; + + select plan(4); -- the number of `is` calls + + -- short form ipv6 + + insert into static_host_hst + ( catalog_id, public_id, address) + values + ('hc__st_____b', 'h___st____bx', '2001:4860:4860::8888'); + + select is(count(*), 1::bigint) from static_host_hst + where address = '2001:4860:4860::8888'; + + update static_host_hst + set address = '2001:4860:4860::8844' + where public_id = 'h___st____bx'; + + select is(count(*), 1::bigint) from static_host_hst + where address = '2001:4860:4860::8844'; + + -- explicit form ipv6 + + insert into static_host_hst + ( catalog_id, public_id, address) + values + ('hc__st_____b', 'h___st____by', '2001:4860:4860:0:0:0:0:8888'); + + select is(count(*), 1::bigint) from static_host_hst + where address = '2001:4860:4860:0:0:0:0:8888'; + + update static_host_hst + set address = '2001:4860:4860:0:0:0:0:8844' + where public_id = 'h___st____by'; + + select is(count(*), 1::bigint) from static_host_hst + where address = '2001:4860:4860:0:0:0:0:8844'; + +rollback; diff --git a/internal/db/sqltest/tests/host/static_host_ipv6.sql b/internal/db/sqltest/tests/host/static_host_ipv6.sql new file mode 100644 index 0000000000..e519042e42 --- /dev/null +++ b/internal/db/sqltest/tests/host/static_host_ipv6.sql @@ -0,0 +1,42 @@ +-- Copyright (c) HashiCorp, Inc. +-- SPDX-License-Identifier: BUSL-1.1 + +begin; + + select plan(4); -- the number of `is` calls + + -- short form ipv6 + + insert into static_host + ( catalog_id, public_id, address) + values + ('hc__st_____b', 'h___st____bx', '2001:4860:4860::8888'); + + select is(count(*), 1::bigint) from static_host + where address = '2001:4860:4860::8888'; + + update static_host + set address = '2001:4860:4860::8844' + where public_id = 'h___st____bx'; + + select is(count(*), 1::bigint) from static_host + where address = '2001:4860:4860::8844'; + + -- explicit form ipv6 + + insert into static_host + ( catalog_id, public_id, address) + values + ('hc__st_____b', 'h___st____by', '2001:4860:4860:0:0:0:0:8888'); + + select is(count(*), 1::bigint) from static_host + where address = '2001:4860:4860:0:0:0:0:8888'; + + update static_host + set address = '2001:4860:4860:0:0:0:0:8844' + where public_id = 'h___st____by'; + + select is(count(*), 1::bigint) from static_host + where address = '2001:4860:4860:0:0:0:0:8844'; + +rollback; diff --git a/internal/db/sqltest/tests/server/ipv6.sql b/internal/db/sqltest/tests/server/ipv6.sql new file mode 100644 index 0000000000..5fcbfd637f --- /dev/null +++ b/internal/db/sqltest/tests/server/ipv6.sql @@ -0,0 +1,76 @@ +-- Copyright (c) HashiCorp, Inc. +-- SPDX-License-Identifier: BUSL-1.1 + +begin; + + select plan(8); -- the number of `is` calls + + -- short form ipv6 + + insert into server_controller + ( private_id, address) + values + ('test-controller-1', '2001:4860:4860::8888'); + + select is(count(*), 1::bigint) from server_controller + where address = '2001:4860:4860::8888'; + + update server_controller + set address = '2001:4860:4860::8844' + where private_id = 'test-controller-1'; + + select is(count(*), 1::bigint) from server_controller + where address = '2001:4860:4860::8844'; + + -- worker + + insert into server_worker + ( public_id, scope_id, type, last_status_time, address) + values + ('w_________1', 'global', 'pki', now(), '2001:4860:4860::8888'); + + select is(count(*), 1::bigint) from server_worker + where address = '2001:4860:4860::8888'; + + update server_worker + set address = '2001:4860:4860::8844' + where public_id = 'w_________1'; + + select is(count(*), 1::bigint) from server_worker + where address = '2001:4860:4860::8844'; + + -- explicit form ipv6 + + insert into server_controller + ( private_id, address) + values + ('test-controller-2', '2001:4860:4860:0:0:0:0:8888'); + + select is(count(*), 1::bigint) from server_controller + where address = '2001:4860:4860:0:0:0:0:8888'; + + update server_controller + set address = '2001:4860:4860:0:0:0:0:8844' + where private_id = 'test-controller-2'; + + select is(count(*), 1::bigint) from server_controller + where address = '2001:4860:4860:0:0:0:0:8844'; + + -- worker + + insert into server_worker + ( public_id, scope_id, type, last_status_time, address) + values + ('w_________2', 'global', 'pki', now(), '2001:4860:4860:0:0:0:0:8888'); + + select is(count(*), 1::bigint) from server_worker + where address = '2001:4860:4860:0:0:0:0:8888'; + + update server_worker + set address = '2001:4860:4860:0:0:0:0:8844' + where public_id = 'w_________2'; + + select is(count(*), 1::bigint) from server_worker + where address = '2001:4860:4860:0:0:0:0:8844'; + +rollback; diff --git a/internal/db/sqltest/tests/session/session_connection_ipv6.sql b/internal/db/sqltest/tests/session/session_connection_ipv6.sql new file mode 100644 index 0000000000..888173e9c3 --- /dev/null +++ b/internal/db/sqltest/tests/session/session_connection_ipv6.sql @@ -0,0 +1,73 @@ +-- Copyright (c) HashiCorp, Inc. +-- SPDX-License-Identifier: BUSL-1.1 + +begin; + + select plan(12); -- the number of `is` calls + + -- short form ipv6 + + insert into session_connection + ( public_id, session_id, client_tcp_address, endpoint_tcp_address, user_client_ip) + values + ('sc_________1', 's1_____clare', '2001:4860:4860::8888', '2001:4860:4860::8888', '2001:4860:4860::8888'); + + select is(count(*), 1::bigint) from session_connection + where client_tcp_address = '2001:4860:4860::8888'; + + select is(count(*), 1::bigint) from session_connection + where endpoint_tcp_address = '2001:4860:4860::8888'; + + select is(count(*), 1::bigint) from session_connection + where user_client_ip = '2001:4860:4860::8888'; + + update session_connection + set client_tcp_address = '2001:4860:4860::8844', + endpoint_tcp_address = '2001:4860:4860::8844', + user_client_ip = '2001:4860:4860::8844' + where public_id = 'sc_________1'; + + select is(count(*), 1::bigint) from session_connection + where client_tcp_address = '2001:4860:4860::8844'; + + select is(count(*), 1::bigint) from session_connection + where endpoint_tcp_address = '2001:4860:4860::8844'; + + select is(count(*), 1::bigint) from session_connection + where user_client_ip = '2001:4860:4860::8844'; + + -- explicit form ipv6 + + insert into session_connection + ( public_id, session_id, client_tcp_address, endpoint_tcp_address, user_client_ip) + values + ('sc_________2', 's2_____clare', '2001:4860:4860:0:0:0:0:8888', '2001:4860:4860:0:0:0:0:8888', '2001:4860:4860:0:0:0:0:8888'); + + select is(count(*), 1::bigint) from session_connection + where client_tcp_address = '2001:4860:4860:0:0:0:0:8888'; + + select is(count(*), 1::bigint) from session_connection + where endpoint_tcp_address = '2001:4860:4860:0:0:0:0:8888'; + + select is(count(*), 1::bigint) from session_connection + where user_client_ip = '2001:4860:4860:0:0:0:0:8888'; + + update session_connection + set client_tcp_address = '2001:4860:4860:0:0:0:0:8844', + endpoint_tcp_address = '2001:4860:4860:0:0:0:0:8844', + user_client_ip = '2001:4860:4860:0:0:0:0:8844' + where public_id = 'sc_________2'; + + -- since the col type is inet, postgres actually knows that 2001:4860:4860:0:0:0:0:8844 is + -- equivalent to 2001:4860:4860::8844 from above, meaning these selects return 2 results + + select is(count(*), 2::bigint) from session_connection + where client_tcp_address = '2001:4860:4860:0:0:0:0:8844'; + + select is(count(*), 2::bigint) from session_connection + where endpoint_tcp_address = '2001:4860:4860:0:0:0:0:8844'; + + select is(count(*), 2::bigint) from session_connection + where user_client_ip = '2001:4860:4860:0:0:0:0:8844'; + +rollback; diff --git a/internal/db/sqltest/tests/wh/session_connection/ipv6.sql b/internal/db/sqltest/tests/wh/session_connection/ipv6.sql new file mode 100644 index 0000000000..971d5e745e --- /dev/null +++ b/internal/db/sqltest/tests/wh/session_connection/ipv6.sql @@ -0,0 +1,61 @@ +-- Copyright (c) HashiCorp, Inc. +-- SPDX-License-Identifier: BUSL-1.1 + +begin; + + select plan(8); -- the number of `is` calls + + -- short form ipv6 + + insert into session_connection + ( public_id, session_id, client_tcp_address, endpoint_tcp_address, user_client_ip) + values + ('sc_________1', 's1_____clare', '2001:4860:4860::8888', '2001:4860:4860::8888', '2001:4860:4860::8888'); + + select is(count(*), 1::bigint) from wh_session_connection_accumulating_fact + where client_tcp_address = '2001:4860:4860::8888'; + + select is(count(*), 1::bigint) from wh_session_connection_accumulating_fact + where endpoint_tcp_address = '2001:4860:4860::8888'; + + update session_connection + set client_tcp_address = '2001:4860:4860::8844', + endpoint_tcp_address = '2001:4860:4860::8844', + user_client_ip = '2001:4860:4860::8844' + where public_id = 'sc_________1'; + + select is(count(*), 1::bigint) from wh_session_connection_accumulating_fact + where client_tcp_address = '2001:4860:4860::8844'; + + select is(count(*), 1::bigint) from wh_session_connection_accumulating_fact + where endpoint_tcp_address = '2001:4860:4860::8844'; + + -- explicit form ipv6 + + insert into session_connection + ( public_id, session_id, client_tcp_address, endpoint_tcp_address, user_client_ip) + values + ('sc_________2', 's2_____clare', '2001:4860:4860:0:0:0:0:8888', '2001:4860:4860:0:0:0:0:8888', '2001:4860:4860:0:0:0:0:8888'); + + select is(count(*), 1::bigint) from wh_session_connection_accumulating_fact + where client_tcp_address = '2001:4860:4860:0:0:0:0:8888'; + + select is(count(*), 1::bigint) from wh_session_connection_accumulating_fact + where endpoint_tcp_address = '2001:4860:4860:0:0:0:0:8888'; + + update session_connection + set client_tcp_address = '2001:4860:4860:0:0:0:0:8844', + endpoint_tcp_address = '2001:4860:4860:0:0:0:0:8844', + user_client_ip = '2001:4860:4860:0:0:0:0:8844' + where public_id = 'sc_________2'; + + -- since the col type is inet, postgres actually knows that 2001:4860:4860:0:0:0:0:8844 is + -- equivalent to 2001:4860:4860::8844 from above, meaning these selects return 2 results + + select is(count(*), 2::bigint) from wh_session_connection_accumulating_fact + where client_tcp_address = '2001:4860:4860:0:0:0:0:8844'; + + select is(count(*), 2::bigint) from wh_session_connection_accumulating_fact + where endpoint_tcp_address = '2001:4860:4860:0:0:0:0:8844'; + +rollback;