This is an automated email from the ASF dual-hosted git repository.

laurence pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new 5892eec  refine grpc test code (#1266)
5892eec is described below

commit 5892eecea460e989896eee65448619a3d9169360
Author: gaoxinge <[email protected]>
AuthorDate: Fri Jun 25 13:19:58 2021 +0800

    refine grpc test code (#1266)
    
    * refine grpc test code
    
    * fix test
    
    * remove useless code
    
    * config test grpc server
---
 protocol/grpc/client_test.go        |  24 +++++---
 protocol/grpc/common_test.go        | 114 ------------------------------------
 protocol/grpc/grpc_invoker_test.go  |  31 +++++-----
 protocol/grpc/grpc_protocol_test.go |  15 +++--
 protocol/grpc/internal/server.go    |  51 ++++++++++------
 5 files changed, 75 insertions(+), 160 deletions(-)

diff --git a/protocol/grpc/client_test.go b/protocol/grpc/client_test.go
index 2e28655..b53eac2 100644
--- a/protocol/grpc/client_test.go
+++ b/protocol/grpc/client_test.go
@@ -18,6 +18,7 @@
 package grpc
 
 import (
+       "context"
        "reflect"
        "testing"
 )
@@ -29,7 +30,6 @@ import (
 
 import (
        "dubbo.apache.org/dubbo-go/v3/common"
-       "dubbo.apache.org/dubbo-go/v3/common/logger"
        "dubbo.apache.org/dubbo-go/v3/protocol/grpc/internal"
 )
 
@@ -44,14 +44,20 @@ func TestGetInvoker(t *testing.T) {
 }
 
 func TestNewClient(t *testing.T) {
-       go internal.InitGrpcServer()
-       defer internal.ShutdownGrpcServer()
+       server, err := internal.NewServer("127.0.0.1:30000")
+       assert.NoError(t, err)
+       go server.Start()
+       defer server.Stop()
+
+       url, err := common.NewURL(mockGrpcCommonUrl)
+       assert.NoError(t, err)
 
-       url, err := 
common.NewURL("grpc://127.0.0.1:30000/GrpcGreeterImpl?accesslog=&anyhost=true&app.version=0.0.1&application=BDTService&async=false&bean.name=GrpcGreeterImpl&category=providers&cluster=failover&dubbo=dubbo-provider-golang-2.6.0&environment=dev&execute.limit=&execute.limit.rejected.handler=&generic=false&group=&interface=io.grpc.examples.helloworld.GreeterGrpc%24IGreeter&ip=192.168.1.106&loadbalance=random&methods.SayHello.loadbalance=random&methods.SayHello.retries=1&methods.
 [...]
-       assert.Nil(t, err)
        cli, err := NewClient(url)
-       if err != nil {
-               logger.Errorf("grpc new client error %v", err)
-       }
-       assert.NotNil(t, cli)
+       assert.NoError(t, err)
+
+       impl := &internal.GreeterClientImpl{}
+       client := impl.GetDubboStub(cli.ClientConn)
+       result, err := client.SayHello(context.Background(), 
&internal.HelloRequest{Name: "request name"})
+       assert.NoError(t, err)
+       assert.Equal(t, &internal.HelloReply{Message: "Hello request name"}, 
result)
 }
diff --git a/protocol/grpc/common_test.go b/protocol/grpc/common_test.go
deleted file mode 100644
index 5f44199..0000000
--- a/protocol/grpc/common_test.go
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package grpc
-
-import (
-       "context"
-       "fmt"
-)
-
-import (
-       native_grpc "google.golang.org/grpc"
-)
-
-import (
-       "dubbo.apache.org/dubbo-go/v3/config"
-       "dubbo.apache.org/dubbo-go/v3/protocol"
-       "dubbo.apache.org/dubbo-go/v3/protocol/grpc/internal"
-       "dubbo.apache.org/dubbo-go/v3/protocol/invocation"
-)
-
-// userd grpc-dubbo biz service
-func addService() {
-       config.SetProviderService(newGreeterProvider())
-}
-
-type greeterProvider struct {
-       *greeterProviderBase
-}
-
-func newGreeterProvider() *greeterProvider {
-       return &greeterProvider{
-               greeterProviderBase: &greeterProviderBase{},
-       }
-}
-
-func (g *greeterProvider) SayHello(ctx context.Context, req 
*internal.HelloRequest) (reply *internal.HelloReply, err error) {
-       fmt.Printf("req: %v", req)
-       return &internal.HelloReply{Message: "this is message from reply"}, nil
-}
-
-func (g *greeterProvider) Reference() string {
-       return "GrpcGreeterImpl"
-}
-
-// code generated by greeter.go
-type greeterProviderBase struct {
-       proxyImpl protocol.Invoker
-}
-
-func (g *greeterProviderBase) SetProxyImpl(impl protocol.Invoker) {
-       g.proxyImpl = impl
-}
-
-func (g *greeterProviderBase) GetProxyImpl() protocol.Invoker {
-       return g.proxyImpl
-}
-
-func (g *greeterProviderBase) ServiceDesc() *native_grpc.ServiceDesc {
-       return &native_grpc.ServiceDesc{
-               ServiceName: "helloworld.Greeter",
-               HandlerType: (*internal.GreeterServer)(nil),
-               Methods: []native_grpc.MethodDesc{
-                       {
-                               MethodName: "SayHello",
-                               Handler:    dubboGreeterSayHelloHandler,
-                       },
-               },
-               Streams:  []native_grpc.StreamDesc{},
-               Metadata: "helloworld.proto",
-       }
-}
-
-func dubboGreeterSayHelloHandler(srv interface{}, ctx context.Context,
-       dec func(interface{}) error, interceptor 
native_grpc.UnaryServerInterceptor) (interface{}, error) {
-
-       in := new(internal.HelloRequest)
-       if err := dec(in); err != nil {
-               return nil, err
-       }
-       base := srv.(DubboGrpcService)
-
-       args := []interface{}{}
-       args = append(args, in)
-       invo := invocation.NewRPCInvocation("SayHello", args, nil)
-
-       if interceptor == nil {
-               result := base.GetProxyImpl().Invoke(context.Background(), invo)
-               return result.Result(), result.Error()
-       }
-       info := &native_grpc.UnaryServerInfo{
-               Server:     srv,
-               FullMethod: "/helloworld.Greeter/SayHello",
-       }
-       handler := func(context.Context, interface{}) (interface{}, error) {
-               result := base.GetProxyImpl().Invoke(context.Background(), invo)
-               return result.Result(), result.Error()
-       }
-       return interceptor(ctx, in, info, handler)
-}
diff --git a/protocol/grpc/grpc_invoker_test.go 
b/protocol/grpc/grpc_invoker_test.go
index f657e64..70a7e5d 100644
--- a/protocol/grpc/grpc_invoker_test.go
+++ b/protocol/grpc/grpc_invoker_test.go
@@ -29,7 +29,6 @@ import (
 
 import (
        "dubbo.apache.org/dubbo-go/v3/common"
-       "dubbo.apache.org/dubbo-go/v3/common/logger"
        "dubbo.apache.org/dubbo-go/v3/protocol/grpc/internal"
        "dubbo.apache.org/dubbo-go/v3/protocol/invocation"
 )
@@ -43,25 +42,29 @@ const (
 )
 
 func TestInvoke(t *testing.T) {
-       go internal.InitGrpcServer()
-       defer internal.ShutdownGrpcServer()
+       server, err := internal.NewServer("127.0.0.1:30000")
+       assert.NoError(t, err)
+       go server.Start()
+       defer server.Stop()
 
        url, err := common.NewURL(mockGrpcCommonUrl)
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
        cli, err := NewClient(url)
-       if err != nil {
-               logger.Errorf("grpc new client error %v", err)
-       }
-       invoker := NewGrpcInvoker(url, cli)
+       assert.NoError(t, err)
 
-       args := []reflect.Value{}
+       var args []reflect.Value
        args = append(args, reflect.ValueOf(&internal.HelloRequest{Name: 
"request name"}))
        bizReply := &internal.HelloReply{}
-       invo := 
invocation.NewRPCInvocationWithOptions(invocation.WithMethodName("SayHello"),
-               invocation.WithParameterValues(args), 
invocation.WithReply(bizReply))
+       invo := invocation.NewRPCInvocationWithOptions(
+               invocation.WithMethodName("SayHello"),
+               invocation.WithParameterValues(args),
+               invocation.WithReply(bizReply),
+       )
+
+       invoker := NewGrpcInvoker(url, cli)
        res := invoker.Invoke(context.Background(), invo)
-       assert.Nil(t, res.Error())
-       assert.NotNil(t, res.Result())
-       assert.Equal(t, "Hello request name", bizReply.Message)
+       assert.NoError(t, res.Error())
+       assert.Equal(t, &internal.HelloReply{Message: "Hello request name"}, 
res.Result().(reflect.Value).Interface())
+       assert.Equal(t, &internal.HelloReply{Message: "Hello request name"}, 
bizReply)
 }
diff --git a/protocol/grpc/grpc_protocol_test.go 
b/protocol/grpc/grpc_protocol_test.go
index 8163c51..c48ddb4 100644
--- a/protocol/grpc/grpc_protocol_test.go
+++ b/protocol/grpc/grpc_protocol_test.go
@@ -69,12 +69,13 @@ func doInitProvider() {
 
 func TestGrpcProtocolExport(t *testing.T) {
        // Export
-       addService()
+       config.SetProviderService(internal.NewService())
        doInitProvider()
 
-       proto := GetProtocol()
        url, err := common.NewURL(mockGrpcCommonUrl)
        assert.NoError(t, err)
+
+       proto := GetProtocol()
        exporter := proto.Export(protocol.NewBaseInvoker(url))
        time.Sleep(time.Second)
 
@@ -98,13 +99,15 @@ func TestGrpcProtocolExport(t *testing.T) {
 }
 
 func TestGrpcProtocolRefer(t *testing.T) {
-       go internal.InitGrpcServer()
-       defer internal.ShutdownGrpcServer()
-       time.Sleep(time.Second)
+       server, err := internal.NewServer("127.0.0.1:30000")
+       assert.NoError(t, err)
+       go server.Start()
+       defer server.Stop()
 
-       proto := GetProtocol()
        url, err := common.NewURL(mockGrpcCommonUrl)
        assert.NoError(t, err)
+
+       proto := GetProtocol()
        invoker := proto.Refer(url)
 
        // make sure url
diff --git a/protocol/grpc/internal/server.go b/protocol/grpc/internal/server.go
index 6e17a4f..ea0a484 100644
--- a/protocol/grpc/internal/server.go
+++ b/protocol/grpc/internal/server.go
@@ -27,11 +27,15 @@ import (
        "google.golang.org/grpc"
 )
 
-var s *grpc.Server
-
 // server is used to implement helloworld.GreeterServer.
 type server struct {
-       UnimplementedGreeterServer
+       *GreeterProviderBase
+}
+
+func NewService() *server {
+       return &server{
+               GreeterProviderBase: &GreeterProviderBase{},
+       }
 }
 
 // SayHello implements helloworld.GreeterServer
@@ -40,25 +44,38 @@ func (s *server) SayHello(ctx context.Context, in 
*HelloRequest) (*HelloReply, e
        return &HelloReply{Message: "Hello " + in.GetName()}, nil
 }
 
-// InitGrpcServer creates global gRPC server.
-func InitGrpcServer() {
-       port := ":30000"
+func (s *server) Reference() string {
+       return "GrpcGreeterImpl"
+}
+
+type Server struct {
+       listener net.Listener
+       server   *grpc.Server
+}
 
-       lis, err := net.Listen("tcp", port)
+func NewServer(address string) (*Server, error) {
+       listener, err := net.Listen("tcp", address)
        if err != nil {
-               log.Fatalf("failed to listen: %v", err)
+               return nil, err
        }
-       s = grpc.NewServer()
-       RegisterGreeterServer(s, &server{})
-       if err := s.Serve(lis); err != nil {
-               log.Fatalf("failed to serve: %v", err)
+
+       server := grpc.NewServer()
+       service := NewService()
+       RegisterGreeterServer(server, service)
+
+       s := Server{
+               listener: listener,
+               server:   server,
        }
+       return &s, nil
 }
 
-// ShutdownGrpcServer shuts down gRPC server gracefully
-func ShutdownGrpcServer() {
-       if s == nil {
-               return
+func (s *Server) Start() {
+       if err := s.server.Serve(s.listener); err != nil {
+               log.Fatalf("failed to serve: %v", err)
        }
-       s.GracefulStop()
+}
+
+func (s *Server) Stop() {
+       s.server.GracefulStop()
 }

Reply via email to