#!/usr/bin/perl
#------------------------------------------------------------------------------
# Tool to test your geoipfree setup
# To use it to test your geoip setup instead of geoipfree, comments
# or uncomment appropriated lines
#------------------------------------------------------------------------------
# Exemple of results on Linux Celeron 1.7Ghz
# GeoIPfree:		15s =    485 lookup/s
# GeoIP (PurePerl):	 1s > 10 000 lookup/s
# GeoIP (C lib):	 1s > 10 000 lookup/s
#------------------------------------------------------------------------------


push @INC, ".";
push @INC, "./plugins";
push @INC, "../wwwroot/cgi-bin/plugins";

#require "Geo/IPfree.pm";		# For GeoIPfree
#require "Geo/IP/PurePerl.pm";	# For GeoIP (PurePerl)
require "Geo/IP.pm";			# For GeoIP (C lib)

#my $gi = Geo::IPfree->new();												# for GeoIPfree
my $gi = Geo::IP->new(Geo::IP::GEOIP_MEMORY_CACHE());						# For GeoIP (C lib)
#my $gi = Geo::IP::PurePerl->new(Geo::IP::PurePerl::GEOIP_MEMORY_CACHE());	# For GeoIP (PurePerl)
#my $gi = Geo::IP->new(Geo::IP::GEOIP_STANDARD());							# For GeoIP (C lib)
#my $gi = Geo::IP::PurePerl->new(Geo::IP::PurePerl::GEOIP_STANDARD());		# For GeoIP (PurePerl)


$DORESULTTEST=1;
$DOSPEEDTEST=1;

if ($DORESULTTEST) {
	# Do the result test
	#-------------------
	print "----- Sample test\n";
	my %testtodo=(
    '212.26.25.24'=>'SA',
    '66.108.94.158'=>'US',
    '80.8.55.4'=>'FR'
	);

	foreach my $ip (sort keys %testtodo) {
		my ($res,$resname)=();
#		($res,$resname)=$gi->LookUp($ip);		# For GeoIPfree
		$res=$gi->country_code_by_addr($ip);	# For GeoIP (C lib and PurePerl)
		print "Example for $ip: You should get '$testtodo{$ip}' ... and you get '$res".($resname?" $resname":"")."'";
		if ($res =~ /$testtodo{$ip}/i) { print " ... Looks good.\n"; }
		else { print " ... Looks wrong.\n"; }
	}

}

if ($DOSPEEDTEST) {
	# Do the speed test
	#------------------
	print "----- Speed test\n";
	my $timebefore=time();
	print "Start at ".localtime($timebefore)." for 10201 lookups\n";
	foreach my $j (100..200) {
		foreach my $i (100..200) {
#			my ($res,$resname)=$gi->LookUp("$j.50.$i.50");				# For GeoIPfree
			my ($res)=$gi->country_code_by_addr("$j.50.$i.50");			# For GeoIP (C lib and PurePerl)
		}
	}
	my $timeafter=time();
	print "End at ".localtime($timeafter)."\n";
	print "Duration: ".($timeafter-$timebefore)." seconds\n";
	print "Speed: ".(101*101/(($timeafter-$timebefore)||1))." lookup/s\n";
}



sleep 3;

0;

