Files
threshold/internal/db/sqltest/tests/purge/trigger_insert_on_delete.sql
T
Johan Brandhorst-Satzkorn 38536f4eef internal/db: add deleted tables for all resources (#3885)
Creates a new foo_deleted table for each subtype of each
resource that needs to support pagination. The deleted
tables are used to track deletions of resources and return
them to users of the new pagination API. We track only the
ID and delete_time of the resource, so there's no way to
filter out resources that the user could not see before it
was deleted. This is intentional to keep the design simple
and is not considered a security issue.
2024-01-05 07:43:19 -08:00

42 lines
1.7 KiB
PL/PgSQL

-- Copyright (c) HashiCorp, Inc.
-- SPDX-License-Identifier: BUSL-1.1
begin;
select plan(13);
-- Verify the trigger functions exist and are declared properly
select has_function('insert_deleted_id');
select volatility_is('insert_deleted_id', 'volatile');
select isnt_strict('insert_deleted_id');
select has_trigger('auth_token', 'insert_deleted_id');
-- To test the trigger that moves deleted rows into their appropriate tables, we'll use auth_token
-- Ensure session state table is populated, and session_deleted and auth_token_deleted tables are empty
select is(count(*), 1::bigint) from session_state where session_id = 's1_____clare';
select is(count(*), 0::bigint) from session_deleted;
select is(count(*), 0::bigint) from auth_token_deleted;
-- Check that we have a session for a particular auth token
select is(count(*), 2::bigint) from session where auth_token_id = 'tok____clare';
-- Delete auth tokens, expect no errors, check that the auth_token table is now populated
delete from auth_token where public_id = 'tok____clare';
select is(count(*), 0::bigint) from auth_token where public_id = 'tok____clare';
select is(count(*), 1::bigint) from auth_token_deleted;
-- Add new auth token with duplicate public_id, delete and check that there's no error
insert into auth_token
(key_id, auth_account_id, public_id, token)
values
('kdkv__colors', 'apa____clare', 'tok____clare', 'tok____clare'::bytea);
prepare delete_again as
delete from auth_token where public_id = 'tok____clare';
select lives_ok('delete_again');
select is(count(*), 0::bigint) from auth_token where public_id = 'tok____clare';
select is(count(*), 1::bigint) from auth_token_deleted;
select * from finish();
rollback;