request: add match function (#1615)

This commit is contained in:
Miek Gieben
2018-03-15 08:42:49 +00:00
committed by GitHub
parent 3e6489ef67
commit b813706baf
2 changed files with 38 additions and 0 deletions

View File

@@ -361,6 +361,24 @@ func (r *Request) Clear() {
r.name = "" r.name = ""
} }
// Match checks if the reply matches the qname and qtype from the request, it returns
// false when they don't match.
func (r *Request) Match(reply *dns.Msg) bool {
if len(reply.Question) != 1 {
return false
}
if strings.ToLower(reply.Question[0].Name) != r.Name() {
return false
}
if reply.Question[0].Qtype != r.QType() {
return false
}
return true
}
const ( const (
// TODO(miek): make this less awkward. // TODO(miek): make this less awkward.
doTrue = 1 doTrue = 1

View File

@@ -109,6 +109,26 @@ func TestRequestScrubExtra(t *testing.T) {
} }
} }
func TestRequestMatch(t *testing.T) {
st := testRequest()
reply := new(dns.Msg)
reply.SetQuestion("example.com.", dns.TypeMX)
if b := st.Match(reply); b {
t.Errorf("failed to match %s %d, got %t, expected %t", "example.com.", dns.TypeMX, b, false)
}
reply.SetQuestion("example.com.", dns.TypeA)
if b := st.Match(reply); !b {
t.Errorf("failed to match %s %d, got %t, expected %t", "example.com.", dns.TypeA, b, true)
}
reply.SetQuestion("example.org.", dns.TypeA)
if b := st.Match(reply); b {
t.Errorf("failed to match %s %d, got %t, expected %t", "example.org.", dns.TypeA, b, false)
}
}
func BenchmarkRequestDo(b *testing.B) { func BenchmarkRequestDo(b *testing.B) {
st := testRequest() st := testRequest()