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
This commit is contained in:
parent
3592e0ff98
commit
2865b4060a
4
contrib/pg_prewarm/.gitignore
vendored
Normal file
4
contrib/pg_prewarm/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
# Generated subdirectories
|
||||
/log/
|
||||
/results/
|
||||
/tmp_check/
|
@ -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)
|
||||
|
58
contrib/pg_prewarm/t/001_basic.pl
Normal file
58
contrib/pg_prewarm/t/001_basic.pl
Normal file
@ -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();
|
Loading…
x
Reference in New Issue
Block a user