- package fail
-
- import (
- "fmt"
- "math/rand"
- "os"
- "strconv"
- )
-
- var callIndexToFail int
-
- func init() {
- callIndexToFailS := os.Getenv("FAIL_TEST_INDEX")
-
- if callIndexToFailS == "" {
- callIndexToFail = -1
- } else {
- var err error
- callIndexToFail, err = strconv.Atoi(callIndexToFailS)
- if err != nil {
- callIndexToFail = -1
- }
- }
- }
-
- // Fail when FAIL_TEST_INDEX == callIndex
- var (
- callIndex int //indexes Fail calls
-
- callRandIndex int // indexes a run of FailRand calls
- callRandIndexToFail = -1 // the callRandIndex to fail on in FailRand
- )
-
- func Fail() {
- if callIndexToFail < 0 {
- return
- }
-
- if callIndex == callIndexToFail {
- Exit()
- }
-
- callIndex += 1
- }
-
- // FailRand should be called n successive times.
- // It will fail on a random one of those calls
- // n must be greater than 0
- func FailRand(n int) {
- if callIndexToFail < 0 {
- return
- }
-
- if callRandIndexToFail < 0 {
- // first call in the loop, pick a random index to fail at
- callRandIndexToFail = rand.Intn(n)
- callRandIndex = 0
- }
-
- if callIndex == callIndexToFail {
- if callRandIndex == callRandIndexToFail {
- Exit()
- }
- }
-
- callRandIndex += 1
-
- if callRandIndex == n {
- callIndex += 1
- }
- }
-
- func Exit() {
- fmt.Printf("*** fail-test %d ***\n", callIndex)
- os.Exit(1)
- // proc, _ := os.FindProcess(os.Getpid())
- // proc.Signal(os.Interrupt)
- // panic(fmt.Sprintf("*** fail-test %d ***", callIndex))
- }
|