mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-21 02:41:25 +00:00
e2e: disable double printing of errors
We don't want klog to print to anything other than GinkgoWriter, but it still used os.Stderr in addition to GinkgoWriter when printing log entries with severity >= error. Changing "stderrthreshold" fixes that. The unit test for framework output handling didn't test klog behavior. Now it does: - os.Stderr is redirected, should be empty - a new test invokes klog
This commit is contained in:
parent
c80eec19dd
commit
96e9a93a6b
@ -123,6 +123,9 @@ var stackLocation = regexp.MustCompile(`(?:/|vendor/|test/|GOROOT/).*/([[:^space
|
||||
// functionArgs matches "<function name>(...)".
|
||||
var functionArgs = regexp.MustCompile(`([[:alpha:]]+)\(.*\)`)
|
||||
|
||||
// klogPrefix matches "I0822 16:10:39.343790 989127 "
|
||||
var klogPrefix = regexp.MustCompile(`(?m)^[IEF][[:digit:]]{4} [[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2}\.[[:digit:]]{6}[[:space:]]+[[:digit:]]+ `)
|
||||
|
||||
// testFailureOutput matches TestFailureOutput() and its source followed by additional stack entries:
|
||||
//
|
||||
// k8s.io/kubernetes/test/e2e/framework/pod/pod_test.TestFailureOutput(0xc000558800)
|
||||
@ -145,5 +148,6 @@ func normalizeLocation(in string) string {
|
||||
out = stackLocation.ReplaceAllString(out, "$1")
|
||||
out = functionArgs.ReplaceAllString(out, "$1()")
|
||||
out = testFailureOutput.ReplaceAllString(out, "")
|
||||
out = klogPrefix.ReplaceAllString(out, "<klog> ")
|
||||
return out
|
||||
}
|
||||
|
@ -18,10 +18,15 @@ package framework_test
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os"
|
||||
"path"
|
||||
"testing"
|
||||
|
||||
"github.com/onsi/ginkgo/v2"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kubernetes/test/e2e/framework"
|
||||
"k8s.io/kubernetes/test/e2e/framework/internal/output"
|
||||
)
|
||||
@ -31,11 +36,6 @@ import (
|
||||
// Here are some intentionally blank lines that can be removed to compensate
|
||||
// for future additional import statements.
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// This must be line #39.
|
||||
|
||||
// This is included in a stack backtrace.
|
||||
@ -69,6 +69,10 @@ var _ = ginkgo.Describe("log", func() {
|
||||
ginkgo.It("fails with helper", func() {
|
||||
failHelper("I'm failing with helper.")
|
||||
})
|
||||
ginkgo.It("redirects klog", func() {
|
||||
klog.Info("hello world")
|
||||
klog.Error(nil, "not really an error")
|
||||
})
|
||||
})
|
||||
|
||||
func TestFailureOutput(t *testing.T) {
|
||||
@ -172,7 +176,43 @@ k8s.io/kubernetes/test/e2e/framework_test.glob..func1.7()
|
||||
k8s.io/kubernetes/test/e2e/framework_test.glob..func1.7()
|
||||
log_test.go:70`,
|
||||
},
|
||||
output.TestResult{
|
||||
Name: "log redirects klog",
|
||||
Output: `INFO: before
|
||||
<klog> log_test.go:73] hello world
|
||||
<klog> log_test.go:74] <nil>not really an error` + commonOutput,
|
||||
Failure: `true is never false either
|
||||
Expected
|
||||
<bool>: true
|
||||
to equal
|
||||
<bool>: false`,
|
||||
Stack: `k8s.io/kubernetes/test/e2e/framework_test.glob..func1.2()
|
||||
log_test.go:52`,
|
||||
},
|
||||
}
|
||||
|
||||
// Simulate the test setup as in a normal e2e test which uses the
|
||||
// framework, but remember to restore klog settings when we are done.
|
||||
state := klog.CaptureState()
|
||||
defer state.Restore()
|
||||
var testContext framework.TestContextType
|
||||
framework.AfterReadingAllFlags(&testContext)
|
||||
|
||||
oldStderr := os.Stderr
|
||||
tmp := t.TempDir()
|
||||
filename := path.Join(tmp, "stderr.log")
|
||||
f, err := os.Create(filename)
|
||||
require.NoError(t, err, "create temporary file")
|
||||
os.Stderr = f
|
||||
defer func() {
|
||||
os.Stderr = oldStderr
|
||||
|
||||
err := f.Close()
|
||||
require.NoError(t, err, "close temporary file")
|
||||
actual, err := os.ReadFile(filename)
|
||||
require.NoError(t, err, "read temporary file")
|
||||
assert.Empty(t, string(actual), "no output on stderr")
|
||||
}()
|
||||
|
||||
output.TestGinkgoOutput(t, expected)
|
||||
}
|
||||
|
@ -491,6 +491,7 @@ func AfterReadingAllFlags(t *TestContextType) {
|
||||
fs.Set("logtostderr", "false")
|
||||
fs.Set("alsologtostderr", "false")
|
||||
fs.Set("one_output", "true")
|
||||
fs.Set("stderrthreshold", "10" /* higher than any of the severities -> none pass the threshold */)
|
||||
klog.SetOutput(ginkgo.GinkgoWriter)
|
||||
|
||||
// Only set a default host if one won't be supplied via kubeconfig
|
||||
|
Loading…
Reference in New Issue
Block a user