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

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


The following commit(s) were added to refs/heads/config-enhance by this push:
     new 77f6ae0  feat(geninv): add samples for generic invocation using 
hessian and Triple (#249)
77f6ae0 is described below

commit 77f6ae054306a077a2591e1c28ec6fa50bcfec12
Author: XavierNiu <[email protected]>
AuthorDate: Thu Sep 16 17:42:50 2021 +0800

    feat(geninv): add samples for generic invocation using hessian and Triple 
(#249)
    
    * feat(geninv): add samples for generic invocation using hessian on Triple
    
    * style(geninv): go fmt
    
    * test(geninv): fix integrated tests of generic invocation
    
    * style(*): 3 import blocks style
---
 api/samples_api.pb.go                              |   7 +-
 generic/default/go-client/cmd/client.go            |  51 ++----
 generic/default/go-server/cmd/server.go            |   2 +-
 .../generic/default/tests/integration/main_test.go |  20 +-
 .../default/tests/integration/userprovider_test.go | 201 ++++++++++++++++-----
 5 files changed, 187 insertions(+), 94 deletions(-)

diff --git a/api/samples_api.pb.go b/api/samples_api.pb.go
index 3752b2f..e320183 100644
--- a/api/samples_api.pb.go
+++ b/api/samples_api.pb.go
@@ -23,8 +23,6 @@ package api
 import (
        context "context"
        fmt "fmt"
-       proto "github.com/golang/protobuf/proto"
-       grpc "google.golang.org/grpc"
        math "math"
 )
 
@@ -32,9 +30,14 @@ import (
        "dubbo.apache.org/dubbo-go/v3/protocol"
        dgrpc "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
        "dubbo.apache.org/dubbo-go/v3/protocol/invocation"
+
        "github.com/dubbogo/triple/pkg/common"
        tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
        dubbo3 "github.com/dubbogo/triple/pkg/triple"
+
+       proto "github.com/golang/protobuf/proto"
+
+       grpc "google.golang.org/grpc"
 )
 
 // Reference imports to suppress errors if they are not otherwise used.
diff --git a/generic/default/go-client/cmd/client.go 
b/generic/default/go-client/cmd/client.go
index 2f1a706..563d008 100644
--- a/generic/default/go-client/cmd/client.go
+++ b/generic/default/go-client/cmd/client.go
@@ -19,35 +19,26 @@ package main
 
 import (
        "context"
-       "fmt"
-       "os"
-       "os/signal"
-       "syscall"
        "time"
 )
 
 import (
-       _ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-       _ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
        "dubbo.apache.org/dubbo-go/v3/common/logger"
-       _ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
        "dubbo.apache.org/dubbo-go/v3/config"
        "dubbo.apache.org/dubbo-go/v3/config/generic"
-       _ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
+       _ "dubbo.apache.org/dubbo-go/v3/imports"
        "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-       _ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-       _ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 
        hessian "github.com/apache/dubbo-go-hessian2"
+
+       tpconst "github.com/dubbogo/triple/pkg/common/constant"
 )
 
 import (
        "github.com/apache/dubbo-go-samples/generic/default/go-client/pkg"
 )
 
-var (
-       appName = "dubbo.io"
-)
+const appName = "dubbo.io"
 
 // export DUBBO_GO_CONFIG_PATH= 
PATH_TO_SAMPLES/generic/default/go-client/conf/dubbogo.yml
 func main() {
@@ -66,9 +57,15 @@ func main() {
        //callQueryAll(dubboRefConf)
 
        // generic invocation samples using hessian serialization on Triple 
protocol
-       //tripleRefConf := 
newRefConf("org.apache.dubbo.samples.UserProviderTriple", tpconst.TRIPLE)
+       tripleRefConf := 
newRefConf("org.apache.dubbo.samples.UserProviderTriple", tpconst.TRIPLE)
+       callGetUser(tripleRefConf)
+       //callGetOneUser(tripleRefConf)
+       callGetUsers(tripleRefConf)
+       callGetUsersMap(tripleRefConf)
+       callQueryUser(tripleRefConf)
+       callQueryUsers(tripleRefConf)
+       //callQueryAll(tripleRefConf)
 
-       initSignal()
 }
 
 func callGetUser(refConf config.ReferenceConfig) {
@@ -258,27 +255,3 @@ func newRefConf(iface, protocol string) 
config.ReferenceConfig {
 
        return refConf
 }
-
-func initSignal() {
-       signals := make(chan os.Signal, 1)
-       // It is not possible to block SIGKILL or syscall.SIGSTOP
-       signal.Notify(signals, os.Interrupt, os.Kill, syscall.SIGHUP,
-               syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
-       for {
-               sig := <-signals
-               logger.Infof("get signal %s", sig.String())
-               switch sig {
-               case syscall.SIGHUP:
-                       // reload()
-               default:
-                       time.AfterFunc(10*time.Second, func() {
-                               logger.Warnf("app exit now by force...")
-                               os.Exit(1)
-                       })
-
-                       // The program exits normally or timeout forcibly exits.
-                       fmt.Println("app exit now...")
-                       return
-               }
-       }
-}
diff --git a/generic/default/go-server/cmd/server.go 
b/generic/default/go-server/cmd/server.go
index 470b851..5a7e05d 100644
--- a/generic/default/go-server/cmd/server.go
+++ b/generic/default/go-server/cmd/server.go
@@ -34,7 +34,7 @@ import (
 )
 
 import (
-       pkg "github.com/apache/dubbo-go-samples/generic/default/go-server/pkg"
+       "github.com/apache/dubbo-go-samples/generic/default/go-server/pkg"
 )
 
 // export DUBBO_GO_CONFIG_PATH= 
PATH_TO_SAMPLES/generic/default/go-server/conf/dubbogo.yml
diff --git a/integrate_test/generic/default/tests/integration/main_test.go 
b/integrate_test/generic/default/tests/integration/main_test.go
index 1eea008..783744d 100644
--- a/integrate_test/generic/default/tests/integration/main_test.go
+++ b/integrate_test/generic/default/tests/integration/main_test.go
@@ -23,33 +23,31 @@ import (
 )
 
 import (
-       _ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-       _ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-       _ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
        "dubbo.apache.org/dubbo-go/v3/config"
-       _ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
+       _ "dubbo.apache.org/dubbo-go/v3/imports"
        "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-       _ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-       _ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-       _ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 
        hessian "github.com/apache/dubbo-go-hessian2"
+
+       tpconst "github.com/dubbogo/triple/pkg/common/constant"
 )
 
 import (
-       pkg "github.com/apache/dubbo-go-samples/generic/default/go-server/pkg"
+       "github.com/apache/dubbo-go-samples/generic/default/go-server/pkg"
 )
 
+const appName = "dubbo.io"
+
 var (
-       appName      = "dubbo.io"
-       dubboRefConf config.ReferenceConfig
-       //tripleRefConf config.ReferenceConfig
+       dubboRefConf  config.ReferenceConfig
+       tripleRefConf config.ReferenceConfig
 )
 
 func TestMain(m *testing.M) {
        hessian.RegisterPOJO(&pkg.User{})
 
        dubboRefConf = newRefConf("org.apache.dubbo.samples.UserProvider", 
dubbo.DUBBO)
+       tripleRefConf = 
newRefConf("org.apache.dubbo.samples.UserProviderTriple", tpconst.TRIPLE)
 
        os.Exit(m.Run())
 }
diff --git 
a/integrate_test/generic/default/tests/integration/userprovider_test.go 
b/integrate_test/generic/default/tests/integration/userprovider_test.go
index a6c58cf..563f60e 100644
--- a/integrate_test/generic/default/tests/integration/userprovider_test.go
+++ b/integrate_test/generic/default/tests/integration/userprovider_test.go
@@ -44,6 +44,19 @@ func TestGetUser1(t *testing.T) {
        assert.Equal(t, "Joe", resp["name"])
        assert.Equal(t, int32(48), resp["age"])
        assert.Equal(t, "A003", resp["iD"])
+
+       o, err = tripleRefConf.GetRPCService().(*generic.GenericService).Invoke(
+               context.TODO(),
+               "GetUser1",
+               []string{"java.lang.String"},
+               []hessian.Object{"A003"},
+       )
+       assert.Nil(t, err)
+       assert.IsType(t, make(map[interface{}]interface{}, 0), o)
+       resp = o.(map[interface{}]interface{})
+       assert.Equal(t, "Joe", resp["name"])
+       assert.Equal(t, int32(48), resp["age"])
+       assert.Equal(t, "A003", resp["iD"])
 }
 
 func TestGetUser2(t *testing.T) {
@@ -59,6 +72,19 @@ func TestGetUser2(t *testing.T) {
        assert.Equal(t, "lily", resp["name"])
        assert.Equal(t, int32(48), resp["age"])
        assert.Equal(t, "A003", resp["iD"])
+
+       o, err = tripleRefConf.GetRPCService().(*generic.GenericService).Invoke(
+               context.TODO(),
+               "GetUser2",
+               []string{"java.lang.String", "java.lang.String"},
+               []hessian.Object{"A003", "lily"},
+       )
+       assert.Nil(t, err)
+       assert.IsType(t, make(map[interface{}]interface{}, 0), o)
+       resp = o.(map[interface{}]interface{})
+       assert.Equal(t, "lily", resp["name"])
+       assert.Equal(t, int32(48), resp["age"])
+       assert.Equal(t, "A003", resp["iD"])
 }
 
 func TestGetUser3(t *testing.T) {
@@ -74,6 +100,19 @@ func TestGetUser3(t *testing.T) {
        assert.Equal(t, "Alex Stocks", resp["name"])
        assert.Equal(t, int32(18), resp["age"])
        assert.Equal(t, "1", resp["iD"])
+
+       o, err = tripleRefConf.GetRPCService().(*generic.GenericService).Invoke(
+               context.TODO(),
+               "GetUser3",
+               []string{"int"},
+               []hessian.Object{1},
+       )
+       assert.Nil(t, err)
+       assert.IsType(t, make(map[interface{}]interface{}, 0), o)
+       resp = o.(map[interface{}]interface{})
+       assert.Equal(t, "Alex Stocks", resp["name"])
+       assert.Equal(t, int32(18), resp["age"])
+       assert.Equal(t, "1", resp["iD"])
 }
 
 func TestGetUser4(t *testing.T) {
@@ -89,6 +128,19 @@ func TestGetUser4(t *testing.T) {
        assert.Equal(t, "zhangsan", resp["name"])
        assert.Equal(t, int32(18), resp["age"])
        assert.Equal(t, "1", resp["iD"])
+
+       o, err = tripleRefConf.GetRPCService().(*generic.GenericService).Invoke(
+               context.TODO(),
+               "GetUser4",
+               []string{"int", "java.lang.String"},
+               []hessian.Object{1, "zhangsan"},
+       )
+       assert.Nil(t, err)
+       assert.IsType(t, make(map[interface{}]interface{}, 0), o)
+       resp = o.(map[interface{}]interface{})
+       assert.Equal(t, "zhangsan", resp["name"])
+       assert.Equal(t, int32(18), resp["age"])
+       assert.Equal(t, "1", resp["iD"])
 }
 
 // TODO: waiting for fixing the bug that pass empty array with basic types 
properly
@@ -105,6 +157,8 @@ func TestGetUser4(t *testing.T) {
 //     assert.Equal(t, "xavierniu", resp["name"])
 //     assert.Equal(t, int32(24), resp["age"])
 //     assert.Equal(t, "1000", resp["iD"])
+//
+// TODO: Triple protocol test is required.
 //}
 
 func TestGetUsers(t *testing.T) {
@@ -120,11 +174,29 @@ func TestGetUsers(t *testing.T) {
        )
        assert.Nil(t, err)
        assert.IsType(t, make(map[interface{}]interface{}, 0), o)
-       //resp := o.(map[interface{}]interface{})
-       //assert.Equal(t, "other-zhangsan", resp[0].(*pkg.User).Name)
-       //assert.Equal(t, "other-lisi", resp[1].(*pkg.User).Name)
-       //assert.Equal(t, "other-lily", resp[2].(*pkg.User).Name)
-       //assert.Equal(t, "other-lisa", resp[3].(*pkg.User).Name)
+       resp := o.(map[interface{}]interface{})
+       assert.Equal(t, "other-zhangsan", 
resp["users"].([]interface{})[0].(map[interface{}]interface{})["name"])
+       assert.Equal(t, "other-lisi", 
resp["users"].([]interface{})[1].(map[interface{}]interface{})["name"])
+       assert.Equal(t, "other-lily", 
resp["users"].([]interface{})[2].(map[interface{}]interface{})["name"])
+       assert.Equal(t, "other-lisa", 
resp["users"].([]interface{})[3].(map[interface{}]interface{})["name"])
+
+       o, err = tripleRefConf.GetRPCService().(*generic.GenericService).Invoke(
+               context.TODO(),
+               "GetUsers",
+               []string{"java.util.List"},
+               []hessian.Object{
+                       []hessian.Object{
+                               "001", "002", "003", "004",
+                       },
+               },
+       )
+       assert.Nil(t, err)
+       assert.IsType(t, make(map[interface{}]interface{}, 0), o)
+       resp = o.(map[interface{}]interface{})
+       assert.Equal(t, "other-zhangsan", 
resp["users"].([]interface{})[0].(map[interface{}]interface{})["name"])
+       assert.Equal(t, "other-lisi", 
resp["users"].([]interface{})[1].(map[interface{}]interface{})["name"])
+       assert.Equal(t, "other-lily", 
resp["users"].([]interface{})[2].(map[interface{}]interface{})["name"])
+       assert.Equal(t, "other-lisa", 
resp["users"].([]interface{})[3].(map[interface{}]interface{})["name"])
 }
 
 func TestQueryUser(t *testing.T) {
@@ -146,49 +218,96 @@ func TestQueryUser(t *testing.T) {
        assert.Equal(t, "panty", resp["name"])
        assert.Equal(t, int32(25), resp["age"])
        assert.Equal(t, "3213", resp["iD"])
+
+       o, err = tripleRefConf.GetRPCService().(*generic.GenericService).Invoke(
+               context.TODO(),
+               "queryUser",
+               []string{"org.apache.dubbo.User"},
+               []hessian.Object{map[string]hessian.Object{
+                       "iD":   "3213",
+                       "name": "panty",
+                       "age":  25,
+                       "time": time.Now(),
+               }},
+       )
+
+       assert.Nil(t, err)
+       assert.IsType(t, make(map[interface{}]interface{}, 0), o)
+       resp = o.(map[interface{}]interface{})
+       assert.Equal(t, "panty", resp["name"])
+       assert.Equal(t, int32(25), resp["age"])
+       assert.Equal(t, "3213", resp["iD"])
 }
 
-//
-//func TestQueryUsers(t *testing.T) {
-//     o, err := 
referenceConfig.GetRPCService().(*generic.GenericService).Invoke(
-//             context.TODO(),
-//             []interface{}{
-//                     "queryUsers",
-//                     []string{"org.apache.dubbo.User"},
-//                     []hessian.Object{
-//                             map[string]hessian.Object{
-//                                     "id":    "3212",
-//                                     "name":  "XavierNiu",
-//                                     "age":   24,
-//                                     "time":  time.Now().Add(4),
-//                                     "class": "org.apache.dubbo.User",
-//                             },
-//                             map[string]hessian.Object{
-//                                     "iD":    "3213",
-//                                     "name":  "zhangsan",
-//                                     "age":   21,
-//                                     "time":  time.Now().Add(4),
-//                                     "class": "org.apache.dubbo.User",
-//                             },
-//                     },
-//             },
-//     )
-//
-//     assert.Nil(t, err)
-//     assert.IsType(t, make(map[interface{}]interface{}, 0), o)
-//     resp := o.(map[interface{}]interface{})
-//     assert.Equal(t, "XavierNiu", resp[0].(*pkg.User).Name)
-//     assert.Equal(t, "zhangsan", resp[1].(*pkg.User).Name)
-//}
-//
+func TestQueryUsers(t *testing.T) {
+       o, err := dubboRefConf.GetRPCService().(*generic.GenericService).Invoke(
+               context.TODO(),
+               "queryUsers",
+               []string{"java.util.List"},
+               []hessian.Object{
+                       []hessian.Object{
+                               map[string]hessian.Object{
+                                       "id":    "3212",
+                                       "name":  "XavierNiu",
+                                       "age":   24,
+                                       "time":  time.Now(),
+                                       "class": "org.apache.dubbo.User",
+                               },
+                               map[string]hessian.Object{
+                                       "iD":    "3213",
+                                       "name":  "zhangsan",
+                                       "age":   21,
+                                       "time":  time.Now(),
+                                       "class": "org.apache.dubbo.User",
+                               },
+                       },
+               },
+       )
+
+       assert.Nil(t, err)
+       resp, ok := o.(map[interface{}]interface{})
+       assert.True(t, ok)
+       assert.Equal(t, "XavierNiu", 
resp["users"].([]interface{})[0].(map[interface{}]interface{})["name"])
+       assert.Equal(t, "zhangsan", 
resp["users"].([]interface{})[1].(map[interface{}]interface{})["name"])
+
+       o, err = tripleRefConf.GetRPCService().(*generic.GenericService).Invoke(
+               context.TODO(),
+               "queryUsers",
+               []string{"org.apache.dubbo.User"},
+               []hessian.Object{
+                       []hessian.Object{
+                               map[string]hessian.Object{
+                                       "id":    "3212",
+                                       "name":  "XavierNiu",
+                                       "age":   24,
+                                       "time":  time.Now(),
+                                       "class": "org.apache.dubbo.User",
+                               },
+                               map[string]hessian.Object{
+                                       "iD":    "3213",
+                                       "name":  "zhangsan",
+                                       "age":   21,
+                                       "time":  time.Now(),
+                                       "class": "org.apache.dubbo.User",
+                               },
+                       },
+               },
+       )
+
+       assert.Nil(t, err)
+       resp, ok = o.(map[interface{}]interface{})
+       assert.True(t, ok)
+       assert.Equal(t, "XavierNiu", 
resp["users"].([]interface{})[0].(map[interface{}]interface{})["name"])
+       assert.Equal(t, "zhangsan", 
resp["users"].([]interface{})[1].(map[interface{}]interface{})["name"])
+}
+
+// TODO: Waiting for hessian-go bugfix
 //func TestQueryAll(t *testing.T) {
-//     o, err := 
referenceConfig.GetRPCService().(*generic.GenericService).Invoke(
+//     o, err := dubboRefConf.GetRPCService().(*generic.GenericService).Invoke(
 //             context.TODO(),
-//             []interface{}{
 //                     "queryAll",
 //                     []hessian.Object{},
 //                     []hessian.Object{},
-//             },
 //     )
 //
 //     assert.Nil(t, err)

Reply via email to