coredns/plugin/bufsize/bufsize_test.go
Chris Narkiewicz 07159c8d87
Do not expand query UDP buffer size if already set to a smaller value (#5602)
Signed-off-by: Krzysztof Narkiewicz <knarkiewicz@bloomberg.net>

Signed-off-by: Krzysztof Narkiewicz <knarkiewicz@bloomberg.net>
Co-authored-by: Krzysztof Narkiewicz <knarkiewicz@bloomberg.net>
2022-09-07 22:53:30 +09:00

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")
}
})
}