Merge pull request #128290 from zhifei92/fix-flake-test

Add a thread-safe logBuffer for the watchdog unit test.
This commit is contained in:
Kubernetes Prow Robot 2024-10-24 01:02:51 +01:00 committed by GitHub
commit 5b61f60846
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -25,6 +25,7 @@ import (
"flag"
"net/http"
"strings"
"sync"
"testing"
"time"
@ -139,14 +140,7 @@ func TestHealthCheckerStart(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// Capture logs
var logBuffer bytes.Buffer
flags := &flag.FlagSet{}
klog.InitFlags(flags)
if err := flags.Set("v", "5"); err != nil {
t.Fatal(err)
}
klog.LogToStderr(false)
klog.SetOutput(&logBuffer)
logBuffer := setupLogging(t)
// Mock SdWatchdogEnabled to return a valid value
mockClient := &mockWatchdogClient{
@ -178,3 +172,38 @@ func TestHealthCheckerStart(t *testing.T) {
})
}
}
// threadSafeBuffer is a thread-safe wrapper around bytes.Buffer.
type threadSafeBuffer struct {
buffer bytes.Buffer
mu sync.Mutex
}
func (b *threadSafeBuffer) Write(p []byte) (n int, err error) {
b.mu.Lock()
defer b.mu.Unlock()
return b.buffer.Write(p)
}
func (b *threadSafeBuffer) String() string {
b.mu.Lock()
defer b.mu.Unlock()
return b.buffer.String()
}
// setupLogging sets up logging to capture output using a thread-safe buffer.
func setupLogging(t *testing.T) *threadSafeBuffer {
flags := &flag.FlagSet{}
klog.InitFlags(flags)
if err := flags.Set("v", "5"); err != nil {
t.Fatal(err)
}
klog.LogToStderr(false)
logBuffer := &threadSafeBuffer{}
// Set the output to the thread-safe buffer
klog.SetOutput(logBuffer)
return logBuffer
}