You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
5.9 KiB
165 lines
5.9 KiB
# -*- cperl -*-
|
|
# Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License, version 2.0,
|
|
# as published by the Free Software Foundation.
|
|
#
|
|
# This program is also distributed with certain software (including
|
|
# but not limited to OpenSSL) that is licensed under separate terms,
|
|
# as designated in a particular file or component or in included license
|
|
# documentation. The authors of MySQL hereby grant you an additional
|
|
# permission to link the program and your derivative works with the
|
|
# separately licensed software that they have included with MySQL.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License, version 2.0, for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
# This is a library file used by the Perl version of mysql-test-run,
|
|
# and is part of the translation of the Bourne shell script with the
|
|
# same name.
|
|
|
|
use strict;
|
|
use File::Spec;
|
|
|
|
# Run tests in the stress mode
|
|
sub run_stress_test () {
|
|
my $args;
|
|
my $stress_suitedir;
|
|
|
|
mtr_report("Starting stress testing\n");
|
|
|
|
if (!mysqld_start($::master->[0], [], [])) {
|
|
mtr_error("Can't start the mysqld server");
|
|
}
|
|
|
|
my $stress_basedir = File::Spec->catdir($::opt_vardir, "stress");
|
|
|
|
# Clean up stress dir
|
|
if (-d $stress_basedir) {
|
|
rmtree($stress_basedir);
|
|
}
|
|
|
|
mkpath($stress_basedir);
|
|
|
|
if ($::opt_stress_suite ne 'main' && $::opt_stress_suite ne 'default') {
|
|
$stress_suitedir =
|
|
File::Spec->catdir($::glob_mysql_test_dir, "suite", $::opt_stress_suite);
|
|
} else {
|
|
$stress_suitedir = $::glob_mysql_test_dir;
|
|
}
|
|
|
|
if (-d $stress_suitedir) {
|
|
# $stress_suite_t_dir = File::Spec->catdir($stress_suitedir, "t");
|
|
# $stress_suite_r_dir = File::Spec->catdir($stress_suitedir, "r");
|
|
# FIXME: check dirs above for existence to ensure that test suite
|
|
# contains tests and results dirs.
|
|
} else {
|
|
mtr_error("Specified test suite $::opt_stress_suite doesn't exist");
|
|
}
|
|
|
|
if (@::opt_cases) {
|
|
$::opt_stress_test_file =
|
|
File::Spec->catfile($stress_basedir, "stress_tests.txt");
|
|
open(STRESS_FILE, ">$::opt_stress_test_file");
|
|
print STRESS_FILE join("\n", @::opt_cases), "\n";
|
|
close(STRESS_FILE);
|
|
} elsif ($::opt_stress_test_file) {
|
|
$::opt_stress_test_file =
|
|
File::Spec->catfile($stress_suitedir, $::opt_stress_test_file);
|
|
if (!-f $::opt_stress_test_file) {
|
|
mtr_error("Specified file $::opt_stress_test_file with list of tests",
|
|
"does not exist.\n",
|
|
"Please ensure that file exists and has proper permissions.");
|
|
}
|
|
} else {
|
|
$::opt_stress_test_file =
|
|
File::Spec->catfile($stress_suitedir, "stress_tests.txt");
|
|
if (!-f $::opt_stress_test_file) {
|
|
mtr_error("Default file $::opt_stress_test_file with list of tests",
|
|
"does not exist.\n",
|
|
"Please use --stress-test-file option to specify custom one",
|
|
"or you can\n",
|
|
"just specify name of test for testing as last argument in",
|
|
"command line");
|
|
}
|
|
}
|
|
|
|
if ($::opt_stress_init_file) {
|
|
$::opt_stress_init_file =
|
|
File::Spec->catfile($stress_suitedir, $::opt_stress_init_file);
|
|
if (!-f $::opt_stress_init_file) {
|
|
mtr_error("Specified file $::opt_stress_init_file with list of tests",
|
|
"does not exist.\n",
|
|
"Please ensure that file exists and has proper permissions");
|
|
}
|
|
} else {
|
|
$::opt_stress_init_file =
|
|
File::Spec->catfile($stress_suitedir, "stress_init.txt");
|
|
if (!-f $::opt_stress_init_file) {
|
|
$::opt_stress_init_file = '';
|
|
}
|
|
}
|
|
|
|
if ($::opt_stress_mode ne 'random' && $::opt_stress_mode ne 'seq') {
|
|
mtr_error("You specified wrong mode $::opt_stress_mode for stress test.\n",
|
|
"Correct values are 'random' or 'seq'");
|
|
}
|
|
|
|
mtr_init_args(\$args);
|
|
mtr_add_arg($args, "$::glob_mysql_test_dir/mysql-stress-test.pl");
|
|
mtr_add_arg($args, "--server-socket=%s", $::master->[0]->{'path_sock'});
|
|
mtr_add_arg($args, "--server-user=%s", $::opt_user);
|
|
mtr_add_arg($args, "--server-database=%s", "test");
|
|
mtr_add_arg($args, "--stress-suite-basedir=%s", $::glob_mysql_test_dir);
|
|
mtr_add_arg($args, "--suite=%s", $::opt_stress_suite);
|
|
mtr_add_arg($args, "--stress-tests-file=%s", $::opt_stress_test_file);
|
|
mtr_add_arg($args, "--stress-basedir=%s", $stress_basedir);
|
|
mtr_add_arg($args, "--server-logs-dir=%s", $stress_basedir);
|
|
mtr_add_arg($args, "--stress-mode=%s", $::opt_stress_mode);
|
|
mtr_add_arg($args, "--mysqltest=%s", $::exe_mysqltest);
|
|
mtr_add_arg($args, "--threads=%s", $::opt_stress_threads);
|
|
mtr_add_arg($args, "--verbose");
|
|
mtr_add_arg($args, "--cleanup");
|
|
mtr_add_arg($args, "--log-error-details");
|
|
mtr_add_arg($args, "--abort-on-error=1");
|
|
|
|
if ($::opt_stress_init_file) {
|
|
mtr_add_arg($args, "--stress-init-file=%s", $::opt_stress_init_file);
|
|
}
|
|
|
|
if (!$::opt_stress_loop_count &&
|
|
!$::opt_stress_test_count &&
|
|
!$::opt_stress_test_duration) {
|
|
# Limit stress testing with 20 loops in case when any limit parameter
|
|
# was specified
|
|
$::opt_stress_test_count = 20;
|
|
}
|
|
|
|
if ($::opt_stress_loop_count) {
|
|
mtr_add_arg($args, "--loop-count=%s", $::opt_stress_loop_count);
|
|
}
|
|
|
|
if ($::opt_stress_test_count) {
|
|
mtr_add_arg($args, "--test-count=%s", $::opt_stress_test_count);
|
|
}
|
|
|
|
if ($::opt_stress_test_duration) {
|
|
mtr_add_arg($args, "--test-duration=%s", $::opt_stress_test_duration);
|
|
}
|
|
|
|
# Run stress test
|
|
My::SafeProcess->run(name => "stress test",
|
|
path => $^X,
|
|
args => \$args,);
|
|
|
|
stop_all_servers();
|
|
}
|
|
|
|
1;
|
|
|