mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 14:07:14 +00:00
Move skip method from e2e fw ginkgowrapper to e2e skipper fw
This commit is contained in:
parent
6541758fd4
commit
5782d616f2
@ -416,7 +416,7 @@ func finalizeUpgradeTest(start time.Time, tc *junit.TestCase) {
|
|||||||
Value: fmt.Sprintf("%s\n\n%s", r.Message, r.FullStackTrace),
|
Value: fmt.Sprintf("%s\n\n%s", r.Message, r.FullStackTrace),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
case ginkgowrapper.SkipPanic:
|
case e2eskipper.SkipPanic:
|
||||||
tc.Skipped = fmt.Sprintf("%s:%d %q", r.Filename, r.Line, r.Message)
|
tc.Skipped = fmt.Sprintf("%s:%d %q", r.Filename, r.Line, r.Message)
|
||||||
default:
|
default:
|
||||||
tc.Errors = []*junit.Error{
|
tc.Errors = []*junit.Error{
|
||||||
|
@ -67,44 +67,6 @@ func Fail(message string, callerSkip ...int) {
|
|||||||
ginkgo.Fail(message, skip)
|
ginkgo.Fail(message, skip)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SkipPanic is the value that will be panicked from Skip.
|
|
||||||
type SkipPanic struct {
|
|
||||||
Message string // The failure message passed to Fail
|
|
||||||
Filename string // The filename that is the source of the failure
|
|
||||||
Line int // The line number of the filename that is the source of the failure
|
|
||||||
FullStackTrace string // A full stack trace starting at the source of the failure
|
|
||||||
}
|
|
||||||
|
|
||||||
// String makes SkipPanic look like the old Ginkgo panic when printed.
|
|
||||||
func (SkipPanic) String() string { return ginkgo.GINKGO_PANIC }
|
|
||||||
|
|
||||||
// Skip wraps ginkgo.Skip so that it panics with more useful
|
|
||||||
// information about why the test is being skipped. This function will
|
|
||||||
// panic with a SkipPanic.
|
|
||||||
func Skip(message string, callerSkip ...int) {
|
|
||||||
skip := 1
|
|
||||||
if len(callerSkip) > 0 {
|
|
||||||
skip += callerSkip[0]
|
|
||||||
}
|
|
||||||
|
|
||||||
_, file, line, _ := runtime.Caller(skip)
|
|
||||||
sp := SkipPanic{
|
|
||||||
Message: message,
|
|
||||||
Filename: file,
|
|
||||||
Line: line,
|
|
||||||
FullStackTrace: pruneStack(skip),
|
|
||||||
}
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
e := recover()
|
|
||||||
if e != nil {
|
|
||||||
panic(sp)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
ginkgo.Skip(message, skip)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ginkgo adds a lot of test running infrastructure to the stack, so
|
// ginkgo adds a lot of test running infrastructure to the stack, so
|
||||||
// we filter those out
|
// we filter those out
|
||||||
var stackSkipPattern = regexp.MustCompile(`onsi/ginkgo`)
|
var stackSkipPattern = regexp.MustCompile(`onsi/ginkgo`)
|
||||||
|
@ -16,8 +16,8 @@ go_library(
|
|||||||
"//staging/src/k8s.io/client-go/dynamic:go_default_library",
|
"//staging/src/k8s.io/client-go/dynamic:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
|
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
|
||||||
"//test/e2e/framework:go_default_library",
|
"//test/e2e/framework:go_default_library",
|
||||||
"//test/e2e/framework/ginkgowrapper:go_default_library",
|
|
||||||
"//test/e2e/framework/ssh:go_default_library",
|
"//test/e2e/framework/ssh:go_default_library",
|
||||||
|
"//vendor/github.com/onsi/ginkgo:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -17,7 +17,14 @@ limitations under the License.
|
|||||||
package skipper
|
package skipper
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/onsi/ginkgo"
|
||||||
|
"regexp"
|
||||||
|
"runtime"
|
||||||
|
"runtime/debug"
|
||||||
|
"strings"
|
||||||
|
|
||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
@ -29,7 +36,6 @@ import (
|
|||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/kubernetes/pkg/features"
|
"k8s.io/kubernetes/pkg/features"
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
"k8s.io/kubernetes/test/e2e/framework/ginkgowrapper"
|
|
||||||
e2essh "k8s.io/kubernetes/test/e2e/framework/ssh"
|
e2essh "k8s.io/kubernetes/test/e2e/framework/ssh"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -39,7 +45,73 @@ var TestContext framework.TestContextType
|
|||||||
func skipInternalf(caller int, format string, args ...interface{}) {
|
func skipInternalf(caller int, format string, args ...interface{}) {
|
||||||
msg := fmt.Sprintf(format, args...)
|
msg := fmt.Sprintf(format, args...)
|
||||||
framework.Logf("INFO", msg)
|
framework.Logf("INFO", msg)
|
||||||
ginkgowrapper.Skip(msg, caller+1)
|
skip(msg, caller+1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SkipPanic is the value that will be panicked from Skip.
|
||||||
|
type SkipPanic struct {
|
||||||
|
Message string // The failure message passed to Fail
|
||||||
|
Filename string // The filename that is the source of the failure
|
||||||
|
Line int // The line number of the filename that is the source of the failure
|
||||||
|
FullStackTrace string // A full stack trace starting at the source of the failure
|
||||||
|
}
|
||||||
|
|
||||||
|
// String makes SkipPanic look like the old Ginkgo panic when printed.
|
||||||
|
func (SkipPanic) String() string { return ginkgo.GINKGO_PANIC }
|
||||||
|
|
||||||
|
// Skip wraps ginkgo.Skip so that it panics with more useful
|
||||||
|
// information about why the test is being skipped. This function will
|
||||||
|
// panic with a SkipPanic.
|
||||||
|
func skip(message string, callerSkip ...int) {
|
||||||
|
skip := 1
|
||||||
|
if len(callerSkip) > 0 {
|
||||||
|
skip += callerSkip[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
_, file, line, _ := runtime.Caller(skip)
|
||||||
|
sp := SkipPanic{
|
||||||
|
Message: message,
|
||||||
|
Filename: file,
|
||||||
|
Line: line,
|
||||||
|
FullStackTrace: pruneStack(skip),
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
e := recover()
|
||||||
|
if e != nil {
|
||||||
|
panic(sp)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
ginkgo.Skip(message, skip)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ginkgo adds a lot of test running infrastructure to the stack, so
|
||||||
|
// we filter those out
|
||||||
|
var stackSkipPattern = regexp.MustCompile(`onsi/ginkgo`)
|
||||||
|
|
||||||
|
func pruneStack(skip int) string {
|
||||||
|
skip += 2 // one for pruneStack and one for debug.Stack
|
||||||
|
stack := debug.Stack()
|
||||||
|
scanner := bufio.NewScanner(bytes.NewBuffer(stack))
|
||||||
|
var prunedStack []string
|
||||||
|
|
||||||
|
// skip the top of the stack
|
||||||
|
for i := 0; i < 2*skip+1; i++ {
|
||||||
|
scanner.Scan()
|
||||||
|
}
|
||||||
|
|
||||||
|
for scanner.Scan() {
|
||||||
|
if stackSkipPattern.Match(scanner.Bytes()) {
|
||||||
|
scanner.Scan() // these come in pairs
|
||||||
|
} else {
|
||||||
|
prunedStack = append(prunedStack, scanner.Text())
|
||||||
|
scanner.Scan() // these come in pairs
|
||||||
|
prunedStack = append(prunedStack, scanner.Text())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return strings.Join(prunedStack, "\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Skipf skips with information about why the test is being skipped.
|
// Skipf skips with information about why the test is being skipped.
|
||||||
|
Loading…
Reference in New Issue
Block a user