Monorepo for Tangled tangled.org
5

Configure Feed

Select the types of activity you want to include in your feed.

1package microvm 2 3import ( 4 "net" 5 "testing" 6 7 "github.com/miekg/dns" 8) 9 10func TestFilterDNSResponseDropsBlockedAddressRecords(t *testing.T) { 11 msg := new(dns.Msg) 12 msg.Answer = []dns.RR{ 13 &dns.CNAME{Hdr: dns.RR_Header{Name: "cache.example.", Rrtype: dns.TypeCNAME, Class: dns.ClassINET}, Target: "edge.example."}, 14 &dns.A{Hdr: dns.RR_Header{Name: "edge.example.", Rrtype: dns.TypeA, Class: dns.ClassINET}, A: net.ParseIP("1.1.1.1")}, 15 &dns.A{Hdr: dns.RR_Header{Name: "edge.example.", Rrtype: dns.TypeA, Class: dns.ClassINET}, A: net.ParseIP("10.0.0.1")}, 16 &dns.AAAA{Hdr: dns.RR_Header{Name: "edge.example.", Rrtype: dns.TypeAAAA, Class: dns.ClassINET}, AAAA: net.ParseIP("2606:4700:4700::1111")}, 17 &dns.AAAA{Hdr: dns.RR_Header{Name: "edge.example.", Rrtype: dns.TypeAAAA, Class: dns.ClassINET}, AAAA: net.ParseIP("fd7a:115c:a1e0::53")}, 18 } 19 msg.Extra = []dns.RR{ 20 &dns.A{Hdr: dns.RR_Header{Name: "private.example.", Rrtype: dns.TypeA, Class: dns.ClassINET}, A: net.ParseIP("192.168.1.2")}, 21 &dns.A{Hdr: dns.RR_Header{Name: "public.example.", Rrtype: dns.TypeA, Class: dns.ClassINET}, A: net.ParseIP("8.8.8.8")}, 22 } 23 24 filterDNSResponse(msg) 25 26 if len(msg.Answer) != 3 { 27 t.Fatalf("filtered answer len = %d, want 3: %#v", len(msg.Answer), msg.Answer) 28 } 29 if _, ok := msg.Answer[0].(*dns.CNAME); !ok { 30 t.Fatalf("answer[0] = %T, want CNAME", msg.Answer[0]) 31 } 32 if a, ok := msg.Answer[1].(*dns.A); !ok || !a.A.Equal(net.ParseIP("1.1.1.1")) { 33 t.Fatalf("answer[1] = %#v, want public A", msg.Answer[1]) 34 } 35 if aaaa, ok := msg.Answer[2].(*dns.AAAA); !ok || !aaaa.AAAA.Equal(net.ParseIP("2606:4700:4700::1111")) { 36 t.Fatalf("answer[2] = %#v, want public AAAA", msg.Answer[2]) 37 } 38 if len(msg.Extra) != 1 { 39 t.Fatalf("filtered extra len = %d, want 1: %#v", len(msg.Extra), msg.Extra) 40 } 41} 42 43func TestFilterDNSResponseFiltersSVCBAddressHints(t *testing.T) { 44 msg := new(dns.Msg) 45 msg.Answer = []dns.RR{ 46 &dns.HTTPS{ 47 SVCB: dns.SVCB{ 48 Hdr: dns.RR_Header{Name: "svc.example.", Rrtype: dns.TypeHTTPS, Class: dns.ClassINET}, 49 Priority: 1, 50 Target: ".", 51 Value: []dns.SVCBKeyValue{ 52 &dns.SVCBIPv4Hint{Hint: []net.IP{net.ParseIP("10.0.0.1"), net.ParseIP("8.8.8.8")}}, 53 &dns.SVCBIPv6Hint{Hint: []net.IP{net.ParseIP("fd7a:115c:a1e0::53"), net.ParseIP("2001:4860:4860::8888")}}, 54 }, 55 }, 56 }, 57 } 58 59 filterDNSResponse(msg) 60 61 https := msg.Answer[0].(*dns.HTTPS) 62 if len(https.Value) != 2 { 63 t.Fatalf("https values len = %d, want 2", len(https.Value)) 64 } 65 ipv4 := https.Value[0].(*dns.SVCBIPv4Hint) 66 if len(ipv4.Hint) != 1 || !ipv4.Hint[0].Equal(net.ParseIP("8.8.8.8")) { 67 t.Fatalf("ipv4 hints = %v, want [8.8.8.8]", ipv4.Hint) 68 } 69 ipv6 := https.Value[1].(*dns.SVCBIPv6Hint) 70 if len(ipv6.Hint) != 1 || !ipv6.Hint[0].Equal(net.ParseIP("2001:4860:4860::8888")) { 71 t.Fatalf("ipv6 hints = %v, want [2001:4860:4860::8888]", ipv6.Hint) 72 } 73}