Add a regression test for contrib/tcn.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 1 Aug 2022 23:18:37 +0000 (19:18 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 1 Aug 2022 23:18:50 +0000 (19:18 -0400)
Just whittling down the list of contrib modules with zero coverage.

Discussion: https://postgr.es/m/909667.1659222591@sss.pgh.pa.us

contrib/tcn/.gitignore [new file with mode: 0644]
contrib/tcn/Makefile
contrib/tcn/expected/tcn.out [new file with mode: 0644]
contrib/tcn/specs/tcn.spec [new file with mode: 0644]

diff --git a/contrib/tcn/.gitignore b/contrib/tcn/.gitignore
new file mode 100644 (file)
index 0000000..b4903eb
--- /dev/null
@@ -0,0 +1,6 @@
+# Generated subdirectories
+/log/
+/results/
+/output_iso/
+/tmp_check/
+/tmp_check_iso/
index 2de3425bbda90f65a06adeb61dcbf41d34c2bfc0..f36e6beddd8ec7424a7c3a8feff85fa9ac98ad3e 100644 (file)
@@ -6,6 +6,8 @@ EXTENSION = tcn
 DATA = tcn--1.0.sql
 PGFILEDESC = "tcn - trigger function notifying listeners"
 
+ISOLATION = tcn
+
 ifdef USE_PGXS
 PG_CONFIG = pg_config
 PGXS := $(shell $(PG_CONFIG) --pgxs)
diff --git a/contrib/tcn/expected/tcn.out b/contrib/tcn/expected/tcn.out
new file mode 100644 (file)
index 0000000..8c67113
--- /dev/null
@@ -0,0 +1,13 @@
+Parsed test spec with 1 sessions
+
+starting permutation: listen insert insert2 update delete
+step listen: LISTEN mychannel;
+step insert: INSERT INTO mytable VALUES(1, 'one');
+s1: NOTIFY "mychannel" with payload ""mytable",I,"key"='1'" from s1
+step insert2: INSERT INTO mytable VALUES(2, 'two');
+s1: NOTIFY "mychannel" with payload ""mytable",I,"key"='2'" from s1
+step update: UPDATE mytable SET value = 'foo' WHERE key = 2;
+s1: NOTIFY "mychannel" with payload ""mytable",U,"key"='2'" from s1
+step delete: DELETE FROM mytable;
+s1: NOTIFY "mychannel" with payload ""mytable",D,"key"='1'" from s1
+s1: NOTIFY "mychannel" with payload ""mytable",D,"key"='2'" from s1
diff --git a/contrib/tcn/specs/tcn.spec b/contrib/tcn/specs/tcn.spec
new file mode 100644 (file)
index 0000000..8720398
--- /dev/null
@@ -0,0 +1,29 @@
+# Tests for contrib/tcn
+
+# These tests use only self-notifies within a single session,
+# which are convenient because they minimize timing concerns.
+# Whether the NOTIFY mechanism works across sessions is not
+# really tcn's problem.
+
+setup
+{
+  CREATE EXTENSION tcn;
+  CREATE TABLE mytable (key int PRIMARY KEY, value text);
+  CREATE TRIGGER tcntrig AFTER INSERT OR UPDATE OR DELETE ON mytable
+    FOR EACH ROW EXECUTE FUNCTION triggered_change_notification(mychannel);
+}
+
+teardown
+{
+  DROP TABLE mytable;
+}
+
+session s1
+step listen    { LISTEN mychannel; }
+step insert    { INSERT INTO mytable VALUES(1, 'one'); }
+step insert2   { INSERT INTO mytable VALUES(2, 'two'); }
+step update    { UPDATE mytable SET value = 'foo' WHERE key = 2; }
+step delete    { DELETE FROM mytable; }
+
+
+permutation listen insert insert2 update delete