ktesting: support capturing log output

This is a feature of the underlying k8s.io/klog/v2/ktesting which is
useful also when using the Kubernetes ktesting.
This commit is contained in:
Patrick Ohly 2024-06-25 17:10:13 +02:00
parent 8cf93c8d83
commit fc55fecd45
3 changed files with 14 additions and 1 deletions

View File

@ -28,3 +28,13 @@ func PerTestOutput(enabled bool) InitOption {
c.PerTestOutput = enabled
}
}
// BufferLogs controls whether log entries are captured in memory in addition
// to being printed. Off by default. Unit tests that want to verify that
// log entries are emitted as expected can turn this on and then retrieve
// the captured log through the Underlier LogSink interface.
func BufferLogs(enabled bool) InitOption {
return func(c *internal.InitConfig) {
c.BufferLogs = enabled
}
}

View File

@ -18,4 +18,5 @@ package internal
type InitConfig struct {
PerTestOutput bool
BufferLogs bool
}

View File

@ -36,7 +36,8 @@ import (
)
// Underlier is the additional interface implemented by the per-test LogSink
// behind [TContext.Logger].
// behind [TContext.Logger]. Together with [initoption.BufferLogs] it can be
// used to capture log output in memory to check it in tests.
type Underlier = ktesting.Underlier
// CleanupGracePeriod is the time that a [TContext] gets canceled before the
@ -245,6 +246,7 @@ func Init(tb TB, opts ...InitOption) TContext {
}),
ktesting.VerbosityFlagName("v"),
ktesting.VModuleFlagName("vmodule"),
ktesting.BufferLogs(c.BufferLogs),
)
// Copy klog settings instead of making the ktesting logger