9 func BenchmarkMsgLength(b *testing.B) {
11 makeMsg := func(question string, ans, ns, e []RR) *Msg {
13 msg.SetQuestion(Fqdn(question), TypeANY)
14 msg.Answer = append(msg.Answer, ans...)
15 msg.Ns = append(msg.Ns, ns...)
16 msg.Extra = append(msg.Extra, e...)
20 name1 := "12345678901234567890123456789012345.12345678.123."
21 rrMx := testRR(name1 + " 3600 IN MX 10 " + name1)
22 msg := makeMsg(name1, []RR{rrMx, rrMx}, nil, nil)
24 for i := 0; i < b.N; i++ {
29 func BenchmarkMsgLengthNoCompression(b *testing.B) {
31 makeMsg := func(question string, ans, ns, e []RR) *Msg {
33 msg.SetQuestion(Fqdn(question), TypeANY)
34 msg.Answer = append(msg.Answer, ans...)
35 msg.Ns = append(msg.Ns, ns...)
36 msg.Extra = append(msg.Extra, e...)
39 name1 := "12345678901234567890123456789012345.12345678.123."
40 rrMx := testRR(name1 + " 3600 IN MX 10 " + name1)
41 msg := makeMsg(name1, []RR{rrMx, rrMx}, nil, nil)
43 for i := 0; i < b.N; i++ {
48 func BenchmarkMsgLengthPack(b *testing.B) {
49 makeMsg := func(question string, ans, ns, e []RR) *Msg {
51 msg.SetQuestion(Fqdn(question), TypeANY)
52 msg.Answer = append(msg.Answer, ans...)
53 msg.Ns = append(msg.Ns, ns...)
54 msg.Extra = append(msg.Extra, e...)
58 name1 := "12345678901234567890123456789012345.12345678.123."
59 rrMx := testRR(name1 + " 3600 IN MX 10 " + name1)
60 msg := makeMsg(name1, []RR{rrMx, rrMx}, nil, nil)
62 for i := 0; i < b.N; i++ {
67 func BenchmarkMsgLengthMassive(b *testing.B) {
68 makeMsg := func(question string, ans, ns, e []RR) *Msg {
70 msg.SetQuestion(Fqdn(question), TypeANY)
71 msg.Answer = append(msg.Answer, ans...)
72 msg.Ns = append(msg.Ns, ns...)
73 msg.Extra = append(msg.Extra, e...)
77 const name1 = "12345678901234567890123456789012345.12345678.123."
78 rrMx := testRR(name1 + " 3600 IN MX 10 " + name1)
79 answer := []RR{rrMx, rrMx}
80 for i := 0; i < 128; i++ {
81 rrA := testRR(fmt.Sprintf("example%03d.something%03delse.org. 2311 IN A 127.0.0.1", i/32, i%32))
82 answer = append(answer, rrA)
84 answer = append(answer, rrMx, rrMx)
85 msg := makeMsg(name1, answer, nil, nil)
87 for i := 0; i < b.N; i++ {
92 func BenchmarkMsgLengthOnlyQuestion(b *testing.B) {
94 msg.SetQuestion(Fqdn("12345678901234567890123456789012345.12345678.123."), TypeANY)
97 for i := 0; i < b.N; i++ {
102 func BenchmarkMsgLengthEscapedName(b *testing.B) {
104 msg.SetQuestion(`\1\2\3\4\5\6\7\8\9\0\1\2\3\4\5\6\7\8\9\0\1\2\3\4\5\6\7\8\9\0\1\2\3\4\5.\1\2\3\4\5\6\7\8.\1\2\3.`, TypeANY)
106 for i := 0; i < b.N; i++ {
111 func BenchmarkPackDomainName(b *testing.B) {
112 name1 := "12345678901234567890123456789012345.12345678.123."
113 buf := make([]byte, len(name1)+1)
115 for i := 0; i < b.N; i++ {
116 _, _ = PackDomainName(name1, buf, 0, nil, false)
120 func BenchmarkUnpackDomainName(b *testing.B) {
121 name1 := "12345678901234567890123456789012345.12345678.123."
122 buf := make([]byte, len(name1)+1)
123 _, _ = PackDomainName(name1, buf, 0, nil, false)
125 for i := 0; i < b.N; i++ {
126 _, _, _ = UnpackDomainName(buf, 0)
130 func BenchmarkUnpackDomainNameUnprintable(b *testing.B) {
131 name1 := "\x02\x02\x02\x025\x02\x02\x02\x02.12345678.123."
132 buf := make([]byte, len(name1)+1)
133 _, _ = PackDomainName(name1, buf, 0, nil, false)
135 for i := 0; i < b.N; i++ {
136 _, _, _ = UnpackDomainName(buf, 0)
140 func BenchmarkUnpackDomainNameLongest(b *testing.B) {
141 buf := make([]byte, len(longestDomain)+1)
142 n, err := PackDomainName(longestDomain, buf, 0, nil, false)
146 if n != maxDomainNameWireOctets {
147 b.Fatalf("name wrong size in wire format, expected %d, got %d", maxDomainNameWireOctets, n)
150 for i := 0; i < b.N; i++ {
151 _, _, _ = UnpackDomainName(buf, 0)
155 func BenchmarkUnpackDomainNameLongestUnprintable(b *testing.B) {
156 buf := make([]byte, len(longestUnprintableDomain)+1)
157 n, err := PackDomainName(longestUnprintableDomain, buf, 0, nil, false)
161 if n != maxDomainNameWireOctets {
162 b.Fatalf("name wrong size in wire format, expected %d, got %d", maxDomainNameWireOctets, n)
165 for i := 0; i < b.N; i++ {
166 _, _, _ = UnpackDomainName(buf, 0)
170 func BenchmarkCopy(b *testing.B) {
173 m.SetQuestion("miek.nl.", TypeA)
174 rr := testRR("miek.nl. 2311 IN A 127.0.0.1")
176 rr = testRR("miek.nl. 2311 IN NS 127.0.0.1")
178 rr = testRR("miek.nl. 2311 IN A 127.0.0.1")
182 for i := 0; i < b.N; i++ {
187 func BenchmarkPackA(b *testing.B) {
188 a := &A{Hdr: RR_Header{Name: ".", Rrtype: TypeA, Class: ClassANY}, A: net.IPv4(127, 0, 0, 1)}
190 buf := make([]byte, Len(a))
193 for i := 0; i < b.N; i++ {
194 _, _ = PackRR(a, buf, 0, nil, false)
198 func BenchmarkUnpackA(b *testing.B) {
199 a := &A{Hdr: RR_Header{Name: ".", Rrtype: TypeA, Class: ClassANY}, A: net.IPv4(127, 0, 0, 1)}
201 buf := make([]byte, Len(a))
202 PackRR(a, buf, 0, nil, false)
206 for i := 0; i < b.N; i++ {
207 _, _, _ = UnpackRR(buf, 0)
211 func BenchmarkPackMX(b *testing.B) {
212 m := &MX{Hdr: RR_Header{Name: ".", Rrtype: TypeA, Class: ClassANY}, Mx: "mx.miek.nl."}
214 buf := make([]byte, Len(m))
217 for i := 0; i < b.N; i++ {
218 _, _ = PackRR(m, buf, 0, nil, false)
222 func BenchmarkUnpackMX(b *testing.B) {
223 m := &MX{Hdr: RR_Header{Name: ".", Rrtype: TypeA, Class: ClassANY}, Mx: "mx.miek.nl."}
225 buf := make([]byte, Len(m))
226 PackRR(m, buf, 0, nil, false)
230 for i := 0; i < b.N; i++ {
231 _, _, _ = UnpackRR(buf, 0)
235 func BenchmarkPackAAAAA(b *testing.B) {
236 aaaa := testRR(". IN AAAA ::1")
238 buf := make([]byte, Len(aaaa))
241 for i := 0; i < b.N; i++ {
242 _, _ = PackRR(aaaa, buf, 0, nil, false)
246 func BenchmarkUnpackAAAA(b *testing.B) {
247 aaaa := testRR(". IN AAAA ::1")
249 buf := make([]byte, Len(aaaa))
250 PackRR(aaaa, buf, 0, nil, false)
254 for i := 0; i < b.N; i++ {
255 _, _, _ = UnpackRR(buf, 0)
259 func BenchmarkPackMsg(b *testing.B) {
260 makeMsg := func(question string, ans, ns, e []RR) *Msg {
262 msg.SetQuestion(Fqdn(question), TypeANY)
263 msg.Answer = append(msg.Answer, ans...)
264 msg.Ns = append(msg.Ns, ns...)
265 msg.Extra = append(msg.Extra, e...)
269 name1 := "12345678901234567890123456789012345.12345678.123."
270 rrMx := testRR(name1 + " 3600 IN MX 10 " + name1)
271 msg := makeMsg(name1, []RR{rrMx, rrMx}, nil, nil)
272 buf := make([]byte, 512)
275 for i := 0; i < b.N; i++ {
276 _, _ = msg.PackBuffer(buf)
280 func BenchmarkPackMsgMassive(b *testing.B) {
281 makeMsg := func(question string, ans, ns, e []RR) *Msg {
283 msg.SetQuestion(Fqdn(question), TypeANY)
284 msg.Answer = append(msg.Answer, ans...)
285 msg.Ns = append(msg.Ns, ns...)
286 msg.Extra = append(msg.Extra, e...)
290 const name1 = "12345678901234567890123456789012345.12345678.123."
291 rrMx := testRR(name1 + " 3600 IN MX 10 " + name1)
292 answer := []RR{rrMx, rrMx}
293 for i := 0; i < 128; i++ {
294 rrA := testRR(fmt.Sprintf("example%03d.something%03delse.org. 2311 IN A 127.0.0.1", i/32, i%32))
295 answer = append(answer, rrA)
297 answer = append(answer, rrMx, rrMx)
298 msg := makeMsg(name1, answer, nil, nil)
299 buf := make([]byte, 512)
302 for i := 0; i < b.N; i++ {
303 _, _ = msg.PackBuffer(buf)
307 func BenchmarkPackMsgOnlyQuestion(b *testing.B) {
309 msg.SetQuestion(Fqdn("12345678901234567890123456789012345.12345678.123."), TypeANY)
311 buf := make([]byte, 512)
314 for i := 0; i < b.N; i++ {
315 _, _ = msg.PackBuffer(buf)
319 func BenchmarkUnpackMsg(b *testing.B) {
320 makeMsg := func(question string, ans, ns, e []RR) *Msg {
322 msg.SetQuestion(Fqdn(question), TypeANY)
323 msg.Answer = append(msg.Answer, ans...)
324 msg.Ns = append(msg.Ns, ns...)
325 msg.Extra = append(msg.Extra, e...)
329 name1 := "12345678901234567890123456789012345.12345678.123."
330 rrMx := testRR(name1 + " 3600 IN MX 10 " + name1)
331 msg := makeMsg(name1, []RR{rrMx, rrMx}, nil, nil)
332 msgBuf, _ := msg.Pack()
335 for i := 0; i < b.N; i++ {
336 _ = msg.Unpack(msgBuf)
340 func BenchmarkIdGeneration(b *testing.B) {
341 for i := 0; i < b.N; i++ {
346 func BenchmarkReverseAddr(b *testing.B) {
347 b.Run("IP4", func(b *testing.B) {
348 for n := 0; n < b.N; n++ {
349 addr, err := ReverseAddr("192.0.2.1")
353 if expect := "1.2.0.192.in-addr.arpa."; addr != expect {
354 b.Fatalf("invalid reverse address, expected %q, got %q", expect, addr)
359 b.Run("IP6", func(b *testing.B) {
360 for n := 0; n < b.N; n++ {
361 addr, err := ReverseAddr("2001:db8::68")
365 if expect := "8.6.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa."; addr != expect {
366 b.Fatalf("invalid reverse address, expected %q, got %q", expect, addr)