github.com/vipernet-xyz/tm@v0.34.24/abci/tests/test_app/main.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"os"
     7  	"os/exec"
     8  	"time"
     9  
    10  	"github.com/vipernet-xyz/tm/abci/example/code"
    11  	"github.com/vipernet-xyz/tm/abci/types"
    12  )
    13  
    14  var abciType string
    15  
    16  func init() {
    17  	abciType = os.Getenv("ABCI")
    18  	if abciType == "" {
    19  		abciType = "socket"
    20  	}
    21  }
    22  
    23  func main() {
    24  	testCounter()
    25  }
    26  
    27  const (
    28  	maxABCIConnectTries = 10
    29  )
    30  
    31  func ensureABCIIsUp(typ string, n int) error {
    32  	var err error
    33  	cmdString := "abci-cli echo hello"
    34  	if typ == "grpc" {
    35  		cmdString = "abci-cli --abci grpc echo hello"
    36  	}
    37  
    38  	for i := 0; i < n; i++ {
    39  		cmd := exec.Command("bash", "-c", cmdString)
    40  		_, err = cmd.CombinedOutput()
    41  		if err == nil {
    42  			break
    43  		}
    44  		<-time.After(500 * time.Millisecond)
    45  	}
    46  	return err
    47  }
    48  
    49  func testCounter() {
    50  	abciApp := os.Getenv("ABCI_APP")
    51  	if abciApp == "" {
    52  		panic("No ABCI_APP specified")
    53  	}
    54  
    55  	fmt.Printf("Running %s test with abci=%s\n", abciApp, abciType)
    56  	subCommand := fmt.Sprintf("abci-cli %s", abciApp)
    57  	cmd := exec.Command("bash", "-c", subCommand)
    58  	cmd.Stdout = os.Stdout
    59  	if err := cmd.Start(); err != nil {
    60  		log.Fatalf("starting %q err: %v", abciApp, err)
    61  	}
    62  	defer func() {
    63  		if err := cmd.Process.Kill(); err != nil {
    64  			log.Printf("error on process kill: %v", err)
    65  		}
    66  		if err := cmd.Wait(); err != nil {
    67  			log.Printf("error while waiting for cmd to exit: %v", err)
    68  		}
    69  	}()
    70  
    71  	if err := ensureABCIIsUp(abciType, maxABCIConnectTries); err != nil {
    72  		log.Fatalf("echo failed: %v", err) //nolint:gocritic
    73  	}
    74  
    75  	client := startClient(abciType)
    76  	defer func() {
    77  		if err := client.Stop(); err != nil {
    78  			log.Printf("error trying client stop: %v", err)
    79  		}
    80  	}()
    81  
    82  	setOption(client, "serial", "on")
    83  	commit(client, nil)
    84  	deliverTx(client, []byte("abc"), code.CodeTypeBadNonce, nil)
    85  	commit(client, nil)
    86  	deliverTx(client, []byte{0x00}, types.CodeTypeOK, nil)
    87  	commit(client, []byte{0, 0, 0, 0, 0, 0, 0, 1})
    88  	deliverTx(client, []byte{0x00}, code.CodeTypeBadNonce, nil)
    89  	deliverTx(client, []byte{0x01}, types.CodeTypeOK, nil)
    90  	deliverTx(client, []byte{0x00, 0x02}, types.CodeTypeOK, nil)
    91  	deliverTx(client, []byte{0x00, 0x03}, types.CodeTypeOK, nil)
    92  	deliverTx(client, []byte{0x00, 0x00, 0x04}, types.CodeTypeOK, nil)
    93  	deliverTx(client, []byte{0x00, 0x00, 0x06}, code.CodeTypeBadNonce, nil)
    94  	commit(client, []byte{0, 0, 0, 0, 0, 0, 0, 5})
    95  }