tendermint/abci/example/example_test.go

155 lines
3.9 KiB
Go
Raw Permalink Normal View History

2016-08-24 17:13:17 -07:00
package example
import (
"fmt"
"net"
"reflect"
"testing"
"time"
"google.golang.org/grpc"
"golang.org/x/net/context"
2018-07-01 19:36:49 -07:00
cmn "github.com/tendermint/tendermint/libs/common"
"github.com/tendermint/tendermint/libs/log"
2017-11-30 12:37:31 -08:00
2018-06-21 21:59:02 -07:00
abcicli "github.com/tendermint/tendermint/abci/client"
"github.com/tendermint/tendermint/abci/example/code"
"github.com/tendermint/tendermint/abci/example/kvstore"
abciserver "github.com/tendermint/tendermint/abci/server"
"github.com/tendermint/tendermint/abci/types"
)
2018-02-19 12:34:51 -08:00
func TestKVStore(t *testing.T) {
fmt.Println("### Testing KVStore")
2018-02-19 12:43:36 -08:00
testStream(t, kvstore.NewKVStoreApplication())
}
2017-02-13 15:48:59 -08:00
func TestBaseApp(t *testing.T) {
fmt.Println("### Testing BaseApp")
testStream(t, types.NewBaseApplication())
}
func TestGRPC(t *testing.T) {
fmt.Println("### Testing GRPC")
2017-02-13 15:48:59 -08:00
testGRPCSync(t, types.NewGRPCApplication(types.NewBaseApplication()))
}
func testStream(t *testing.T, app types.Application) {
2017-01-12 12:27:08 -08:00
numDeliverTxs := 200000
// Start the listener
2017-11-08 14:29:15 -08:00
server := abciserver.NewSocketServer("unix://test.sock", app)
2017-05-15 09:59:44 -07:00
server.SetLogger(log.TestingLogger().With("module", "abci-server"))
if err := server.Start(); err != nil {
2017-05-01 05:43:52 -07:00
t.Fatalf("Error starting socket server: %v", err.Error())
}
defer server.Stop()
// Connect to the socket
client := abcicli.NewSocketClient("unix://test.sock", false)
2017-05-15 09:59:44 -07:00
client.SetLogger(log.TestingLogger().With("module", "abci-client"))
if err := client.Start(); err != nil {
2017-05-01 05:43:52 -07:00
t.Fatalf("Error starting socket client: %v", err.Error())
}
defer client.Stop()
done := make(chan struct{})
counter := 0
client.SetResponseCallback(func(req *types.Request, res *types.Response) {
// Process response
switch r := res.Value.(type) {
2017-01-12 12:27:08 -08:00
case *types.Response_DeliverTx:
2017-01-17 00:26:32 -08:00
counter++
2017-11-30 12:37:31 -08:00
if r.DeliverTx.Code != code.CodeTypeOK {
2017-01-12 12:27:08 -08:00
t.Error("DeliverTx failed with ret_code", r.DeliverTx.Code)
}
2017-01-12 12:27:08 -08:00
if counter > numDeliverTxs {
t.Fatalf("Too many DeliverTx responses. Got %d, expected %d", counter, numDeliverTxs)
}
2017-01-12 12:27:08 -08:00
if counter == numDeliverTxs {
go func() {
time.Sleep(time.Second * 2) // Wait for a bit to allow counter overflow
close(done)
}()
return
}
case *types.Response_Flush:
// ignore
default:
t.Error("Unexpected response type", reflect.TypeOf(res.Value))
}
})
// Write requests
2017-01-12 12:27:08 -08:00
for counter := 0; counter < numDeliverTxs; counter++ {
// Send request
2017-01-12 12:27:08 -08:00
reqRes := client.DeliverTxAsync([]byte("test"))
_ = reqRes
// check err ?
// Sometimes send flush messages
if counter%123 == 0 {
client.FlushAsync()
// check err ?
}
}
// Send final flush message
client.FlushAsync()
<-done
}
//-------------------------
// test grpc
func dialerFunc(addr string, timeout time.Duration) (net.Conn, error) {
2017-01-23 20:26:17 -08:00
return cmn.Connect(addr)
}
func testGRPCSync(t *testing.T, app *types.GRPCApplication) {
2017-01-12 12:27:08 -08:00
numDeliverTxs := 2000
// Start the listener
2017-11-08 14:29:15 -08:00
server := abciserver.NewGRPCServer("unix://test.sock", app)
2017-05-15 09:59:44 -07:00
server.SetLogger(log.TestingLogger().With("module", "abci-server"))
if err := server.Start(); err != nil {
2017-05-01 05:43:52 -07:00
t.Fatalf("Error starting GRPC server: %v", err.Error())
}
defer server.Stop()
// Connect to the socket
conn, err := grpc.Dial("unix://test.sock", grpc.WithInsecure(), grpc.WithDialer(dialerFunc))
if err != nil {
2017-05-01 05:43:52 -07:00
t.Fatalf("Error dialing GRPC server: %v", err.Error())
}
defer conn.Close()
2017-01-12 12:47:55 -08:00
client := types.NewABCIApplicationClient(conn)
// Write requests
2017-01-12 12:27:08 -08:00
for counter := 0; counter < numDeliverTxs; counter++ {
// Send request
response, err := client.DeliverTx(context.Background(), &types.RequestDeliverTx{Tx: []byte("test")})
if err != nil {
2017-01-12 12:27:08 -08:00
t.Fatalf("Error in GRPC DeliverTx: %v", err.Error())
}
2017-01-17 00:26:32 -08:00
counter++
2017-11-30 12:37:31 -08:00
if response.Code != code.CodeTypeOK {
2017-01-12 12:27:08 -08:00
t.Error("DeliverTx failed with ret_code", response.Code)
}
2017-01-12 12:27:08 -08:00
if counter > numDeliverTxs {
t.Fatal("Too many DeliverTx responses")
}
t.Log("response", counter)
2017-01-12 12:27:08 -08:00
if counter == numDeliverTxs {
go func() {
time.Sleep(time.Second * 2) // Wait for a bit to allow counter overflow
}()
}
}
}