148 lines
3.4 KiB
Go
148 lines
3.4 KiB
Go
package errors
|
|
|
|
import (
|
|
"bytes"
|
|
golog "log"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/coredns/caddy"
|
|
"github.com/coredns/coredns/core/dnsserver"
|
|
clog "github.com/coredns/coredns/plugin/pkg/log"
|
|
)
|
|
|
|
func TestErrorsParse(t *testing.T) {
|
|
tests := []struct {
|
|
inputErrorsRules string
|
|
shouldErr bool
|
|
optCount int
|
|
stacktrace bool
|
|
}{
|
|
{`errors`, false, 0, false},
|
|
{`errors stdout`, false, 0, false},
|
|
{`errors errors.txt`, true, 0, false},
|
|
{`errors visible`, true, 0, false},
|
|
{`errors { log visible }`, true, 0, false},
|
|
{`errors
|
|
errors `, true, 0, false},
|
|
{`errors a b`, true, 0, false},
|
|
|
|
{`errors {
|
|
consolidate
|
|
}`, true, 0, false},
|
|
{`errors {
|
|
consolidate 1m
|
|
}`, true, 0, false},
|
|
{`errors {
|
|
consolidate 1m .* extra
|
|
}`, true, 0, false},
|
|
{`errors {
|
|
consolidate abc .*
|
|
}`, true, 0, false},
|
|
{`errors {
|
|
consolidate 1 .*
|
|
}`, true, 0, false},
|
|
{`errors {
|
|
consolidate 1m ())
|
|
}`, true, 0, false},
|
|
{`errors {
|
|
stacktrace
|
|
}`, false, 0, true},
|
|
{`errors {
|
|
stacktrace
|
|
consolidate 1m ^exact$
|
|
}`, false, 1, true},
|
|
{`errors {
|
|
consolidate 1m ^exact$
|
|
}`, false, 1, false},
|
|
{`errors {
|
|
consolidate 1m error
|
|
}`, false, 1, false},
|
|
{`errors {
|
|
consolidate 1m "format error"
|
|
}`, false, 1, false},
|
|
{`errors {
|
|
consolidate 1m error1
|
|
consolidate 5s error2
|
|
}`, false, 2, false},
|
|
}
|
|
for i, test := range tests {
|
|
c := caddy.NewTestController("dns", test.inputErrorsRules)
|
|
h, err := errorsParse(c)
|
|
|
|
if err == nil && test.shouldErr {
|
|
t.Errorf("Test %d didn't error, but it should have", i)
|
|
} else if err != nil && !test.shouldErr {
|
|
t.Errorf("Test %d errored, but it shouldn't have; got '%v'", i, err)
|
|
} else if h != nil && len(h.patterns) != test.optCount {
|
|
t.Errorf("Test %d: pattern count mismatch, expected %d, got %d",
|
|
i, test.optCount, len(h.patterns))
|
|
}
|
|
if dnsserver.GetConfig(c).Stacktrace != test.stacktrace {
|
|
t.Errorf("Test %d: stacktrace, expected %t, got %t",
|
|
i, test.stacktrace, dnsserver.GetConfig(c).Stacktrace)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestProperLogCallbackIsSet(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
inputErrorsRules string
|
|
wantLogLevel string
|
|
}{
|
|
{
|
|
name: "warning is parsed properly",
|
|
inputErrorsRules: `errors {
|
|
consolidate 1m .* warning
|
|
}`,
|
|
wantLogLevel: "[WARNING]",
|
|
},
|
|
{
|
|
name: "error is parsed properly",
|
|
inputErrorsRules: `errors {
|
|
consolidate 1m .* error
|
|
}`,
|
|
wantLogLevel: "[ERROR]",
|
|
},
|
|
{
|
|
name: "info is parsed properly",
|
|
inputErrorsRules: `errors {
|
|
consolidate 1m .* info
|
|
}`,
|
|
wantLogLevel: "[INFO]",
|
|
},
|
|
{
|
|
name: "debug is parsed properly",
|
|
inputErrorsRules: `errors {
|
|
consolidate 1m .* debug
|
|
}`,
|
|
wantLogLevel: "[DEBUG]",
|
|
},
|
|
{
|
|
name: "default is error",
|
|
inputErrorsRules: `errors {
|
|
consolidate 1m .*
|
|
}`,
|
|
wantLogLevel: "[ERROR]",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
buf := bytes.Buffer{}
|
|
golog.SetOutput(&buf)
|
|
clog.D.Set()
|
|
|
|
c := caddy.NewTestController("dns", tt.inputErrorsRules)
|
|
h, _ := errorsParse(c)
|
|
|
|
l := h.patterns[0].logCallback
|
|
l("some error happened")
|
|
|
|
if log := buf.String(); !strings.Contains(log, tt.wantLogLevel) {
|
|
t.Errorf("Expected log %q, but got %q", tt.wantLogLevel, log)
|
|
}
|
|
})
|
|
}
|
|
}
|