@@ -881,7 +881,7 @@ func (f *fakeDNSPacketConn) Close() error {
881
881
func TestIgnoreDNSForgeries (t * testing.T ) {
882
882
c , s := Pipe ()
883
883
go func () {
884
- b := make ([]byte , 512 )
884
+ b := make ([]byte , maxDNSPacketSize )
885
885
n , err := s .Read (b )
886
886
if err != nil {
887
887
t .Error (err )
@@ -2161,3 +2161,58 @@ func TestRootNS(t *testing.T) {
2161
2161
t .Errorf ("records = [%v]; want [%v]" , strings .Join (records , " " ), want [0 ])
2162
2162
}
2163
2163
}
2164
+
2165
+ // Test that we advertise support for a larger DNS packet size.
2166
+ // This isn't a great test as it just tests the dnsmessage package
2167
+ // against itself.
2168
+ func TestDNSPacketSize (t * testing.T ) {
2169
+ fake := fakeDNSServer {
2170
+ rh : func (_ , _ string , q dnsmessage.Message , _ time.Time ) (dnsmessage.Message , error ) {
2171
+ if len (q .Additionals ) == 0 {
2172
+ t .Error ("missing EDNS record" )
2173
+ } else if opt , ok := q .Additionals [0 ].Body .(* dnsmessage.OPTResource ); ! ok {
2174
+ t .Errorf ("additional record type %T, expected OPTResource" , q .Additionals [0 ])
2175
+ } else if len (opt .Options ) != 0 {
2176
+ t .Errorf ("found %d Options, expected none" , len (opt .Options ))
2177
+ } else {
2178
+ got := int (q .Additionals [0 ].Header .Class )
2179
+ t .Logf ("EDNS packet size == %d" , got )
2180
+ if got != maxDNSPacketSize {
2181
+ t .Errorf ("EDNS packet size == %d, want %d" , got , maxDNSPacketSize )
2182
+ }
2183
+ }
2184
+
2185
+ // Hand back a dummy answer to verify that
2186
+ // LookupIPAddr completes.
2187
+ r := dnsmessage.Message {
2188
+ Header : dnsmessage.Header {
2189
+ ID : q .Header .ID ,
2190
+ Response : true ,
2191
+ RCode : dnsmessage .RCodeSuccess ,
2192
+ },
2193
+ Questions : q .Questions ,
2194
+ }
2195
+ if q .Questions [0 ].Type == dnsmessage .TypeA {
2196
+ r .Answers = []dnsmessage.Resource {
2197
+ {
2198
+ Header : dnsmessage.ResourceHeader {
2199
+ Name : q .Questions [0 ].Name ,
2200
+ Type : dnsmessage .TypeA ,
2201
+ Class : dnsmessage .ClassINET ,
2202
+ Length : 4 ,
2203
+ },
2204
+ Body : & dnsmessage.AResource {
2205
+ A : TestAddr ,
2206
+ },
2207
+ },
2208
+ }
2209
+ }
2210
+ return r , nil
2211
+ },
2212
+ }
2213
+
2214
+ r := & Resolver {PreferGo : true , Dial : fake .DialContext }
2215
+ if _ , err := r .LookupIPAddr (context .Background (), "go.dev" ); err != nil {
2216
+ t .Errorf ("lookup failed: %v" , err )
2217
+ }
2218
+ }
0 commit comments