From 2865b4060a434855f90fda41f1b8f4bca7c55b0e Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 1 Aug 2022 17:59:35 -0400 Subject: [PATCH] Add a regression test for contrib/pg_prewarm. We had a little bit of coverage here thanks to e2f65f425, but not enough; notably, autoprewarm wasn't exercised at all. Dong Wook Lee, with help from Julien Rouhaud and myself Discussion: https://postgr.es/m/20220629053812.mifmdrch5iuasg2s@home-desktop --- contrib/pg_prewarm/.gitignore | 4 +++ contrib/pg_prewarm/Makefile | 2 ++ contrib/pg_prewarm/t/001_basic.pl | 58 +++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 contrib/pg_prewarm/.gitignore create mode 100644 contrib/pg_prewarm/t/001_basic.pl diff --git a/contrib/pg_prewarm/.gitignore b/contrib/pg_prewarm/.gitignore new file mode 100644 index 0000000000..5dcb3ff972 --- /dev/null +++ b/contrib/pg_prewarm/.gitignore @@ -0,0 +1,4 @@ +# Generated subdirectories +/log/ +/results/ +/tmp_check/ diff --git a/contrib/pg_prewarm/Makefile b/contrib/pg_prewarm/Makefile index b13ac3c813..9cfde8c4e4 100644 --- a/contrib/pg_prewarm/Makefile +++ b/contrib/pg_prewarm/Makefile @@ -10,6 +10,8 @@ EXTENSION = pg_prewarm DATA = pg_prewarm--1.1--1.2.sql pg_prewarm--1.1.sql pg_prewarm--1.0--1.1.sql PGFILEDESC = "pg_prewarm - preload relation data into system buffer cache" +TAP_TESTS = 1 + ifdef USE_PGXS PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) diff --git a/contrib/pg_prewarm/t/001_basic.pl b/contrib/pg_prewarm/t/001_basic.pl new file mode 100644 index 0000000000..b1df0dd567 --- /dev/null +++ b/contrib/pg_prewarm/t/001_basic.pl @@ -0,0 +1,58 @@ + +# Copyright (c) 2021-2022, PostgreSQL Global Development Group + +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', + qq{shared_preload_libraries = 'pg_prewarm' + pg_prewarm.autoprewarm = true + pg_prewarm.autoprewarm_interval = 0}); +$node->start; + +# setup +$node->safe_psql("postgres", + "CREATE EXTENSION pg_prewarm;\n" + . "CREATE TABLE test(c1 int);\n" + . "INSERT INTO test SELECT generate_series(1, 100);"); + +# test read mode +my $result = + $node->safe_psql("postgres", "SELECT pg_prewarm('test', 'read');"); +like($result, qr/^[1-9][0-9]*$/, 'read mode succeeded'); + +# test buffer_mode +$result = + $node->safe_psql("postgres", "SELECT pg_prewarm('test', 'buffer');"); +like($result, qr/^[1-9][0-9]*$/, 'buffer mode succeeded'); + +# prefetch mode might or might not be available +my ($cmdret, $stdout, $stderr) = + $node->psql("postgres", "SELECT pg_prewarm('test', 'prefetch');"); +ok( ( $stdout =~ qr/^[1-9][0-9]*$/ + or $stderr =~ qr/prefetch is not supported by this build/), + 'prefetch mode succeeded'); + +# test autoprewarm_dump_now() +$result = $node->safe_psql("postgres", "SELECT autoprewarm_dump_now();"); +like($result, qr/^[1-9][0-9]*$/, 'autoprewarm_dump_now succeeded'); + +# restart, to verify that auto prewarm actually works +$node->restart; + +$node->wait_for_log( + "autoprewarm successfully prewarmed [1-9][0-9]* of [0-9]+ previously-loaded blocks" +); + +$node->stop; + +done_testing();