Increase test coverage for worker_spi by ∞%
This test module was not getting invoked, other than at compile time, limiting its usefulness -- and keeping its coverage at 0%. Add a minimal regression test to ensure it runs on make check-world; this makes it 92% covered (line-wise), which seems sufficient. Author: Álvaro Herrera <alvherre@alvh.no-ip.org> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/20190529193256.GA17603@alvherre.pgsql
This commit is contained in:
parent
0b8e0532c6
commit
4b3f1dd71b
@ -6,6 +6,14 @@ EXTENSION = worker_spi
|
||||
DATA = worker_spi--1.0.sql
|
||||
PGFILEDESC = "worker_spi - background worker example"
|
||||
|
||||
REGRESS = worker_spi
|
||||
|
||||
# enable our module in shared_preload_libraries for dynamic bgworkers
|
||||
REGRESS_OPTS = --temp-config $(top_srcdir)/src/test/modules/worker_spi/dynamic.conf
|
||||
|
||||
# Disable installcheck to ensure we cover dynamic bgworkers.
|
||||
NO_INSTALLCHECK = 1
|
||||
|
||||
ifdef USE_PGXS
|
||||
PG_CONFIG = pg_config
|
||||
PGXS := $(shell $(PG_CONFIG) --pgxs)
|
||||
|
2
src/test/modules/worker_spi/dynamic.conf
Normal file
2
src/test/modules/worker_spi/dynamic.conf
Normal file
@ -0,0 +1,2 @@
|
||||
shared_preload_libraries = worker_spi
|
||||
worker_spi.database = contrib_regression
|
50
src/test/modules/worker_spi/expected/worker_spi.out
Normal file
50
src/test/modules/worker_spi/expected/worker_spi.out
Normal file
@ -0,0 +1,50 @@
|
||||
CREATE EXTENSION worker_spi;
|
||||
SELECT worker_spi_launch(4) IS NOT NULL;
|
||||
?column?
|
||||
----------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
-- wait until the worker completes its initialization
|
||||
DO $$
|
||||
DECLARE
|
||||
visible bool;
|
||||
loops int := 0;
|
||||
BEGIN
|
||||
LOOP
|
||||
visible := table_name IS NOT NULL
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = 'schema4' AND table_name = 'counted';
|
||||
IF visible OR loops > 120 * 10 THEN EXIT; END IF;
|
||||
PERFORM pg_sleep(0.1);
|
||||
loops := loops + 1;
|
||||
END LOOP;
|
||||
END
|
||||
$$;
|
||||
INSERT INTO schema4.counted VALUES ('total', 0), ('delta', 1);
|
||||
SELECT pg_reload_conf();
|
||||
pg_reload_conf
|
||||
----------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
-- wait until the worker has processed the tuple we just inserted
|
||||
DO $$
|
||||
DECLARE
|
||||
count int;
|
||||
loops int := 0;
|
||||
BEGIN
|
||||
LOOP
|
||||
count := count(*) FROM schema4.counted WHERE type = 'delta';
|
||||
IF count = 0 OR loops > 120 * 10 THEN EXIT; END IF;
|
||||
PERFORM pg_sleep(0.1);
|
||||
loops := loops + 1;
|
||||
END LOOP;
|
||||
END
|
||||
$$;
|
||||
SELECT * FROM schema4.counted;
|
||||
type | value
|
||||
-------+-------
|
||||
total | 1
|
||||
(1 row)
|
||||
|
35
src/test/modules/worker_spi/sql/worker_spi.sql
Normal file
35
src/test/modules/worker_spi/sql/worker_spi.sql
Normal file
@ -0,0 +1,35 @@
|
||||
CREATE EXTENSION worker_spi;
|
||||
SELECT worker_spi_launch(4) IS NOT NULL;
|
||||
-- wait until the worker completes its initialization
|
||||
DO $$
|
||||
DECLARE
|
||||
visible bool;
|
||||
loops int := 0;
|
||||
BEGIN
|
||||
LOOP
|
||||
visible := table_name IS NOT NULL
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = 'schema4' AND table_name = 'counted';
|
||||
IF visible OR loops > 120 * 10 THEN EXIT; END IF;
|
||||
PERFORM pg_sleep(0.1);
|
||||
loops := loops + 1;
|
||||
END LOOP;
|
||||
END
|
||||
$$;
|
||||
INSERT INTO schema4.counted VALUES ('total', 0), ('delta', 1);
|
||||
SELECT pg_reload_conf();
|
||||
-- wait until the worker has processed the tuple we just inserted
|
||||
DO $$
|
||||
DECLARE
|
||||
count int;
|
||||
loops int := 0;
|
||||
BEGIN
|
||||
LOOP
|
||||
count := count(*) FROM schema4.counted WHERE type = 'delta';
|
||||
IF count = 0 OR loops > 120 * 10 THEN EXIT; END IF;
|
||||
PERFORM pg_sleep(0.1);
|
||||
loops := loops + 1;
|
||||
END LOOP;
|
||||
END
|
||||
$$;
|
||||
SELECT * FROM schema4.counted;
|
@ -55,6 +55,7 @@ static volatile sig_atomic_t got_sigterm = false;
|
||||
/* GUC variables */
|
||||
static int worker_spi_naptime = 10;
|
||||
static int worker_spi_total_workers = 2;
|
||||
static char *worker_spi_database = NULL;
|
||||
|
||||
|
||||
typedef struct worktable
|
||||
@ -179,7 +180,7 @@ worker_spi_main(Datum main_arg)
|
||||
BackgroundWorkerUnblockSignals();
|
||||
|
||||
/* Connect to our database */
|
||||
BackgroundWorkerInitializeConnection("postgres", NULL, 0);
|
||||
BackgroundWorkerInitializeConnection(worker_spi_database, NULL, 0);
|
||||
|
||||
elog(LOG, "%s initialized with %s.%s",
|
||||
MyBgworkerEntry->bgw_name, table->schema, table->name);
|
||||
@ -339,6 +340,15 @@ _PG_init(void)
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
DefineCustomStringVariable("worker_spi.database",
|
||||
"Database to connect to.",
|
||||
NULL,
|
||||
&worker_spi_database,
|
||||
"postgres",
|
||||
PGC_POSTMASTER,
|
||||
0,
|
||||
NULL, NULL, NULL);
|
||||
|
||||
/* set up common data for all our workers */
|
||||
memset(&worker, 0, sizeof(worker));
|
||||
worker.bgw_flags = BGWORKER_SHMEM_ACCESS |
|
||||
|
Loading…
x
Reference in New Issue
Block a user