@@ -19,6 +19,7 @@ import (
1919 "context"
2020 "fmt"
2121 "io"
22+ "log/slog"
2223 "sort"
2324 "strings"
2425 "testing"
@@ -253,13 +254,48 @@ func TestAllDiagnosticDataCollectorMetrics(t *testing.T) {
253254 }
254255}
255256
257+ // errorCountHandler is a custom handler that keeps tracks of the number of errors and warnings that were logged.
258+ // it discards all errors of other levels.
259+ type errorCountHandler struct {
260+ opts slog.HandlerOptions
261+ logRecords []slog.Record
262+ }
263+
264+ func newErrorCountHandler (opts * slog.HandlerOptions ) * errorCountHandler {
265+ h := & errorCountHandler {
266+ logRecords : make ([]slog.Record , 0 ),
267+ }
268+ if opts != nil {
269+ h .opts = * opts
270+ }
271+ if h .opts .Level == nil {
272+ h .opts .Level = slog .LevelWarn
273+ }
274+ return h
275+ }
276+
277+ func (h * errorCountHandler ) Handle (ctx context.Context , r slog.Record ) error {
278+ if r .Level == slog .LevelError || r .Level == slog .LevelWarn {
279+ h .logRecords = append (h .logRecords , r )
280+ }
281+ return nil
282+ }
283+
284+ func (h * errorCountHandler ) Enabled (_ context.Context , level slog.Level ) bool {
285+ return level >= slog .LevelInfo
286+ }
287+
288+ func (h * errorCountHandler ) WithAttrs (attrs []slog.Attr ) slog.Handler {
289+ return h
290+ }
291+
292+ func (h * errorCountHandler ) WithGroup (name string ) slog.Handler {
293+ return h
294+ }
295+
256296//nolint:funlen
257297func TestDiagnosticDataErrors (t * testing.T ) {
258298 t .Parallel ()
259- type log struct {
260- message string
261- level uint32
262- }
263299
264300 type testCase struct {
265301 name string
@@ -295,7 +331,8 @@ func TestDiagnosticDataErrors(t *testing.T) {
295331 require .NoError (t , err )
296332 client := tu .TestClient (ctx , port , t )
297333
298- logger := promslog .New (& promslog.Config {})
334+ errCountLogHandler := newErrorCountHandler (nil )
335+ logger := slog .New (errCountLogHandler )
299336 ti := newTopologyInfo (ctx , client , logger )
300337
301338 dbBuildInfo , err := retrieveMongoDBBuildInfo (ctx , client , logger .With ("component" , "test" ))
@@ -308,27 +345,16 @@ func TestDiagnosticDataErrors(t *testing.T) {
308345 require .NoError (t , err )
309346 _ = helpers .CollectMetrics (c )
310347
311- /*var errorLogs []log
312- for _, entry := range hook.Entries {
313- if entry.Level == logrus.ErrorLevel || entry.Level == logrus.WarnLevel {
314- errorLogs = append(errorLogs, log{
315- message: entry.Message,
316- level: uint32(entry.Level),
317- })
318- }
319- }
320-
321348 if tc .expectedMessage == "" {
322- assert.Empty(t, errorLogs )
349+ assert .Empty (t , errCountLogHandler . logRecords )
323350 } else {
324- require.NotEmpty(t, errorLogs)
325- assert.True(
326- t,
327- strings.HasPrefix(hook.LastEntry().Message, tc.expectedMessage),
328- "'%s' has no prefix: '%s'",
329- hook.LastEntry().Message,
330- tc.expectedMessage)
331- }*/
351+ require .NotEmpty (t , errCountLogHandler .logRecords )
352+ messages := make ([]string , 0 , len (errCountLogHandler .logRecords ))
353+ for _ , record := range errCountLogHandler .logRecords {
354+ messages = append (messages , record .Message )
355+ }
356+ assert .Contains (t , messages , tc .expectedMessage )
357+ }
332358 })
333359 }
334360}
0 commit comments