tendermint/example/dummy/dummy_test.go

94 lines
1.9 KiB
Go
Raw Normal View History

2016-02-14 14:59:53 -08:00
package dummy
2015-11-02 07:39:53 -08:00
import (
2016-05-14 00:09:47 -07:00
"reflect"
2015-11-02 07:39:53 -08:00
"testing"
"time"
2015-11-02 07:39:53 -08:00
. "github.com/tendermint/go-common"
"github.com/tendermint/tmsp/server"
"github.com/tendermint/tmsp/types"
)
func TestStream(t *testing.T) {
numAppendTxs := 200000
2015-11-02 07:39:53 -08:00
// Start the listener
2016-02-29 21:53:04 -08:00
server, err := server.NewServer("unix://test.sock", NewDummyApplication())
2015-11-02 07:39:53 -08:00
if err != nil {
Exit(err.Error())
}
2016-02-29 21:53:04 -08:00
defer server.Stop()
2015-11-02 07:39:53 -08:00
// Connect to the socket
2016-02-29 21:53:04 -08:00
conn, err := Connect("unix://test.sock")
2015-11-02 07:39:53 -08:00
if err != nil {
Exit(err.Error())
}
// Read response data
done := make(chan struct{})
2015-11-02 07:39:53 -08:00
go func() {
counter := 0
2015-11-02 07:39:53 -08:00
for {
2016-01-30 19:36:33 -08:00
var res = &types.Response{}
err := types.ReadMessage(conn, res)
2015-11-02 07:39:53 -08:00
if err != nil {
Exit(err.Error())
}
// Process response
2016-05-17 17:06:24 -07:00
switch r := res.Value.(type) {
2016-05-14 00:09:47 -07:00
case *types.Response_AppendTx:
counter += 1
2016-05-14 00:09:47 -07:00
if r.AppendTx.Code != types.CodeType_OK {
t.Error("AppendTx failed with ret_code", r.AppendTx.Code)
}
if counter > numAppendTxs {
t.Fatal("Too many AppendTx responses")
}
t.Log("response", counter)
if counter == numAppendTxs {
go func() {
time.Sleep(time.Second * 2) // Wait for a bit to allow counter overflow
close(done)
}()
}
2016-05-14 00:09:47 -07:00
case *types.Response_Flush:
// ignore
default:
2016-05-17 17:06:24 -07:00
t.Error("Unexpected response type", reflect.TypeOf(res.Value))
}
2015-11-02 07:39:53 -08:00
}
}()
// Write requests
for counter := 0; counter < numAppendTxs; counter++ {
// Send request
2016-05-14 00:09:47 -07:00
var req = types.ToRequestAppendTx([]byte("test"))
2016-01-30 19:36:33 -08:00
err := types.WriteMessage(req, conn)
2015-11-02 07:39:53 -08:00
if err != nil {
t.Fatal(err.Error())
}
// Sometimes send flush messages
if counter%123 == 0 {
t.Log("flush")
2016-05-14 00:09:47 -07:00
err := types.WriteMessage(types.ToRequestFlush(), conn)
if err != nil {
t.Fatal(err.Error())
}
2015-11-02 07:39:53 -08:00
}
}
// Send final flush message
2016-05-14 00:09:47 -07:00
err = types.WriteMessage(types.ToRequestFlush(), conn)
if err != nil {
t.Fatal(err.Error())
}
<-done
2015-11-02 07:39:53 -08:00
}