Test coverage for contrib/auto_explain - Mailing list pgsql-hackers

From Tom Lane
Subject Test coverage for contrib/auto_explain
Date
Msg-id 1445881.1611441692@sss.pgh.pa.us
Whole thread Raw
List pgsql-hackers
I got annoyed about the lack of $SUBJECT.  The attached patch
adds a simple test case, bringing the module's coverage to 84%
according to my results.  (The uncovered lines mostly are in
_PG_fini(), which is unreachable, or else to do with chaining
to additional occupiers of the same hooks.)

Any objections?

            regards, tom lane

diff --git a/contrib/auto_explain/.gitignore b/contrib/auto_explain/.gitignore
new file mode 100644
index 0000000000..5dcb3ff972
--- /dev/null
+++ b/contrib/auto_explain/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/contrib/auto_explain/Makefile b/contrib/auto_explain/Makefile
index 54d6d45d40..efd127d3ca 100644
--- a/contrib/auto_explain/Makefile
+++ b/contrib/auto_explain/Makefile
@@ -6,6 +6,8 @@ OBJS = \
     auto_explain.o
 PGFILEDESC = "auto_explain - logging facility for execution plans"

+TAP_TESTS = 1
+
 ifdef USE_PGXS
 PG_CONFIG = pg_config
 PGXS := $(shell $(PG_CONFIG) --pgxs)
diff --git a/contrib/auto_explain/t/001_auto_explain.pl b/contrib/auto_explain/t/001_auto_explain.pl
new file mode 100644
index 0000000000..7968be963b
--- /dev/null
+++ b/contrib/auto_explain/t/001_auto_explain.pl
@@ -0,0 +1,52 @@
+use strict;
+use warnings;
+
+use PostgresNode;
+use TestLib;
+use Test::More tests => 4;
+
+my $node = get_new_node('main');
+$node->init;
+$node->append_conf('postgresql.conf',
+    "shared_preload_libraries = 'auto_explain'");
+$node->append_conf('postgresql.conf', "auto_explain.log_min_duration = 0");
+$node->append_conf('postgresql.conf', "auto_explain.log_analyze = on");
+$node->start;
+
+# run a couple of queries
+$node->safe_psql("postgres", "SELECT * FROM pg_class;");
+$node->safe_psql("postgres",
+    "SELECT * FROM pg_proc WHERE proname = 'int4pl';");
+
+# emit some json too
+$node->append_conf('postgresql.conf', "auto_explain.log_format = json");
+$node->reload;
+$node->safe_psql("postgres", "SELECT * FROM pg_proc;");
+$node->safe_psql("postgres",
+    "SELECT * FROM pg_class WHERE relname = 'pg_class';");
+
+$node->stop('fast');
+
+my $log = $node->logfile();
+
+my $log_contents = slurp_file($log);
+
+like(
+    $log_contents,
+    qr/Seq Scan on pg_class/,
+    "sequential scan logged, text mode");
+
+like(
+    $log_contents,
+    qr/Index Scan using pg_proc_proname_args_nsp_index on pg_proc/,
+    "index scan logged, text mode");
+
+like(
+    $log_contents,
+    qr/"Node Type": "Seq Scan"[^}]*"Relation Name": "pg_proc"/s,
+    "sequential scan logged, json mode");
+
+like(
+    $log_contents,
+    qr/"Node Type": "Index Scan"[^}]*"Index Name": "pg_class_relname_nsp_index"/s,
+    "index scan logged, json mode");

pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: Git, diffs, and patches
Next
From: Peter Smith
Date:
Subject: Re: Single transaction in the tablesync worker?