• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1package testing
2
3import (
4	"../../tests/MyGame/Example"
5
6	"context"
7	"net"
8	"testing"
9
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