mirror of
https://github.com/Luzifer/duplicity-backup.git
synced 2024-12-30 15:21:22 +00:00
92 lines
1.9 KiB
Go
92 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,
|
|
}
|
|
}
|
|
}
|