mirror of
https://github.com/fluencelabs/tendermint
synced 2025-04-25 14:52:17 +00:00
original author of this file is @ebuchman: https://github.com/ebuchman/fail-test
This commit is contained in:
parent
b24de1c01c
commit
cdc252b818
8
Gopkg.lock
generated
8
Gopkg.lock
generated
@ -35,13 +35,6 @@
|
|||||||
revision = "8991bc29aa16c548c550c7ff78260e27b9ab7c73"
|
revision = "8991bc29aa16c548c550c7ff78260e27b9ab7c73"
|
||||||
version = "v1.1.1"
|
version = "v1.1.1"
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
digest = "1:c7644c73a3d23741fdba8a99b1464e021a224b7e205be497271a8003a15ca41b"
|
|
||||||
name = "github.com/ebuchman/fail-test"
|
|
||||||
packages = ["."]
|
|
||||||
pruneopts = "UT"
|
|
||||||
revision = "95f809107225be108efcf10a3509e4ea6ceef3c4"
|
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
digest = "1:544229a3ca0fb2dd5ebc2896d3d2ff7ce096d9751635301e44e37e761349ee70"
|
digest = "1:544229a3ca0fb2dd5ebc2896d3d2ff7ce096d9751635301e44e37e761349ee70"
|
||||||
name = "github.com/fortytw2/leaktest"
|
name = "github.com/fortytw2/leaktest"
|
||||||
@ -503,7 +496,6 @@
|
|||||||
input-imports = [
|
input-imports = [
|
||||||
"github.com/btcsuite/btcutil/base58",
|
"github.com/btcsuite/btcutil/base58",
|
||||||
"github.com/btcsuite/btcutil/bech32",
|
"github.com/btcsuite/btcutil/bech32",
|
||||||
"github.com/ebuchman/fail-test",
|
|
||||||
"github.com/fortytw2/leaktest",
|
"github.com/fortytw2/leaktest",
|
||||||
"github.com/go-kit/kit/log",
|
"github.com/go-kit/kit/log",
|
||||||
"github.com/go-kit/kit/log/level",
|
"github.com/go-kit/kit/log/level",
|
||||||
|
@ -81,10 +81,6 @@
|
|||||||
name = "github.com/jmhodges/levigo"
|
name = "github.com/jmhodges/levigo"
|
||||||
revision = "c42d9e0ca023e2198120196f842701bb4c55d7b9"
|
revision = "c42d9e0ca023e2198120196f842701bb4c55d7b9"
|
||||||
|
|
||||||
[[constraint]]
|
|
||||||
name = "github.com/ebuchman/fail-test"
|
|
||||||
revision = "95f809107225be108efcf10a3509e4ea6ceef3c4"
|
|
||||||
|
|
||||||
# last revision used by go-crypto
|
# last revision used by go-crypto
|
||||||
[[constraint]]
|
[[constraint]]
|
||||||
name = "github.com/btcsuite/btcutil"
|
name = "github.com/btcsuite/btcutil"
|
||||||
|
@ -9,8 +9,8 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
fail "github.com/ebuchman/fail-test"
|
|
||||||
cmn "github.com/tendermint/tendermint/libs/common"
|
cmn "github.com/tendermint/tendermint/libs/common"
|
||||||
|
"github.com/tendermint/tendermint/libs/fail"
|
||||||
"github.com/tendermint/tendermint/libs/log"
|
"github.com/tendermint/tendermint/libs/log"
|
||||||
tmtime "github.com/tendermint/tendermint/types/time"
|
tmtime "github.com/tendermint/tendermint/types/time"
|
||||||
|
|
||||||
|
78
libs/fail/fail.go
Normal file
78
libs/fail/fail.go
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
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)
|
||||||
|
proc, _ := os.FindProcess(os.Getpid())
|
||||||
|
proc.Signal(os.Interrupt)
|
||||||
|
// panic(fmt.Sprintf("*** fail-test %d ***", callIndex))
|
||||||
|
}
|
@ -4,9 +4,9 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ebuchman/fail-test"
|
|
||||||
abci "github.com/tendermint/tendermint/abci/types"
|
abci "github.com/tendermint/tendermint/abci/types"
|
||||||
dbm "github.com/tendermint/tendermint/libs/db"
|
dbm "github.com/tendermint/tendermint/libs/db"
|
||||||
|
"github.com/tendermint/tendermint/libs/fail"
|
||||||
"github.com/tendermint/tendermint/libs/log"
|
"github.com/tendermint/tendermint/libs/log"
|
||||||
"github.com/tendermint/tendermint/mempool"
|
"github.com/tendermint/tendermint/mempool"
|
||||||
"github.com/tendermint/tendermint/proxy"
|
"github.com/tendermint/tendermint/proxy"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user