mirror of https://github.com/citusdata/citus.git
test: add comprehensive CDC library path adjustment tests
- Add cdc_library_path.sql test to verify superuser CDC functionality - Add non_super_user_cdc_library_path.sql test for non-superuser scenarios - Set citus.enable_change_data_capture=off as default in test runnerpull/8025/head
parent
aea0d2907c
commit
3cd6c579a4
|
@ -0,0 +1,81 @@
|
||||||
|
-- Test for CDC library path adjustment functionality
|
||||||
|
-- This test verifies that the AdjustDynamicLibraryPathForCdcDecoders function with superuser privileges
|
||||||
|
-- correctly modifies the dynamic_library_path when CDC is enabled
|
||||||
|
-- Test 1: Show initial state and reset to ensure clean state
|
||||||
|
SHOW dynamic_library_path;
|
||||||
|
dynamic_library_path
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
$libdir
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SHOW citus.enable_change_data_capture;
|
||||||
|
citus.enable_change_data_capture
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
off
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- Test 2: Enable CDC and verify path is set to include citus_decoders
|
||||||
|
SET citus.enable_change_data_capture = true;
|
||||||
|
SHOW dynamic_library_path;
|
||||||
|
dynamic_library_path
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
$libdir/citus_decoders:$libdir
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- Verify that the dynamic_library_path has been modified to include citus_decoders
|
||||||
|
SELECT
|
||||||
|
CASE
|
||||||
|
WHEN current_setting('dynamic_library_path') LIKE '%citus_decoders%'
|
||||||
|
THEN 'CDC path correctly set'
|
||||||
|
ELSE 'CDC path incorrectly not set'
|
||||||
|
END AS cdc_path_status;
|
||||||
|
cdc_path_status
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
CDC path correctly set
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- Test 3: Disable CDC and verify path remains (CDC doesn't remove the path)
|
||||||
|
SET citus.enable_change_data_capture = false;
|
||||||
|
SHOW dynamic_library_path;
|
||||||
|
dynamic_library_path
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
$libdir/citus_decoders:$libdir
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- Test 4: Edge case - function should only work when path is exactly "$libdir"
|
||||||
|
SET dynamic_library_path = '$libdir/other_path:$libdir';
|
||||||
|
SET citus.enable_change_data_capture = true;
|
||||||
|
SHOW dynamic_library_path;
|
||||||
|
dynamic_library_path
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
$libdir/other_path:$libdir
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- Verify that path is unchanged with custom library path
|
||||||
|
SELECT
|
||||||
|
CASE
|
||||||
|
WHEN current_setting('dynamic_library_path') LIKE '%citus_decoders%'
|
||||||
|
THEN 'CDC path incorrectly set'
|
||||||
|
ELSE 'CDC path correctly not set'
|
||||||
|
END AS custom_path_test;
|
||||||
|
custom_path_test
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
CDC path correctly not set
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- Reset dynamic_library_path to default
|
||||||
|
RESET dynamic_library_path;
|
||||||
|
RESET citus.enable_change_data_capture;
|
||||||
|
-- Test 5: Verify that dynamic_library_path reset_val is overridden to $libdir/citus_decoders:$libdir
|
||||||
|
SHOW dynamic_library_path;
|
||||||
|
dynamic_library_path
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
$libdir/citus_decoders:$libdir
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SHOW citus.enable_change_data_capture;
|
||||||
|
citus.enable_change_data_capture
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
off
|
||||||
|
(1 row)
|
||||||
|
|
|
@ -1,78 +0,0 @@
|
||||||
\set VERBOSITY terse
|
|
||||||
SHOW dynamic_library_path;
|
|
||||||
dynamic_library_path
|
|
||||||
----------------------
|
|
||||||
$libdir
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
SHOW citus.enable_change_data_capture;
|
|
||||||
citus.enable_change_data_capture
|
|
||||||
----------------------------------
|
|
||||||
off
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
SELECT current_setting('dynamic_library_path') AS initial_path;
|
|
||||||
initial_path
|
|
||||||
--------------
|
|
||||||
$libdir
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
SET citus.enable_change_data_capture = true;
|
|
||||||
SHOW dynamic_library_path;
|
|
||||||
dynamic_library_path
|
|
||||||
----------------------
|
|
||||||
$libdir
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
SELECT
|
|
||||||
CASE
|
|
||||||
WHEN current_setting('dynamic_library_path') LIKE '%citus_decoders%'
|
|
||||||
THEN 'CDC path correctly set'
|
|
||||||
ELSE 'CDC path not set'
|
|
||||||
END AS cdc_path_status;
|
|
||||||
cdc_path_status
|
|
||||||
-----------------
|
|
||||||
CDC path not set
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
SET citus.enable_change_data_capture = false;
|
|
||||||
SET dynamic_library_path = '$libdir/custom_lib:$libdir';
|
|
||||||
SET citus.enable_change_data_capture = true;
|
|
||||||
SHOW dynamic_library_path;
|
|
||||||
dynamic_library_path
|
|
||||||
----------------------
|
|
||||||
$libdir/custom_lib:$libdir
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
RESET citus.enable_change_data_capture;
|
|
||||||
RESET dynamic_library_path;
|
|
||||||
SHOW citus.enable_change_data_capture;
|
|
||||||
citus.enable_change_data_capture
|
|
||||||
----------------------------------
|
|
||||||
off
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
SHOW dynamic_library_path;
|
|
||||||
dynamic_library_path
|
|
||||||
----------------------
|
|
||||||
$libdir
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
SET dynamic_library_path = '';
|
|
||||||
SET citus.enable_change_data_capture = true;
|
|
||||||
SHOW dynamic_library_path;
|
|
||||||
dynamic_library_path
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
SET dynamic_library_path = '/custom/path';
|
|
||||||
SET citus.enable_change_data_capture = true;
|
|
||||||
SHOW dynamic_library_path;
|
|
||||||
dynamic_library_path
|
|
||||||
----------------------
|
|
||||||
/custom/path
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
RESET citus.enable_change_data_capture;
|
|
||||||
RESET dynamic_library_path;
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
-- Test for CDC library path adjustment functionality
|
||||||
|
-- This test verifies that the AdjustDynamicLibraryPathForCdcDecoders function with non-superuser privileges
|
||||||
|
-- correctly modifies the dynamic_library_path when CDC is enabled
|
||||||
|
-- Test 1: Non-superuser with read_all_settings can see dynamic_library_path changes
|
||||||
|
CREATE USER cdc_test_user;
|
||||||
|
GRANT pg_read_all_settings TO cdc_test_user;
|
||||||
|
SET ROLE cdc_test_user;
|
||||||
|
-- Non-superuser should be able to see the current dynamic_library_path
|
||||||
|
SELECT current_setting('dynamic_library_path') AS user_visible_path;
|
||||||
|
user_visible_path
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
$libdir
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SET citus.enable_change_data_capture = true;
|
||||||
|
SHOW citus.enable_change_data_capture;
|
||||||
|
citus.enable_change_data_capture
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
on
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SHOW dynamic_library_path;
|
||||||
|
dynamic_library_path
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
$libdir/citus_decoders:$libdir
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- Reset to superuser and cleanup
|
||||||
|
RESET ROLE;
|
||||||
|
DROP USER cdc_test_user;
|
||||||
|
-- Final cleanup
|
||||||
|
RESET citus.enable_change_data_capture;
|
||||||
|
RESET dynamic_library_path;
|
||||||
|
SHOW citus.enable_change_data_capture;
|
||||||
|
citus.enable_change_data_capture
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
off
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SHOW dynamic_library_path;
|
||||||
|
dynamic_library_path
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
$libdir/citus_decoders:$libdir
|
||||||
|
(1 row)
|
||||||
|
|
|
@ -5,7 +5,7 @@ test: pg16
|
||||||
test: multi_create_fdw
|
test: multi_create_fdw
|
||||||
test: multi_test_catalog_views
|
test: multi_test_catalog_views
|
||||||
test: replicated_table_disable_node
|
test: replicated_table_disable_node
|
||||||
test: cdc_library_path_test
|
test: cdc_library_path non_super_user_cdc_library_path
|
||||||
|
|
||||||
# ----------
|
# ----------
|
||||||
# The following distributed tests depend on creating a partitioned table and
|
# The following distributed tests depend on creating a partitioned table and
|
||||||
|
|
|
@ -489,7 +489,7 @@ push(@pgOptions, "citus.explain_analyze_sort_method='taskId'");
|
||||||
push(@pgOptions, "citus.enable_manual_changes_to_shards=on");
|
push(@pgOptions, "citus.enable_manual_changes_to_shards=on");
|
||||||
push(@pgOptions, "citus.allow_unsafe_locks_from_workers=on");
|
push(@pgOptions, "citus.allow_unsafe_locks_from_workers=on");
|
||||||
push(@pgOptions, "citus.stat_statements_track = 'all'");
|
push(@pgOptions, "citus.stat_statements_track = 'all'");
|
||||||
push(@pgOptions, "citus.enable_change_data_capture=on");
|
push(@pgOptions, "citus.enable_change_data_capture=off");
|
||||||
push(@pgOptions, "citus.stat_tenants_limit = 2");
|
push(@pgOptions, "citus.stat_tenants_limit = 2");
|
||||||
push(@pgOptions, "citus.stat_tenants_track = 'ALL'");
|
push(@pgOptions, "citus.stat_tenants_track = 'ALL'");
|
||||||
push(@pgOptions, "citus.enable_stat_counters=on");
|
push(@pgOptions, "citus.enable_stat_counters=on");
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
-- Test for CDC library path adjustment functionality
|
||||||
|
-- This test verifies that the AdjustDynamicLibraryPathForCdcDecoders function with superuser privileges
|
||||||
|
-- correctly modifies the dynamic_library_path when CDC is enabled
|
||||||
|
|
||||||
|
-- Test 1: Show initial state and reset to ensure clean state
|
||||||
|
SHOW dynamic_library_path;
|
||||||
|
SHOW citus.enable_change_data_capture;
|
||||||
|
|
||||||
|
-- Test 2: Enable CDC and verify path is set to include citus_decoders
|
||||||
|
SET citus.enable_change_data_capture = true;
|
||||||
|
SHOW dynamic_library_path;
|
||||||
|
|
||||||
|
-- Verify that the dynamic_library_path has been modified to include citus_decoders
|
||||||
|
SELECT
|
||||||
|
CASE
|
||||||
|
WHEN current_setting('dynamic_library_path') LIKE '%citus_decoders%'
|
||||||
|
THEN 'CDC path correctly set'
|
||||||
|
ELSE 'CDC path incorrectly not set'
|
||||||
|
END AS cdc_path_status;
|
||||||
|
|
||||||
|
-- Test 3: Disable CDC and verify path remains (CDC doesn't remove the path)
|
||||||
|
SET citus.enable_change_data_capture = false;
|
||||||
|
SHOW dynamic_library_path;
|
||||||
|
|
||||||
|
-- Test 4: Edge case - function should only work when path is exactly "$libdir"
|
||||||
|
SET dynamic_library_path = '$libdir/other_path:$libdir';
|
||||||
|
SET citus.enable_change_data_capture = true;
|
||||||
|
SHOW dynamic_library_path;
|
||||||
|
|
||||||
|
-- Verify that path is unchanged with custom library path
|
||||||
|
SELECT
|
||||||
|
CASE
|
||||||
|
WHEN current_setting('dynamic_library_path') LIKE '%citus_decoders%'
|
||||||
|
THEN 'CDC path incorrectly set'
|
||||||
|
ELSE 'CDC path correctly not set'
|
||||||
|
END AS custom_path_test;
|
||||||
|
|
||||||
|
-- Reset dynamic_library_path to default
|
||||||
|
RESET dynamic_library_path;
|
||||||
|
RESET citus.enable_change_data_capture;
|
||||||
|
|
||||||
|
-- Test 5: Verify that dynamic_library_path reset_val is overridden to $libdir/citus_decoders:$libdir
|
||||||
|
SHOW dynamic_library_path;
|
||||||
|
SHOW citus.enable_change_data_capture;
|
||||||
|
|
||||||
|
|
|
@ -1,62 +0,0 @@
|
||||||
-- Test for CDC library path adjustment functionality
|
|
||||||
-- This test verifies that the AdjustDynamicLibraryPathForCdcDecoders function
|
|
||||||
-- correctly modifies the dynamic_library_path when CDC is enabled
|
|
||||||
|
|
||||||
-- Save current settings
|
|
||||||
\set VERBOSITY terse
|
|
||||||
|
|
||||||
-- Show initial dynamic_library_path
|
|
||||||
SHOW dynamic_library_path;
|
|
||||||
|
|
||||||
-- Test 1: Verify CDC is initially disabled
|
|
||||||
SHOW citus.enable_change_data_capture;
|
|
||||||
|
|
||||||
-- Test 2: Check that dynamic_library_path is default
|
|
||||||
SELECT current_setting('dynamic_library_path') AS initial_path;
|
|
||||||
|
|
||||||
-- Test 3: Enable CDC and check if library path is adjusted
|
|
||||||
SET citus.enable_change_data_capture = true;
|
|
||||||
|
|
||||||
-- Check if the path has been modified (should include citus_decoders)
|
|
||||||
SHOW dynamic_library_path;
|
|
||||||
|
|
||||||
-- Test 4: Verify the path contains citus_decoders
|
|
||||||
SELECT
|
|
||||||
CASE
|
|
||||||
WHEN current_setting('dynamic_library_path') LIKE '%citus_decoders%'
|
|
||||||
THEN 'CDC path correctly set'
|
|
||||||
ELSE 'CDC path not set'
|
|
||||||
END AS cdc_path_status;
|
|
||||||
|
|
||||||
-- Test 5: Disable CDC
|
|
||||||
SET citus.enable_change_data_capture = false;
|
|
||||||
|
|
||||||
-- Test 6: Test with custom library path
|
|
||||||
SET dynamic_library_path = '$libdir/custom_lib:$libdir';
|
|
||||||
SET citus.enable_change_data_capture = true;
|
|
||||||
|
|
||||||
-- Verify that custom paths are preserved when CDC is enabled
|
|
||||||
SHOW dynamic_library_path;
|
|
||||||
|
|
||||||
-- Test 7: Reset to defaults
|
|
||||||
RESET citus.enable_change_data_capture;
|
|
||||||
RESET dynamic_library_path;
|
|
||||||
|
|
||||||
-- Final verification
|
|
||||||
SHOW citus.enable_change_data_capture;
|
|
||||||
SHOW dynamic_library_path;
|
|
||||||
|
|
||||||
-- Test edge cases
|
|
||||||
-- Test 8: Test with empty library path
|
|
||||||
SET dynamic_library_path = '';
|
|
||||||
SET citus.enable_change_data_capture = true;
|
|
||||||
SHOW dynamic_library_path;
|
|
||||||
|
|
||||||
-- Test 9: Test with non-standard library path
|
|
||||||
SET dynamic_library_path = '/custom/path';
|
|
||||||
SET citus.enable_change_data_capture = true;
|
|
||||||
SHOW dynamic_library_path;
|
|
||||||
|
|
||||||
-- Clean up
|
|
||||||
RESET citus.enable_change_data_capture;
|
|
||||||
RESET dynamic_library_path;
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
-- Test for CDC library path adjustment functionality
|
||||||
|
-- This test verifies that the AdjustDynamicLibraryPathForCdcDecoders function with non-superuser privileges
|
||||||
|
-- correctly modifies the dynamic_library_path when CDC is enabled
|
||||||
|
|
||||||
|
-- Test 1: Non-superuser with read_all_settings can see dynamic_library_path changes
|
||||||
|
CREATE USER cdc_test_user;
|
||||||
|
GRANT pg_read_all_settings TO cdc_test_user;
|
||||||
|
SET ROLE cdc_test_user;
|
||||||
|
|
||||||
|
-- Non-superuser should be able to see the current dynamic_library_path
|
||||||
|
SELECT current_setting('dynamic_library_path') AS user_visible_path;
|
||||||
|
|
||||||
|
SET citus.enable_change_data_capture = true;
|
||||||
|
|
||||||
|
SHOW citus.enable_change_data_capture;
|
||||||
|
SHOW dynamic_library_path;
|
||||||
|
|
||||||
|
-- Reset to superuser and cleanup
|
||||||
|
RESET ROLE;
|
||||||
|
DROP USER cdc_test_user;
|
||||||
|
|
||||||
|
-- Final cleanup
|
||||||
|
RESET citus.enable_change_data_capture;
|
||||||
|
RESET dynamic_library_path;
|
||||||
|
|
||||||
|
SHOW citus.enable_change_data_capture;
|
||||||
|
SHOW dynamic_library_path;
|
Loading…
Reference in New Issue