Add tests
This commit is contained in:
parent
a12224c997
commit
eadee97e5e
134
lrpc_test.go
Normal file
134
lrpc_test.go
Normal file
@ -0,0 +1,134 @@
|
||||
package lrpc_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/gob"
|
||||
"net"
|
||||
"testing"
|
||||
|
||||
"go.arsenm.dev/lrpc/client"
|
||||
"go.arsenm.dev/lrpc/codec"
|
||||
"go.arsenm.dev/lrpc/server"
|
||||
)
|
||||
|
||||
type Arith struct{}
|
||||
|
||||
func (Arith) Add(ctx *server.Context, in [2]int) int {
|
||||
return in[0] + in[1]
|
||||
}
|
||||
|
||||
func (Arith) Mul(ctx *server.Context, in [2]int) int {
|
||||
return in[0] * in[1]
|
||||
}
|
||||
|
||||
func (Arith) Div(ctx *server.Context, in [2]int) int {
|
||||
return in[0] / in[1]
|
||||
}
|
||||
|
||||
func (Arith) Sub(ctx *server.Context, in [2]int) int {
|
||||
return in[0] - in[1]
|
||||
}
|
||||
|
||||
func TestCalls(t *testing.T) {
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
// Create new network pipe
|
||||
sConn, cConn := net.Pipe()
|
||||
|
||||
s := server.New()
|
||||
defer s.Close()
|
||||
// Register Arith for RPC
|
||||
s.Register(Arith{})
|
||||
// Serve the pipe connection using default codec
|
||||
go s.ServeConn(ctx, sConn, codec.Default)
|
||||
|
||||
// Create new client using default codec
|
||||
c := client.New(cConn, codec.Default)
|
||||
defer c.Close()
|
||||
|
||||
// Call Arith.Add()
|
||||
var add int
|
||||
err := c.Call(ctx, "Arith", "Add", [2]int{5, 5}, &add)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
// Call Arith.Sub()
|
||||
var sub int
|
||||
err = c.Call(ctx, "Arith", "Sub", [2]int{5, 5}, &sub)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
// Call Arith.Mul()
|
||||
var mul int
|
||||
err = c.Call(ctx, "Arith", "Mul", [2]int{5, 5}, &mul)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
// Call Arith.Div()
|
||||
var div int
|
||||
err = c.Call(ctx, "Arith", "Div", [2]int{5, 5}, &div)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
if add != 10 {
|
||||
t.Errorf("add: expected 10, got %d", add)
|
||||
}
|
||||
|
||||
if sub != 0 {
|
||||
t.Errorf("sub: expected 0, got %d", sub)
|
||||
}
|
||||
|
||||
if mul != 25 {
|
||||
t.Errorf("mul: expected 25, got %d", mul)
|
||||
}
|
||||
|
||||
if div != 1 {
|
||||
t.Errorf("div: expected 1, got %d", div)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCodecs(t *testing.T) {
|
||||
// Register the 2-integer array for gob
|
||||
gob.Register([2]int{})
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
// Create function to test each codec
|
||||
testCodec := func(cf codec.CodecFunc, name string) {
|
||||
// Create network pipe
|
||||
sConn, cConn := net.Pipe()
|
||||
|
||||
s := server.New()
|
||||
defer s.Close()
|
||||
// Register Arith for RPC
|
||||
s.Register(Arith{})
|
||||
// Serve the pipe connection using provided codec
|
||||
go s.ServeConn(ctx, sConn, cf)
|
||||
|
||||
// Create new client using provided codec
|
||||
c := client.New(cConn, cf)
|
||||
defer c.Close()
|
||||
|
||||
// Call Arith.Add()
|
||||
var add int
|
||||
err := c.Call(ctx, "Arith", "Add", [2]int{2, 2}, &add)
|
||||
if err != nil {
|
||||
t.Errorf("codec/%s: %v", name, err)
|
||||
}
|
||||
|
||||
if add != 4 {
|
||||
t.Errorf("codec/%s: add: expected 4, got %d", name, add)
|
||||
}
|
||||
}
|
||||
|
||||
// Test all codecs
|
||||
testCodec(codec.Msgpack, "msgpack")
|
||||
testCodec(codec.JSON, "json")
|
||||
testCodec(codec.Gob, "gob")
|
||||
}
|
Reference in New Issue
Block a user