Tweaks for parsing

This commit is contained in:
Miek Gieben 2011-07-22 22:06:07 +02:00
parent b03994e257
commit c2a89d3184
4 changed files with 1219 additions and 690 deletions

View File

@ -1,7 +1,9 @@
package dns
import (
"net"
"os"
"time"
"bufio"
"strings"
"testing"
"crypto/rsa"
@ -73,28 +75,6 @@ Activate: 20110302104537`
}
}
func TestA(t *testing.T) {
a := new(RR_A)
a.Hdr = RR_Header{"miek.nl.", TypeA, ClassINET, 14400, 0}
a.A = net.ParseIP("192.168.1.1")
str := a.String()
if str != "miek.nl.\t14400\tIN\tA\t192.168.1.1" {
t.Log(str)
t.Fail()
}
}
func TestQuadA(t *testing.T) {
a := new(RR_AAAA)
a.Hdr = RR_Header{"miek.nl.", TypeAAAA, ClassINET, 14400, 0}
a.AAAA = net.ParseIP("::1")
str := a.String()
if str != "miek.nl.\t14400\tIN\tAAAA\t::1" {
t.Log(str)
t.Fail()
}
}
func TestDotInName(t *testing.T) {
buf := make([]byte, 20)
packDomainName("aa\\.bb.nl.", buf, 0)
@ -124,6 +104,7 @@ func TestParse(t *testing.T) {
"miek.nl. 3600 IN MX 10 elektron.atoom.net.": "miek.nl.\t3600\tIN\tMX\t10 elektron.atoom.net.",
"miek.nl. IN 3600 A 127.0.0.1": "miek.nl.\t3600\tIN\tA\t127.0.0.1",
"miek.nl. A 127.0.0.1": "miek.nl.\t0\tCLASS0\tA\t127.0.0.1",
"miek.nl. IN AAAA ::1": "miek.nl.\t0\tIN\tAAAA\t::1",
"miek.nl. IN A 127.0.0.1": "miek.nl.\t0\tIN\tA\t127.0.0.1",
"miek.nl. IN DNSKEY 256 3 5 AwEAAb+8lGNCxJgLS8rYVer6EnHVuIkQDghdjdtewDzU3G5R7PbMbKVRvH2Ma7pQyYceoaqWZQirSj72euPWfPxQnMy9ucCylA+FuH9cSjIcPf4PqJfdupHk9X6EBYjxrCLY4p1/yBwgyBIRJtZtAqM3ceAH2WovEJD6rTtOuHo5AluJ":
"miek.nl.\t0\tIN\tDNSKEY\t256 3 5 AwEAAb+8lGNCxJgLS8rYVer6EnHVuIkQDghdjdtewDzU3G5R7PbMbKVRvH2Ma7pQyYceoaqWZQirSj72euPWfPxQnMy9ucCylA+FuH9cSjIcPf4PqJfdupHk9X6EBYjxrCLY4p1/yBwgyBIRJtZtAqM3ceAH2WovEJD6rTtOuHo5AluJ",
@ -170,3 +151,34 @@ func TestSetString(t *testing.T) {
t.Fail()
}
}
func BenchmarkZoneParsing(b *testing.B) {
file, err := os.Open("miek.nl")
defer file.Close()
if err != nil {
return
}
r := bufio.NewReader(file)
// Don't care about errors (there shouldn't be any)
Zparse(r)
}
func TestZoneParsing(t *testing.T) {
file, err := os.Open("miek.nl")
defer file.Close()
if err != nil {
return
}
r := bufio.NewReader(file)
// Don't care about errors (there shouldn't be any)
start := time.Nanoseconds()
z, err := Zparse(r)
if err != nil {
t.Logf("error %v\n", err.String())
t.Fail()
}
delta := time.Nanoseconds() - start
t.Logf("%d RRs parsed in %.2f s (%.2f RR/s)", z.Len(), float32(delta)/1e9, float32(z.Len())/(float32(delta)/1e9))
}

View File

@ -42,6 +42,5 @@ func BenchmarkServing(b *testing.B) {
b.StartTimer()
for i := 0; i < b.N; i++ {
c.Exchange(m, "127.0.0.1:8053")
print(i, " ")
}
}

1806
zparse.go

File diff suppressed because it is too large Load Diff

View File

@ -16,9 +16,9 @@ const _IOBUF = 3e7
// Return the rdata fields as a string slice.
// All starting whitespace is deleted.
// If i is 0 no space are deleted from the final rdfs
// If i is 0 no spaces are deleted from the final rdfs.
func fields(s string, i int) (rdf []string) {
rdf = strings.Fields(strings.TrimSpace(s))
rdf = strings.Fields(s)
for i, _ := range rdf {
rdf[i] = strings.TrimSpace(rdf[i])
}
@ -104,26 +104,26 @@ func Zparse(q io.Reader) (z *Zone, err os.Error) {
)?;
rhs = (
( 'A'i rdata ) %setA
| ( 'PTR'i rdata ) %setPTR
| ( 'TXT'i rdata ) %setTXT
| ( 'SRV'i rdata ) %setSRV
| ( 'CERT'i rdata ) %setCERT
| ( 'NAPTR'i rdata ) %setNAPTR
| ( 'AAAA'i rdata ) %setAAAA
| ( 'SOA'i rdata ) %setSOA
| ( 'CNAME'i rdata ) %setCNAME
| ( 'DNAME'i rdata ) %setDNAME
| ( 'NS'i rdata ) %setNS
| ( 'MX'i rdata ) %setMX
| ( 'DS'i rdata ) %setDS
| ( 'DLV'i rdata ) %setDLV
| ( 'TA'i rdata ) %setTA
| ( 'DNSKEY'i rdata ) %setDNSKEY
| ( 'RRSIG'i rdata ) %setRRSIG
| ( 'NSEC'i rdata ) %setNSEC
| ( 'NSEC3'i rdata ) %setNSEC3
| ( 'NSEC3PARAM'i rdata ) %setNSEC3PARAM
( 'A'i bl rdata ) %setA
| ( 'PTR'i bl rdata ) %setPTR
| ( 'TXT'i bl rdata ) %setTXT
| ( 'SRV'i bl rdata ) %setSRV
| ( 'CERT'i bl rdata ) %setCERT
| ( 'NAPTR'i bl rdata ) %setNAPTR
| ( 'AAAA'i bl rdata ) %setAAAA
| ( 'SOA'i bl rdata ) %setSOA
| ( 'CNAME'i bl rdata ) %setCNAME
| ( 'DNAME'i bl rdata ) %setDNAME
| ( 'NS'i bl rdata ) %setNS
| ( 'MX'i bl rdata ) %setMX
| ( 'DS'i bl rdata ) %setDS
| ( 'DLV'i bl rdata ) %setDLV
| ( 'TA'i bl rdata ) %setTA
| ( 'DNSKEY'i bl rdata ) %setDNSKEY
| ( 'RRSIG'i bl rdata ) %setRRSIG
| ( 'NSEC'i bl rdata ) %setNSEC
| ( 'NSEC3'i bl rdata ) %setNSEC3
| ( 'NSEC3PARAM'i bl rdata ) %setNSEC3PARAM
);
rr = lhs rhs;