aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2021-01-24 14:59:33 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2021-01-24 14:59:33 -0500
commit0c1e8845f28bd07ad381c8b0d6701575d967b88e (patch)
tree2a80da1185a374a3601dcc63836ea5511aad1b48
parent8a337b0ed21c654521da137159b8b9327a5cb971 (diff)
downloadpostgresql-0c1e8845f28bd07ad381c8b0d6701575d967b88e.tar.gz
postgresql-0c1e8845f28bd07ad381c8b0d6701575d967b88e.zip
Add a simple test for contrib/auto_explain.
This module formerly had zero test coverage. Discussion: https://postgr.es/m/1445881.1611441692@sss.pgh.pa.us
-rw-r--r--contrib/auto_explain/.gitignore4
-rw-r--r--contrib/auto_explain/Makefile2
-rw-r--r--contrib/auto_explain/t/001_auto_explain.pl52
3 files changed, 58 insertions, 0 deletions
diff --git a/contrib/auto_explain/.gitignore b/contrib/auto_explain/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /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 54d6d45d400..efd127d3cae 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 00000000000..7968be963b1
--- /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");