1*890232f2SAndroid Build Coastguard Workerpackage testing 2*890232f2SAndroid Build Coastguard Worker 3*890232f2SAndroid Build Coastguard Workerimport ( 4*890232f2SAndroid Build Coastguard Worker flatbuffers "github.com/google/flatbuffers/go" 5*890232f2SAndroid Build Coastguard Worker "github.com/google/flatbuffers/tests/MyGame/Example" 6*890232f2SAndroid Build Coastguard Worker 7*890232f2SAndroid Build Coastguard Worker "context" 8*890232f2SAndroid Build Coastguard Worker "net" 9*890232f2SAndroid Build Coastguard Worker "testing" 10*890232f2SAndroid Build Coastguard Worker 11*890232f2SAndroid Build Coastguard Worker "google.golang.org/grpc" 12*890232f2SAndroid Build Coastguard Worker "google.golang.org/grpc/encoding" 13*890232f2SAndroid Build Coastguard Worker) 14*890232f2SAndroid Build Coastguard Worker 15*890232f2SAndroid Build Coastguard Workertype server struct { 16*890232f2SAndroid Build Coastguard Worker Example.UnimplementedMonsterStorageServer 17*890232f2SAndroid Build Coastguard Worker} 18*890232f2SAndroid Build Coastguard Worker 19*890232f2SAndroid Build Coastguard Worker// test used to send and receive in grpc methods 20*890232f2SAndroid Build Coastguard Workervar test = "Flatbuffers" 21*890232f2SAndroid Build Coastguard Workervar addr = "0.0.0.0:50051" 22*890232f2SAndroid Build Coastguard Worker 23*890232f2SAndroid Build Coastguard Worker// gRPC server store method 24*890232f2SAndroid Build Coastguard Workerfunc (s *server) Store(context context.Context, in *Example.Monster) (*flatbuffers.Builder, error) { 25*890232f2SAndroid Build Coastguard Worker b := flatbuffers.NewBuilder(0) 26*890232f2SAndroid Build Coastguard Worker i := b.CreateString(test) 27*890232f2SAndroid Build Coastguard Worker Example.StatStart(b) 28*890232f2SAndroid Build Coastguard Worker Example.StatAddId(b, i) 29*890232f2SAndroid Build Coastguard Worker b.Finish(Example.StatEnd(b)) 30*890232f2SAndroid Build Coastguard Worker return b, nil 31*890232f2SAndroid Build Coastguard Worker 32*890232f2SAndroid Build Coastguard Worker} 33*890232f2SAndroid Build Coastguard Worker 34*890232f2SAndroid Build Coastguard Worker// gRPC server retrieve method 35*890232f2SAndroid Build Coastguard Workerfunc (s *server) Retrieve(context context.Context, in *Example.Stat) (*flatbuffers.Builder, error) { 36*890232f2SAndroid Build Coastguard Worker b := flatbuffers.NewBuilder(0) 37*890232f2SAndroid Build Coastguard Worker i := b.CreateString(test) 38*890232f2SAndroid Build Coastguard Worker Example.MonsterStart(b) 39*890232f2SAndroid Build Coastguard Worker Example.MonsterAddName(b, i) 40*890232f2SAndroid Build Coastguard Worker b.Finish(Example.MonsterEnd(b)) 41*890232f2SAndroid Build Coastguard Worker return b, nil 42*890232f2SAndroid Build Coastguard Worker} 43*890232f2SAndroid Build Coastguard Worker 44*890232f2SAndroid Build Coastguard Workerfunc StoreClient(c Example.MonsterStorageClient, t *testing.T) { 45*890232f2SAndroid Build Coastguard Worker b := flatbuffers.NewBuilder(0) 46*890232f2SAndroid Build Coastguard Worker i := b.CreateString(test) 47*890232f2SAndroid Build Coastguard Worker Example.MonsterStart(b) 48*890232f2SAndroid Build Coastguard Worker Example.MonsterAddName(b, i) 49*890232f2SAndroid Build Coastguard Worker b.Finish(Example.MonsterEnd(b)) 50*890232f2SAndroid Build Coastguard Worker out, err := c.Store(context.Background(), b) 51*890232f2SAndroid Build Coastguard Worker if err != nil { 52*890232f2SAndroid Build Coastguard Worker t.Fatalf("Store client failed: %v", err) 53*890232f2SAndroid Build Coastguard Worker } 54*890232f2SAndroid Build Coastguard Worker if string(out.Id()) != test { 55*890232f2SAndroid Build Coastguard Worker t.Errorf("StoreClient failed: expected=%s, got=%s\n", test, out.Id()) 56*890232f2SAndroid Build Coastguard Worker t.Fail() 57*890232f2SAndroid Build Coastguard Worker } 58*890232f2SAndroid Build Coastguard Worker} 59*890232f2SAndroid Build Coastguard Worker 60*890232f2SAndroid Build Coastguard Workerfunc RetrieveClient(c Example.MonsterStorageClient, t *testing.T) { 61*890232f2SAndroid Build Coastguard Worker b := flatbuffers.NewBuilder(0) 62*890232f2SAndroid Build Coastguard Worker i := b.CreateString(test) 63*890232f2SAndroid Build Coastguard Worker Example.StatStart(b) 64*890232f2SAndroid Build Coastguard Worker Example.StatAddId(b, i) 65*890232f2SAndroid Build Coastguard Worker b.Finish(Example.StatEnd(b)) 66*890232f2SAndroid Build Coastguard Worker out, err := c.Retrieve(context.Background(), b) 67*890232f2SAndroid Build Coastguard Worker if err != nil { 68*890232f2SAndroid Build Coastguard Worker t.Fatalf("Retrieve client failed: %v", err) 69*890232f2SAndroid Build Coastguard Worker } 70*890232f2SAndroid Build Coastguard Worker monster, err := out.Recv() 71*890232f2SAndroid Build Coastguard Worker if err != nil { 72*890232f2SAndroid Build Coastguard Worker t.Fatalf("Recv failed: %v", err) 73*890232f2SAndroid Build Coastguard Worker } 74*890232f2SAndroid Build Coastguard Worker if string(monster.Name()) != test { 75*890232f2SAndroid Build Coastguard Worker t.Errorf("RetrieveClient failed: expected=%s, got=%s\n", test, monster.Name()) 76*890232f2SAndroid Build Coastguard Worker t.Fail() 77*890232f2SAndroid Build Coastguard Worker } 78*890232f2SAndroid Build Coastguard Worker} 79*890232f2SAndroid Build Coastguard Worker 80*890232f2SAndroid Build Coastguard Workerfunc TestGRPC(t *testing.T) { 81*890232f2SAndroid Build Coastguard Worker lis, err := net.Listen("tcp", addr) 82*890232f2SAndroid Build Coastguard Worker if err != nil { 83*890232f2SAndroid Build Coastguard Worker t.Fatalf("Failed to listen: %v", err) 84*890232f2SAndroid Build Coastguard Worker } 85*890232f2SAndroid Build Coastguard Worker ser := grpc.NewServer() 86*890232f2SAndroid Build Coastguard Worker encoding.RegisterCodec(flatbuffers.FlatbuffersCodec{}) 87*890232f2SAndroid Build Coastguard Worker Example.RegisterMonsterStorageServer(ser, &server{}) 88*890232f2SAndroid Build Coastguard Worker go func() { 89*890232f2SAndroid Build Coastguard Worker if err := ser.Serve(lis); err != nil { 90*890232f2SAndroid Build Coastguard Worker t.Fatalf("Failed to serve: %v", err) 91*890232f2SAndroid Build Coastguard Worker t.FailNow() 92*890232f2SAndroid Build Coastguard Worker } 93*890232f2SAndroid Build Coastguard Worker }() 94*890232f2SAndroid Build Coastguard Worker conn, err := grpc.Dial(addr, grpc.WithInsecure(), grpc.WithCodec(flatbuffers.FlatbuffersCodec{})) 95*890232f2SAndroid Build Coastguard Worker if err != nil { 96*890232f2SAndroid Build Coastguard Worker t.Fatalf("Failed to connect: %v", err) 97*890232f2SAndroid Build Coastguard Worker } 98*890232f2SAndroid Build Coastguard Worker defer conn.Close() 99*890232f2SAndroid Build Coastguard Worker client := Example.NewMonsterStorageClient(conn) 100*890232f2SAndroid Build Coastguard Worker StoreClient(client, t) 101*890232f2SAndroid Build Coastguard Worker RetrieveClient(client, t) 102*890232f2SAndroid Build Coastguard Worker} 103