@@ -68,6 +68,77 @@ func TestDNS(t *testing.T) {
6868 }
6969}
7070
71+ func TestDNSAAAAQueryDoesNotReturnARecord (t * testing.T ) {
72+ a := require .New (t )
73+ port := FindFreePort ()
74+ addr := fmt .Sprintf ("127.0.0.1:%d" , port )
75+
76+ resolver := NewResolver (addr )
77+ defer resolver .Close ()
78+ // TODO: remove sleep. We need it because NewResolver starts servers in goroutines
79+ time .Sleep (50 * time .Millisecond )
80+
81+ resolver .ReceiveConfiguration ("" , map [string ]string {
82+ "admin" : "127.0.0.66" ,
83+ })
84+
85+ req := new (dns.Msg )
86+ req .SetQuestion ("admin.awl." , dns .TypeAAAA )
87+ resp , _ , err := new (dns.Client ).Exchange (req , addr )
88+ a .NoError (err )
89+ a .Equal (dns .RcodeSuccess , resp .Rcode )
90+ a .Empty (resp .Answer )
91+ }
92+
93+ func TestDNSAQueryReturnsARecord (t * testing.T ) {
94+ a := require .New (t )
95+ port := FindFreePort ()
96+ addr := fmt .Sprintf ("127.0.0.1:%d" , port )
97+
98+ resolver := NewResolver (addr )
99+ defer resolver .Close ()
100+ // TODO: remove sleep. We need it because NewResolver starts servers in goroutines
101+ time .Sleep (50 * time .Millisecond )
102+
103+ resolver .ReceiveConfiguration ("" , map [string ]string {
104+ "admin" : "127.0.0.66" ,
105+ })
106+
107+ req := new (dns.Msg )
108+ req .SetQuestion ("admin.awl." , dns .TypeA )
109+ resp , _ , err := new (dns.Client ).Exchange (req , addr )
110+ a .NoError (err )
111+ a .Equal (dns .RcodeSuccess , resp .Rcode )
112+ a .Len (resp .Answer , 1 )
113+
114+ aRecord , ok := resp .Answer [0 ].(* dns.A )
115+ a .True (ok )
116+ a .Equal ("admin.awl." , aRecord .Hdr .Name )
117+ a .Equal ("127.0.0.66" , aRecord .A .String ())
118+ }
119+
120+ func TestDNSUnknownAddressReturnsNameError (t * testing.T ) {
121+ a := require .New (t )
122+ port := FindFreePort ()
123+ addr := fmt .Sprintf ("127.0.0.1:%d" , port )
124+
125+ resolver := NewResolver (addr )
126+ defer resolver .Close ()
127+ // TODO: remove sleep. We need it because NewResolver starts servers in goroutines
128+ time .Sleep (50 * time .Millisecond )
129+
130+ resolver .ReceiveConfiguration ("" , map [string ]string {
131+ "admin" : "127.0.0.66" ,
132+ })
133+
134+ req := new (dns.Msg )
135+ req .SetQuestion ("unknown.awl." , dns .TypeA )
136+ resp , _ , err := new (dns.Client ).Exchange (req , addr )
137+ a .NoError (err )
138+ a .Equal (dns .RcodeNameError , resp .Rcode )
139+ a .Empty (resp .Answer )
140+ }
141+
71142func NewResolverClient (address string ) * net.Resolver {
72143 dialer := & net.Dialer {Timeout : time .Second }
73144 return & net.Resolver {
0 commit comments