forked from github/multus-cni
gomodule is still in progress to migrate for now, hence multus team decide to keep vendor directory to support build without gomodule.
93 lines
1.9 KiB
Go
93 lines
1.9 KiB
Go
package failer
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
|
|
"github.com/onsi/ginkgo/types"
|
|
)
|
|
|
|
type Failer struct {
|
|
lock *sync.Mutex
|
|
failure types.SpecFailure
|
|
state types.SpecState
|
|
}
|
|
|
|
func New() *Failer {
|
|
return &Failer{
|
|
lock: &sync.Mutex{},
|
|
state: types.SpecStatePassed,
|
|
}
|
|
}
|
|
|
|
func (f *Failer) Panic(location types.CodeLocation, forwardedPanic interface{}) {
|
|
f.lock.Lock()
|
|
defer f.lock.Unlock()
|
|
|
|
if f.state == types.SpecStatePassed {
|
|
f.state = types.SpecStatePanicked
|
|
f.failure = types.SpecFailure{
|
|
Message: "Test Panicked",
|
|
Location: location,
|
|
ForwardedPanic: fmt.Sprintf("%v", forwardedPanic),
|
|
}
|
|
}
|
|
}
|
|
|
|
func (f *Failer) Timeout(location types.CodeLocation) {
|
|
f.lock.Lock()
|
|
defer f.lock.Unlock()
|
|
|
|
if f.state == types.SpecStatePassed {
|
|
f.state = types.SpecStateTimedOut
|
|
f.failure = types.SpecFailure{
|
|
Message: "Timed out",
|
|
Location: location,
|
|
}
|
|
}
|
|
}
|
|
|
|
func (f *Failer) Fail(message string, location types.CodeLocation) {
|
|
f.lock.Lock()
|
|
defer f.lock.Unlock()
|
|
|
|
if f.state == types.SpecStatePassed {
|
|
f.state = types.SpecStateFailed
|
|
f.failure = types.SpecFailure{
|
|
Message: message,
|
|
Location: location,
|
|
}
|
|
}
|
|
}
|
|
|
|
func (f *Failer) Drain(componentType types.SpecComponentType, componentIndex int, componentCodeLocation types.CodeLocation) (types.SpecFailure, types.SpecState) {
|
|
f.lock.Lock()
|
|
defer f.lock.Unlock()
|
|
|
|
failure := f.failure
|
|
outcome := f.state
|
|
if outcome != types.SpecStatePassed {
|
|
failure.ComponentType = componentType
|
|
failure.ComponentIndex = componentIndex
|
|
failure.ComponentCodeLocation = componentCodeLocation
|
|
}
|
|
|
|
f.state = types.SpecStatePassed
|
|
f.failure = types.SpecFailure{}
|
|
|
|
return failure, outcome
|
|
}
|
|
|
|
func (f *Failer) Skip(message string, location types.CodeLocation) {
|
|
f.lock.Lock()
|
|
defer f.lock.Unlock()
|
|
|
|
if f.state == types.SpecStatePassed {
|
|
f.state = types.SpecStateSkipped
|
|
f.failure = types.SpecFailure{
|
|
Message: message,
|
|
Location: location,
|
|
}
|
|
}
|
|
}
|