pg_stat_monitor/t/0001_settings_pgsm_track_pl...

79 lines
2.6 KiB
Perl

#!/usr/bin/perl
use String::Util qw(trim);
use File::Basename;
use File::Compare;
use String::Util qw(trim);
use Test::More;
use lib 't';
use pgsm;
# PG's major server version
open my $FH_PG_VERSION, '<', "${pgdata}/PG_VERSION";
my $major_version = trim(<$FH_PG_VERSION>);
close $FH_PG_VERSION;
sub check_value
{
my ($var, $postive, $expected, $val) = @_;
if ($postive)
{
is($expected, $val, "Checking $var...");
}
else
{
isnt($expected, $val, "Checking $var...");
}
}
sub do_testing
{
my ($expected, $postive) = @_;
my ($cmdret, $stdout, $stderr) = pgsm_psql_cmd('postgres', 'SELECT max(total_plan_time) FROM pg_stat_monitor;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
my $total_plan_time = trim($stdout);
($cmdret, $stdout, $stderr) = pgsm_psql_cmd('postgres', 'SELECT max(min_plan_time) FROM pg_stat_monitor;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
my $min_plan_time = trim($stdout);
($cmdret, $stdout, $stderr) = pgsm_psql_cmd('postgres', 'SELECT max(max_plan_time) FROM pg_stat_monitor;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
my $max_plan_time = trim($stdout);
($cmdret, $stdout, $stderr) = pgsm_psql_cmd('postgres', 'SELECT max(mean_plan_time) FROM pg_stat_monitor;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
my $mean_plan_time = trim($stdout);
($cmdret, $stdout, $stderr) = pgsm_psql_cmd('postgres', 'SELECT max(stddev_plan_time) FROM pg_stat_monitor;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
my $stddev_plan_time = trim($stdout);
check_value("pgsm_track_planning", $postive, $expected, $total_plan_time + $min_plan_time + $max_plan_time + $stddev_plan_time);
return ($cmdret, $stdout, $stderr);
}
sub do_regression
{
my ($postive, $expected, $set) = @_;
($cmdret, $stdout, $stderr) = pgsm_setup_pg_stat_monitor($set);
($cmdret, $stdout, $stderr) = pgsm_start_pg;
($cmdret, $stdout, $stderr) = pgsm_create_extension;
($cmdret, $stdout, $stderr) = do_testing($postive, $expected);
ok($cmdret == 0, "Checking final result ...");
($cmdret, $stdout, $stderr) = pgsm_drop_extension;
($cmdret, $stdout, $stderr) = pgsm_stop_pg;
}
($cmdret, $stdout, $stderr) = pgsm_init_pg;
SKIP:
{
skip "Server version is 12 or less", 1
if ($major_version <= 12);
do_regression(1, 0, "pg_stat_monitor.pgsm_track_planning = 'no'");
do_regression(0, 0, "pg_stat_monitor.pgsm_track_planning = 'yes'");
}
($cmdret, $stdout, $stderr) = done_testing();