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  }