]> git.proxmox.com Git - pve-manager.git/blame - bin/test/perftest3.pl
bump version to 4.4-5
[pve-manager.git] / bin / test / perftest3.pl
CommitLineData
15dd1257
DM
1#!/usr/bin/perl -w
2
3use lib '../../';
4use strict;
5use Time::HiRes qw( usleep ualarm gettimeofday tv_interval );
6use PVE::INotify;
7use PVE::AccessControl;
8use Net::SSLeay qw(get_https post_https sslcat make_headers make_form);
9
10use Data::Dumper;
11
12my $hostname = PVE::INotify::read_file("hostname");
13
14# normally you use username/password,
15# but we can simply create a ticket if we are root
16my $ticket = PVE::AccessControl::assemble_ticket('root@pam');
17
cb3e5146 18my $wcount = 1;
15dd1257
DM
19my $qcount = 100;
20
21sub test_rpc {
22 my ($host) = @_;
23
24 for (my $i = 0; $i < $qcount; $i++) {
25 eval {
26 my ($page, $response, %reply_headers)
cb3e5146 27 = get_https($host, 8006, '/api2/json',
15dd1257
DM
28 make_headers(Cookie => "PVEAuthCookie=$ticket"));
29 die "$response\n" if $response !~ m/200 OK/;
30 };
31
32 my $err = $@;
33
34 if ($err) {
35
36 print "ERROR: $err\n";
37 last;
38 }
39 }
40}
41
42sub run_tests {
43 my ($host) = @_;
44
45 my $workers;
46
47 my $starttime = [gettimeofday];
48
49 for (my $i = 0; $i < $wcount; $i++) {
50 if (my $pid = fork ()) {
51 $workers->{$pid} = 1;
52 } else {
53 test_rpc ($host);
54 exit (0);
55 }
56 }
57
58 # wait for children
59 1 while (wait > 0);
60
61 my $elapsed = int(tv_interval ($starttime) * 1000);
62
63 my $tpq = $elapsed / ($wcount*$qcount);
64
65 print "$host: $tpq ms per query\n";
66}
67
cb3e5146
DM
68# why is this faster than LWP::UserAgent?
69
15dd1257 70run_tests($hostname); # test 'apache'