Tweaks for parsing
This commit is contained in:
parent
b03994e257
commit
c2a89d3184
|
@ -1,7 +1,9 @@
|
||||||
package dns
|
package dns
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net"
|
"os"
|
||||||
|
"time"
|
||||||
|
"bufio"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"crypto/rsa"
|
"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) {
|
func TestDotInName(t *testing.T) {
|
||||||
buf := make([]byte, 20)
|
buf := make([]byte, 20)
|
||||||
packDomainName("aa\\.bb.nl.", buf, 0)
|
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. 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. 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. 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 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. IN DNSKEY 256 3 5 AwEAAb+8lGNCxJgLS8rYVer6EnHVuIkQDghdjdtewDzU3G5R7PbMbKVRvH2Ma7pQyYceoaqWZQirSj72euPWfPxQnMy9ucCylA+FuH9cSjIcPf4PqJfdupHk9X6EBYjxrCLY4p1/yBwgyBIRJtZtAqM3ceAH2WovEJD6rTtOuHo5AluJ":
|
||||||
"miek.nl.\t0\tIN\tDNSKEY\t256 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()
|
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))
|
||||||
|
}
|
||||||
|
|
|
@ -42,6 +42,5 @@ func BenchmarkServing(b *testing.B) {
|
||||||
b.StartTimer()
|
b.StartTimer()
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
c.Exchange(m, "127.0.0.1:8053")
|
c.Exchange(m, "127.0.0.1:8053")
|
||||||
print(i, " ")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
44
zparse.rl
44
zparse.rl
|
@ -16,9 +16,9 @@ const _IOBUF = 3e7
|
||||||
|
|
||||||
// Return the rdata fields as a string slice.
|
// Return the rdata fields as a string slice.
|
||||||
// All starting whitespace is deleted.
|
// 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) {
|
func fields(s string, i int) (rdf []string) {
|
||||||
rdf = strings.Fields(strings.TrimSpace(s))
|
rdf = strings.Fields(s)
|
||||||
for i, _ := range rdf {
|
for i, _ := range rdf {
|
||||||
rdf[i] = strings.TrimSpace(rdf[i])
|
rdf[i] = strings.TrimSpace(rdf[i])
|
||||||
}
|
}
|
||||||
|
@ -104,26 +104,26 @@ func Zparse(q io.Reader) (z *Zone, err os.Error) {
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
rhs = (
|
rhs = (
|
||||||
( 'A'i rdata ) %setA
|
( 'A'i bl rdata ) %setA
|
||||||
| ( 'PTR'i rdata ) %setPTR
|
| ( 'PTR'i bl rdata ) %setPTR
|
||||||
| ( 'TXT'i rdata ) %setTXT
|
| ( 'TXT'i bl rdata ) %setTXT
|
||||||
| ( 'SRV'i rdata ) %setSRV
|
| ( 'SRV'i bl rdata ) %setSRV
|
||||||
| ( 'CERT'i rdata ) %setCERT
|
| ( 'CERT'i bl rdata ) %setCERT
|
||||||
| ( 'NAPTR'i rdata ) %setNAPTR
|
| ( 'NAPTR'i bl rdata ) %setNAPTR
|
||||||
| ( 'AAAA'i rdata ) %setAAAA
|
| ( 'AAAA'i bl rdata ) %setAAAA
|
||||||
| ( 'SOA'i rdata ) %setSOA
|
| ( 'SOA'i bl rdata ) %setSOA
|
||||||
| ( 'CNAME'i rdata ) %setCNAME
|
| ( 'CNAME'i bl rdata ) %setCNAME
|
||||||
| ( 'DNAME'i rdata ) %setDNAME
|
| ( 'DNAME'i bl rdata ) %setDNAME
|
||||||
| ( 'NS'i rdata ) %setNS
|
| ( 'NS'i bl rdata ) %setNS
|
||||||
| ( 'MX'i rdata ) %setMX
|
| ( 'MX'i bl rdata ) %setMX
|
||||||
| ( 'DS'i rdata ) %setDS
|
| ( 'DS'i bl rdata ) %setDS
|
||||||
| ( 'DLV'i rdata ) %setDLV
|
| ( 'DLV'i bl rdata ) %setDLV
|
||||||
| ( 'TA'i rdata ) %setTA
|
| ( 'TA'i bl rdata ) %setTA
|
||||||
| ( 'DNSKEY'i rdata ) %setDNSKEY
|
| ( 'DNSKEY'i bl rdata ) %setDNSKEY
|
||||||
| ( 'RRSIG'i rdata ) %setRRSIG
|
| ( 'RRSIG'i bl rdata ) %setRRSIG
|
||||||
| ( 'NSEC'i rdata ) %setNSEC
|
| ( 'NSEC'i bl rdata ) %setNSEC
|
||||||
| ( 'NSEC3'i rdata ) %setNSEC3
|
| ( 'NSEC3'i bl rdata ) %setNSEC3
|
||||||
| ( 'NSEC3PARAM'i rdata ) %setNSEC3PARAM
|
| ( 'NSEC3PARAM'i bl rdata ) %setNSEC3PARAM
|
||||||
);
|
);
|
||||||
|
|
||||||
rr = lhs rhs;
|
rr = lhs rhs;
|
||||||
|
|
Loading…
Reference in New Issue