Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb28dfa6

Browse files
committed
adminpack: Add test suite
Reviewed-by: David Steele <david@pgmasters.net>
1 parent81276fd commitb28dfa6

File tree

4 files changed

+212
-0
lines changed

4 files changed

+212
-0
lines changed

‎contrib/adminpack/.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Generated subdirectories
2+
/log/
3+
/results/
4+
/tmp_check/

‎contrib/adminpack/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ EXTENSION = adminpack
88
DATA = adminpack--1.0.sql
99
PGFILEDESC = "adminpack - support functions for pgAdmin"
1010

11+
REGRESS = adminpack
12+
1113
ifdefUSE_PGXS
1214
PG_CONFIG = pg_config
1315
PGXS :=$(shell$(PG_CONFIG) --pgxs)
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
CREATE EXTENSION adminpack;
2+
-- create new file
3+
SELECT pg_file_write('test_file1', 'test1', false);
4+
pg_file_write
5+
---------------
6+
5
7+
(1 row)
8+
9+
SELECT pg_read_file('test_file1');
10+
pg_read_file
11+
--------------
12+
test1
13+
(1 row)
14+
15+
-- append
16+
SELECT pg_file_write('test_file1', 'test1', true);
17+
pg_file_write
18+
---------------
19+
5
20+
(1 row)
21+
22+
SELECT pg_read_file('test_file1');
23+
pg_read_file
24+
--------------
25+
test1test1
26+
(1 row)
27+
28+
-- error, already exists
29+
SELECT pg_file_write('test_file1', 'test1', false);
30+
ERROR: file "test_file1" exists
31+
SELECT pg_read_file('test_file1');
32+
pg_read_file
33+
--------------
34+
test1test1
35+
(1 row)
36+
37+
-- disallowed file paths
38+
SELECT pg_file_write('../test_file0', 'test0', false);
39+
ERROR: path must be in or below the current directory
40+
SELECT pg_file_write('/tmp/test_file0', 'test0', false);
41+
ERROR: absolute path not allowed
42+
SELECT pg_file_write(current_setting('data_directory') || '/test_file4', 'test4', false);
43+
pg_file_write
44+
---------------
45+
5
46+
(1 row)
47+
48+
SELECT pg_file_write(current_setting('data_directory') || '/../test_file4', 'test4', false);
49+
ERROR: reference to parent directory ("..") not allowed
50+
-- rename file
51+
SELECT pg_file_rename('test_file1', 'test_file2');
52+
pg_file_rename
53+
----------------
54+
t
55+
(1 row)
56+
57+
SELECT pg_read_file('test_file1'); -- not there
58+
ERROR: could not stat file "test_file1": No such file or directory
59+
SELECT pg_read_file('test_file2');
60+
pg_read_file
61+
--------------
62+
test1test1
63+
(1 row)
64+
65+
-- error
66+
SELECT pg_file_rename('test_file1', 'test_file2');
67+
WARNING: file "test_file1" is not accessible: No such file or directory
68+
pg_file_rename
69+
----------------
70+
f
71+
(1 row)
72+
73+
-- rename file and archive
74+
SELECT pg_file_write('test_file3', 'test3', false);
75+
pg_file_write
76+
---------------
77+
5
78+
(1 row)
79+
80+
SELECT pg_file_rename('test_file2', 'test_file3', 'test_file3_archive');
81+
pg_file_rename
82+
----------------
83+
t
84+
(1 row)
85+
86+
SELECT pg_read_file('test_file2'); -- not there
87+
ERROR: could not stat file "test_file2": No such file or directory
88+
SELECT pg_read_file('test_file3');
89+
pg_read_file
90+
--------------
91+
test1test1
92+
(1 row)
93+
94+
SELECT pg_read_file('test_file3_archive');
95+
pg_read_file
96+
--------------
97+
test3
98+
(1 row)
99+
100+
-- unlink
101+
SELECT pg_file_unlink('test_file1'); -- does not exist
102+
pg_file_unlink
103+
----------------
104+
f
105+
(1 row)
106+
107+
SELECT pg_file_unlink('test_file2'); -- does not exist
108+
pg_file_unlink
109+
----------------
110+
f
111+
(1 row)
112+
113+
SELECT pg_file_unlink('test_file3');
114+
pg_file_unlink
115+
----------------
116+
t
117+
(1 row)
118+
119+
SELECT pg_file_unlink('test_file3_archive');
120+
pg_file_unlink
121+
----------------
122+
t
123+
(1 row)
124+
125+
SELECT pg_file_unlink('test_file4');
126+
pg_file_unlink
127+
----------------
128+
t
129+
(1 row)
130+
131+
-- superuser checks
132+
CREATE USER regress_user1;
133+
SET ROLE regress_user1;
134+
SELECT pg_file_write('test_file0', 'test0', false);
135+
ERROR: only superuser may access generic file functions
136+
SELECT pg_file_rename('test_file0', 'test_file0');
137+
ERROR: only superuser may access generic file functions
138+
CONTEXT: SQL function "pg_file_rename" statement 1
139+
SELECT pg_file_unlink('test_file0');
140+
ERROR: only superuser may access generic file functions
141+
SELECT pg_logdir_ls();
142+
ERROR: only superuser can list the log directory
143+
RESET ROLE;
144+
DROP USER regress_user1;
145+
-- no further tests for pg_logdir_ls() because it depends on the
146+
-- server's logging setup

‎contrib/adminpack/sql/adminpack.sql

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
CREATE EXTENSION adminpack;
2+
3+
-- create new file
4+
SELECT pg_file_write('test_file1','test1', false);
5+
SELECT pg_read_file('test_file1');
6+
7+
-- append
8+
SELECT pg_file_write('test_file1','test1', true);
9+
SELECT pg_read_file('test_file1');
10+
11+
-- error, already exists
12+
SELECT pg_file_write('test_file1','test1', false);
13+
SELECT pg_read_file('test_file1');
14+
15+
-- disallowed file paths
16+
SELECT pg_file_write('../test_file0','test0', false);
17+
SELECT pg_file_write('/tmp/test_file0','test0', false);
18+
SELECT pg_file_write(current_setting('data_directory')||'/test_file4','test4', false);
19+
SELECT pg_file_write(current_setting('data_directory')||'/../test_file4','test4', false);
20+
21+
22+
-- rename file
23+
SELECT pg_file_rename('test_file1','test_file2');
24+
SELECT pg_read_file('test_file1');-- not there
25+
SELECT pg_read_file('test_file2');
26+
27+
-- error
28+
SELECT pg_file_rename('test_file1','test_file2');
29+
30+
-- rename file and archive
31+
SELECT pg_file_write('test_file3','test3', false);
32+
SELECT pg_file_rename('test_file2','test_file3','test_file3_archive');
33+
SELECT pg_read_file('test_file2');-- not there
34+
SELECT pg_read_file('test_file3');
35+
SELECT pg_read_file('test_file3_archive');
36+
37+
38+
-- unlink
39+
SELECT pg_file_unlink('test_file1');-- does not exist
40+
SELECT pg_file_unlink('test_file2');-- does not exist
41+
SELECT pg_file_unlink('test_file3');
42+
SELECT pg_file_unlink('test_file3_archive');
43+
SELECT pg_file_unlink('test_file4');
44+
45+
46+
-- superuser checks
47+
CREATEUSERregress_user1;
48+
SET ROLE regress_user1;
49+
50+
SELECT pg_file_write('test_file0','test0', false);
51+
SELECT pg_file_rename('test_file0','test_file0');
52+
SELECT pg_file_unlink('test_file0');
53+
SELECT pg_logdir_ls();
54+
55+
RESET ROLE;
56+
DROPUSER regress_user1;
57+
58+
59+
-- no further tests for pg_logdir_ls() because it depends on the
60+
-- server's logging setup

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp