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()
}