first attempt at disconnect

This commit is contained in:
William Banfield
2022-11-30 19:00:25 -05:00
parent 01c896d622
commit d2ef43b449
6 changed files with 48 additions and 7 deletions
+2 -2
View File
@@ -137,7 +137,7 @@ func NewCLI() *CLI {
}
if cli.testnet.HasPerturbations() {
if err := Perturb(cli.testnet); err != nil {
if err := Perturb(cli.testnet, cli.infp); err != nil {
return err
}
if err := Wait(cli.testnet, 5); err != nil { // allow some txs to go through
@@ -210,7 +210,7 @@ func NewCLI() *CLI {
Use: "perturb",
Short: "Perturbs the Docker testnet, e.g. by restarting or disconnecting nodes",
RunE: func(cmd *cobra.Command, args []string) error {
return Perturb(cli.testnet)
return Perturb(cli.testnet, cli.infp)
},
})
+6 -5
View File
@@ -8,14 +8,15 @@ import (
"github.com/tendermint/tendermint/libs/log"
rpctypes "github.com/tendermint/tendermint/rpc/core/types"
e2e "github.com/tendermint/tendermint/test/e2e/pkg"
"github.com/tendermint/tendermint/test/e2e/pkg/infra"
"github.com/tendermint/tendermint/test/e2e/pkg/infra/docker"
)
// Perturbs a running testnet.
func Perturb(testnet *e2e.Testnet) error {
func Perturb(testnet *e2e.Testnet, ifp infra.Provider) error {
for _, node := range testnet.Nodes {
for _, perturbation := range node.Perturbations {
_, err := PerturbNode(node, perturbation)
_, err := PerturbNode(node, perturbation, ifp)
if err != nil {
return err
}
@@ -27,16 +28,16 @@ func Perturb(testnet *e2e.Testnet) error {
// PerturbNode perturbs a node with a given perturbation, returning its status
// after recovering.
func PerturbNode(node *e2e.Node, perturbation e2e.Perturbation) (*rpctypes.ResultStatus, error) {
func PerturbNode(node *e2e.Node, perturbation e2e.Perturbation, ifp infra.Provider) (*rpctypes.ResultStatus, error) {
testnet := node.Testnet
switch perturbation {
case e2e.PerturbationDisconnect:
logger.Info("perturb node", "msg", log.NewLazySprintf("Disconnecting node %v...", node.Name))
if err := docker.Exec(context.Background(), "network", "disconnect", testnet.Name+"_"+testnet.Name, node.Name) ; err != nil {
if err := ifp.Disconnect(context.Background(), node); err != nil {
return nil, err
}
time.Sleep(10 * time.Second)
if err := docker.Exec(context.Background(), "network", "connect", testnet.Name+"_"+testnet.Name, node.Name) ; err != nil {
if err := ifp.Connect(context.Background(), node); err != nil {
return nil, err
}