mirror of
https://github.com/percona/pg_stat_monitor.git
synced 2026-02-04 05:56:21 +00:00
PG-525: Update PGSM TAP Test Cases to accommodate PG15 changes.
Following changes are included in this commit: 1. Updated pgsm.pm to enable runtime loading of PG server version dependent perl modules that are needed for TAP testing. Similarly removed unneeded code from this file that is not needed right now. 2. Added generic settings and helper functions to pgsm.pm that could be used across different test cases. 3.Updated following TAP test case to use pgsm.pm based global settings and helper functions while making sure that we reduce the clutter and duplicate code in test cases, where possible. t/001_settings_default.pl t/002_settings_pgsm_track_planning.pl t/003_settings_pgms_extract_comments.pl t/004_settings_pgsm_track.pl t/005_settings_pgsm_enable_query_plan.pl t/006_settings_pgsm_overflow_target.pl t/007_settings_pgsm_query_shared_buffer.pl t/008_settings_pgsm_histogram_buckets.pl t/009_settings_pgsm_histogram_max.pl t/010_settings_pgsm_histogram_min.pl t/011_settings_pgsm_bucket_time.pl t/012_settings_pgsm_max_buckets.pl t/013_settings_pgsm_normalized_query.pl t/014_settings_pgsm_track_utility.pl t/015_settings_pgsm_query_max_len.pl t/016_settings_pgsm_max.pl t/017_execution_stats.pl t/019_insufficient_shared_space.pl t/020_buffer_overflow.pl t/021_misc_1.pl t/022_misc_2.pl t/023_missing_queries.pl t/024_check_timings.pl t/025_compare_pgss.pl t/026_shared_blocks.pl t/027_local_blocks.pl t/028_temp_block.pl 4. Removed following TAP test cases as these are no longer needed and are covered by existing other test cases. 0001_settings_pgsm_track_planning.pl 0002_settings_pgsm_enable_query_plan.pl 5. Added more out files for histogram sql test cases to cover the behavior for bucket_start_time and server versions. regression/expected/histogram_3.out regression/expected/histogram_4.out regression/expected/histogram_5.out regression/expected/histogram_6.out 6. Added following out file that is PG server version 15 specific. t/expected/007_settings_pgsm_query_shared_buffer.out.15
This commit is contained in:
committed by
Hamid Akhtar
parent
0fe9908d5f
commit
af2da8885a
@@ -2,63 +2,20 @@
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use String::Util qw(trim);
|
||||
use File::Basename;
|
||||
use File::Compare;
|
||||
use PostgresNode;
|
||||
use File::Copy;
|
||||
use String::Util qw(trim);
|
||||
use Test::More;
|
||||
use lib 't';
|
||||
use pgsm;
|
||||
|
||||
# Expected folder where expected output will be present
|
||||
my $expected_folder = "t/expected";
|
||||
|
||||
# Results/out folder where generated results files will be placed
|
||||
my $results_folder = "t/results";
|
||||
|
||||
# Check if results folder exists or not, create if it doesn't
|
||||
unless (-d $results_folder)
|
||||
{
|
||||
mkdir $results_folder or die "Can't create folder $results_folder: $!\n";;
|
||||
}
|
||||
|
||||
# Check if expected folder exists or not, bail out if it doesn't
|
||||
unless (-d $expected_folder)
|
||||
{
|
||||
BAIL_OUT "Expected files folder $expected_folder doesn't exist: \n";;
|
||||
}
|
||||
|
||||
# Get filename of the this perl file
|
||||
my $perlfilename = basename($0);
|
||||
|
||||
#Remove .pl from filename and store in a variable
|
||||
$perlfilename =~ s/\.[^.]+$//;
|
||||
my $filename_without_extension = $perlfilename;
|
||||
# Get filename and create out file name and dirs where requried
|
||||
PGSM::setup_files_dir(basename($0));
|
||||
|
||||
# Create new PostgreSQL node and do initdb
|
||||
my $node = PostgresNode->get_new_node('test');
|
||||
my $node = PGSM->pgsm_init_pg();
|
||||
my $pgdata = $node->data_dir;
|
||||
$node->dump_info;
|
||||
$node->init;
|
||||
|
||||
# PG's major server version
|
||||
open my $FH_PG_VERSION, '<', "${pgdata}/PG_VERSION";
|
||||
my $major_version = trim(<$FH_PG_VERSION>);
|
||||
close $FH_PG_VERSION;
|
||||
|
||||
# Create expected filename with path
|
||||
my $expected_filename = "${filename_without_extension}.out";
|
||||
my $expected_filename_with_path = "${expected_folder}/${expected_filename}" ;
|
||||
|
||||
# Create results filename with path
|
||||
my $out_filename = "${filename_without_extension}.out";
|
||||
my $out_filename_with_path = "${results_folder}/${out_filename}" ;
|
||||
my $dynamic_out_filename_with_path = "${results_folder}/${out_filename}.dynamic" ;
|
||||
|
||||
# Delete already existing result out file, if it exists.
|
||||
if ( -f $out_filename_with_path)
|
||||
{
|
||||
unlink($out_filename_with_path) or die "Can't delete already existing $out_filename_with_path: $!\n";
|
||||
}
|
||||
|
||||
# Update postgresql.conf to include/load pg_stat_monitor library
|
||||
open my $conf, '>>', "$pgdata/postgresql.conf";
|
||||
@@ -75,7 +32,7 @@ my $col_max_time = "max_exec_time";
|
||||
my $col_mean_time = "mean_exec_time";
|
||||
my $col_stddev_time = "stddev_exec_time";
|
||||
|
||||
if ($major_version <= 12)
|
||||
if ($PGSM::PG_MAJOR_VERSION <= 12)
|
||||
{
|
||||
$col_total_time = "total_time";
|
||||
$col_min_time = "min_time";
|
||||
@@ -87,81 +44,79 @@ if ($major_version <= 12)
|
||||
# Create extension and change out file permissions
|
||||
my ($cmdret, $stdout, $stderr) = $node->psql('postgres', 'CREATE EXTENSION pg_stat_monitor;', extra_params => ['-a']);
|
||||
ok($cmdret == 0, "Create PGSM Extension");
|
||||
TestLib::append_to_file($out_filename_with_path, $stdout . "\n");
|
||||
chmod(0640 , $out_filename_with_path)
|
||||
or die("unable to set permissions for $out_filename_with_path");
|
||||
PGSM::append_to_file($stdout);
|
||||
|
||||
# Run required commands/queries and dump output to out file.
|
||||
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT pg_stat_monitor_reset();', extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
|
||||
ok($cmdret == 0, "Reset PGSM Extension");
|
||||
TestLib::append_to_file($out_filename_with_path, $stdout . "\n");
|
||||
PGSM::append_to_file($stdout);
|
||||
|
||||
# Run 'SELECT * from pg_stat_monitor_settings;' two times and dump output to out file
|
||||
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT * from pg_stat_monitor_settings;', extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
|
||||
ok($cmdret == 0, "Print PGSM Extension Settings");
|
||||
TestLib::append_to_file($out_filename_with_path, $stdout . "\n");
|
||||
PGSM::append_to_file($stdout);
|
||||
|
||||
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT * from pg_stat_monitor_settings;', extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
|
||||
ok($cmdret == 0, "Print PGSM Extension Settings");
|
||||
TestLib::append_to_file($out_filename_with_path, $stdout . "\n");
|
||||
PGSM::append_to_file($stdout);
|
||||
|
||||
($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT query, calls, ${col_total_time}, ${col_min_time}, ${col_max_time}, ${col_mean_time}, ${col_stddev_time} from pg_stat_monitor;", extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
|
||||
ok($cmdret == 0, "Select from PGSM view");
|
||||
TestLib::append_to_file($out_filename_with_path, $stdout . "\n");
|
||||
PGSM::append_to_file($stdout);
|
||||
|
||||
# Test: ${col_total_time} is not 0
|
||||
($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT (${col_total_time} = 0) from pg_stat_monitor where calls = 2 ;", extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
|
||||
($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT (${col_total_time} = 0) from pg_stat_monitor where calls = 2;", extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
|
||||
trim($stdout);
|
||||
is($stdout,'f',"Compare: ${col_total_time} is not 0).");
|
||||
|
||||
# Test: ${col_min_time} is not 0
|
||||
($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT (${col_min_time} = 0) from pg_stat_monitor where calls = 2 ;", extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
|
||||
($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT (${col_min_time} = 0) from pg_stat_monitor where calls = 2;", extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
|
||||
trim($stdout);
|
||||
is($stdout,'f',"Compare: ${col_min_time} is not 0).");
|
||||
|
||||
# Test: ${col_max_time} is not 0
|
||||
($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT (${col_max_time} = 0) from pg_stat_monitor where calls = 2 ;", extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
|
||||
($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT (${col_max_time} = 0) from pg_stat_monitor where calls = 2;", extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
|
||||
trim($stdout);
|
||||
is($stdout,'f',"Compare: ${col_max_time} is not 0).");
|
||||
|
||||
# Test: ${col_mean_time} is not 0
|
||||
($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT (${col_mean_time} = 0) from pg_stat_monitor where calls = 2 ;", extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
|
||||
($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT (${col_mean_time} = 0) from pg_stat_monitor where calls = 2;", extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
|
||||
trim($stdout);
|
||||
is($stdout,'f',"Compare: ${col_mean_time} is not 0).");
|
||||
|
||||
# Test: ${col_stddev_time} is not 0
|
||||
#($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT (${col_stddev_time} = 0) from pg_stat_monitor where calls = 2 ;", extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
|
||||
#($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT (${col_stddev_time} = 0) from pg_stat_monitor where calls = 2;", extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
|
||||
#trim($stdout);
|
||||
#is($stdout,'f',"Test: ${col_stddev_time} should not be 0).");
|
||||
|
||||
# Test: ${col_total_time} = ${col_min_time} + ${col_max_time}
|
||||
($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT (round(${col_total_time}::numeric,3) = round(${col_min_time}::numeric + ${col_max_time}::numeric,3)) from pg_stat_monitor where calls = 2 ;", extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
|
||||
($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT (round(${col_total_time}::numeric,3) = round(${col_min_time}::numeric + ${col_max_time}::numeric,3)) from pg_stat_monitor where calls = 2;", extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
|
||||
trim($stdout);
|
||||
is($stdout,'t',"Compare: (round(${col_total_time}::numeric,3) = round(${col_min_time}::numeric + ${col_max_time}::numeric,3)).");
|
||||
|
||||
# Test: ${col_mean_time} = ${col_total_time}/2
|
||||
#($cmdret, $stdout, $stderr) = $node->psql('postgres', 'select (round(${col_mean_time}::numeric,3) = round((${col_total_time}/2)::numeric,3)) from pg_stat_monitor where calls = 2 ;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
|
||||
#($cmdret, $stdout, $stderr) = $node->psql('postgres', 'select (round(${col_mean_time}::numeric,3) = round((${col_total_time}/2)::numeric,3)) from pg_stat_monitor where calls = 2;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
|
||||
#trim($stdout);
|
||||
#is($stdout,'t',"Compare ${col_mean_time}: (round(${col_mean_time}::numeric,3) = round((${col_total_time}/2)::numeric,3)).");
|
||||
|
||||
# Test: ${col_stddev_time} = ${col_mean_time} - ${col_min_time}
|
||||
#($cmdret, $stdout, $stderr) = $node->psql('postgres', 'select (round(${col_stddev_time}::numeric,3) = round(${col_mean_time}::numeric - ${col_min_time}::numeric,3)) from pg_stat_monitor where calls = 2 ;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
|
||||
#($cmdret, $stdout, $stderr) = $node->psql('postgres', 'select (round(${col_stddev_time}::numeric,3) = round(${col_mean_time}::numeric - ${col_min_time}::numeric,3)) from pg_stat_monitor where calls = 2;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
|
||||
#trim($stdout);
|
||||
#is($stdout,'t',"Compare ${col_mean_time}: (round(${col_stddev_time}::numeric,3) = round(${col_mean_time}::numeric - ${col_min_time}::numeric,3)).");
|
||||
|
||||
# Dump output to out file
|
||||
($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT substr(query, 0,100) as query, calls, ${col_total_time}, ${col_min_time},${col_max_time},${col_mean_time},${col_stddev_time} from pg_stat_monitor order by query;", extra_params => ['-a','-Pformat=aligned','-Ptuples_only=off']);
|
||||
TestLib::append_to_file($dynamic_out_filename_with_path, $stdout . "\n");
|
||||
PGSM::append_to_debug_file($stdout);
|
||||
|
||||
# Dump output to out file
|
||||
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT pg_stat_monitor_reset();', extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
|
||||
ok($cmdret == 0, "Reset PGSM Extension");
|
||||
TestLib::append_to_file($out_filename_with_path, $stdout . "\n");
|
||||
PGSM::append_to_file($stdout);
|
||||
|
||||
# Drop extension
|
||||
$stdout = $node->safe_psql('postgres', 'Drop extension pg_stat_monitor;', extra_params => ['-a']);
|
||||
ok($cmdret == 0, "Drop PGSM Extension");
|
||||
TestLib::append_to_file($out_filename_with_path, $stdout . "\n");
|
||||
PGSM::append_to_file($stdout);
|
||||
|
||||
# Stop the server
|
||||
$node->stop;
|
||||
|
||||
Reference in New Issue
Block a user