Test BRIN autosummarization
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Sat, 23 Sep 2017 12:05:57 +0000 (14:05 +0200)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Sat, 23 Sep 2017 12:15:06 +0000 (14:15 +0200)
There was no coverage for this code.

Reported-by: Nikolay Shaplov, Tom Lane
Discussion: https://postgr.es/m/2700647.XEouBYNZic@x200m
https://postgr.es/m/13849.1506114543@sss.pgh.pa.us

src/test/modules/brin/Makefile
src/test/modules/brin/t/01_workitems.pl [new file with mode: 0644]

index dda84c23c781d20441735b4e1a6c2b0e9316c3a0..18c5cafd5e7aae658d211f482f2de702fb8e33a4 100644 (file)
@@ -16,7 +16,7 @@ include $(top_builddir)/src/Makefile.global
 include $(top_srcdir)/contrib/contrib-global.mk
 endif
 
-check: isolation-check
+check: isolation-check prove-check
 
 isolation-check: | submake-isolation
    $(MKDIR_P) isolation_output
@@ -24,7 +24,10 @@ isolation-check: | submake-isolation
        --outputdir=./isolation_output \
        $(ISOLATIONCHECKS)
 
-.PHONY: check isolation-check
+prove-check:
+   $(prove_check)
+
+.PHONY: check isolation-check prove-check
 
 submake-isolation:
    $(MAKE) -C $(top_builddir)/src/test/isolation all
diff --git a/src/test/modules/brin/t/01_workitems.pl b/src/test/modules/brin/t/01_workitems.pl
new file mode 100644 (file)
index 0000000..11c9981
--- /dev/null
@@ -0,0 +1,39 @@
+# Verify that work items work correctly
+
+use strict;
+use warnings;
+
+use TestLib;
+use Test::More tests => 2;
+use PostgresNode;
+
+my $node = get_new_node('tango');
+$node->init;
+$node->append_conf('postgresql.conf', 'autovacuum_naptime=1s');
+$node->start;
+
+$node->safe_psql('postgres', 'create extension pageinspect');
+
+# Create a table with an autosummarizing BRIN index
+$node->safe_psql('postgres',
+   'create table brin_wi (a int) with (fillfactor = 10);
+    create index brin_wi_idx on brin_wi using brin (a) with (pages_per_range=1, autosummarize=on);
+    '
+);
+my $count = $node->safe_psql('postgres',
+   "select count(*) from brin_page_items(get_raw_page('brin_wi_idx', 2), 'brin_wi_idx'::regclass)"
+);
+is($count, '1', "initial index state is correct");
+
+$node->safe_psql('postgres',
+   'insert into brin_wi select * from generate_series(1, 100)');
+
+$node->poll_query_until('postgres',
+   "select count(*) > 1 from brin_page_items(get_raw_page('brin_wi_idx', 2), 'brin_wi_idx'::regclass)",
+   't');
+
+$count = $node->safe_psql('postgres',
+   "select count(*) > 1 from brin_page_items(get_raw_page('brin_wi_idx', 2), 'brin_wi_idx'::regclass)"
+);
+is($count, 't', "index got summarized");
+$node->stop;