blob: 7c94feb8fda5e15c2aad6ee327df0c606d9c5529 [file] [log] [blame]
Austin Schuhe89fa2d2019-08-14 20:24:23 -07001package testing
2
3import (
James Kuszmaul8e62b022022-03-22 09:33:25 -07004 flatbuffers "github.com/google/flatbuffers/go"
5 "github.com/google/flatbuffers/tests/MyGame/Example"
Austin Schuhe89fa2d2019-08-14 20:24:23 -07006
7 "context"
8 "net"
9 "testing"
10
11 "google.golang.org/grpc"
James Kuszmaul8e62b022022-03-22 09:33:25 -070012 "google.golang.org/grpc/encoding"
Austin Schuhe89fa2d2019-08-14 20:24:23 -070013)
14
James Kuszmaul8e62b022022-03-22 09:33:25 -070015type server struct {
16 Example.UnimplementedMonsterStorageServer
17}
Austin Schuhe89fa2d2019-08-14 20:24:23 -070018
19// test used to send and receive in grpc methods
20var test = "Flatbuffers"
21var addr = "0.0.0.0:50051"
22
23// gRPC server store method
24func (s *server) Store(context context.Context, in *Example.Monster) (*flatbuffers.Builder, error) {
25 b := flatbuffers.NewBuilder(0)
26 i := b.CreateString(test)
27 Example.StatStart(b)
28 Example.StatAddId(b, i)
29 b.Finish(Example.StatEnd(b))
30 return b, nil
31
32}
33
34// gRPC server retrieve method
35func (s *server) Retrieve(context context.Context, in *Example.Stat) (*flatbuffers.Builder, error) {
36 b := flatbuffers.NewBuilder(0)
37 i := b.CreateString(test)
38 Example.MonsterStart(b)
39 Example.MonsterAddName(b, i)
40 b.Finish(Example.MonsterEnd(b))
41 return b, nil
42}
43
44func StoreClient(c Example.MonsterStorageClient, t *testing.T) {
45 b := flatbuffers.NewBuilder(0)
46 i := b.CreateString(test)
47 Example.MonsterStart(b)
48 Example.MonsterAddName(b, i)
49 b.Finish(Example.MonsterEnd(b))
50 out, err := c.Store(context.Background(), b)
51 if err != nil {
52 t.Fatalf("Store client failed: %v", err)
53 }
54 if string(out.Id()) != test {
55 t.Errorf("StoreClient failed: expected=%s, got=%s\n", test, out.Id())
56 t.Fail()
57 }
58}
59
60func RetrieveClient(c Example.MonsterStorageClient, t *testing.T) {
61 b := flatbuffers.NewBuilder(0)
62 i := b.CreateString(test)
63 Example.StatStart(b)
64 Example.StatAddId(b, i)
65 b.Finish(Example.StatEnd(b))
66 out, err := c.Retrieve(context.Background(), b)
67 if err != nil {
68 t.Fatalf("Retrieve client failed: %v", err)
69 }
James Kuszmaul8e62b022022-03-22 09:33:25 -070070 monster, err := out.Recv()
71 if err != nil {
72 t.Fatalf("Recv failed: %v", err)
73 }
74 if string(monster.Name()) != test {
75 t.Errorf("RetrieveClient failed: expected=%s, got=%s\n", test, monster.Name())
Austin Schuhe89fa2d2019-08-14 20:24:23 -070076 t.Fail()
77 }
78}
79
80func TestGRPC(t *testing.T) {
81 lis, err := net.Listen("tcp", addr)
82 if err != nil {
83 t.Fatalf("Failed to listen: %v", err)
84 }
Austin Schuh272c6132020-11-14 16:37:52 -080085 ser := grpc.NewServer()
James Kuszmaul8e62b022022-03-22 09:33:25 -070086 encoding.RegisterCodec(flatbuffers.FlatbuffersCodec{})
Austin Schuhe89fa2d2019-08-14 20:24:23 -070087 Example.RegisterMonsterStorageServer(ser, &server{})
88 go func() {
89 if err := ser.Serve(lis); err != nil {
90 t.Fatalf("Failed to serve: %v", err)
91 t.FailNow()
92 }
93 }()
94 conn, err := grpc.Dial(addr, grpc.WithInsecure(), grpc.WithCodec(flatbuffers.FlatbuffersCodec{}))
95 if err != nil {
96 t.Fatalf("Failed to connect: %v", err)
97 }
98 defer conn.Close()
99 client := Example.NewMonsterStorageClient(conn)
100 StoreClient(client, t)
101 RetrieveClient(client, t)
102}