mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-28 00:11:53 +02:00
adminpack: Add test suite
Reviewed-by: David Steele <david@pgmasters.net>
This commit is contained in:
parent
81276fdd39
commit
b28dfa6d6f
4
contrib/adminpack/.gitignore
vendored
Normal file
4
contrib/adminpack/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
# Generated subdirectories
|
||||
/log/
|
||||
/results/
|
||||
/tmp_check/
|
@ -8,6 +8,8 @@ EXTENSION = adminpack
|
||||
DATA = adminpack--1.0.sql
|
||||
PGFILEDESC = "adminpack - support functions for pgAdmin"
|
||||
|
||||
REGRESS = adminpack
|
||||
|
||||
ifdef USE_PGXS
|
||||
PG_CONFIG = pg_config
|
||||
PGXS := $(shell $(PG_CONFIG) --pgxs)
|
||||
|
146
contrib/adminpack/expected/adminpack.out
Normal file
146
contrib/adminpack/expected/adminpack.out
Normal file
@ -0,0 +1,146 @@
|
||||
CREATE EXTENSION adminpack;
|
||||
-- create new file
|
||||
SELECT pg_file_write('test_file1', 'test1', false);
|
||||
pg_file_write
|
||||
---------------
|
||||
5
|
||||
(1 row)
|
||||
|
||||
SELECT pg_read_file('test_file1');
|
||||
pg_read_file
|
||||
--------------
|
||||
test1
|
||||
(1 row)
|
||||
|
||||
-- append
|
||||
SELECT pg_file_write('test_file1', 'test1', true);
|
||||
pg_file_write
|
||||
---------------
|
||||
5
|
||||
(1 row)
|
||||
|
||||
SELECT pg_read_file('test_file1');
|
||||
pg_read_file
|
||||
--------------
|
||||
test1test1
|
||||
(1 row)
|
||||
|
||||
-- error, already exists
|
||||
SELECT pg_file_write('test_file1', 'test1', false);
|
||||
ERROR: file "test_file1" exists
|
||||
SELECT pg_read_file('test_file1');
|
||||
pg_read_file
|
||||
--------------
|
||||
test1test1
|
||||
(1 row)
|
||||
|
||||
-- disallowed file paths
|
||||
SELECT pg_file_write('../test_file0', 'test0', false);
|
||||
ERROR: path must be in or below the current directory
|
||||
SELECT pg_file_write('/tmp/test_file0', 'test0', false);
|
||||
ERROR: absolute path not allowed
|
||||
SELECT pg_file_write(current_setting('data_directory') || '/test_file4', 'test4', false);
|
||||
pg_file_write
|
||||
---------------
|
||||
5
|
||||
(1 row)
|
||||
|
||||
SELECT pg_file_write(current_setting('data_directory') || '/../test_file4', 'test4', false);
|
||||
ERROR: reference to parent directory ("..") not allowed
|
||||
-- rename file
|
||||
SELECT pg_file_rename('test_file1', 'test_file2');
|
||||
pg_file_rename
|
||||
----------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT pg_read_file('test_file1'); -- not there
|
||||
ERROR: could not stat file "test_file1": No such file or directory
|
||||
SELECT pg_read_file('test_file2');
|
||||
pg_read_file
|
||||
--------------
|
||||
test1test1
|
||||
(1 row)
|
||||
|
||||
-- error
|
||||
SELECT pg_file_rename('test_file1', 'test_file2');
|
||||
WARNING: file "test_file1" is not accessible: No such file or directory
|
||||
pg_file_rename
|
||||
----------------
|
||||
f
|
||||
(1 row)
|
||||
|
||||
-- rename file and archive
|
||||
SELECT pg_file_write('test_file3', 'test3', false);
|
||||
pg_file_write
|
||||
---------------
|
||||
5
|
||||
(1 row)
|
||||
|
||||
SELECT pg_file_rename('test_file2', 'test_file3', 'test_file3_archive');
|
||||
pg_file_rename
|
||||
----------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT pg_read_file('test_file2'); -- not there
|
||||
ERROR: could not stat file "test_file2": No such file or directory
|
||||
SELECT pg_read_file('test_file3');
|
||||
pg_read_file
|
||||
--------------
|
||||
test1test1
|
||||
(1 row)
|
||||
|
||||
SELECT pg_read_file('test_file3_archive');
|
||||
pg_read_file
|
||||
--------------
|
||||
test3
|
||||
(1 row)
|
||||
|
||||
-- unlink
|
||||
SELECT pg_file_unlink('test_file1'); -- does not exist
|
||||
pg_file_unlink
|
||||
----------------
|
||||
f
|
||||
(1 row)
|
||||
|
||||
SELECT pg_file_unlink('test_file2'); -- does not exist
|
||||
pg_file_unlink
|
||||
----------------
|
||||
f
|
||||
(1 row)
|
||||
|
||||
SELECT pg_file_unlink('test_file3');
|
||||
pg_file_unlink
|
||||
----------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT pg_file_unlink('test_file3_archive');
|
||||
pg_file_unlink
|
||||
----------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT pg_file_unlink('test_file4');
|
||||
pg_file_unlink
|
||||
----------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
-- superuser checks
|
||||
CREATE USER regress_user1;
|
||||
SET ROLE regress_user1;
|
||||
SELECT pg_file_write('test_file0', 'test0', false);
|
||||
ERROR: only superuser may access generic file functions
|
||||
SELECT pg_file_rename('test_file0', 'test_file0');
|
||||
ERROR: only superuser may access generic file functions
|
||||
CONTEXT: SQL function "pg_file_rename" statement 1
|
||||
SELECT pg_file_unlink('test_file0');
|
||||
ERROR: only superuser may access generic file functions
|
||||
SELECT pg_logdir_ls();
|
||||
ERROR: only superuser can list the log directory
|
||||
RESET ROLE;
|
||||
DROP USER regress_user1;
|
||||
-- no further tests for pg_logdir_ls() because it depends on the
|
||||
-- server's logging setup
|
60
contrib/adminpack/sql/adminpack.sql
Normal file
60
contrib/adminpack/sql/adminpack.sql
Normal file
@ -0,0 +1,60 @@
|
||||
CREATE EXTENSION adminpack;
|
||||
|
||||
-- create new file
|
||||
SELECT pg_file_write('test_file1', 'test1', false);
|
||||
SELECT pg_read_file('test_file1');
|
||||
|
||||
-- append
|
||||
SELECT pg_file_write('test_file1', 'test1', true);
|
||||
SELECT pg_read_file('test_file1');
|
||||
|
||||
-- error, already exists
|
||||
SELECT pg_file_write('test_file1', 'test1', false);
|
||||
SELECT pg_read_file('test_file1');
|
||||
|
||||
-- disallowed file paths
|
||||
SELECT pg_file_write('../test_file0', 'test0', false);
|
||||
SELECT pg_file_write('/tmp/test_file0', 'test0', false);
|
||||
SELECT pg_file_write(current_setting('data_directory') || '/test_file4', 'test4', false);
|
||||
SELECT pg_file_write(current_setting('data_directory') || '/../test_file4', 'test4', false);
|
||||
|
||||
|
||||
-- rename file
|
||||
SELECT pg_file_rename('test_file1', 'test_file2');
|
||||
SELECT pg_read_file('test_file1'); -- not there
|
||||
SELECT pg_read_file('test_file2');
|
||||
|
||||
-- error
|
||||
SELECT pg_file_rename('test_file1', 'test_file2');
|
||||
|
||||
-- rename file and archive
|
||||
SELECT pg_file_write('test_file3', 'test3', false);
|
||||
SELECT pg_file_rename('test_file2', 'test_file3', 'test_file3_archive');
|
||||
SELECT pg_read_file('test_file2'); -- not there
|
||||
SELECT pg_read_file('test_file3');
|
||||
SELECT pg_read_file('test_file3_archive');
|
||||
|
||||
|
||||
-- unlink
|
||||
SELECT pg_file_unlink('test_file1'); -- does not exist
|
||||
SELECT pg_file_unlink('test_file2'); -- does not exist
|
||||
SELECT pg_file_unlink('test_file3');
|
||||
SELECT pg_file_unlink('test_file3_archive');
|
||||
SELECT pg_file_unlink('test_file4');
|
||||
|
||||
|
||||
-- superuser checks
|
||||
CREATE USER regress_user1;
|
||||
SET ROLE regress_user1;
|
||||
|
||||
SELECT pg_file_write('test_file0', 'test0', false);
|
||||
SELECT pg_file_rename('test_file0', 'test_file0');
|
||||
SELECT pg_file_unlink('test_file0');
|
||||
SELECT pg_logdir_ls();
|
||||
|
||||
RESET ROLE;
|
||||
DROP USER regress_user1;
|
||||
|
||||
|
||||
-- no further tests for pg_logdir_ls() because it depends on the
|
||||
-- server's logging setup
|
Loading…
Reference in New Issue
Block a user