hscontrol/types: silence zerolog by default in tests
Tests were dumping megabytes of zerolog output on failure; silence at init and let individual tests opt in via SetGlobalLevel when they need log-driven assertions. Updates #3157
This commit is contained in:
parent
affaa1a31d
commit
1059c678c4
7 changed files with 66 additions and 156 deletions
48
hscontrol/types/testlog.go
Normal file
48
hscontrol/types/testlog.go
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
package types
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/rs/zerolog"
|
||||
)
|
||||
|
||||
// EnvTestLogLevel overrides the default test log level. Accepts any zerolog
|
||||
// level string: trace, debug, info, warn, error, fatal, panic, disabled.
|
||||
const EnvTestLogLevel = "HEADSCALE_TEST_LOG_LEVEL"
|
||||
|
||||
// init quiets zerolog when this package is loaded inside a test binary.
|
||||
//
|
||||
// hscontrol/types is transitively imported by every test in the repo that
|
||||
// emits zerolog output, so this init() runs once per test binary and is
|
||||
// the only place that needs to know about test logging configuration.
|
||||
//
|
||||
// Default: ErrorLevel (silent in green-path runs, real errors still surface).
|
||||
// Override: HEADSCALE_TEST_LOG_LEVEL=debug (or trace, info, warn, disabled).
|
||||
//
|
||||
// Production binaries are unaffected because testing.Testing() returns false
|
||||
// outside of test execution. The same testing.Testing() pattern is already
|
||||
// used in hscontrol/db/users.go and hscontrol/db/node.go, so importing the
|
||||
// testing package here is consistent with existing project conventions.
|
||||
//
|
||||
// Pitfalls:
|
||||
// - log.Fatal still calls os.Exit and log.Panic still panics regardless of
|
||||
// level — only the rendered message is suppressed.
|
||||
// - Local buffer loggers (zerolog.New(&buf)) are also gated by the global
|
||||
// level. Tests that assert on log output (currently only
|
||||
// hscontrol/util/zlog) re-enable trace level via their own init_test.go.
|
||||
func init() {
|
||||
if !testing.Testing() {
|
||||
return
|
||||
}
|
||||
|
||||
if raw := os.Getenv(EnvTestLogLevel); raw != "" {
|
||||
lvl, err := zerolog.ParseLevel(raw)
|
||||
if err == nil {
|
||||
zerolog.SetGlobalLevel(lvl)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
zerolog.SetGlobalLevel(zerolog.ErrorLevel)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue