mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-27 07:54:58 +00:00
Fix and test error on startup if config file is missing. Refactor run_agent(): move Agent setup stuff into start_agent(). Move related subs next to each other.
This commit is contained in:
101
t/pt-agent/basics.t
Normal file
101
t/pt-agent/basics.t
Normal file
@@ -0,0 +1,101 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
BEGIN {
|
||||
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
|
||||
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
|
||||
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
|
||||
};
|
||||
|
||||
use strict;
|
||||
use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More;
|
||||
|
||||
use File::Temp qw(tempdir);
|
||||
|
||||
use Percona::Test;
|
||||
use Sandbox;
|
||||
use Percona::Test::Mock::UserAgent;
|
||||
require "$trunk/bin/pt-agent";
|
||||
|
||||
my $dp = new DSNParser(opts=>$dsn_opts);
|
||||
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
|
||||
my $dbh = $sb->get_dbh_for('master');
|
||||
my $dsn = $sb->dsn_for('master');
|
||||
my $o = new OptionParser();
|
||||
$o->get_specs("$trunk/bin/pt-agent");
|
||||
$o->get_opts();
|
||||
my $cxn = Cxn->new(
|
||||
dsn_string => $dsn,
|
||||
OptionParser => $o,
|
||||
DSNParser => $dp,
|
||||
);
|
||||
|
||||
Percona::Toolkit->import(qw(Dumper));
|
||||
Percona::WebAPI::Representation->import(qw(as_hashref));
|
||||
|
||||
# Running the agent is going to cause it to schedule the services,
|
||||
# i.e. write a real crontab. The test box/user shouldn't have a
|
||||
# crontab, so we'll warn and clobber it if there is one.
|
||||
my $crontab = `crontab -l 2>/dev/null`;
|
||||
if ( $crontab ) {
|
||||
warn "Removing crontab: $crontab\n";
|
||||
`crontab -r`;
|
||||
}
|
||||
|
||||
my $tmp_lib = "/tmp/pt-agent";
|
||||
my $tmp_log = "/tmp/pt-agent.log";
|
||||
my $tmp_pid = "/tmp/pt-agent.pid";
|
||||
|
||||
diag(`rm -rf $tmp_lib`) if -d $tmp_lib;
|
||||
unlink $tmp_log if -f $tmp_log;
|
||||
unlink $tmp_pid if -f $tmp_pid;
|
||||
|
||||
my $config_file = pt_agent::get_config_file();
|
||||
unlink $config_file if -f $config_file;
|
||||
|
||||
my $output;
|
||||
|
||||
{
|
||||
no strict;
|
||||
no warnings;
|
||||
local *pt_agent::start_agent = sub {
|
||||
print "start_agent\n";
|
||||
return {
|
||||
agent => 0,
|
||||
client => 0,
|
||||
daemon => 0,
|
||||
};
|
||||
};
|
||||
local *pt_agent::run_agent = sub {
|
||||
print "run_agent\n";
|
||||
};
|
||||
|
||||
$output = output(
|
||||
sub {
|
||||
pt_agent::main(
|
||||
qw(--api-key 123)
|
||||
);
|
||||
},
|
||||
stderr => 1,
|
||||
);
|
||||
}
|
||||
|
||||
like(
|
||||
$output,
|
||||
qr/start_agent\nrun_agent\n/,
|
||||
"Starts and runs without a config file"
|
||||
);
|
||||
|
||||
# #############################################################################
|
||||
# Done.
|
||||
# #############################################################################
|
||||
|
||||
`crontab -r 2>/dev/null`;
|
||||
|
||||
if ( -f $config_file ) {
|
||||
unlink $config_file
|
||||
or warn "Error removing $config_file: $OS_ERROR";
|
||||
}
|
||||
|
||||
done_testing;
|
Reference in New Issue
Block a user