#!/usr/bin/env perl use strict; use warnings; use UserAgentWithStats; use Test::More; my $ua = UserAgentWithStats->new(); my $urlstr = "http://www.python.org"; my $num_tests = 0; print "$0 : turning hit counter on ...\n"; $ua->hit_counter_on(); sleep(1); print "$0 : hit count is now: ".$ua->hit_counter_statistics_toString()."\n"; my ($intervalT1, $intervalT2, $numhits) = @{$ua->hit_counter_statistics()}; ok(($intervalT1==0), "time intervals (up-to-last-hit) must be zero on turn-on ($intervalT1)"); $num_tests++; ok(($intervalT2>0), "time intervals (up-to-stopped) records since turn-on irrespective of hits ($intervalT2)"); $num_tests++; is($numhits, 0, "0 hits at turn-on"); $num_tests++; print "$0 : hitting site with GET '$urlstr' ...\n"; my $aresponse = $ua->get($urlstr); if ($aresponse->is_success) { print "$0 : success hitting $urlstr\n"; } else { die "$urlstr : $aresponse->status_line"; } print "$0 : hit count is now: ".$ua->hit_counter_statistics_toString()."\n"; ($intervalT1, $intervalT2, $numhits) = @{$ua->hit_counter_statistics()}; ok(($intervalT1>0)&&($intervalT1<20), "time interval (up-to-stopped) must be positive (let's say 1-20 seconds)."); $num_tests++; ok(($intervalT2>0)&&($intervalT2<20), "time interval (up-to-last-hit) must be positive (let's say 1-20 seconds)."); $num_tests++; is($numhits, 2, "2 hits because of a redirect"); $num_tests++; print "$0 : turning hit counter off ...\n"; $ua->hit_counter_off(); print "$0 : hit count is now: ".$ua->hit_counter_statistics_toString()."\n"; print "$0 : hitting site with GET '$urlstr' ...\n"; $aresponse = $ua->get($urlstr); if ($aresponse->is_success) { print "$0 : success hitting $urlstr\n"; } else { die "$urlstr : $aresponse->status_line"; } print "$0 : hit count is now: ".$ua->hit_counter_statistics_toString()."\n"; my ($interval2T1, $interval2T2, $numhits2) = @{$ua->hit_counter_statistics()}; is($interval2T1, $intervalT1, "no change in time interval because counter is off"); $num_tests++; is($interval2T2, $intervalT2, "no change in time interval because counter is off"); $num_tests++; is($numhits2, $numhits, "no change in hits because counter is off"); $num_tests++; print "$0 : turning hit counter back on again ...\n"; $ua->hit_counter_on(); print "$0 : hit count is now: ".$ua->hit_counter_statistics_toString()."\n"; is($ua->hit_count(), 0, "hit count after starting"); $num_tests++; sleep(1); ok($ua->time_interval_to_now_or_when_stopped()>0, "time interval to-now after starting must be positive integer (after slept for 1)"); $num_tests++; is($ua->time_interval_to_last_hit(), 0, "time interval since last hit must be zero, no hits yet"); $num_tests++; print "$0 : hitting site with GET '$urlstr' ...\n"; $aresponse = $ua->get($urlstr); if ($aresponse->is_success) { print "$0 : success hitting $urlstr\n"; } else { die "$urlstr : $aresponse->status_line"; } print "$0 : hit count is now: ".$ua->hit_counter_statistics_toString()."\n"; ($intervalT1, $intervalT2, $numhits) = @{$ua->hit_counter_statistics()}; ok(($intervalT1>0)&&($intervalT1<20), "time interval must be positive (let's say 1-20 seconds)."); $num_tests++; ok(($intervalT2>0)&&($intervalT2<20), "time interval must be positive (let's say 1-20 seconds)."); $num_tests++; is($numhits, 2, "2 hits because of a redirect"); $num_tests++; print "$0 : hitting site with GET '$urlstr' again ...\n"; $aresponse = $ua->get($urlstr); if ($aresponse->is_success) { print "$0 : success hitting $urlstr\n"; } else { die "$urlstr : $aresponse->status_line"; } print "$0 : hit count is now: ".$ua->hit_counter_statistics_toString()."\n"; ($intervalT1, $intervalT2, $numhits) = @{$ua->hit_counter_statistics()}; ok(($intervalT1>0)&&($intervalT1<20), "time interval must be positive (let's say 1-20 seconds)."); $num_tests++; ok(($intervalT2>0)&&($intervalT2<20), "time interval must be positive (let's say 1-20 seconds)."); $num_tests++; is($numhits, 4, "2 more hits because of a redirect"); $num_tests++; print "$0 : resetting hit counter ...\n"; $ua->hit_counter_reset(); print "$0 : hit count is now: ".$ua->hit_counter_statistics_toString()."\n"; ($intervalT1, $intervalT2, $numhits) = @{$ua->hit_counter_statistics()}; is($intervalT1, 0, "time interval must be zero after reset"); $num_tests++; is($intervalT2, 0, "time interval must be zero after reset"); $num_tests++; is($numhits, 0, "number of hits must be zero after reset"); $num_tests++; sleep(1); $urlstr = 'https://www.w3schools.com/action_page.php'; my $form = {'fname' => 'abc', 'lname' => 'fool on indenting'}; print "$0 : hitting site with a POST '$urlstr' ...\n"; $aresponse = $ua->post($urlstr, $form); if ($aresponse->is_success) { print "$0 : success hitting $urlstr\n"; } else { die "$urlstr : $aresponse->status_line"; } print "$0 : hit count is now: ".$ua->hit_counter_statistics_toString()."\n"; ($intervalT1, $intervalT2, $numhits) = @{$ua->hit_counter_statistics()}; ok(($intervalT1>0)&&($intervalT1<20), "time interval must be positive (let's say 1-20 seconds)."); $num_tests++; ok(($intervalT2>0)&&($intervalT2<20), "time interval must be positive (let's say 1-20 seconds)."); $num_tests++; is($numhits, 1, "1 hit this time..."); $num_tests++; done_testing($num_tests); print "$0 : done.\n";