ContainerImage.Pinniped/internal/plog/level_test.go

104 lines
1.9 KiB
Go

// Copyright 2020 the Pinniped contributors. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package plog
import (
"strconv"
"testing"
"github.com/stretchr/testify/require"
"k8s.io/component-base/logs"
"k8s.io/klog/v2"
)
func TestValidateAndSetLogLevelGlobally(t *testing.T) {
originalLogLevel := getKlogLevel(t)
tests := []struct {
name string
level LogLevel
wantLevel klog.Level
wantErr string
}{
{
name: "unset",
wantLevel: 0,
},
{
name: "warning",
level: LevelWarning,
wantLevel: 0,
},
{
name: "info",
level: LevelInfo,
wantLevel: 2,
},
{
name: "debug",
level: LevelDebug,
wantLevel: 4,
},
{
name: "trace",
level: LevelTrace,
wantLevel: 6,
},
{
name: "all",
level: LevelAll,
wantLevel: 108,
},
{
name: "invalid level",
level: "panda",
wantLevel: originalLogLevel,
wantErr: errInvalidLogLevel.Error(),
},
}
for _, tt := range tests {
tt := tt // capture range variable
t.Run(tt.name, func(t *testing.T) {
defer func() {
undoGlobalLogLevelChanges(t, originalLogLevel)
}()
err := ValidateAndSetLogLevelGlobally(tt.level)
require.Equal(t, tt.wantErr, errString(err))
require.Equal(t, tt.wantLevel, getKlogLevel(t))
})
}
require.Equal(t, originalLogLevel, getKlogLevel(t))
}
func getKlogLevel(t *testing.T) klog.Level {
t.Helper()
// hack around klog not exposing a Get method
for i := klog.Level(0); i < 256; i++ {
if klog.V(i).Enabled() {
continue
}
return i - 1
}
t.Fatal("unknown log level")
return 0
}
func errString(err error) string {
if err == nil {
return ""
}
return err.Error()
}
func undoGlobalLogLevelChanges(t *testing.T, originalLogLevel klog.Level) {
t.Helper()
_, err := logs.GlogSetter(strconv.Itoa(int(originalLogLevel)))
require.NoError(t, err)
}