Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit e3920ac

Browse files
committed
Add more subscription DDL tests
Add more tests for various variants of subscription DDL commands, based on code coverage report. Fix a small bug discovered by that.
1 parent 2e0c919 commit e3920ac

File tree

3 files changed

+57
-1
lines changed

3 files changed

+57
-1
lines changed

src/backend/commands/subscriptioncmds.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ publicationListToArray(List *publist)
228228
/* Check for duplicates. */
229229
foreach(pcell, publist)
230230
{
231-
char *pname = strVal(lfirst(cell));
231+
char *pname = strVal(lfirst(pcell));
232232

233233
if (name == pname)
234234
break;

src/test/regress/expected/subscription.out

+29
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
-- SUBSCRIPTION
33
--
44
CREATE ROLE regress_subscription_user LOGIN SUPERUSER;
5+
CREATE ROLE regress_subscription_user2;
56
CREATE ROLE regress_subscription_user_dummy LOGIN NOSUPERUSER;
67
SET SESSION AUTHORIZATION 'regress_subscription_user';
78
-- fail - no publications
@@ -19,11 +20,24 @@ BEGIN;
1920
CREATE SUBSCRIPTION testsub CONNECTION 'testconn' PUBLICATION testpub WITH (CREATE SLOT);
2021
ERROR: CREATE SUBSCRIPTION ... CREATE SLOT cannot run inside a transaction block
2122
COMMIT;
23+
-- fail - invalid connection string
2224
CREATE SUBSCRIPTION testsub CONNECTION 'testconn' PUBLICATION testpub;
2325
ERROR: invalid connection string syntax: missing "=" after "testconn" in connection info string
2426

27+
-- fail - duplicate publications
28+
CREATE SUBSCRIPTION testsub CONNECTION 'dbname=doesnotexist' PUBLICATION foo, testpub, foo WITH (NOCONNECT);
29+
ERROR: publication name "foo" used more than once
30+
-- ok
2531
CREATE SUBSCRIPTION testsub CONNECTION 'dbname=doesnotexist' PUBLICATION testpub WITH (NOCONNECT);
2632
WARNING: tables were not subscribed, you will have to run ALTER SUBSCRIPTION ... REFRESH PUBLICATION to subscribe the tables
33+
-- fail - name already exists
34+
CREATE SUBSCRIPTION testsub CONNECTION 'dbname=doesnotexist' PUBLICATION testpub WITH (NOCONNECT);
35+
ERROR: subscription "testsub" already exists
36+
-- fail - must be superuser
37+
SET SESSION AUTHORIZATION 'regress_subscription_user2';
38+
CREATE SUBSCRIPTION testsub2 CONNECTION 'dbname=doesnotexist' PUBLICATION foo WITH (NOCONNECT);
39+
ERROR: must be superuser to create subscriptions
40+
SET SESSION AUTHORIZATION 'regress_subscription_user';
2741
\dRs+
2842
List of subscriptions
2943
Name | Owner | Enabled | Publication | Conninfo
@@ -33,6 +47,10 @@ WARNING: tables were not subscribed, you will have to run ALTER SUBSCRIPTION ..
3347

3448
ALTER SUBSCRIPTION testsub SET PUBLICATION testpub2, testpub3 NOREFRESH;
3549
ALTER SUBSCRIPTION testsub CONNECTION 'dbname=doesnotexist2';
50+
ALTER SUBSCRIPTION testsub WITH (SLOT NAME = 'newname');
51+
-- fail
52+
ALTER SUBSCRIPTION doesnotexist CONNECTION 'dbname=doesnotexist2';
53+
ERROR: subscription "doesnotexist" does not exist
3654
\dRs+
3755
List of subscriptions
3856
Name | Owner | Enabled | Publication | Conninfo
@@ -73,6 +91,13 @@ ALTER SUBSCRIPTION testsub RENAME TO testsub_foo;
7391

7492
-- rename back to keep the rest simple
7593
ALTER SUBSCRIPTION testsub_foo RENAME TO testsub;
94+
-- fail - new owner must be superuser
95+
ALTER SUBSCRIPTION testsub OWNER TO regress_subscription_user2;
96+
ERROR: permission denied to change owner of subscription "testsub"
97+
HINT: The owner of an subscription must be a superuser.
98+
ALTER ROLE regress_subscription_user2 SUPERUSER;
99+
-- now it works
100+
ALTER SUBSCRIPTION testsub OWNER TO regress_subscription_user2;
76101
-- fail - cannot do DROP SUBSCRIPTION DROP SLOT inside transaction block
77102
BEGIN;
78103
DROP SUBSCRIPTION testsub DROP SLOT;
@@ -81,6 +106,10 @@ COMMIT;
81106
BEGIN;
82107
DROP SUBSCRIPTION testsub NODROP SLOT;
83108
COMMIT;
109+
DROP SUBSCRIPTION IF EXISTS testsub NODROP SLOT;
110+
NOTICE: subscription "testsub" does not exist, skipping
111+
DROP SUBSCRIPTION testsub NODROP SLOT; -- fail
112+
ERROR: subscription "testsub" does not exist
84113
RESET SESSION AUTHORIZATION;
85114
DROP ROLE regress_subscription_user;
86115
DROP ROLE regress_subscription_user_dummy;

src/test/regress/sql/subscription.sql

+27
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
--
44

55
CREATE ROLE regress_subscription_user LOGIN SUPERUSER;
6+
CREATE ROLE regress_subscription_user2;
67
CREATE ROLE regress_subscription_user_dummy LOGIN NOSUPERUSER;
78
SET SESSION AUTHORIZATION 'regress_subscription_user';
89

@@ -17,14 +18,31 @@ BEGIN;
1718
CREATE SUBSCRIPTION testsub CONNECTION 'testconn' PUBLICATION testpub WITH (CREATE SLOT);
1819
COMMIT;
1920

21+
-- fail - invalid connection string
2022
CREATE SUBSCRIPTION testsub CONNECTION 'testconn' PUBLICATION testpub;
2123

24+
-- fail - duplicate publications
25+
CREATE SUBSCRIPTION testsub CONNECTION 'dbname=doesnotexist' PUBLICATION foo, testpub, foo WITH (NOCONNECT);
26+
27+
-- ok
28+
CREATE SUBSCRIPTION testsub CONNECTION 'dbname=doesnotexist' PUBLICATION testpub WITH (NOCONNECT);
29+
30+
-- fail - name already exists
2231
CREATE SUBSCRIPTION testsub CONNECTION 'dbname=doesnotexist' PUBLICATION testpub WITH (NOCONNECT);
2332

33+
-- fail - must be superuser
34+
SET SESSION AUTHORIZATION 'regress_subscription_user2';
35+
CREATE SUBSCRIPTION testsub2 CONNECTION 'dbname=doesnotexist' PUBLICATION foo WITH (NOCONNECT);
36+
SET SESSION AUTHORIZATION 'regress_subscription_user';
37+
2438
\dRs+
2539

2640
ALTER SUBSCRIPTION testsub SET PUBLICATION testpub2, testpub3 NOREFRESH;
2741
ALTER SUBSCRIPTION testsub CONNECTION 'dbname=doesnotexist2';
42+
ALTER SUBSCRIPTION testsub WITH (SLOT NAME = 'newname');
43+
44+
-- fail
45+
ALTER SUBSCRIPTION doesnotexist CONNECTION 'dbname=doesnotexist2';
2846

2947
\dRs+
3048

@@ -51,6 +69,12 @@ ALTER SUBSCRIPTION testsub RENAME TO testsub_foo;
5169
-- rename back to keep the rest simple
5270
ALTER SUBSCRIPTION testsub_foo RENAME TO testsub;
5371

72+
-- fail - new owner must be superuser
73+
ALTER SUBSCRIPTION testsub OWNER TO regress_subscription_user2;
74+
ALTER ROLE regress_subscription_user2 SUPERUSER;
75+
-- now it works
76+
ALTER SUBSCRIPTION testsub OWNER TO regress_subscription_user2;
77+
5478
-- fail - cannot do DROP SUBSCRIPTION DROP SLOT inside transaction block
5579
BEGIN;
5680
DROP SUBSCRIPTION testsub DROP SLOT;
@@ -60,6 +84,9 @@ BEGIN;
6084
DROP SUBSCRIPTION testsub NODROP SLOT;
6185
COMMIT;
6286

87+
DROP SUBSCRIPTION IF EXISTS testsub NODROP SLOT;
88+
DROP SUBSCRIPTION testsub NODROP SLOT; -- fail
89+
6390
RESET SESSION AUTHORIZATION;
6491
DROP ROLE regress_subscription_user;
6592
DROP ROLE regress_subscription_user_dummy;

0 commit comments

Comments
 (0)