adminpack: Add test suite

Reviewed-by: David Steele <david@pgmasters.net>
This commit is contained in:
Peter Eisentraut 2017-08-11 21:04:04 -04:00
parent 81276fdd39
commit b28dfa6d6f
4 changed files with 212 additions and 0 deletions

4
contrib/adminpack/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
# Generated subdirectories
/log/
/results/
/tmp_check/

View File

@ -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)

View 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

View 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