github.com/supragya/TendermintConnector@v0.0.0-20210619045051-113e32b84fb1/_deprecated_chains/cosmos/libs/fail/fail.go (about) 1 package fail 2 3 import ( 4 "fmt" 5 "math/rand" 6 "os" 7 "strconv" 8 ) 9 10 var callIndexToFail int 11 12 func init() { 13 callIndexToFailS := os.Getenv("FAIL_TEST_INDEX") 14 15 if callIndexToFailS == "" { 16 callIndexToFail = -1 17 } else { 18 var err error 19 callIndexToFail, err = strconv.Atoi(callIndexToFailS) 20 if err != nil { 21 callIndexToFail = -1 22 } 23 } 24 } 25 26 // Fail when FAIL_TEST_INDEX == callIndex 27 var ( 28 callIndex int //indexes Fail calls 29 30 callRandIndex int // indexes a run of FailRand calls 31 callRandIndexToFail = -1 // the callRandIndex to fail on in FailRand 32 ) 33 34 func Fail() { 35 if callIndexToFail < 0 { 36 return 37 } 38 39 if callIndex == callIndexToFail { 40 Exit() 41 } 42 43 callIndex += 1 44 } 45 46 // FailRand should be called n successive times. 47 // It will fail on a random one of those calls 48 // n must be greater than 0 49 func FailRand(n int) { 50 if callIndexToFail < 0 { 51 return 52 } 53 54 if callRandIndexToFail < 0 { 55 // first call in the loop, pick a random index to fail at 56 callRandIndexToFail = rand.Intn(n) 57 callRandIndex = 0 58 } 59 60 if callIndex == callIndexToFail { 61 if callRandIndex == callRandIndexToFail { 62 Exit() 63 } 64 } 65 66 callRandIndex += 1 67 68 if callRandIndex == n { 69 callIndex += 1 70 } 71 } 72 73 func Exit() { 74 fmt.Printf("*** fail-test %d ***\n", callIndex) 75 os.Exit(1) 76 // proc, _ := os.FindProcess(os.Getpid()) 77 // proc.Signal(os.Interrupt) 78 // panic(fmt.Sprintf("*** fail-test %d ***", callIndex)) 79 }