talos

Форк
0
/
error_suppress_test.go 
67 строк · 2.2 Кб
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/.
4

5
package logging_test
6

7
import (
8
	"testing"
9

10
	"github.com/stretchr/testify/assert"
11
	"go.uber.org/zap/zapcore"
12
	"go.uber.org/zap/zaptest/observer"
13

14
	"github.com/siderolabs/talos/pkg/logging"
15
)
16

17
func assertLogged(t *testing.T, core zapcore.Core, logs *observer.ObservedLogs, entries []zapcore.Entry, expectedCount int) {
18
	t.Helper()
19

20
	for _, entry := range entries {
21
		if ce := core.Check(entry, nil); ce != nil {
22
			ce.Write()
23
		}
24
	}
25

26
	assert.Len(t, logs.TakeAll(), expectedCount)
27
}
28

29
func TestErrorSuppressor(t *testing.T) {
30
	t.Parallel()
31

32
	core, logs := observer.New(zapcore.InfoLevel)
33

34
	const threshold = 2
35

36
	core = logging.NewControllerErrorSuppressor(core, threshold)
37

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
43
	}, 2)
44

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

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"},
53
	}, 1)
54

55
	assertLogged(t, controllerCore2, logs, []zapcore.Entry{
56
		{Level: zapcore.ErrorLevel, Message: "controller failed"}, // suppressed
57
		{Level: zapcore.ErrorLevel, Message: "controller failed"}, // suppressed
58
	}, 0)
59

60
	assertLogged(t, controllerCore1, logs, []zapcore.Entry{
61
		{Level: zapcore.ErrorLevel, Message: "controller failed"}, // not suppressed, over threshold
62
	}, 1)
63

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
66
	}, 1)
67
}
68

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.