Add a simple test for contrib/auto_explain.
authorTom Lane <[email protected]>
Sun, 24 Jan 2021 19:59:33 +0000 (14:59 -0500)
committerTom Lane <[email protected]>
Sun, 24 Jan 2021 19:59:33 +0000 (14:59 -0500)
This module formerly had zero test coverage.

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

contrib/auto_explain/.gitignore [new file with mode: 0644]
contrib/auto_explain/Makefile
contrib/auto_explain/t/001_auto_explain.pl [new file with mode: 0644]

diff --git a/contrib/auto_explain/.gitignore b/contrib/auto_explain/.gitignore
new file mode 100644 (file)
index 0000000..5dcb3ff
--- /dev/null
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
index 54d6d45d4004b6f9f4a374f4e0a37b7532f6e667..efd127d3cae640904124590ebbd073aff5b729b0 100644 (file)
@@ -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 (file)
index 0000000..7968be9
--- /dev/null
@@ -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");