1package testing 2 3import ( 4 "../../tests/MyGame/Example" 5 6 "net" 7 "testing" 8 9 "golang.org/x/net/context" 10 "google.golang.org/grpc" 11) 12 13type server struct{} 14 15// test used to send and receive in grpc methods 16var test = "Flatbuffers" 17var addr = "0.0.0.0:50051" 18 19// gRPC server store method 20func (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 31func (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 40func 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 56func 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 72func 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