...

Source file src/github.com/google/flatbuffers/grpc/tests/go_test.go

Documentation: github.com/google/flatbuffers/grpc/tests

     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  // test used to send and receive in grpc methods
    20  var test = "Flatbuffers"
    21  var addr = "0.0.0.0:50051"
    22  
    23  // gRPC server store method
    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  // gRPC server retrieve method
    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