Fix the tests (Again) + NewRR(str)
Parse tests start to get working again NewRR reads a string and is the easiest way to get an RR in your code.
This commit is contained in:
parent
7d66f3dbb7
commit
081166db5e
17
keygen.go
17
keygen.go
|
@ -111,23 +111,6 @@ func (r *RR_DNSKEY) PrivateKeyString(p PrivateKey) (s string) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read reads a DNSKEY from the io.Reader q.
|
|
||||||
func (k *RR_DNSKEY) Read(q io.Reader) error {
|
|
||||||
r, err := newRRReader(q)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if _, ok := r.(*RR_DNSKEY); !ok {
|
|
||||||
return ErrKey
|
|
||||||
}
|
|
||||||
k.Hdr = r.(*RR_DNSKEY).Hdr
|
|
||||||
k.Flags = r.(*RR_DNSKEY).Flags
|
|
||||||
k.Protocol = r.(*RR_DNSKEY).Protocol
|
|
||||||
k.Algorithm = r.(*RR_DNSKEY).Algorithm
|
|
||||||
k.PublicKey = r.(*RR_DNSKEY).PublicKey
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// ReadPrivateKey reads a private key from the io.Reader q.
|
// ReadPrivateKey reads a private key from the io.Reader q.
|
||||||
func (k *RR_DNSKEY) ReadPrivateKey(q io.Reader) (PrivateKey, error) {
|
func (k *RR_DNSKEY) ReadPrivateKey(q io.Reader) (PrivateKey, error) {
|
||||||
/*
|
/*
|
||||||
|
|
108
parse_test.go
108
parse_test.go
|
@ -1,12 +1,11 @@
|
||||||
package dns
|
package dns
|
||||||
|
|
||||||
import (
|
import (
|
||||||
// "os"
|
|
||||||
// "time"
|
|
||||||
// "bufio"
|
|
||||||
"crypto/rsa"
|
"crypto/rsa"
|
||||||
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSign(t *testing.T) {
|
func TestSign(t *testing.T) {
|
||||||
|
@ -26,8 +25,8 @@ Created: 20110302104537
|
||||||
Publish: 20110302104537
|
Publish: 20110302104537
|
||||||
Activate: 20110302104537`
|
Activate: 20110302104537`
|
||||||
|
|
||||||
k := new(RR_DNSKEY)
|
xk, _ := NewRR(pub) // TODO err
|
||||||
k.Read(strings.NewReader(pub))
|
k := xk.(*RR_DNSKEY)
|
||||||
p, err := k.ReadPrivateKey(strings.NewReader(priv))
|
p, err := k.ReadPrivateKey(strings.NewReader(priv))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Logf("%v\n", err)
|
t.Logf("%v\n", err)
|
||||||
|
@ -95,9 +94,8 @@ func TestDotInName(t *testing.T) {
|
||||||
t.Fail()
|
t.Fail()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
// Make this a decend test case. For now, good enough
|
// Make this a decend test case. For now, good enough
|
||||||
// New style (Ragel) parsing
|
|
||||||
func TestParse(t *testing.T) {
|
func TestParse(t *testing.T) {
|
||||||
tests := map[string]string{
|
tests := map[string]string{
|
||||||
"miek.nl. 3600 IN A 127.0.0.1": "miek.nl.\t3600\tIN\tA\t127.0.0.1",
|
"miek.nl. 3600 IN A 127.0.0.1": "miek.nl.\t3600\tIN\tA\t127.0.0.1",
|
||||||
|
@ -106,74 +104,68 @@ func TestParse(t *testing.T) {
|
||||||
"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 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.\t0\tIN\tDNSKEY\t256 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",
|
||||||
"nlnetlabs.nl. 3175 IN DNSKEY 256 3 8 AwEAAdR7XR95OaAN9Rz7TbtPalQ9guQk7zfxTHYNKhsiwTZA9z+F16nD0VeBlk7dNik3ETpT2GLAwr9sntG898JwurCDe353wHPvjZtMCdiTVp3cRCrjuCEvoFpmZNN82H0gaH/4v8mkv/QBDAkDSncYjz/FqHKAeYy3cMcjY6RyVweh": "nlnetlabs.nl.\t3175\tIN\tDNSKEY\t256 3 8 AwEAAdR7XR95OaAN9Rz7TbtPalQ9guQk7zfxTHYNKhsiwTZA9z+F16nD0VeBlk7dNik3ETpT2GLAwr9sntG898JwurCDe353wHPvjZtMCdiTVp3cRCrjuCEvoFpmZNN82H0gaH/4v8mkv/QBDAkDSncYjz/FqHKAeYy3cMcjY6RyVweh",
|
"nlnetlabs.nl. 3175 IN DNSKEY 256 3 8 AwEAAdR7XR95OaAN9Rz7TbtPalQ9guQk7zfxTHYNKhsiwTZA9z+F16nD0VeBlk7dNik3ETpT2GLAwr9sntG898JwurCDe353wHPvjZtMCdiTVp3cRCrjuCEvoFpmZNN82H0gaH/4v8mkv/QBDAkDSncYjz/FqHKAeYy3cMcjY6RyVweh": "nlnetlabs.nl.\t3175\tIN\tDNSKEY\t256 3 8 AwEAAdR7XR95OaAN9Rz7TbtPalQ9guQk7zfxTHYNKhsiwTZA9z+F16nD0VeBlk7dNik3ETpT2GLAwr9sntG898JwurCDe353wHPvjZtMCdiTVp3cRCrjuCEvoFpmZNN82H0gaH/4v8mkv/QBDAkDSncYjz/FqHKAeYy3cMcjY6RyVweh",
|
||||||
"dnsex.nl. 86400 IN SOA elektron.atoom.net. miekg.atoom.net. 1299256910 14400 3600 604800 86400": "dnsex.nl.\t86400\tIN\tSOA\telektron.atoom.net. miekg.atoom.net. 1299256910 14400 3600 604800 86400",
|
"dnsex.nl. 86400 IN SOA elektron.atoom.net. miekg.atoom.net. 1299256910 14400 3600 604800 86400": "dnsex.nl.\t86400\tIN\tSOA\telektron.atoom.net. miekg.atoom.net. 1299256910 14400 3600 604800 86400",
|
||||||
"dnsex.nl. 86400 IN RRSIG SOA 8 2 86400 20110403154150 20110304154150 23334 dnsex.nl. QN6hwJQLEBqRVKmO2LgkuRSx9bkKIZxXlTVtHg5SaiN+8RCTckGtUXkQ vmZiBt3RdIWAjaabQYpEZHgvyjfy4Wwu/9RPDYnLt/qoyr4QKAdujchc m+fMDSbbcC7AN08i5D/dUWfNOHXjRJLY7t7AYB9DBt32LazIb0EU9QiW 5Cg=": "dnsex.nl.\t86400\tIN\tRRSIG\tSOA 8 2 86400 20110403154150 20110304154150 23334 dnsex.nl. QN6hwJQLEBqRVKmO2LgkuRSx9bkKIZxXlTVtHg5SaiN+8RCTckGtUXkQvmZiBt3RdIWAjaabQYpEZHgvyjfy4Wwu/9RPDYnLt/qoyr4QKAdujchcm+fMDSbbcC7AN08i5D/dUWfNOHXjRJLY7t7AYB9DBt32LazIb0EU9QiW5Cg=",
|
"dnsex.nl. 86400 IN RRSIG SOA 8 2 86400 20110403154150 20110304154150 23334 dnsex.nl. QN6hwJQLEBqRVKmO2LgkuRSx9bkKIZxXlTVtHg5SaiN+8RCTckGtUXkQ vmZiBt3RdIWAjaabQYpEZHgvyjfy4Wwu/9RPDYnLt/qoyr4QKAdujchc m+fMDSbbcC7AN08i5D/dUWfNOHXjRJLY7t7AYB9DBt32LazIb0EU9QiW 5Cg=": "dnsex.nl.\t86400\tIN\tRRSIG\tSOA 8 2 86400 20110403154150 20110304154150 23334 dnsex.nl. QN6hwJQLEBqRVKmO2LgkuRSx9bkKIZxXlTVtHg5SaiN+8RCTckGtUXkQvmZiBt3RdIWAjaabQYpEZHgvyjfy4Wwu/9RPDYnLt/qoyr4QKAdujchcm+fMDSbbcC7AN08i5D/dUWfNOHXjRJLY7t7AYB9DBt32LazIb0EU9QiW5Cg=",
|
||||||
}
|
}
|
||||||
p := NewParser(strings.NewReader(tests))
|
for i, o := range tests {
|
||||||
p.Run()
|
rr, _ := NewRR(i)
|
||||||
for r := range p.RR {
|
if rr.String() != o {
|
||||||
if r == nil {
|
t.Logf("\"%s\" should be equal to\n\"%s\"\n", i, o)
|
||||||
t.Log("Empty RR")
|
t.Fail()
|
||||||
t.Fail()
|
}
|
||||||
} else {
|
t.Logf("%s\n", rr.String())
|
||||||
if r.(RR).String() != result {
|
|
||||||
t.Logf("\"%s\" should be equal to\n\"%s\"\n", r, result)
|
|
||||||
t.Fail()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestParseFailure(t *testing.T) {
|
func TestParseFailure(t *testing.T) {
|
||||||
tests := []string{"miek.nl. IN A 327.0.0.1",
|
tests := []string{"miek.nl. IN A 327.0.0.1",
|
||||||
"miek.nl. IN AAAA ::x",
|
"miek.nl. IN AAAA ::x",
|
||||||
"miek.nl. IN MX a0 miek.nl.",
|
"miek.nl. IN MX a0 miek.nl.",
|
||||||
}
|
"miek.nl aap IN MX mx.miek.nl.",
|
||||||
// Tests that make me crash
|
"miek.nl. IN CNAME ",
|
||||||
// "miek.nl aap IN MX mx.miek.nl.",
|
"miek.nl. PA MX 10 miek.nl.",
|
||||||
// "miek.nl. IN CNAME ",
|
}
|
||||||
// "miek.nl. PA MX 10 miek.nl.",
|
|
||||||
|
|
||||||
for _, t1 := range tests {
|
for _, s := range tests {
|
||||||
_, err := NewRRString(t1)
|
rr, err := NewRR(s)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Log("Should have triggered an error")
|
t.Log("Should have triggered an error")
|
||||||
t.Fail()
|
t.Fail()
|
||||||
} else {
|
} else {
|
||||||
t.Logf("%s: %s\n", t1, err.String())
|
t.Logf("%s: %s\n", rr, err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkZoneParsing(b *testing.B) {
|
func BenchmarkZoneParsing(b *testing.B) {
|
||||||
file, err := os.Open("miek.nl.signed_test")
|
f, err := os.Open("miek.nl.signed_test")
|
||||||
defer file.Close()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
p := NewParser(bufio.NewReader(file))
|
defer f.Close()
|
||||||
p.Zone()
|
cr := make(chan RR)
|
||||||
|
ParseZone(f, cr)
|
||||||
|
select {
|
||||||
|
case <-cr:
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestZoneParsing(t *testing.T) {
|
func TestZoneParsing(t *testing.T) {
|
||||||
file, err := os.Open("miek.nl.signed_test")
|
f, err := os.Open("miek.nl.signed_test")
|
||||||
defer file.Close()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
p := NewParser(bufio.NewReader(file))
|
defer f.Close()
|
||||||
start := time.Nanoseconds()
|
cr := make(chan RR)
|
||||||
z, err := p.Zone()
|
start := time.Now().Nanosecond()
|
||||||
if err != nil {
|
ParseZone(f, cr)
|
||||||
t.Logf("error %v\n", err.String())
|
var i int
|
||||||
t.Fail()
|
select {
|
||||||
|
case <-cr:
|
||||||
|
i++
|
||||||
}
|
}
|
||||||
delta := time.Nanoseconds() - start
|
delta := time.Now().Nanosecond() - start
|
||||||
if z != nil {
|
t.Logf("%d RRs parsed in %.2f s (%.2f RR/s)", i, float32(delta)/1e9, float32(i)/(float32(delta)/1e9))
|
||||||
t.Logf("%s", z.Nxt)
|
|
||||||
t.Logf("%d RRs parsed in %.2f s (%.2f RR/s)", z.Len(), float32(delta)/1e9, float32(z.Len())/(float32(delta)/1e9))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
8
types.go
8
types.go
|
@ -146,14 +146,6 @@ func (q *Question) String() string {
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewRR returns a new RR with the hdr.Rrtype also set.
|
|
||||||
// If the type i is not known, nil is returned.
|
|
||||||
func NewRR(i uint16) RR {
|
|
||||||
r := rr_mk[i]()
|
|
||||||
r.Header().Rrtype = i
|
|
||||||
return r
|
|
||||||
}
|
|
||||||
|
|
||||||
type RR_ANY struct {
|
type RR_ANY struct {
|
||||||
Hdr RR_Header
|
Hdr RR_Header
|
||||||
// Does not have any rdata
|
// Does not have any rdata
|
||||||
|
|
14
zscan.go
14
zscan.go
|
@ -61,22 +61,16 @@ type Lex struct {
|
||||||
column int // column in the fil
|
column int // column in the fil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseString parses a string and returns the RR contained in there. If the string
|
// NewRR parses the string s and returns the RR contained in there. If the string
|
||||||
// contains more than one RR, only the first is returned.
|
// contains more than one RR, only the first is returned. If an error is detected
|
||||||
func NewRRString(s string) (RR, error) {
|
// an error is returned. [TODO]
|
||||||
|
func NewRR(s string) (RR, error) {
|
||||||
cr := make(chan RR)
|
cr := make(chan RR)
|
||||||
go ParseZone(strings.NewReader(s), cr)
|
go ParseZone(strings.NewReader(s), cr)
|
||||||
r := <-cr // There are no error send as of yet
|
r := <-cr // There are no error send as of yet
|
||||||
return r, nil // Todo: errors
|
return r, nil // Todo: errors
|
||||||
}
|
}
|
||||||
|
|
||||||
func newRRReader(q io.Reader) (RR, error) {
|
|
||||||
cr := make(chan RR)
|
|
||||||
go ParseZone(q, cr)
|
|
||||||
r := <-cr
|
|
||||||
return r, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// ParseZone reads a RFC 1035 zone from r. It returns each parsed RR on the
|
// ParseZone reads a RFC 1035 zone from r. It returns each parsed RR on the
|
||||||
// channel cr. The channel cr is closed by ParseZone when the end of r is reached.
|
// channel cr. The channel cr is closed by ParseZone when the end of r is reached.
|
||||||
func ParseZone(r io.Reader, cr chan RR) {
|
func ParseZone(r io.Reader, cr chan RR) {
|
||||||
|
|
Loading…
Reference in New Issue