#!/usr/bin/env python
# -*- coding: utf-8

import os
from iptogeo import IPToGeo, IPToGeoException

TIMEOUT = None
# TIMEOUT = 5.0

iptogeo = IPToGeo(timeout=TIMEOUT)

def get_random_ip_v4():
    ip = '%d.%d.%d.%d'  % \
        (ord(os.urandom(1)), ord(os.urandom(1)), ord(os.urandom(1)), ord(os.urandom(1)))
    return ip

def test_ip(ip, verbose=True, proxy=iptogeo):
    try:
        (ipres, country_code) = proxy.ip_to_geo(ip)
    except IPToGeoException, e:
        if verbose:
            print 'Error with IP %s' % (ip)
            print e
        return

    if verbose:
        if not country_code:
            print 'Country code for %s (%08x) not found' % (ip, ipres)
        else:
            print 'Country code for %s (%08x) is %s' % (ip, ipres, country_code)

print '#### Coherence test'
test_ip('1.5.7.3')
test_ip('1.5.255.4')
test_ip('1.6.255.4')
test_ip('2.0.0.0')
test_ip('127.0.0.1')
test_ip('1.55.3.12')
test_ip('1.57.0.0')

print '#### 5 sockets test'
for i in range(0, 6):
    print 'Test %d' % (i)
    test_ip(get_random_ip_v4(), verbose=False, proxy=IPToGeo(timeout=TIMEOUT))

print '#### 35 sockets test'
for i in range(0, 36):
    print 'Test %d' % (i)
    test_ip(get_random_ip_v4(), verbose=False, proxy=IPToGeo(timeout=TIMEOUT))

print '#### 1 socket heavy test'
for i in range(0, 1000):
    print 'Test %d' % (i)
    test_ip(get_random_ip_v4(), verbose=False)

print '#### 35 sockets heavy test'
geo_proxy = []
for i in range(0, 36):
    geo_proxy.append(IPToGeo(timeout=TIMEOUT))

for i in range(0, 1000):
    print 'Test %d' % (i)
    for proxy in geo_proxy:
        test_ip(get_random_ip_v4(), verbose=False, proxy=proxy)

print 'All is OK for me'
