package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"os/exec"
|
|
"time"
|
|
|
|
"github.com/tendermint/tendermint/abci/example/code"
|
|
"github.com/tendermint/tendermint/abci/types"
|
|
)
|
|
|
|
var abciType string
|
|
|
|
func init() {
|
|
abciType = os.Getenv("ABCI")
|
|
if abciType == "" {
|
|
abciType = "socket"
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
testCounter()
|
|
}
|
|
|
|
const (
|
|
maxABCIConnectTries = 10
|
|
)
|
|
|
|
func ensureABCIIsUp(typ string, n int) error {
|
|
var err error
|
|
cmdString := "abci-cli echo hello"
|
|
if typ == "grpc" {
|
|
cmdString = "abci-cli --abci grpc echo hello"
|
|
}
|
|
|
|
for i := 0; i < n; i++ {
|
|
cmd := exec.Command("bash", "-c", cmdString)
|
|
_, err = cmd.CombinedOutput()
|
|
if err == nil {
|
|
break
|
|
}
|
|
<-time.After(500 * time.Millisecond)
|
|
}
|
|
return err
|
|
}
|
|
|
|
func testCounter() {
|
|
abciApp := os.Getenv("ABCI_APP")
|
|
if abciApp == "" {
|
|
panic("No ABCI_APP specified")
|
|
}
|
|
|
|
fmt.Printf("Running %s test with abci=%s\n", abciApp, abciType)
|
|
subCommand := fmt.Sprintf("abci-cli %s", abciApp)
|
|
cmd := exec.Command("bash", "-c", subCommand)
|
|
cmd.Stdout = os.Stdout
|
|
if err := cmd.Start(); err != nil {
|
|
log.Fatalf("starting %q err: %v", abciApp, err)
|
|
}
|
|
defer func() {
|
|
if err := cmd.Process.Kill(); err != nil {
|
|
log.Printf("error on process kill: %v", err)
|
|
}
|
|
if err := cmd.Wait(); err != nil {
|
|
log.Printf("error while waiting for cmd to exit: %v", err)
|
|
}
|
|
}()
|
|
|
|
if err := ensureABCIIsUp(abciType, maxABCIConnectTries); err != nil {
|
|
log.Fatalf("echo failed: %v", err)
|
|
}
|
|
|
|
client := startClient(abciType)
|
|
defer func() {
|
|
if err := client.Stop(); err != nil {
|
|
log.Printf("error trying client stop: %v", err)
|
|
}
|
|
}()
|
|
|
|
setOption(client, "serial", "on")
|
|
commit(client, nil)
|
|
deliverTx(client, []byte("abc"), code.CodeTypeBadNonce, nil)
|
|
commit(client, nil)
|
|
deliverTx(client, []byte{0x00}, types.CodeTypeOK, nil)
|
|
commit(client, []byte{0, 0, 0, 0, 0, 0, 0, 1})
|
|
deliverTx(client, []byte{0x00}, code.CodeTypeBadNonce, nil)
|
|
deliverTx(client, []byte{0x01}, types.CodeTypeOK, nil)
|
|
deliverTx(client, []byte{0x00, 0x02}, types.CodeTypeOK, nil)
|
|
deliverTx(client, []byte{0x00, 0x03}, types.CodeTypeOK, nil)
|
|
deliverTx(client, []byte{0x00, 0x00, 0x04}, types.CodeTypeOK, nil)
|
|
deliverTx(client, []byte{0x00, 0x00, 0x06}, code.CodeTypeBadNonce, nil)
|
|
commit(client, []byte{0, 0, 0, 0, 0, 0, 0, 5})
|
|
}
|