fix up tmsp-cli, tests

This commit is contained in:
Ethan Buchman
2016-05-14 03:09:47 -04:00
parent 35f4f0e271
commit 32f83f9494
6 changed files with 53 additions and 108 deletions

View File

@ -5,18 +5,18 @@ import (
"errors" "errors"
"fmt" "fmt"
"io" "io"
"net"
"os" "os"
"strings" "strings"
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
. "github.com/tendermint/go-common" . "github.com/tendermint/go-common"
"github.com/tendermint/go-wire/expr" "github.com/tendermint/go-wire/expr"
"github.com/tendermint/tmsp/client"
"github.com/tendermint/tmsp/types" "github.com/tendermint/tmsp/types"
) )
// connection is a global variable so it can be reused by the console // clientection is a global variable so it can be reused by the console
var conn net.Conn var client tmspcli.Client
func main() { func main() {
app := cli.NewApp() app := cli.NewApp()
@ -103,9 +103,9 @@ func main() {
} }
func before(c *cli.Context) error { func before(c *cli.Context) error {
if conn == nil { if client == nil {
var err error var err error
conn, err = Connect(c.GlobalString("address")) client, err = tmspcli.NewClient(c.GlobalString("address"), false)
if err != nil { if err != nil {
Exit(err.Error()) Exit(err.Error())
} }
@ -148,7 +148,9 @@ func cmdConsole(app *cli.App, c *cli.Context) error {
args := []string{"tmsp"} args := []string{"tmsp"}
args = append(args, strings.Split(string(line), " ")...) args = append(args, strings.Split(string(line), " ")...)
app.Run(args) if err := app.Run(args); err != nil {
return err
}
} }
return nil return nil
} }
@ -159,21 +161,15 @@ func cmdEcho(c *cli.Context) error {
if len(args) != 1 { if len(args) != 1 {
return errors.New("Command echo takes 1 argument") return errors.New("Command echo takes 1 argument")
} }
res, err := makeRequest(conn, types.RequestEcho(args[0])) res := client.EchoSync(args[0])
if err != nil { printResponse(res, string(res.Data), false)
return err
}
printResponse(res, string(res.Data))
return nil return nil
} }
// Get some info from the application // Get some info from the application
func cmdInfo(c *cli.Context) error { func cmdInfo(c *cli.Context) error {
res, err := makeRequest(conn, types.RequestInfo()) res := client.InfoSync()
if err != nil { printResponse(res, string(res.Data), false)
return err
}
printResponse(res, string(res.Data))
return nil return nil
} }
@ -183,11 +179,8 @@ func cmdSetOption(c *cli.Context) error {
if len(args) != 2 { if len(args) != 2 {
return errors.New("Command set_option takes 2 arguments (key, value)") return errors.New("Command set_option takes 2 arguments (key, value)")
} }
res, err := makeRequest(conn, types.RequestSetOption(args[0], args[1])) res := client.SetOptionSync(args[0], args[1])
if err != nil { printResponse(res, Fmt("%s=%s", args[0], args[1]), false)
return err
}
printResponse(res, Fmt("%s=%s", args[0], args[1]))
return nil return nil
} }
@ -203,11 +196,8 @@ func cmdAppendTx(c *cli.Context) error {
return err return err
} }
res, err := makeRequest(conn, types.RequestAppendTx(txBytes)) res := client.AppendTxSync(txBytes)
if err != nil { printResponse(res, string(res.Data), true)
return err
}
printResponse(res, string(res.Data))
return nil return nil
} }
@ -223,21 +213,15 @@ func cmdCheckTx(c *cli.Context) error {
return err return err
} }
res, err := makeRequest(conn, types.RequestCheckTx(txBytes)) res := client.CheckTxSync(txBytes)
if err != nil { printResponse(res, string(res.Data), true)
return err
}
printResponse(res, string(res.Data))
return nil return nil
} }
// Get application Merkle root hash // Get application Merkle root hash
func cmdCommit(c *cli.Context) error { func cmdCommit(c *cli.Context) error {
res, err := makeRequest(conn, types.RequestCommit()) res := client.CommitSync()
if err != nil { printResponse(res, Fmt("%X", res.Data), false)
return err
}
printResponse(res, Fmt("%X", res.Data))
return nil return nil
} }
@ -253,24 +237,20 @@ func cmdQuery(c *cli.Context) error {
return err return err
} }
res, err := makeRequest(conn, types.RequestQuery(queryBytes)) res := client.QuerySync(queryBytes)
if err != nil { printResponse(res, string(res.Data), true)
return err
}
printResponse(res, string(res.Data))
return nil return nil
} }
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
func printResponse(res *types.Response, s string) { func printResponse(res types.Result, s string, printCode bool) {
switch res.Type { if printCode {
case types.MessageType_AppendTx, types.MessageType_CheckTx, types.MessageType_Query:
fmt.Printf("-> code: %s\n", res.Code.String()) fmt.Printf("-> code: %s\n", res.Code.String())
} }
if res.Error != "" { /*if res.Error != "" {
fmt.Printf("-> error: %s\n", res.Error) fmt.Printf("-> error: %s\n", res.Error)
} }*/
if s != "" { if s != "" {
fmt.Printf("-> data: {%s}\n", s) fmt.Printf("-> data: {%s}\n", s)
} }
@ -279,41 +259,3 @@ func printResponse(res *types.Response, s string) {
} }
} }
func responseString(res *types.Response) string {
return Fmt("type: %v\tdata: %v\tcode: %v", res.Type, res.Data, res.Code)
}
func makeRequest(conn net.Conn, req *types.Request) (*types.Response, error) {
// Write desired request
err := types.WriteMessage(req, conn)
if err != nil {
return nil, err
}
// Write flush request
err = types.WriteMessage(types.RequestFlush(), conn)
if err != nil {
return nil, err
}
// Read desired response
var res = &types.Response{}
err = types.ReadMessage(conn, res)
if err != nil {
return nil, err
}
// Read flush response
var resFlush = &types.Response{}
err = types.ReadMessage(conn, resFlush)
if err != nil {
return nil, err
}
if resFlush.Type != types.MessageType_Flush {
return nil, errors.New(Fmt("Expected types.MessageType_Flush but got %v instead", resFlush.Type))
}
return res, nil
}

View File

@ -1,6 +1,7 @@
package dummy package dummy
import ( import (
"reflect"
"testing" "testing"
"time" "time"
@ -39,11 +40,11 @@ func TestStream(t *testing.T) {
} }
// Process response // Process response
switch res.Type { switch r := res.Responses.(type) {
case types.MessageType_AppendTx: case *types.Response_AppendTx:
counter += 1 counter += 1
if res.Code != types.CodeType_OK { if r.AppendTx.Code != types.CodeType_OK {
t.Error("AppendTx failed with ret_code", res.Code) t.Error("AppendTx failed with ret_code", r.AppendTx.Code)
} }
if counter > numAppendTxs { if counter > numAppendTxs {
t.Fatal("Too many AppendTx responses") t.Fatal("Too many AppendTx responses")
@ -55,10 +56,10 @@ func TestStream(t *testing.T) {
close(done) close(done)
}() }()
} }
case types.MessageType_Flush: case *types.Response_Flush:
// ignore // ignore
default: default:
t.Error("Unexpected response type", res.Type) t.Error("Unexpected response type", reflect.TypeOf(res.Responses))
} }
} }
}() }()
@ -66,7 +67,7 @@ func TestStream(t *testing.T) {
// Write requests // Write requests
for counter := 0; counter < numAppendTxs; counter++ { for counter := 0; counter < numAppendTxs; counter++ {
// Send request // Send request
var req = types.RequestAppendTx([]byte("test")) var req = types.ToRequestAppendTx([]byte("test"))
err := types.WriteMessage(req, conn) err := types.WriteMessage(req, conn)
if err != nil { if err != nil {
t.Fatal(err.Error()) t.Fatal(err.Error())
@ -75,7 +76,7 @@ func TestStream(t *testing.T) {
// Sometimes send flush messages // Sometimes send flush messages
if counter%123 == 0 { if counter%123 == 0 {
t.Log("flush") t.Log("flush")
err := types.WriteMessage(types.RequestFlush(), conn) err := types.WriteMessage(types.ToRequestFlush(), conn)
if err != nil { if err != nil {
t.Fatal(err.Error()) t.Fatal(err.Error())
} }
@ -83,7 +84,7 @@ func TestStream(t *testing.T) {
} }
// Send final flush message // Send final flush message
err = types.WriteMessage(types.RequestFlush(), conn) err = types.WriteMessage(types.ToRequestFlush(), conn)
if err != nil { if err != nil {
t.Fatal(err.Error()) t.Fatal(err.Error())
} }

View File

@ -1,6 +1,7 @@
package nilapp package nilapp
import ( import (
"reflect"
"testing" "testing"
"time" "time"
@ -39,11 +40,11 @@ func TestStream(t *testing.T) {
} }
// Process response // Process response
switch res.Type { switch r := res.Responses.(type) {
case types.MessageType_AppendTx: case *types.Response_AppendTx:
counter += 1 counter += 1
if res.Code != types.CodeType_OK { if r.AppendTx.Code != types.CodeType_OK {
t.Error("AppendTx failed with ret_code", res.Code) t.Error("AppendTx failed with ret_code", r.AppendTx.Code)
} }
if counter > numAppendTxs { if counter > numAppendTxs {
t.Fatal("Too many AppendTx responses") t.Fatal("Too many AppendTx responses")
@ -55,10 +56,10 @@ func TestStream(t *testing.T) {
close(done) close(done)
}() }()
} }
case types.MessageType_Flush: case *types.Response_Flush:
// ignore // ignore
default: default:
t.Error("Unexpected response type", res.Type) t.Error("Unexpected response type", reflect.TypeOf(res.Responses))
} }
} }
}() }()
@ -66,7 +67,7 @@ func TestStream(t *testing.T) {
// Write requests // Write requests
for counter := 0; counter < numAppendTxs; counter++ { for counter := 0; counter < numAppendTxs; counter++ {
// Send request // Send request
var req = types.RequestAppendTx([]byte("test")) var req = types.ToRequestAppendTx([]byte("test"))
err := types.WriteMessage(req, conn) err := types.WriteMessage(req, conn)
if err != nil { if err != nil {
t.Fatal(err.Error()) t.Fatal(err.Error())
@ -75,7 +76,7 @@ func TestStream(t *testing.T) {
// Sometimes send flush messages // Sometimes send flush messages
if counter%123 == 0 { if counter%123 == 0 {
t.Log("flush") t.Log("flush")
err := types.WriteMessage(types.RequestFlush(), conn) err := types.WriteMessage(types.ToRequestFlush(), conn)
if err != nil { if err != nil {
t.Fatal(err.Error()) t.Fatal(err.Error())
} }
@ -83,7 +84,7 @@ func TestStream(t *testing.T) {
} }
// Send final flush message // Send final flush message
err = types.WriteMessage(types.RequestFlush(), conn) err = types.WriteMessage(types.ToRequestFlush(), conn)
if err != nil { if err != nil {
t.Fatal(err.Error()) t.Fatal(err.Error())
} }

View File

@ -36,7 +36,7 @@ func main() {
counter := 0 counter := 0
for i := 0; ; i++ { for i := 0; ; i++ {
var bufWriter = bufio.NewWriter(conn) var bufWriter = bufio.NewWriter(conn)
var req = types.RequestEcho("foobar") var req = types.ToRequestEcho("foobar")
err := types.WriteMessage(req, bufWriter) err := types.WriteMessage(req, bufWriter)
if err != nil { if err != nil {

View File

@ -5,6 +5,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"net" "net"
"reflect"
//"encoding/hex" //"encoding/hex"
. "github.com/tendermint/go-common" . "github.com/tendermint/go-common"
@ -21,7 +22,7 @@ func main() {
// Make a bunch of requests // Make a bunch of requests
counter := 0 counter := 0
for i := 0; ; i++ { for i := 0; ; i++ {
req := types.RequestEcho("foobar") req := types.ToRequestEcho("foobar")
_, err := makeRequest(conn, req) _, err := makeRequest(conn, req)
if err != nil { if err != nil {
Exit(err.Error()) Exit(err.Error())
@ -41,7 +42,7 @@ func makeRequest(conn net.Conn, req *types.Request) (*types.Response, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
err = types.WriteMessage(types.RequestFlush(), bufWriter) err = types.WriteMessage(types.ToRequestFlush(), bufWriter)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -61,8 +62,8 @@ func makeRequest(conn net.Conn, req *types.Request) (*types.Response, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
if resFlush.Type != types.MessageType_Flush { if _, ok := resFlush.Responses.(*types.Response_Flush); !ok {
return nil, errors.New(Fmt("Expected flush response but got something else: %v", resFlush.Type)) return nil, errors.New(Fmt("Expected flush response but got something else: %v", reflect.TypeOf(resFlush)))
} }
return res, nil return res, nil

View File

@ -9,7 +9,7 @@ import (
func ToRequestEcho(message string) *Request { func ToRequestEcho(message string) *Request {
return &Request{ return &Request{
Requests: &Request_Echo{&RequestEcho{}}, Requests: &Request_Echo{&RequestEcho{message}},
} }
} }