4
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
5
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
6
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
10
use warnings FATAL => 'all';
11
use English qw(-no_match_vars);
14
use File::Temp qw(tempdir);
17
use Percona::Test::Mock::UserAgent;
18
use Percona::Test::Mock::AgentLogger;
19
require "$trunk/bin/pt-agent";
21
Percona::Toolkit->import(qw(Dumper have_required_args));
22
Percona::WebAPI::Representation->import(qw(as_hashref));
25
my $logger = Percona::Test::Mock::AgentLogger->new(log => \@log);
26
pt_agent::_logger($logger);
28
my $sample = "t/pt-agent/samples";
30
# #############################################################################
31
# Create mock client and Agent
32
# #############################################################################
34
# These aren't the real tests yet: to run_agent(), first we need
35
# a client and Agent, so create mock ones.
37
my $json = JSON->new->canonical([1])->pretty;
38
$json->allow_blessed([]);
39
$json->convert_blessed([]);
41
my $ua = Percona::Test::Mock::UserAgent->new(
42
encode => sub { my $c = shift; return $json->encode($c || {}) },
45
# Create cilent, get entry links
48
config => '/agents/1/config',
49
services => '/agents/1/services',
50
'query-history' => '/query-history',
53
$ua->{responses}->{get} = [
60
Percona::WebAPI::Client->new(
71
my $agent = Percona::WebAPI::Resource::Agent->new(
86
# #############################################################################
88
# #############################################################################
90
my $tmpdir = tempdir("/tmp/pt-agent.$PID.XXXXXX", CLEANUP => 1);
91
pt_agent::init_lib_dir(
95
pt_agent::init_spool_dir(
97
service => 'query-history',
101
`cp $trunk/$sample/query-history/data001.json $tmpdir/query-history/1.data001.data`;
102
`cp $trunk/$sample/service001 $tmpdir/services/query-history`;
104
$ua->{responses}->{get} = [
106
headers => { 'X-Percona-Resource-Type' => 'Agent' },
107
content => as_hashref($agent, with_links => 1),
111
$ua->{responses}->{post} = [
121
service => 'query-history',
123
spool_dir => $tmpdir,
124
# optional, for testing:
126
entry_links => $links,
128
log_file => "$tmpdir/log",
136
scalar @{$client->ua->{content}->{post}},
138
"Only sent 1 resource"
141
Dumper($client->ua->{content}->{post}),
142
`cat $tmpdir/logs/query-history.send`
149
'POST /query-history/data',
151
"POST to Service.links.data"
156
$client->ua->{content}->{post}->[0] || '',
157
"$sample/query-history/data001.send",
160
"Sent data file as multi-part resource (query-history/data001)"
161
) or diag(Dumper($client->ua->{content}->{post}));
164
!-f "$tmpdir/query-history/1.data001.data",
165
"Removed data file after sending successfully"
169
$ua->{request_objs}->[-1]->header('content-type'),
170
'multipart/form-data; boundary=Ym91bmRhcnk',
171
'Content-Type=multipart/form-data; boundary=Ym91bmRhcnk'
172
) or diag(Dumper($ua));
174
# #############################################################################
176
# #############################################################################
179
$client->ua->{content}->{post} = [];
180
$ua->{requests} = [];
182
`cp $trunk/$sample/query-history/data001.json $tmpdir/query-history/1.data001.data`;
184
$ua->{responses}->{get} = [
186
headers => { 'X-Percona-Resource-Type' => 'Agent' },
187
content => as_hashref($agent, with_links => 1),
191
$ua->{responses}->{post} = [
202
service => 'query-history',
204
spool_dir => $tmpdir,
205
# optional, for testing:
207
entry_links => $links,
209
log_file => "$tmpdir/log",
217
scalar @{$client->ua->{content}->{post}},
222
Dumper($client->ua->{content}->{post}),
223
`cat $tmpdir/logs/query-history.send`
227
-f "$tmpdir/query-history/1.data001.data",
228
"400: file not removed"
231
# #############################################################################
233
# #############################################################################