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