Home | History | Annotate | Download | only in tests
      1 package testing
      2 
      3 import (
      4 	"../../tests/MyGame/Example"
      5 
      6 	"net"
      7 	"testing"
      8 
      9 	"golang.org/x/net/context"
     10 	"google.golang.org/grpc"
     11 )
     12 
     13 type server struct{}
     14 
     15 // test used to send and receive in grpc methods
     16 var test = "Flatbuffers"
     17 var addr = "0.0.0.0:50051"
     18 
     19 // gRPC server store method
     20 func (s *server) Store(context context.Context, in *Example.Monster) (*flatbuffers.Builder, error) {
     21 	b := flatbuffers.NewBuilder(0)
     22 	i := b.CreateString(test)
     23 	Example.StatStart(b)
     24 	Example.StatAddId(b, i)
     25 	b.Finish(Example.StatEnd(b))
     26 	return b, nil
     27 
     28 }
     29 
     30 // gRPC server retrieve method
     31 func (s *server) Retrieve(context context.Context, in *Example.Stat) (*flatbuffers.Builder, error) {
     32 	b := flatbuffers.NewBuilder(0)
     33 	i := b.CreateString(test)
     34 	Example.MonsterStart(b)
     35 	Example.MonsterAddName(b, i)
     36 	b.Finish(Example.MonsterEnd(b))
     37 	return b, nil
     38 }
     39 
     40 func StoreClient(c Example.MonsterStorageClient, t *testing.T) {
     41 	b := flatbuffers.NewBuilder(0)
     42 	i := b.CreateString(test)
     43 	Example.MonsterStart(b)
     44 	Example.MonsterAddName(b, i)
     45 	b.Finish(Example.MonsterEnd(b))
     46 	out, err := c.Store(context.Background(), b)
     47 	if err != nil {
     48 		t.Fatalf("Store client failed: %v", err)
     49 	}
     50 	if string(out.Id()) != test {
     51 		t.Errorf("StoreClient failed: expected=%s, got=%s\n", test, out.Id())
     52 		t.Fail()
     53 	}
     54 }
     55 
     56 func RetrieveClient(c Example.MonsterStorageClient, t *testing.T) {
     57 	b := flatbuffers.NewBuilder(0)
     58 	i := b.CreateString(test)
     59 	Example.StatStart(b)
     60 	Example.StatAddId(b, i)
     61 	b.Finish(Example.StatEnd(b))
     62 	out, err := c.Retrieve(context.Background(), b)
     63 	if err != nil {
     64 		t.Fatalf("Retrieve client failed: %v", err)
     65 	}
     66 	if string(out.Name()) != test {
     67 		t.Errorf("RetrieveClient failed: expected=%s, got=%s\n", test, out.Name())
     68 		t.Fail()
     69 	}
     70 }
     71 
     72 func TestGRPC(t *testing.T) {
     73 	lis, err := net.Listen("tcp", addr)
     74 	if err != nil {
     75 		t.Fatalf("Failed to listen: %v", err)
     76 	}
     77 	ser := grpc.NewServer(grpc.CustomCodec(flatbuffers.FlatbuffersCodec{}))
     78 	Example.RegisterMonsterStorageServer(ser, &server{})
     79 	go func() {
     80 		if err := ser.Serve(lis); err != nil {
     81 			t.Fatalf("Failed to serve: %v", err)
     82 			t.FailNow()
     83 		}
     84 	}()
     85 	conn, err := grpc.Dial(addr, grpc.WithInsecure(), grpc.WithCodec(flatbuffers.FlatbuffersCodec{}))
     86 	if err != nil {
     87 		t.Fatalf("Failed to connect: %v", err)
     88 	}
     89 	defer conn.Close()
     90 	client := Example.NewMonsterStorageClient(conn)
     91 	StoreClient(client, t)
     92 	RetrieveClient(client, t)
     93 }
     94