coredns/request/request_test.go
Miek Gieben 5eccfa2d1e core: harden request.Request (#1009)
Check for a nil message and if we have a question section. Request is
usually called with an external Msg that already saw validation checks,
but we may also call it from message we create of our own, that may or
may not adhire to this. Just be more robust in this case.

This PR reverts a previous commit that was applied to master.
2017-08-31 16:24:11 +02:00

84 lines
1.4 KiB
Go

package request
import (
"testing"
"github.com/coredns/coredns/middleware/test"
"github.com/miekg/dns"
)
func TestRequestDo(t *testing.T) {
st := testRequest()
st.Do()
if st.do == 0 {
t.Fatalf("Expected st.do to be set")
}
}
func TestRequestRemote(t *testing.T) {
st := testRequest()
if st.IP() != "10.240.0.1" {
t.Fatalf("Wrong IP from request")
}
p := st.Port()
if p == "" {
t.Fatalf("Failed to get Port from request")
}
if p != "40212" {
t.Fatalf("Wrong port from request")
}
}
func TestRequestMalformed(t *testing.T) {
m := new(dns.Msg)
st := Request{Req: m}
if x := st.QType(); x != 0 {
t.Errorf("Expected 0 Qtype, got %d", x)
}
if x := st.QClass(); x != 0 {
t.Errorf("Expected 0 QClass, got %d", x)
}
if x := st.QName(); x != "." {
t.Errorf("Expected . Qname, got %s", x)
}
if x := st.Name(); x != "." {
t.Errorf("Expected . Name, got %s", x)
}
if x := st.Type(); x != "" {
t.Errorf("Expected empty Type, got %s", x)
}
if x := st.Class(); x != "" {
t.Errorf("Expected empty Class, got %s", x)
}
}
func BenchmarkRequestDo(b *testing.B) {
st := testRequest()
for i := 0; i < b.N; i++ {
st.Do()
}
}
func BenchmarkRequestSize(b *testing.B) {
st := testRequest()
for i := 0; i < b.N; i++ {
st.Size()
}
}
func testRequest() Request {
m := new(dns.Msg)
m.SetQuestion("example.com.", dns.TypeA)
m.SetEdns0(4097, true)
return Request{W: &test.ResponseWriter{}, Req: m}
}