Add some more testing

This commit is contained in:
Miek Gieben 2011-01-15 13:37:04 +01:00
parent 5ab8afe518
commit dcc2d9f81d
3 changed files with 173 additions and 0 deletions

47
keygen_test.go Normal file
View File

@ -0,0 +1,47 @@
package dns
import (
"testing"
"fmt"
)
func TestKeyGenRSA(t *testing.T) {
key := new(RR_DNSKEY)
key.Hdr.Name = "miek.nl."
key.Hdr.Rrtype = TypeDNSKEY
key.Hdr.Class = ClassINET
key.Hdr.Ttl = 3600
key.Flags = 256
key.Protocol = 3
key.Algorithm = AlgRSASHA256
length := 2048
priv, _ := key.Generate(length)
soa := new(RR_SOA)
soa.Hdr = RR_Header{"miek.nl.", TypeSOA, ClassINET, 14400, 0}
soa.Ns = "open.nlnetlabs.nl."
soa.Mbox = "miekg.atoom.net."
soa.Serial = 1293945905
soa.Refresh = 14400
soa.Retry = 3600
soa.Expire = 604800
soa.Minttl = 86400
sig := new(RR_RRSIG)
sig.Hdr = RR_Header{"miek.nl.", TypeRRSIG, ClassINET, 14400, 0}
sig.TypeCovered = TypeSOA
sig.Algorithm = AlgRSASHA256
sig.Labels = 2
sig.Expiration = 1296534305 // date -u '+%s' -d"2011-02-01 04:25:05"
sig.Inception = 1293942305 // date -u '+%s' -d"2011-01-02 04:25:05"
sig.OrigTtl = 14400
sig.KeyTag = key.KeyTag()
sig.SignerName = "miek.nl."
sig.Sign(priv, []RR{soa})
s := key.PrivateKeyString(priv)
fmt.Printf("%s\n", s)
fmt.Printf("%v\n", sig)
}

View File

@ -0,0 +1,69 @@
package responder
import (
"testing"
"dns"
"net"
"time"
)
type myserv Server
func createpkg(id uint16, tcp bool, remove net.Addr) []byte {
m := new(dns.Msg)
m.MsgHdr.Id = id
m.MsgHdr.Authoritative = true
m.MsgHdr.AuthenticatedData = false
m.MsgHdr.RecursionAvailable = true
m.MsgHdr.Response = true
m.MsgHdr.Opcode = dns.OpcodeQuery
m.MsgHdr.Rcode = dns.RcodeSuccess
m.Question = make([]dns.Question, 1)
m.Question[0] = dns.Question{"miek.nl.", dns.TypeTXT, dns.ClassINET}
m.Answer = make([]dns.RR, 1)
t := new(dns.RR_TXT)
t.Hdr = dns.RR_Header{Name: "miek.nl.", Rrtype: dns.TypeTXT, Class: dns.ClassINET, Ttl: 3600}
if tcp {
t.Txt = "Dit is iets anders TCP"
} else {
t.Txt = "Dit is iets anders UDP"
}
m.Answer[0] = t
out, _ := m.Pack()
return out
}
func (s *myserv) ResponderUDP(c *net.UDPConn, a net.Addr, in []byte) {
inmsg := new(dns.Msg)
inmsg.Unpack(in)
out := createpkg(inmsg.MsgHdr.Id, false, a)
SendUDP(out, c, a)
}
func (s *myserv) ResponderTCP(c *net.TCPConn, in []byte) {
inmsg := new(dns.Msg)
inmsg.Unpack(in)
out := createpkg(inmsg.MsgHdr.Id, true, c.RemoteAddr())
SendTCP(out, c)
}
func TestResponder(t *testing.T) {
/* udp servertje */
su := new(Server)
su.Address = "127.0.0.1"
su.Port = "8053"
var us *myserv
uch :=make(chan bool)
go su.NewResponder(us, uch)
/* tcp servertje */
st := new(Server)
st.Address = "127.0.0.1"
st.Port = "8053"
st.Tcp = true
var ts *myserv
tch :=make(chan bool)
go st.NewResponder(ts, tch)
time.Sleep(100 * 1e9)
}

57
signverify_test.go Normal file
View File

@ -0,0 +1,57 @@
package dns
import (
"testing"
"fmt"
"os"
)
func TestSignVerify(t *testing.T) {
// The record we want to sign
soa := new(RR_SOA)
soa.Hdr = RR_Header{"miek.nl.", TypeSOA, ClassINET, 14400, 0}
soa.Ns = "open.nlnetlabs.nl."
soa.Mbox = "miekg.atoom.net."
soa.Serial = 1293945905
soa.Refresh = 14400
soa.Retry = 3600
soa.Expire = 604800
soa.Minttl = 86400
// With this key
key := new(RR_DNSKEY)
key.Hdr.Rrtype = TypeDNSKEY
key.Hdr.Name = "miek.nl."
key.Hdr.Class = ClassINET
key.Hdr.Ttl = 14400
key.Flags = 256
key.Protocol = 3
key.Algorithm = AlgRSASHA256
privkey, _ := key.Generate(512)
fmt.Fprintf(os.Stderr, "Key tag: %d\n", key.KeyTag())
// Fill in the values of the Sig, before signing
sig := new(RR_RRSIG)
sig.Hdr = RR_Header{"miek.nl.", TypeRRSIG, ClassINET, 14400, 0}
sig.TypeCovered = soa.Hdr.Rrtype
sig.Labels = LabelCount(soa.Hdr.Name)
sig.OrigTtl = soa.Hdr.Ttl
sig.Expiration = 1296534305 // date -u '+%s' -d"2011-02-01 04:25:05"
sig.Inception = 1293942305 // date -u '+%s' -d"2011-01-02 04:25:05"
sig.KeyTag = key.KeyTag() // Get the keyfrom the Key
sig.SignerName = key.Hdr.Name
sig.Algorithm = AlgRSASHA256
// zal wel goed zijn
if !sig.Sign(privkey, []RR{soa}) {
t.Log("Failure to sign the SOA record")
t.Fail()
}
fmt.Fprintf(os.Stderr, "%v\n%v\n%v\n", soa, key, sig)
if !sig.Verify(key, []RR{soa}) {
t.Log("Failure to validate")
t.Fail()
} else {
println("It validates!!")
}
}