From 3129dd32ff62350acbd179eea3683d27bea6adc7 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 27 Dec 2023 13:08:57 +0100 Subject: [PATCH v2 3/3] pg_stat_statements: Add TAP test for testing restarts This tests that pg_stat_statement contents are successfully kept across restart. (This similar to src/test/recovery/t/029_stats_restart.pl for the stats collector.) Discussion: https://www.postgresql.org/message-id/flat/40d1e4f2-835f-448f-a541-8ff5db75bf3d@eisentraut.org --- contrib/pg_stat_statements/Makefile | 2 + contrib/pg_stat_statements/meson.build | 5 ++ contrib/pg_stat_statements/t/010_restart.pl | 53 +++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 contrib/pg_stat_statements/t/010_restart.pl diff --git a/contrib/pg_stat_statements/Makefile b/contrib/pg_stat_statements/Makefile index 7ee16e8350..20834bb0ee 100644 --- a/contrib/pg_stat_statements/Makefile +++ b/contrib/pg_stat_statements/Makefile @@ -24,6 +24,8 @@ REGRESS = select dml cursors utility level_tracking planning \ # which typical installcheck users do not have (e.g. buildfarm clients). NO_INSTALLCHECK = 1 +TAP_TESTS = 1 + ifdef USE_PGXS PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) diff --git a/contrib/pg_stat_statements/meson.build b/contrib/pg_stat_statements/meson.build index a66acaa5b8..3e42328f6c 100644 --- a/contrib/pg_stat_statements/meson.build +++ b/contrib/pg_stat_statements/meson.build @@ -60,4 +60,9 @@ tests += { # runningcheck users do not have (e.g. buildfarm clients). 'runningcheck': false, }, + 'tap': { + 'tests': [ + 't/010_restart.pl', + ], + }, } diff --git a/contrib/pg_stat_statements/t/010_restart.pl b/contrib/pg_stat_statements/t/010_restart.pl new file mode 100644 index 0000000000..83a2bf0db8 --- /dev/null +++ b/contrib/pg_stat_statements/t/010_restart.pl @@ -0,0 +1,53 @@ +# Copyright (c) 2023, PostgreSQL Global Development Group + +# Tests for checking that pg_stat_statements contents are preserved +# across restarts. + +use strict; +use warnings; +use PostgreSQL::Test::Cluster; +use PostgreSQL::Test::Utils; +use Test::More; + +my $node = PostgreSQL::Test::Cluster->new('main'); +$node->init; +$node->append_conf('postgresql.conf', + "shared_preload_libraries = 'pg_stat_statements'"); +$node->start; + +$node->safe_psql('postgres', 'CREATE EXTENSION pg_stat_statements'); + +$node->safe_psql('postgres', 'CREATE TABLE t1 (a int)'); +$node->safe_psql('postgres', 'SELECT a FROM t1'); + +is( $node->safe_psql( + 'postgres', + "SELECT query FROM pg_stat_statements WHERE query NOT LIKE '%pg_stat_statements%' ORDER BY query" + ), + "CREATE TABLE t1 (a int)\nSELECT a FROM t1", + 'pg_stat_statements populated'); + +$node->restart; + +is( $node->safe_psql( + 'postgres', + "SELECT query FROM pg_stat_statements WHERE query NOT LIKE '%pg_stat_statements%' ORDER BY query" + ), + "CREATE TABLE t1 (a int)\nSELECT a FROM t1", + 'pg_stat_statements data kept across restart'); + +$node->append_conf('postgresql.conf', "pg_stat_statements.save = false"); +$node->reload; + +$node->restart; + +is( $node->safe_psql( + 'postgres', + "SELECT count(*) FROM pg_stat_statements WHERE query NOT LIKE '%pg_stat_statements%'" + ), + '0', + 'pg_stat_statements data not kept across restart with .save=false'); + +$node->stop; + +done_testing(); -- 2.43.0