199 lines
6.7 KiB
SQL
199 lines
6.7 KiB
SQL
-- Setup
|
|
\set QUIET on
|
|
SET client_min_messages TO error;
|
|
\set VERBOSITY terse
|
|
SET SESSION AUTHORIZATION postgres;
|
|
CREATE EXTENSION postgres_fdw;
|
|
\set QUIET off
|
|
|
|
-- Register a new server
|
|
SELECT '1.1', cartodb.CDB_Federated_Server_List_Servers();
|
|
SELECT '1.2', cartodb.CDB_Federated_Server_List_Servers(server := 'doesNotExist');
|
|
SELECT '1.3', cartodb.CDB_Federated_Server_Register_PG(server := 'myRemote'::text, config := '{
|
|
"server": {
|
|
"host": "localhost",
|
|
"port": @@PGPORT@@
|
|
},
|
|
"credentials": {
|
|
"username": "fdw_user",
|
|
"password": "foobarino"
|
|
}
|
|
}'::jsonb);
|
|
SELECT '1.4', cartodb.CDB_Federated_Server_List_Servers();
|
|
|
|
-- Register a second server
|
|
SELECT '2.1', cartodb.CDB_Federated_Server_Register_PG(server := 'myRemote2'::text, config := '{
|
|
"server": {
|
|
"dbname": "fdw_target",
|
|
"host": "localhost",
|
|
"port": @@PGPORT@@,
|
|
"extensions": "postgis",
|
|
"updatable": "false",
|
|
"use_remote_estimate": "true",
|
|
"fetch_size": "1000"
|
|
},
|
|
"credentials": {
|
|
"username": "fdw_user",
|
|
"password": "foobarino"
|
|
}
|
|
}'::jsonb);
|
|
SELECT '2.2', cartodb.CDB_Federated_Server_List_Servers();
|
|
-- Check that CDB_Federated_Server_List_Servers works with name
|
|
SELECT '2.3', cartodb.CDB_Federated_Server_List_Servers(server := 'myRemote');
|
|
|
|
|
|
-- Re-register the second server
|
|
SELECT '3.1', cartodb.CDB_Federated_Server_Register_PG(server := 'myRemote2'::text, config := '{
|
|
"server": {
|
|
"dbname": "fdw_target",
|
|
"host": "localhost",
|
|
"port": @@PGPORT@@,
|
|
"extensions": "postgis",
|
|
"updatable": "false",
|
|
"use_remote_estimate": "true",
|
|
"fetch_size": "1000"
|
|
},
|
|
"credentials": {
|
|
"username": "other_remote_user",
|
|
"password": "foobarino"
|
|
}
|
|
}'::jsonb);
|
|
SELECT '3.2', cartodb.CDB_Federated_Server_List_Servers();
|
|
|
|
-- Unregister #1
|
|
SELECT '4.1', cartodb.CDB_Federated_Server_Unregister(server := 'myRemote'::text);
|
|
SELECT '4.2', cartodb.CDB_Federated_Server_List_Servers();
|
|
|
|
-- Unregister a server that doesn't exist
|
|
SELECT '5.1', cartodb.CDB_Federated_Server_Unregister(server := 'doesNotExist'::text);
|
|
|
|
-- Unregister #2
|
|
SELECT '6.1', cartodb.CDB_Federated_Server_Unregister(server := 'myRemote2'::text);
|
|
SELECT '6.2', cartodb.CDB_Federated_Server_List_Servers();
|
|
|
|
-- Test empty config
|
|
SELECT '7.0', cartodb.CDB_Federated_Server_Register_PG(server := NULL::text, config := '{ "server": {}, "credentials" : {}}');
|
|
SELECT '7.1', cartodb.CDB_Federated_Server_Register_PG(server := 'empty'::text, config := '{}');
|
|
-- Test without passing credentials
|
|
SELECT '7.2', cartodb.CDB_Federated_Server_Register_PG(server := 'empty'::text, config := '{
|
|
"server": {
|
|
"dbname": "fdw_target",
|
|
"host": "localhost",
|
|
"port": @@PGPORT@@,
|
|
"extensions": "postgis",
|
|
"updatable": "false",
|
|
"use_remote_estimate": "true",
|
|
"fetch_size": "1000"
|
|
}
|
|
}'::jsonb);
|
|
-- Test with empty credentials
|
|
SELECT '7.3', cartodb.CDB_Federated_Server_Register_PG(server := 'empty'::text, config := '{
|
|
"server": {
|
|
"dbname": "fdw_target",
|
|
"host": "localhost",
|
|
"port": @@PGPORT@@,
|
|
"extensions": "postgis",
|
|
"updatable": "false",
|
|
"use_remote_estimate": "true",
|
|
"fetch_size": "1000"
|
|
},
|
|
"credentials": { }
|
|
}'::jsonb);
|
|
SELECT '7.4', cartodb.CDB_Federated_Server_List_Servers();
|
|
SELECT '7.5', cartodb.CDB_Federated_Server_Unregister(server := 'empty'::text);
|
|
-- Test without without server options
|
|
SELECT '7.6', cartodb.CDB_Federated_Server_Register_PG(server := 'empty'::text, config := '{
|
|
"credentials": {
|
|
"username": "other_remote_user",
|
|
"password": "foobarino"
|
|
}
|
|
}'::jsonb);
|
|
|
|
-- Should work ok with special characters
|
|
SELECT '8.1', cartodb.CDB_Federated_Server_Register_PG(server := 'myRemote" or''not'::text, config := '{
|
|
"server": {
|
|
"dbname": "fdw target",
|
|
"host": "localhost",
|
|
"port": @@PGPORT@@,
|
|
"extensions": "postgis",
|
|
"updatable": "false",
|
|
"use_remote_estimate": "true",
|
|
"fetch_size": "1000"
|
|
},
|
|
"credentials": {
|
|
"username": "fdw user",
|
|
"password": "foo barino"
|
|
}
|
|
}'::jsonb);
|
|
SELECT '8.2', cartodb.CDB_Federated_Server_List_Servers();
|
|
SELECT '8.3', cartodb.CDB_Federated_Server_Unregister(server := 'myRemote" or''not'::text);
|
|
|
|
-- Should throw when trying to unregistering a server that doesn't exists
|
|
SELECT '8.4', cartodb.CDB_Federated_Server_Unregister(server := 'Does not exist'::text);
|
|
|
|
-- Test permissions
|
|
\set QUIET on
|
|
|
|
-- We create a username following the same steps as organization members
|
|
CREATE ROLE cdb_fs_tester LOGIN PASSWORD 'cdb_fs_passwd';
|
|
GRANT CONNECT ON DATABASE contrib_regression TO cdb_fs_tester;
|
|
CREATE SCHEMA cdb_fs_tester AUTHORIZATION cdb_fs_tester;
|
|
SELECT cartodb.CDB_Organization_Create_Member('cdb_fs_tester');
|
|
ALTER ROLE cdb_fs_tester SET search_path TO cdb_fs_tester,cartodb,public;
|
|
|
|
\set QUIET off
|
|
|
|
SELECT '9.1', cartodb.CDB_Federated_Server_Register_PG(server := 'myRemote3'::text, config := '{
|
|
"server": {
|
|
"host": "localhost",
|
|
"port": @@PGPORT@@
|
|
},
|
|
"credentials": {
|
|
"username": "fdw_user",
|
|
"password": "foobarino"
|
|
}
|
|
}'::jsonb);
|
|
|
|
\c contrib_regression cdb_fs_tester
|
|
|
|
-- A normal user can list existing servers
|
|
SELECT '9.2', cartodb.CDB_Federated_Server_List_Servers();
|
|
-- Creating a server without superadmin should fail
|
|
SELECT '9.3', cartodb.CDB_Federated_Server_Register_PG(server := 'myRemote4'::text, config := '{
|
|
"server": {
|
|
"host": "localhost",
|
|
"port": @@PGPORT@@
|
|
},
|
|
"credentials": {
|
|
"username": "fdw_user",
|
|
"password": "foobarino"
|
|
}
|
|
}'::jsonb);
|
|
|
|
|
|
\c contrib_regression postgres
|
|
|
|
SELECT '9.5', cartodb.CDB_Federated_Server_Grant_Access(server := 'myRemote3', usernames := ARRAY['cdb_fs_tester']);
|
|
SELECT '9.6', cartodb.CDB_Federated_Server_Grant_Access(server := 'does not exist', usernames := ARRAY['cdb_fs_tester']);
|
|
SELECT '9.7', cartodb.CDB_Federated_Server_Grant_Access(server := 'myRemote3', usernames := ARRAY['does not exist']);
|
|
|
|
-- Grant again raises a notice
|
|
SELECT '9.8', cartodb.CDB_Federated_Server_Grant_Access(server := 'myRemote3', usernames := ARRAY['cdb_fs_tester']);
|
|
|
|
-- Revoke works
|
|
SELECT '9.9', cartodb.CDB_Federated_Server_Revoke_Access(server := 'myRemote3', usernames := ARRAY['cdb_fs_tester']);
|
|
SELECT '9.10', cartodb.CDB_Federated_Server_Grant_Access(server := 'myRemote3', usernames := ARRAY['cdb_fs_tester']);
|
|
|
|
-- Dropping the server without revoking access works
|
|
SELECT '9.11', cartodb.CDB_Federated_Server_Unregister(server := 'myRemote3'::text);
|
|
|
|
-- Cleanup
|
|
\set QUIET on
|
|
DROP SCHEMA cdb_fs_tester CASCADE;
|
|
REVOKE CONNECT ON DATABASE contrib_regression FROM cdb_fs_tester;
|
|
DROP ROLE cdb_fs_tester;
|
|
DROP EXTENSION postgres_fdw;
|
|
\set QUIET off
|
|
|
|
|