...
1 package testing
2
3 import (
4 flatbuffers "github.com/google/flatbuffers/go"
5 "github.com/google/flatbuffers/tests/MyGame/Example"
6
7 "context"
8 "net"
9 "testing"
10
11 "google.golang.org/grpc"
12 "google.golang.org/grpc/encoding"
13 )
14
15 type server struct {
16 Example.UnimplementedMonsterStorageServer
17 }
18
19
20 var test = "Flatbuffers"
21 var addr = "0.0.0.0:50051"
22
23
24 func (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
35 func (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
44 func 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
60 func 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 }
70 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())
76 t.Fail()
77 }
78 }
79
80 func TestGRPC(t *testing.T) {
81 lis, err := net.Listen("tcp", addr)
82 if err != nil {
83 t.Fatalf("Failed to listen: %v", err)
84 }
85 ser := grpc.NewServer()
86 encoding.RegisterCodec(flatbuffers.FlatbuffersCodec{})
87 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 }
103
View as plain text