1#!/usr/bin/perl 2 3use strict; 4use warnings; 5 6use Test::More; 7 8use IO::Async::Test; 9use IO::Async::Loop; 10 11BEGIN { 12 # Install a fake resolver 13 *IO::Async::Resolver::DNS::res_search = 14 *IO::Async::Resolver::DNS::res_query = sub { 15 my ( $dname, $class, $type ) = @_; 16 my $packet = Net::DNS::Packet->new( $dname, $type, $class ); 17 $packet->push( answer => Net::DNS::RR->new( "$dname. 86400 A 10.0.0.1" ) ); 18 return $packet->data; 19 }; 20} 21 22use IO::Async::Resolver::DNS; 23 24my $loop = IO::Async::Loop->new; 25 26testing_loop( $loop ); 27 28my $resolver = $loop->resolver; 29 30{ 31 can_ok( $resolver, "res_query" ); 32 33 my $f = $resolver->res_query( 34 dname => "www.cpan.org", 35 type => "A", 36 ); 37 38 wait_for { $f->is_ready }; 39 my $result = $f->get; 40 41 isa_ok( $result, "Net::DNS::Packet", '$result from ->res_query isa Net::DNS::Packet' ); 42 43 my @answers = $result->answer; 44 is( scalar @answers, 1, '$result from ->res_query contains an answer' ); 45 is( $answers[0]->type, "A", '$answer[0] is A record' ); 46 is( $answers[0]->address, "10.0.0.1", '$answer[0] address is 10.0.0.1' ); 47} 48 49{ 50 can_ok( $resolver, "res_search" ); 51 52 my $f = $resolver->res_search( 53 dname => "www.cpan.org", 54 type => "A", 55 ); 56 57 wait_for { $f->is_ready }; 58 my $result = $f->get; 59 60 isa_ok( $result, "Net::DNS::Packet", '$result from ->res_search isa Net::DNS::Packet' ); 61 62 my @answers = $result->answer; 63 is( scalar @answers, 1, '$result from ->res_query contains an answer' ); 64 is( $answers[0]->type, "A", '$answer[0] is A record' ); 65 is( $answers[0]->address, "10.0.0.1", '$answer[0] address is 10.0.0.1' ); 66} 67 68done_testing; 69