The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use strict;

use Data::Dumper;
use Test::More tests        =>  10;

use constant ALRM_TIMEOUT   =>  10;

BEGIN {
    use_ok('Net::Whois::Raw',qw( whois ));

    $Net::Whois::Raw::CHECK_FAIL = 1;
    $Net::Whois::Raw::OMIT_MSG = 1;
    $Net::Whois::Raw::CHECK_EXCEED = 1;
};

my @domains = qw(
    yahoo.com
    freebsd.org
    reg.ru
    ns1.nameself.com.NS
    XN--C1AD6A.XN--P1AI
);

SKIP: {
    print "The following tests requires internet connection. Checking...\n";
    
    local $SIG{ALRM} = sub {
        BAIL_OUT("Check your internet connection.\n");
    };

    alarm ALRM_TIMEOUT;
    skip "Looks like no internet connection", 
        Test::More->builder->expected_tests() - 1 unless get_connected();
    
    # registrars    
    like( whois( 'REGRU-REG-RIPN', 'whois.ripn.net' ), qr/www.reg.ru/ );
    
    # domains    
    foreach my $domain ( @domains ) {
        my $txt = whois( $domain );
        $domain =~ s/.NS$//i;
        ok($txt && $txt =~ /$domain/i, "$domain resolved");
    }
    
    # Net::Whois::Raw::www_whois_query for AC domain
    # ok( Net::Whois::Raw::www_whois_query( 'nic.ac' ) =~ /Organization Name.*Network Information Center/i, "www_whois_query");
    
    # Net::Whois::Raw::Common::process_whois
    no warnings;
    $Net::Whois::Raw::CHECK_FAIL   = 0;
    $Net::Whois::Raw::OMIT_MSG     = 0;
    $Net::Whois::Raw::CHECK_EXCEED = 0;

    my $whois = whois('reg.ru');
    my ($processed) = Net::Whois::Raw::Common::process_whois( 'reg.ru', 'whois.ripn.net', $whois, 2, 2, 2 );
    ok( length( $processed ) < length( $whois ) && $processed =~ /reg\.ru/, 'process_whois' );
    
    # Net::Whois::Raw::Common::write_to_cache
    my $test_domain = 'google.com';
    my $tmp_dir;
    if ($^O =~ /mswin/i) {
        $tmp_dir = $ENV{TEMP}.'\net-whois-raw-common-test-'.time;
    }
    else {
        $tmp_dir = '/tmp/net-whois-raw-common-test-'.time;
    }
    my $cache_file  = "$tmp_dir/$test_domain.00";
    
    $Net::Whois::Raw::CACHE_DIR = $tmp_dir;
    $whois = whois( $test_domain, undef, 'QRY_FIRST' );
    ok( -e $cache_file, 'write_to_cache' );
    
    # Net::Whois::Raw::Common::get_from_cache
    open CACHE, ">>$cache_file";
    print CACHE "net-whois-raw-common-test";
    close CACHE;
    
    like( whois( $test_domain, undef, 'QRY_FIRST' ), qr/net-whois-raw-common-test/s, 'get_from_cache' );

    unlink <$tmp_dir/*>;
    rmdir $tmp_dir;
    alarm 0;
};

sub get_connected {
    require LWP::UserAgent;
    my $ua = LWP::UserAgent->new( timeout => 10 );
    my $res = $ua->get( 'http://www.google.com' );
    
    return $res->is_success;
}