From 654704f8c44432dd86acf5887c1b619979a3c325 Mon Sep 17 00:00:00 2001
From: Lee Dong Wook <sh95119@gmail.com>
Date: Mon, 20 Jun 2022 22:57:19 +0900
Subject: [PATCH] Add TAP tests for pg_prewarm coverage

---
 contrib/pg_prewarm/Makefile       |  2 +
 contrib/pg_prewarm/t/001_basic.pl | 69 +++++++++++++++++++++++++++++++
 2 files changed, 71 insertions(+)
 create mode 100644 contrib/pg_prewarm/t/001_basic.pl

diff --git a/contrib/pg_prewarm/Makefile b/contrib/pg_prewarm/Makefile
index b13ac3c813ce..9cfde8c4e4fa 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 000000000000..4fbb156d2e4f
--- /dev/null
+++ b/contrib/pg_prewarm/t/001_basic.pl
@@ -0,0 +1,69 @@
+
+# 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');
+my $result;
+
+$node->init;
+$node->append_conf('postgresql.conf',
+    qq{shared_preload_libraries = 'pg_prewarm'
+    pg_prewarm.autoprewarm = true
+    pg_prewarm.autoprewarm_interval = 0});
+$node->start;
+
+$node->safe_psql(
+    "postgres",
+    "CREATE EXTENSION pg_prewarm;"
+);
+
+# create table
+$node->safe_psql(
+    "postgres",
+    "CREATE TABLE test(c1 int);"
+    . "INSERT INTO test
+       SELECT generate_series(1, 100);"
+);
+
+# test prefetch mode
+SKIP:
+{
+    skip "prefetch is not supported by this build", 1
+        if (!check_pg_config("#USE_PREFETCH 1"));
+
+    $result = $node->safe_psql(
+        "postgres",
+        "SELECT pg_prewarm('test', 'prefetch');");
+}
+
+# test read mode
+$node->safe_psql(
+    "postgres",
+    "SELECT pg_prewarm('test', 'read');");
+
+# test buffer_mode
+$node->safe_psql(
+    "postgres",
+    "SELECT pg_prewarm('test', 'buffer');");
+
+#$node->restart;
+
+$node->stop;
+
+my $logfile = PostgreSQL::Test::Utils::slurp_file($node->logfile);
+unlink($logfile);
+$node->start;
+
+$node->wait_for_log("autoprewarm successfully prewarmed [1-9]+ of [1-9]+ previously-loaded blocks");
+
+$node->stop;
+
+done_testing();
+
