]> git.proxmox.com Git - pve-manager.git/blame - test/perftest3.pl
guest import: allow setting VLAN-tag
[pve-manager.git] / test / perftest3.pl
CommitLineData
90d226ab 1#!/usr/bin/perl
15dd1257
DM
2
3use lib '../../';
4use strict;
90d226ab 5use warnings;
15dd1257
DM
6use Time::HiRes qw( usleep ualarm gettimeofday tv_interval );
7use PVE::INotify;
8use PVE::AccessControl;
9use Net::SSLeay qw(get_https post_https sslcat make_headers make_form);
10
11use Data::Dumper;
12
13my $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
17my $ticket = PVE::AccessControl::assemble_ticket('root@pam');
18
90d226ab 19my $wcount = 10;
15dd1257
DM
20my $qcount = 100;
21
22sub test_rpc {
23 my ($host) = @_;
24
25 for (my $i = 0; $i < $qcount; $i++) {
26 eval {
27 my ($page, $response, %reply_headers)
cb3e5146 28 = get_https($host, 8006, '/api2/json',
15dd1257
DM
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
43sub 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
90d226ab 69run_tests($hostname); # test 'pveproxy'