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