#!/usr/bin/perl # Script to profile speeds of optimusfs # $Id: optimusfs_stress.pl 1932 2008-02-14 20:30:28Z mish $ use Time::HiRes; # high resolution timing required use Time::Stopwatch; use Statistics::Descriptive; use Getopt::Long; use Data::Dumper; use HTML::Lint; use URI::Escape; use URI; use strict; use warnings; use threads; use threads::shared; use Test::More qw/no_plan/; use Test::WWW::Mechanize; my $help = 0; my $threads = 1; my $host1 = 'dev01'; my $host2 = 'dev02'; my $target_url = 'http://dildomall.com'; my $start_url = "/Optimus"; my $test_for = 500; # seconds my $no_test_errors = 0; GetOptions( "host1=s" => \$host1, "host2=s" => \$host2, "fork=i" => \$threads, "url=s" => \$start_url, "time=i" => \$test_for, "help|h" => \$help, "error|e" => \$no_test_errors, ); if ($help) { usage(); exit; } sub usage { print qq {Usage: $0 [-hfput --help] host(1|2): host to run tests on. default: dev01 f[ork]: how many threads to spawn. default: 1 u[rl]: what url to start at. default: /Optimus t[ime]: how long to run the tests for in seconds. default: 500 e[rror]: don't run tests that intentionally generate errors [h]elp: this help }; } #' sub run_tests { my @args = @_; my @threads; # spawn threads for (1 ... $threads) { my $thread = threads->create(\&test_optimus, @args); push @threads, $thread; } # wait for threads to finish $_->join foreach @threads; } sub test_optimus { my $test_old = shift; my $testhost = $test_old ? $host1 : $host2; my $base_url = "http://" . $testhost; my $op_url = "$base_url$start_url"; if ($test_old) { # test old optimusfs my $mech = new Test::WWW::Mechanize(stack_depth => 1, max_redirect => 1); $mech->get_ok("$op_url/st.html", "Retrieved $op_url"); $mech->field(targetURL => $target_url); $mech->submit_form; is($mech->status, "302", "Got redirect"); is($mech->response->header('Location'), $target_url, "Got correct targetUrl redirect"); } else { # test perlbal optimusfs my $mech = new Test::WWW::Mechanize(stack_depth => 1, max_redirect => 0); my $url = "$op_url/?targetUrl=" . uri_escape($target_url); $mech->get($url); is($mech->status, "302", "Got redirect"); is($mech->response->header('Location'), $target_url, "Got correct targetUrl redirect"); } } my $results = ''; sub tests { my ($old) = @_; my $host = $old ? $host1 : $host2; $results .= " | - $host -\n"; my $stat = Statistics::Descriptive::Sparse->new(); tie my $time, 'Time::Stopwatch'; tie my $wait, 'Time::Stopwatch'; # test speed while ($wait < $test_for) { my $diff = 0; $time = 0; run_tests($old); $diff += $time; $time = 0; $diff -= $time; $stat->add_data($diff); } $results .= " | count: " . $stat->count() . " iterations\n" . " | mean: " . $stat->mean() . " seconds\n" . " | s.d.: " . $stat->standard_deviation . " seconds\n\n"; } tests(1); tests(0); print "\n --- RESULTS ---\n$results\n";