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