e2e log: fix full stacktrace with Ginkgo 1.10.0

Ginkgo 1.10.0 includes the relevant fix for dumping the full stack
(https://github.com/onsi/ginkgo/pull/590), so when using that release
we can simplify the logging unit test.

By changing the skipping, we can avoid the rather volatile util.go
entries. However, that gomega is part of the stack trace still needs
to be fixed in Gingko.
This commit is contained in:
Patrick Ohly
2019-08-27 14:22:46 +02:00
parent 5219ad7be2
commit 02ce619078
52 changed files with 176 additions and 114 deletions

View File

@@ -17,7 +17,7 @@ limitations under the License.
package log_test
import (
// "errors"
"errors"
"regexp"
"sort"
"strings"
@@ -28,7 +28,7 @@ import (
"github.com/onsi/ginkgo/reporters"
"github.com/onsi/gomega"
// "k8s.io/kubernetes/test/e2e/framework"
"k8s.io/kubernetes/test/e2e/framework"
"k8s.io/kubernetes/test/e2e/framework/log"
)
@@ -44,10 +44,10 @@ var _ = ginkgo.Describe("log", func() {
ginkgo.It("asserts", func() {
gomega.Expect(false).To(gomega.Equal(true), "false is never true")
})
// ginkgo.It("error", func() { // TODO(pohly): enable again, see comment below.
// err := errors.New("an error with a long, useless description")
// framework.ExpectNoError(err, "hard-coded error")
// })
ginkgo.It("error", func() {
err := errors.New("an error with a long, useless description")
framework.ExpectNoErrorWithOffset(1, err, "hard-coded error") // ExpectNoError includes util.go in the full stack trace with a varying line number, which we don't want as it makes this test sensitive to unrelated changes.
})
ginkgo.AfterEach(func() {
log.Logf("after")
gomega.Expect(true).To(gomega.Equal(false), "true is never false either")
@@ -76,25 +76,21 @@ func TestFailureOutput(t *testing.T) {
name: "[Top Level] log asserts",
output: "INFO: before\nFAIL: false is never true\nExpected\n <bool>: false\nto equal\n <bool>: true\nINFO: after\nFAIL: true is never false either\nExpected\n <bool>: true\nto equal\n <bool>: false\n",
failure: "false is never true\nExpected\n <bool>: false\nto equal\n <bool>: true",
// TODO: should start with k8s.io/kubernetes/test/e2e/framework/log_test.glob..func1.3()
stack: "\tassertion.go:75\nk8s.io/kubernetes/vendor/github.com/onsi/gomega/internal/assertion.(*Assertion).To()\n\tassertion.go:38\nk8s.io/kubernetes/test/e2e/framework/log_test.glob..func1.3()\n\tlogger_test.go:45\nk8s.io/kubernetes/vendor/github.com/onsi/ginkgo/internal/leafnodes.(*runner).runSync()\n\tlogger_test.go:65\n",
stack: "k8s.io/kubernetes/vendor/github.com/onsi/gomega/internal/assertion.(*Assertion).To()\n\tassertion.go:38\nk8s.io/kubernetes/test/e2e/framework/log_test.glob..func1.3()\n\tlogger_test.go:45\nk8s.io/kubernetes/test/e2e/framework/log_test.TestFailureOutput()\n\tlogger_test.go:65",
},
testResult{
name: "[Top Level] log error",
output: "INFO: before\nFAIL: hard-coded error\nUnexpected error:\n <*errors.errorString>: {\n s: \"an error with a long, useless description\",\n }\n an error with a long, useless description\noccurred\nINFO: after\nFAIL: true is never false either\nExpected\n <bool>: true\nto equal\n <bool>: false\n",
failure: "hard-coded error\nUnexpected error:\n <*errors.errorString>: {\n s: \"an error with a long, useless description\",\n }\n an error with a long, useless description\noccurred",
// TODO: this skips framework/util.go only because we ExpectNoErrorWithOffset. Should ExpectNoError skip itself?
stack: "k8s.io/kubernetes/test/e2e/framework/log_test.glob..func1.4()\n\tlogger_test.go:49\nk8s.io/kubernetes/test/e2e/framework/log_test.TestFailureOutput()\n\tlogger_test.go:65",
},
// That util.go appears in the output is a bug (https://github.com/kubernetes/kubernetes/issues/82013).
// Because it currently appears, this test case is brittle and breaks when someome makes unrelated
// changes in util.go which change the line number. Therefore it is commented out.
// testResult{
// name: "[Top Level] log error",
// output: "INFO: before\nFAIL: hard-coded error\nUnexpected error:\n <*errors.errorString>: {\n s: \"an error with a long, useless description\",\n }\n an error with a long, useless description\noccurred\nINFO: after\nFAIL: true is never false either\nExpected\n <bool>: true\nto equal\n <bool>: false\n",
// failure: "hard-coded error\nUnexpected error:\n <*errors.errorString>: {\n s: \"an error with a long, useless description\",\n }\n an error with a long, useless description\noccurred",
// // TODO: should start with k8s.io/kubernetes/test/e2e/framework/log_test.glob..func1.4()
// stack: "\tutil.go:1362\nk8s.io/kubernetes/test/e2e/framework.ExpectNoError()\n\tutil.go:1356\nk8s.io/kubernetes/test/e2e/framework/log_test.glob..func1.4()\n\tlogger_test.go:49\nk8s.io/kubernetes/vendor/github.com/onsi/ginkgo/internal/leafnodes.(*runner).runSync()\n\tlogger_test.go:65\n",
// },
testResult{
name: "[Top Level] log fails",
output: "INFO: before\nFAIL: I'm failing.\nINFO: after\nFAIL: true is never false either\nExpected\n <bool>: true\nto equal\n <bool>: false\n",
failure: "I'm failing.",
// TODO: should start with k8s.io/kubernetes/test/e2e/framework/log_test.glob..func1.2.1(...)
stack: "\tlogger.go:52\nk8s.io/kubernetes/test/e2e/framework/log.Failf()\n\tlogger.go:44\nk8s.io/kubernetes/test/e2e/framework/log_test.glob..func1.2.1(...)\n\tlogger_test.go:41\nk8s.io/kubernetes/test/e2e/framework/log_test.glob..func1.2()\n\tlogger_test.go:42\nk8s.io/kubernetes/vendor/github.com/onsi/ginkgo/internal/leafnodes.(*runner).runSync()\n\tlogger_test.go:65\n",
// TODO: should framework/log.Failf be skipped?
stack: "k8s.io/kubernetes/test/e2e/framework/log.Failf()\n\tlogger.go:44\nk8s.io/kubernetes/test/e2e/framework/log_test.glob..func1.2.1(...)\n\tlogger_test.go:41\nk8s.io/kubernetes/test/e2e/framework/log_test.glob..func1.2()\n\tlogger_test.go:42\nk8s.io/kubernetes/test/e2e/framework/log_test.TestFailureOutput()\n\tlogger_test.go:65",
},
}
// Compare individual fields. Comparing the slices leads to unreadable error output when there is any mismatch.
@@ -104,7 +100,10 @@ func TestFailureOutput(t *testing.T) {
g.Expect(a.name).To(gomega.Equal(b.name), "name in %d", i)
g.Expect(a.output).To(gomega.Equal(b.output), "output in %d", i)
g.Expect(a.failure).To(gomega.Equal(b.failure), "failure in %d", i)
g.Expect(a.stack).To(gomega.Equal(b.stack), "stack in %d", i)
// There may be additional stack entries from the "testing" package at the
// end. We ignore those in the comparison because the line number in them
// varies.
g.Expect(a.stack).To(gomega.HavePrefix(b.stack), "stack in %d: %s", i, a.stack)
}
}