Signed-off-by: Krzysztof Narkiewicz <knarkiewicz@bloomberg.net> Signed-off-by: Krzysztof Narkiewicz <knarkiewicz@bloomberg.net> Co-authored-by: Krzysztof Narkiewicz <knarkiewicz@bloomberg.net>
102 lines
2.3 KiB
Go
102 lines
2.3 KiB
Go
package bufsize
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/coredns/coredns/plugin/test"
|
|
"github.com/coredns/coredns/plugin/whoami"
|
|
|
|
"github.com/miekg/dns"
|
|
)
|
|
|
|
func TestBufsize(t *testing.T) {
|
|
const maxBufSize = 1024
|
|
|
|
setUpWithRequestBufsz := func(bufferSize uint16) (Bufsize, *dns.Msg) {
|
|
p := Bufsize{
|
|
Size: maxBufSize,
|
|
Next: whoami.Whoami{},
|
|
}
|
|
r := new(dns.Msg)
|
|
r.SetQuestion(dns.Fqdn("."), dns.TypeA)
|
|
r.Question[0].Qclass = dns.ClassINET
|
|
if bufferSize > 0 {
|
|
r.SetEdns0(bufferSize, false)
|
|
}
|
|
return p, r
|
|
}
|
|
|
|
t.Run("Limit response buffer size", func(t *testing.T) {
|
|
// GIVEN
|
|
// plugin initialized with maximum buffer size
|
|
// request has larger buffer size than allowed
|
|
p, r := setUpWithRequestBufsz(maxBufSize + 128)
|
|
|
|
// WHEN
|
|
// request is processed
|
|
_, err := p.ServeDNS(context.Background(), &test.ResponseWriter{}, r)
|
|
|
|
// THEN
|
|
// no error
|
|
// OPT RR present
|
|
// request buffer size is limited
|
|
if err != nil {
|
|
t.Errorf("unexpected error %s", err)
|
|
}
|
|
option := r.IsEdns0()
|
|
if option == nil {
|
|
t.Errorf("OPT RR not present")
|
|
}
|
|
if option.UDPSize() != maxBufSize {
|
|
t.Errorf("buffer size not limited")
|
|
}
|
|
})
|
|
|
|
t.Run("Do not increase response buffer size", func(t *testing.T) {
|
|
// GIVEN
|
|
// plugin initialized with maximum buffer size
|
|
// request has smaller buffer size than allowed
|
|
const smallerBufferSize = maxBufSize - 128
|
|
p, r := setUpWithRequestBufsz(smallerBufferSize)
|
|
|
|
// WHEN
|
|
// request is processed
|
|
_, err := p.ServeDNS(context.Background(), &test.ResponseWriter{}, r)
|
|
|
|
// THEN
|
|
// no error
|
|
// request buffer size is not expanded
|
|
if err != nil {
|
|
t.Errorf("unexpected error %s", err)
|
|
}
|
|
option := r.IsEdns0()
|
|
if option == nil {
|
|
t.Errorf("OPT RR not present")
|
|
}
|
|
if option.UDPSize() != smallerBufferSize {
|
|
t.Errorf("buffer size should not be increased")
|
|
}
|
|
})
|
|
|
|
t.Run("Buffer size should not be set", func(t *testing.T) {
|
|
// GIVEN
|
|
// plugin initialized with maximum buffer size
|
|
// request has no EDNS0 option set
|
|
p, r := setUpWithRequestBufsz(0)
|
|
|
|
// WHEN
|
|
// request is processed
|
|
_, err := p.ServeDNS(context.Background(), &test.ResponseWriter{}, r)
|
|
|
|
// THEN
|
|
// no error
|
|
// OPT RR is not appended
|
|
if err != nil {
|
|
t.Errorf("unexpected error %s", err)
|
|
}
|
|
if r.IsEdns0() != nil {
|
|
t.Errorf("EDNS0 enabled for incoming request")
|
|
}
|
|
})
|
|
}
|