MM-38016 Fix racy unit test (TestService_AddTopicListener) (#18207)
* remove CreateTestLogger API * add missing mockServer.Shutdown
Этот коммит содержится в:
@@ -7,40 +7,17 @@ import (
|
||||
"bytes"
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
"github.com/mattermost/logr/v2"
|
||||
"github.com/mattermost/logr/v2/formatters"
|
||||
"github.com/mattermost/logr/v2/targets"
|
||||
)
|
||||
|
||||
// CreateTestLogger creates a logger for unit tests, using the `TB.Log`
|
||||
func CreateTestLogger(tb testing.TB, writer io.Writer, levels ...Level) *Logger {
|
||||
logger, _ := NewLogger()
|
||||
|
||||
filter := logr.NewCustomFilter(levels...)
|
||||
formatter := &formatters.Plain{}
|
||||
|
||||
if tb != nil {
|
||||
testtarget := newTestingTarget(tb)
|
||||
if err := logger.log.Logr().AddTarget(testtarget, "_testTB", filter, formatter, 1000); err != nil {
|
||||
tb.Fail()
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
if writer != nil {
|
||||
target := targets.NewWriterTarget(writer)
|
||||
if err := logger.log.Logr().AddTarget(target, "_testWriter", filter, formatter, 1000); err != nil {
|
||||
tb.Fail()
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return logger
|
||||
}
|
||||
|
||||
// AddWriterTarget adds a simple io.Writer target to an existing Logger.
|
||||
// The `io.Writer` can be a buffer which is useful for testing.
|
||||
// When adding a buffer to collect logs make sure to use `mlog.Buffer` which is
|
||||
// a thread safe version of `bytes.Buffer`.
|
||||
func AddWriterTarget(logger *Logger, w io.Writer, useJSON bool, levels ...Level) error {
|
||||
filter := logr.NewCustomFilter(levels...)
|
||||
|
||||
@@ -79,45 +56,6 @@ func CreateConsoleTestLogger(useJSON bool, level Level) *Logger {
|
||||
return logger
|
||||
}
|
||||
|
||||
// testingTarget is a simple log target that writes to the testing log.
|
||||
type testingTarget struct {
|
||||
mux sync.Mutex
|
||||
tb testing.TB
|
||||
}
|
||||
|
||||
func newTestingTarget(tb testing.TB) *testingTarget {
|
||||
return &testingTarget{
|
||||
tb: tb,
|
||||
}
|
||||
}
|
||||
|
||||
// Init is called once to initialize the target.
|
||||
func (tt *testingTarget) Init() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Write outputs bytes to this file target.
|
||||
func (tt *testingTarget) Write(p []byte, rec *logr.LogRec) (int, error) {
|
||||
tt.mux.Lock()
|
||||
defer tt.mux.Unlock()
|
||||
|
||||
if tt.tb != nil {
|
||||
tt.tb.Helper()
|
||||
tt.tb.Log(strings.TrimSpace(string(p)))
|
||||
}
|
||||
return len(p), nil
|
||||
}
|
||||
|
||||
// Shutdown is called once to free/close any resources.
|
||||
// Target queue is already drained when this is called.
|
||||
func (tt *testingTarget) Shutdown() error {
|
||||
tt.mux.Lock()
|
||||
defer tt.mux.Unlock()
|
||||
|
||||
tt.tb = nil
|
||||
return nil
|
||||
}
|
||||
|
||||
// Buffer provides a thread-safe buffer useful for logging to memory in unit tests.
|
||||
type Buffer struct {
|
||||
buf bytes.Buffer
|
||||
|
||||
Ссылка в новой задаче
Block a user