You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
boundary/internal/db/sqltest/tests/wh/auth_token/constraints.sql

508 lines
20 KiB

-- Copyright (c) HashiCorp, Inc.
-- SPDX-License-Identifier: BUSL-1.1
begin;
select plan(13);
-- Create a user dimension for corresponding auth token's user.
insert into wh_user_dimension (
user_id, user_name, user_description,
auth_account_id, auth_account_type, auth_account_name, auth_account_description,
auth_method_id, auth_method_type, auth_method_name, auth_method_description,
user_organization_id, user_organization_name, user_organization_description,
current_row_indicator,
row_effective_time, row_expiration_time,
auth_method_external_id, auth_account_external_id, auth_account_full_name, auth_account_email
) values (
'u_____user1', 'None', 'None',
'a______acc1', 'None', 'None', 'None',
'am______am1', 'None', 'None', 'None',
'o______org1', 'None', 'None',
'current',
now(), 'infinity'::timestamptz,
'None', 'None', 'None', 'None'
);
prepare insert_access_time_after_delete as
with
issued_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 10:00:00'::timestamptz),
wh_time_key('2023-12-13 10:00:00'::timestamptz),
'2023-12-13 10:00:00'::timestamptz
),
accessed_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 12:00:00'::timestamptz),
wh_time_key('2023-12-13 12:00:00'::timestamptz),
'2023-12-13 12:00:00'::timestamptz
),
deleted_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 11:00:00'::timestamptz),
wh_time_key('2023-12-13 11:00:00'::timestamptz),
'2023-12-13 11:00:00'::timestamptz
),
user_dim(key) as (
select key
from wh_user_dimension
where user_id = 'u_____user1'
)
insert into wh_auth_token_accumulating_fact (
auth_token_id,
user_key,
auth_token_issued_date_key,
auth_token_issued_time_key,
auth_token_issued_time,
auth_token_deleted_date_key,
auth_token_deleted_time_key,
auth_token_deleted_time,
auth_token_approximate_last_access_date_key,
auth_token_approximate_last_access_time_key,
auth_token_approximate_last_access_time,
auth_token_approximate_active_time_range,
auth_token_valid_time_range,
auth_token_count
)
select 'tok___token1',
user_dim.key,
issued_timestamp.date_dim_key,
issued_timestamp.time_dim_key,
issued_timestamp.ts,
deleted_timestamp.date_dim_key,
deleted_timestamp.time_dim_key,
deleted_timestamp.ts,
accessed_timestamp.date_dim_key,
accessed_timestamp.time_dim_key,
accessed_timestamp.ts,
tstzrange(issued_timestamp.ts, accessed_timestamp.ts),
tstzrange(issued_timestamp.ts, accessed_timestamp.ts),
1
from user_dim,
issued_timestamp,
deleted_timestamp,
accessed_timestamp;
select throws_ok(
'insert_access_time_after_delete',
'23514',
'new row for relation "wh_auth_token_accumulating_fact" violates check constraint "last_accessed_time_lte_deleted_time"'
);
prepare insert_active_time_after_issued as
with
issued_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 10:00:00'::timestamptz),
wh_time_key('2023-12-13 10:00:00'::timestamptz),
'2023-12-13 10:00:00'::timestamptz
),
accessed_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 12:00:00'::timestamptz),
wh_time_key('2023-12-13 12:00:00'::timestamptz),
'2023-12-13 12:00:00'::timestamptz
),
deleted_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 13:00:00'::timestamptz),
wh_time_key('2023-12-13 13:00:00'::timestamptz),
'2023-12-13 13:00:00'::timestamptz
),
user_dim(key) as (
select key
from wh_user_dimension
where user_id = 'u_____user1'
)
insert into wh_auth_token_accumulating_fact (
auth_token_id,
user_key,
auth_token_issued_date_key,
auth_token_issued_time_key,
auth_token_issued_time,
auth_token_deleted_date_key,
auth_token_deleted_time_key,
auth_token_deleted_time,
auth_token_approximate_last_access_date_key,
auth_token_approximate_last_access_time_key,
auth_token_approximate_last_access_time,
auth_token_approximate_active_time_range,
auth_token_valid_time_range,
auth_token_count
)
select 'tok___token2',
user_dim.key,
issued_timestamp.date_dim_key,
issued_timestamp.time_dim_key,
issued_timestamp.ts,
deleted_timestamp.date_dim_key,
deleted_timestamp.time_dim_key,
deleted_timestamp.ts,
accessed_timestamp.date_dim_key,
accessed_timestamp.time_dim_key,
accessed_timestamp.ts,
tstzrange(issued_timestamp.ts + interval '10 minutes', accessed_timestamp.ts),
tstzrange(issued_timestamp.ts, deleted_timestamp.ts),
1
from user_dim,
issued_timestamp,
deleted_timestamp,
accessed_timestamp;
select throws_ok(
'insert_active_time_after_issued',
'23514',
'new row for relation "wh_auth_token_accumulating_fact" violates check constraint "active_time_lower_eq_issued_time"'
);
prepare insert_active_time_before_access as
with
issued_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 10:00:00'::timestamptz),
wh_time_key('2023-12-13 10:00:00'::timestamptz),
'2023-12-13 10:00:00'::timestamptz
),
accessed_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 12:00:00'::timestamptz),
wh_time_key('2023-12-13 12:00:00'::timestamptz),
'2023-12-13 12:00:00'::timestamptz
),
deleted_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 13:00:00'::timestamptz),
wh_time_key('2023-12-13 13:00:00'::timestamptz),
'2023-12-13 13:00:00'::timestamptz
),
user_dim(key) as (
select key
from wh_user_dimension
where user_id = 'u_____user1'
)
insert into wh_auth_token_accumulating_fact (
auth_token_id,
user_key,
auth_token_issued_date_key,
auth_token_issued_time_key,
auth_token_issued_time,
auth_token_deleted_date_key,
auth_token_deleted_time_key,
auth_token_deleted_time,
auth_token_approximate_last_access_date_key,
auth_token_approximate_last_access_time_key,
auth_token_approximate_last_access_time,
auth_token_approximate_active_time_range,
auth_token_valid_time_range,
auth_token_count
)
select 'tok___token2',
user_dim.key,
issued_timestamp.date_dim_key,
issued_timestamp.time_dim_key,
issued_timestamp.ts,
deleted_timestamp.date_dim_key,
deleted_timestamp.time_dim_key,
deleted_timestamp.ts,
accessed_timestamp.date_dim_key,
accessed_timestamp.time_dim_key,
accessed_timestamp.ts,
tstzrange(issued_timestamp.ts, accessed_timestamp.ts - interval '10 minutes'),
tstzrange(issued_timestamp.ts, deleted_timestamp.ts),
1
from user_dim,
issued_timestamp,
deleted_timestamp,
accessed_timestamp;
select throws_ok(
'insert_active_time_before_access',
'23514',
'new row for relation "wh_auth_token_accumulating_fact" violates check constraint "active_time_upper_eq_last_accessed_time"'
);
prepare insert_active_not_contained_by_valid as
with
issued_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 10:00:00'::timestamptz),
wh_time_key('2023-12-13 10:00:00'::timestamptz),
'2023-12-13 10:00:00'::timestamptz
),
accessed_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 12:00:00'::timestamptz),
wh_time_key('2023-12-13 12:00:00'::timestamptz),
'2023-12-13 12:00:00'::timestamptz
),
deleted_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 11:00:00'::timestamptz),
wh_time_key('2023-12-13 11:00:00'::timestamptz),
'2023-12-13 11:00:00'::timestamptz
),
user_dim(key) as (
select key
from wh_user_dimension
where user_id = 'u_____user1'
)
insert into wh_auth_token_accumulating_fact (
auth_token_id,
user_key,
auth_token_issued_date_key,
auth_token_issued_time_key,
auth_token_issued_time,
auth_token_deleted_date_key,
auth_token_deleted_time_key,
auth_token_deleted_time,
auth_token_approximate_last_access_date_key,
auth_token_approximate_last_access_time_key,
auth_token_approximate_last_access_time,
auth_token_approximate_active_time_range,
auth_token_valid_time_range,
auth_token_count
)
select 'tok___token1',
user_dim.key,
issued_timestamp.date_dim_key,
issued_timestamp.time_dim_key,
issued_timestamp.ts,
deleted_timestamp.date_dim_key,
deleted_timestamp.time_dim_key,
deleted_timestamp.ts,
accessed_timestamp.date_dim_key,
accessed_timestamp.time_dim_key,
accessed_timestamp.ts,
tstzrange(issued_timestamp.ts, accessed_timestamp.ts),
tstzrange(issued_timestamp.ts, deleted_timestamp.ts),
1
from user_dim,
issued_timestamp,
deleted_timestamp,
accessed_timestamp;
select throws_ok(
'insert_active_not_contained_by_valid',
'23514',
'new row for relation "wh_auth_token_accumulating_fact" violates check constraint "active_time_contained_by_valid_time"'
);
prepare insert_valid_time_before_issued as
with
issued_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 10:00:00'::timestamptz),
wh_time_key('2023-12-13 10:00:00'::timestamptz),
'2023-12-13 10:00:00'::timestamptz
),
accessed_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 12:00:00'::timestamptz),
wh_time_key('2023-12-13 12:00:00'::timestamptz),
'2023-12-13 12:00:00'::timestamptz
),
deleted_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 13:00:00'::timestamptz),
wh_time_key('2023-12-13 13:00:00'::timestamptz),
'2023-12-13 13:00:00'::timestamptz
),
user_dim(key) as (
select key
from wh_user_dimension
where user_id = 'u_____user1'
)
insert into wh_auth_token_accumulating_fact (
auth_token_id,
user_key,
auth_token_issued_date_key,
auth_token_issued_time_key,
auth_token_issued_time,
auth_token_deleted_date_key,
auth_token_deleted_time_key,
auth_token_deleted_time,
auth_token_approximate_last_access_date_key,
auth_token_approximate_last_access_time_key,
auth_token_approximate_last_access_time,
auth_token_approximate_active_time_range,
auth_token_valid_time_range,
auth_token_count
)
select 'tok___token2',
user_dim.key,
issued_timestamp.date_dim_key,
issued_timestamp.time_dim_key,
issued_timestamp.ts,
deleted_timestamp.date_dim_key,
deleted_timestamp.time_dim_key,
deleted_timestamp.ts,
accessed_timestamp.date_dim_key,
accessed_timestamp.time_dim_key,
accessed_timestamp.ts,
tstzrange(issued_timestamp.ts, accessed_timestamp.ts),
tstzrange(issued_timestamp.ts - interval '10 minutes', deleted_timestamp.ts),
1
from user_dim,
issued_timestamp,
deleted_timestamp,
accessed_timestamp;
select throws_ok(
'insert_valid_time_before_issued',
'23514',
'new row for relation "wh_auth_token_accumulating_fact" violates check constraint "valid_time_lower_eq_issued"'
);
prepare insert_valid_time_before_deleted as
with
issued_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 10:00:00'::timestamptz),
wh_time_key('2023-12-13 10:00:00'::timestamptz),
'2023-12-13 10:00:00'::timestamptz
),
accessed_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 12:00:00'::timestamptz),
wh_time_key('2023-12-13 12:00:00'::timestamptz),
'2023-12-13 12:00:00'::timestamptz
),
deleted_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 13:00:00'::timestamptz),
wh_time_key('2023-12-13 13:00:00'::timestamptz),
'2023-12-13 13:00:00'::timestamptz
),
user_dim(key) as (
select key
from wh_user_dimension
where user_id = 'u_____user1'
)
insert into wh_auth_token_accumulating_fact (
auth_token_id,
user_key,
auth_token_issued_date_key,
auth_token_issued_time_key,
auth_token_issued_time,
auth_token_deleted_date_key,
auth_token_deleted_time_key,
auth_token_deleted_time,
auth_token_approximate_last_access_date_key,
auth_token_approximate_last_access_time_key,
auth_token_approximate_last_access_time,
auth_token_approximate_active_time_range,
auth_token_valid_time_range,
auth_token_count
)
select 'tok___token2',
user_dim.key,
issued_timestamp.date_dim_key,
issued_timestamp.time_dim_key,
issued_timestamp.ts,
deleted_timestamp.date_dim_key,
deleted_timestamp.time_dim_key,
deleted_timestamp.ts,
accessed_timestamp.date_dim_key,
accessed_timestamp.time_dim_key,
accessed_timestamp.ts,
tstzrange(issued_timestamp.ts, accessed_timestamp.ts),
tstzrange(issued_timestamp.ts, deleted_timestamp.ts - interval '10 minutes'),
1
from user_dim,
issued_timestamp,
deleted_timestamp,
accessed_timestamp;
select throws_ok(
'insert_valid_time_before_deleted',
'23514',
'new row for relation "wh_auth_token_accumulating_fact" violates check constraint "valid_time_upper_eq_deleted"'
);
prepare insert_success as
with
issued_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 10:00:00'::timestamptz),
wh_time_key('2023-12-13 10:00:00'::timestamptz),
'2023-12-13 10:00:00'::timestamptz
),
accessed_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 12:00:00'::timestamptz),
wh_time_key('2023-12-13 12:00:00'::timestamptz),
'2023-12-13 12:00:00'::timestamptz
),
deleted_timestamp(date_dim_key, time_dim_key, ts) as (
select wh_date_key('2023-12-13 13:00:00'::timestamptz),
wh_time_key('2023-12-13 13:00:00'::timestamptz),
'2023-12-13 13:00:00'::timestamptz
),
user_dim(key) as (
select key
from wh_user_dimension
where user_id = 'u_____user1'
)
insert into wh_auth_token_accumulating_fact (
auth_token_id,
user_key,
auth_token_issued_date_key,
auth_token_issued_time_key,
auth_token_issued_time,
auth_token_deleted_date_key,
auth_token_deleted_time_key,
auth_token_deleted_time,
auth_token_approximate_last_access_date_key,
auth_token_approximate_last_access_time_key,
auth_token_approximate_last_access_time,
auth_token_approximate_active_time_range,
auth_token_valid_time_range,
auth_token_count
)
select 'tok___token2',
user_dim.key,
issued_timestamp.date_dim_key,
issued_timestamp.time_dim_key,
issued_timestamp.ts,
deleted_timestamp.date_dim_key,
deleted_timestamp.time_dim_key,
deleted_timestamp.ts,
accessed_timestamp.date_dim_key,
accessed_timestamp.time_dim_key,
accessed_timestamp.ts,
tstzrange(issued_timestamp.ts, accessed_timestamp.ts),
tstzrange(issued_timestamp.ts, deleted_timestamp.ts),
1
from user_dim,
issued_timestamp,
deleted_timestamp,
accessed_timestamp;
select lives_ok('insert_success');
-- ensure user_id was properly set
select is(wh_auth_token_accumulating_fact.user_id, 'u_____user1')
from wh_auth_token_accumulating_fact
where auth_token_id = 'tok___token2';
prepare update_user_id as
update wh_auth_token_accumulating_fact set user_id = 'u_____user2'
where auth_token_id = 'tok___token2';
select throws_ok(
'update_user_id',
'23601',
'immutable column: wh_auth_token_accumulating_fact.user_id'
);
prepare update_user_key as
update wh_auth_token_accumulating_fact set user_key = 'key_2'
where auth_token_id = 'tok___token2';
select throws_ok(
'update_user_key',
'23601',
'immutable column: wh_auth_token_accumulating_fact.user_key'
);
prepare update_auth_token_issued_time as
update wh_auth_token_accumulating_fact set auth_token_issued_time = '2023-12-13 11:01:00'::timestamptz
where auth_token_id = 'tok___token2';
select throws_ok(
'update_auth_token_issued_time',
'23601',
'immutable column: wh_auth_token_accumulating_fact.auth_token_issued_time'
);
prepare update_auth_token_issued_time_key as
update wh_auth_token_accumulating_fact set auth_token_issued_time_key = wh_time_key('2023-12-13 11:01:00'::timestamptz)
where auth_token_id = 'tok___token2';
select throws_ok(
'update_auth_token_issued_time_key',
'23601',
'immutable column: wh_auth_token_accumulating_fact.auth_token_issued_time_key'
);
prepare update_auth_token_issued_date_key as
update wh_auth_token_accumulating_fact set auth_token_issued_date_key = wh_date_key('2023-12-14 11:00:00'::timestamptz)
where auth_token_id = 'tok___token2';
select throws_ok(
'update_auth_token_issued_date_key',
'23601',
'immutable column: wh_auth_token_accumulating_fact.auth_token_issued_date_key'
);
select * from finish();
rollback;