Skip to content

Commit e0c617d

Browse files
committed
test(postgres): improved tests
1 parent 1c4ad2a commit e0c617d

17 files changed

+1217
-800
lines changed

test/postgresql/02_roundtrip.sql

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
-- '2 db roundtrip test'
22

33
\set testid '02'
4+
\ir helper_test_init.sql
45

56
\connect cloudsync_test_1
67
\ir helper_psql_conn_setup.sql
@@ -25,4 +26,13 @@ SELECT (:'smoke_hash' = :'smoke_hash_b') AS payload_roundtrip_ok \gset
2526
\else
2627
\echo [FAIL] (:testid) Test payload roundtrip to another database
2728
SELECT (:fail::int + 1) AS fail \gset
29+
\endif
30+
31+
-- Cleanup: Drop test databases if not in DEBUG mode and no failures
32+
\ir helper_test_cleanup.sql
33+
\if :should_cleanup
34+
DROP DATABASE IF EXISTS cloudsync_test_1;
35+
DROP DATABASE IF EXISTS cloudsync_test_2;
36+
\else
37+
\echo [INFO] !!!!!
2838
\endif

test/postgresql/03_multiple_roundtrip.sql

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,40 @@
11
-- 'Test multi-db roundtrip with concurrent updates'
22

33
\set testid '03'
4+
\ir helper_test_init.sql
45

56
\connect postgres
67
\ir helper_psql_conn_setup.sql
7-
DROP DATABASE IF EXISTS cloudsync_test_a;
8-
DROP DATABASE IF EXISTS cloudsync_test_b;
9-
DROP DATABASE IF EXISTS cloudsync_test_c;
10-
CREATE DATABASE cloudsync_test_a;
11-
CREATE DATABASE cloudsync_test_b;
12-
CREATE DATABASE cloudsync_test_c;
8+
DROP DATABASE IF EXISTS cloudsync_test_03_a;
9+
DROP DATABASE IF EXISTS cloudsync_test_03_b;
10+
DROP DATABASE IF EXISTS cloudsync_test_03_c;
11+
CREATE DATABASE cloudsync_test_03_a;
12+
CREATE DATABASE cloudsync_test_03_b;
13+
CREATE DATABASE cloudsync_test_03_c;
1314

14-
\connect cloudsync_test_a
15+
\connect cloudsync_test_03_a
1516
\ir helper_psql_conn_setup.sql
1617
CREATE EXTENSION IF NOT EXISTS cloudsync;
1718
DROP TABLE IF EXISTS smoke_tbl;
1819
CREATE TABLE smoke_tbl (id TEXT PRIMARY KEY, val TEXT);
1920
SELECT cloudsync_init('smoke_tbl', 'CLS', true) AS _init_site_id_a \gset
2021

21-
\connect cloudsync_test_b
22+
\connect cloudsync_test_03_b
2223
\ir helper_psql_conn_setup.sql
2324
CREATE EXTENSION IF NOT EXISTS cloudsync;
2425
DROP TABLE IF EXISTS smoke_tbl;
2526
CREATE TABLE smoke_tbl (id TEXT PRIMARY KEY, val TEXT);
2627
SELECT cloudsync_init('smoke_tbl', 'CLS', true) AS _init_site_id_b \gset
2728

28-
\connect cloudsync_test_c
29+
\connect cloudsync_test_03_c
2930
\ir helper_psql_conn_setup.sql
3031
CREATE EXTENSION IF NOT EXISTS cloudsync;
3132
DROP TABLE IF EXISTS smoke_tbl;
3233
CREATE TABLE smoke_tbl (id TEXT PRIMARY KEY, val TEXT);
3334
SELECT cloudsync_init('smoke_tbl', 'CLS', true) AS _init_site_id_c \gset
3435

3536
-- Round 1: independent inserts on each database
36-
\connect cloudsync_test_a
37+
\connect cloudsync_test_03_a
3738
INSERT INTO smoke_tbl VALUES ('id1', 'a1');
3839
INSERT INTO smoke_tbl VALUES ('id2', 'a2');
3940
SELECT CASE WHEN payload IS NULL OR octet_length(payload) = 0
@@ -47,7 +48,7 @@ FROM (
4748
WHERE site_id = cloudsync_siteid()
4849
) AS p \gset
4950

50-
\connect cloudsync_test_b
51+
\connect cloudsync_test_03_b
5152
INSERT INTO smoke_tbl VALUES ('id3', 'b3');
5253
SELECT CASE WHEN payload IS NULL OR octet_length(payload) = 0
5354
THEN ''
@@ -60,7 +61,7 @@ FROM (
6061
WHERE site_id = cloudsync_siteid()
6162
) AS p \gset
6263

63-
\connect cloudsync_test_c
64+
\connect cloudsync_test_03_c
6465
INSERT INTO smoke_tbl VALUES ('id4', 'c4');
6566
SELECT CASE WHEN payload IS NULL OR octet_length(payload) = 0
6667
THEN ''
@@ -74,7 +75,7 @@ FROM (
7475
) AS p \gset
7576

7677
-- Round 1 apply: fan-out changes
77-
\connect cloudsync_test_a
78+
\connect cloudsync_test_03_a
7879
\if :payload_b_r1_ok
7980
SELECT cloudsync_payload_apply(decode(substr(:'payload_b_r1', 3), 'hex')) AS _apply_a_r1_b \gset
8081
\else
@@ -86,7 +87,7 @@ SELECT cloudsync_payload_apply(decode(substr(:'payload_c_r1', 3), 'hex')) AS _ap
8687
SELECT 0 AS _apply_a_r1_c \gset
8788
\endif
8889

89-
\connect cloudsync_test_b
90+
\connect cloudsync_test_03_b
9091
\if :payload_a_r1_ok
9192
SELECT cloudsync_payload_apply(decode(substr(:'payload_a_r1', 3), 'hex')) AS _apply_b_r1_a \gset
9293
\else
@@ -98,7 +99,7 @@ SELECT cloudsync_payload_apply(decode(substr(:'payload_c_r1', 3), 'hex')) AS _ap
9899
SELECT 0 AS _apply_b_r1_c \gset
99100
\endif
100101

101-
\connect cloudsync_test_c
102+
\connect cloudsync_test_03_c
102103
\if :payload_a_r1_ok
103104
SELECT cloudsync_payload_apply(decode(substr(:'payload_a_r1', 3), 'hex')) AS _apply_c_r1_a \gset
104105
\else
@@ -111,7 +112,7 @@ SELECT 0 AS _apply_c_r1_b \gset
111112
\endif
112113

113114
-- Round 2: concurrent updates on the same row + mixed operations
114-
\connect cloudsync_test_a
115+
\connect cloudsync_test_03_a
115116
UPDATE smoke_tbl SET val = 'a1_a' WHERE id = 'id1';
116117
DELETE FROM smoke_tbl WHERE id = 'id2';
117118
INSERT INTO smoke_tbl VALUES ('id5', 'a5');
@@ -126,7 +127,7 @@ FROM (
126127
WHERE site_id = cloudsync_siteid()
127128
) AS p \gset
128129

129-
\connect cloudsync_test_b
130+
\connect cloudsync_test_03_b
130131
UPDATE smoke_tbl SET val = 'a1_b' WHERE id = 'id1';
131132
UPDATE smoke_tbl SET val = 'b3_b' WHERE id = 'id3';
132133
INSERT INTO smoke_tbl VALUES ('id6', 'b6');
@@ -141,7 +142,7 @@ FROM (
141142
WHERE site_id = cloudsync_siteid()
142143
) AS p \gset
143144

144-
\connect cloudsync_test_c
145+
\connect cloudsync_test_03_c
145146
UPDATE smoke_tbl SET val = 'a1_c' WHERE id = 'id1';
146147
DELETE FROM smoke_tbl WHERE id = 'id4';
147148
INSERT INTO smoke_tbl VALUES ('id7', 'c7');
@@ -157,7 +158,7 @@ FROM (
157158
) AS p \gset
158159

159160
-- Round 2 apply: fan-out changes
160-
\connect cloudsync_test_a
161+
\connect cloudsync_test_03_a
161162
\if :payload_b_r2_ok
162163
SELECT cloudsync_payload_apply(decode(substr(:'payload_b_r2', 3), 'hex')) AS _apply_a_r2_b \gset
163164
\else
@@ -169,7 +170,7 @@ SELECT cloudsync_payload_apply(decode(substr(:'payload_c_r2', 3), 'hex')) AS _ap
169170
SELECT 0 AS _apply_a_r2_c \gset
170171
\endif
171172

172-
\connect cloudsync_test_b
173+
\connect cloudsync_test_03_b
173174
\if :payload_a_r2_ok
174175
SELECT cloudsync_payload_apply(decode(substr(:'payload_a_r2', 3), 'hex')) AS _apply_b_r2_a \gset
175176
\else
@@ -181,7 +182,7 @@ SELECT cloudsync_payload_apply(decode(substr(:'payload_c_r2', 3), 'hex')) AS _ap
181182
SELECT 0 AS _apply_b_r2_c \gset
182183
\endif
183184

184-
\connect cloudsync_test_c
185+
\connect cloudsync_test_03_c
185186
\if :payload_a_r2_ok
186187
SELECT cloudsync_payload_apply(decode(substr(:'payload_a_r2', 3), 'hex')) AS _apply_c_r2_a \gset
187188
\else
@@ -194,7 +195,7 @@ SELECT 0 AS _apply_c_r2_b \gset
194195
\endif
195196

196197
-- Round 3: additional operations to force another sync cycle
197-
\connect cloudsync_test_a
198+
\connect cloudsync_test_03_a
198199
UPDATE smoke_tbl SET val = 'b3_a' WHERE id = 'id3';
199200
SELECT CASE WHEN payload IS NULL OR octet_length(payload) = 0
200201
THEN ''
@@ -207,7 +208,7 @@ FROM (
207208
WHERE site_id = cloudsync_siteid()
208209
) AS p \gset
209210

210-
\connect cloudsync_test_b
211+
\connect cloudsync_test_03_b
211212
DELETE FROM smoke_tbl WHERE id = 'id5';
212213
SELECT CASE WHEN payload IS NULL OR octet_length(payload) = 0
213214
THEN ''
@@ -220,7 +221,7 @@ FROM (
220221
WHERE site_id = cloudsync_siteid()
221222
) AS p \gset
222223

223-
\connect cloudsync_test_c
224+
\connect cloudsync_test_03_c
224225
UPDATE smoke_tbl SET val = 'b6_c' WHERE id = 'id6';
225226
INSERT INTO smoke_tbl VALUES ('id8', 'c8');
226227
SELECT CASE WHEN payload IS NULL OR octet_length(payload) = 0
@@ -235,7 +236,7 @@ FROM (
235236
) AS p \gset
236237

237238
-- Round 3 apply: final fan-out
238-
\connect cloudsync_test_a
239+
\connect cloudsync_test_03_a
239240
\if :payload_b_r3_ok
240241
SELECT cloudsync_payload_apply(decode(substr(:'payload_b_r3', 3), 'hex')) AS _apply_a_r3_b \gset
241242
\else
@@ -247,7 +248,7 @@ SELECT cloudsync_payload_apply(decode(substr(:'payload_c_r3', 3), 'hex')) AS _ap
247248
SELECT 0 AS _apply_a_r3_c \gset
248249
\endif
249250

250-
\connect cloudsync_test_b
251+
\connect cloudsync_test_03_b
251252
\if :payload_a_r3_ok
252253
SELECT cloudsync_payload_apply(decode(substr(:'payload_a_r3', 3), 'hex')) AS _apply_b_r3_a \gset
253254
\else
@@ -259,7 +260,7 @@ SELECT cloudsync_payload_apply(decode(substr(:'payload_c_r3', 3), 'hex')) AS _ap
259260
SELECT 0 AS _apply_b_r3_c \gset
260261
\endif
261262

262-
\connect cloudsync_test_c
263+
\connect cloudsync_test_03_c
263264
\if :payload_a_r3_ok
264265
SELECT cloudsync_payload_apply(decode(substr(:'payload_a_r3', 3), 'hex')) AS _apply_c_r3_a \gset
265266
\else
@@ -272,15 +273,15 @@ SELECT 0 AS _apply_c_r3_b \gset
272273
\endif
273274

274275
-- Final consistency check across all three databases
275-
\connect cloudsync_test_a
276+
\connect cloudsync_test_03_a
276277
SELECT md5(COALESCE(string_agg(id || ':' || COALESCE(val, ''), ',' ORDER BY id), '')) AS smoke_hash_a
277278
FROM smoke_tbl \gset
278279

279-
\connect cloudsync_test_b
280+
\connect cloudsync_test_03_b
280281
SELECT md5(COALESCE(string_agg(id || ':' || COALESCE(val, ''), ',' ORDER BY id), '')) AS smoke_hash_b
281282
FROM smoke_tbl \gset
282283

283-
\connect cloudsync_test_c
284+
\connect cloudsync_test_03_c
284285
SELECT md5(COALESCE(string_agg(id || ':' || COALESCE(val, ''), ',' ORDER BY id), '')) AS smoke_hash_c
285286
FROM smoke_tbl \gset
286287

@@ -291,3 +292,11 @@ SELECT (:'smoke_hash_a' = :'smoke_hash_b' AND :'smoke_hash_a' = :'smoke_hash_c')
291292
\echo [FAIL] (:testid) Test multi-db roundtrip with concurrent updates
292293
SELECT (:fail::int + 1) AS fail \gset
293294
\endif
295+
296+
-- Cleanup: Drop test databases if not in DEBUG mode and no failures
297+
\ir helper_test_cleanup.sql
298+
\if :should_cleanup
299+
DROP DATABASE IF EXISTS cloudsync_test_03_a;
300+
DROP DATABASE IF EXISTS cloudsync_test_03_b;
301+
DROP DATABASE IF EXISTS cloudsync_test_03_c;
302+
\endif

0 commit comments

Comments
 (0)