1
// This Source Code Form is subject to the terms of the Mozilla Public
2
// License, v. 2.0. If a copy of the MPL was not distributed with this
3
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
"github.com/stretchr/testify/assert"
11
"go.uber.org/zap/zapcore"
12
"go.uber.org/zap/zaptest/observer"
14
"github.com/siderolabs/talos/pkg/logging"
17
func assertLogged(t *testing.T, core zapcore.Core, logs *observer.ObservedLogs, entries []zapcore.Entry, expectedCount int) {
20
for _, entry := range entries {
21
if ce := core.Check(entry, nil); ce != nil {
26
assert.Len(t, logs.TakeAll(), expectedCount)
29
func TestErrorSuppressor(t *testing.T) {
32
core, logs := observer.New(zapcore.InfoLevel)
36
core = logging.NewControllerErrorSuppressor(core, threshold)
38
// warn/info messages are not affected
39
assertLogged(t, core, logs, []zapcore.Entry{
40
{Level: zapcore.InfoLevel, Message: "abc"},
41
{Level: zapcore.WarnLevel, Message: "def"},
42
{Level: zapcore.DebugLevel, Message: "message"}, // below level
45
// different controllers, suppress counters are independent
46
controllerCore1 := core.With([]zapcore.Field{{Key: "controller", String: "c1"}})
47
controllerCore2 := core.With([]zapcore.Field{{Key: "controller", String: "c2"}})
49
assertLogged(t, controllerCore1, logs, []zapcore.Entry{
50
{Level: zapcore.ErrorLevel, Message: "controller failed"}, // suppressed
51
{Level: zapcore.ErrorLevel, Message: "controller failed"}, // suppressed
52
{Level: zapcore.ErrorLevel, Message: "controller failed"},
55
assertLogged(t, controllerCore2, logs, []zapcore.Entry{
56
{Level: zapcore.ErrorLevel, Message: "controller failed"}, // suppressed
57
{Level: zapcore.ErrorLevel, Message: "controller failed"}, // suppressed
60
assertLogged(t, controllerCore1, logs, []zapcore.Entry{
61
{Level: zapcore.ErrorLevel, Message: "controller failed"}, // not suppressed, over threshold
64
assertLogged(t, controllerCore1.With([]zapcore.Field{{Key: "foo", String: "bar"}}), logs, []zapcore.Entry{
65
{Level: zapcore.ErrorLevel, Message: "controller failed"}, // .With() without 'controller' field keeps the counter value from the parent