Skip to content
Snippets Groups Projects
Commit 602a3da4 authored by fangyincheng's avatar fangyincheng
Browse files

Fix:support []interface{}

parent 41ee655a
No related branches found
No related tags found
No related merge requests found
Showing
with 135 additions and 14 deletions
......@@ -83,6 +83,13 @@ func main() {
}
println("response result: %v", ret)
println("\n\n\nstart to test dubbo - GetUsers")
ret1, err := conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUsers([]interface{}{[]interface{}{"A002", "A003"}})
if err != nil {
panic(err)
}
println("response result: %v", ret1)
println("\n\n\nstart to test dubbo - getUser")
user = &User{}
err = conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUser2(context.TODO(), []interface{}{1}, user)
......
......@@ -93,6 +93,7 @@ func (User) JavaClassName() string {
}
type UserProvider struct {
GetUsers func(req []interface{}) ([]interface{}, error)
GetUser func(ctx context.Context, req []interface{}, rsp *User) error
GetUser0 func(id string, name string) (User, error)
GetUser1 func(ctx context.Context, req []interface{}, rsp *User) error
......
......@@ -62,5 +62,5 @@ protocol_conf:
tcp_read_timeout: "1s"
tcp_write_timeout: "5s"
wait_timeout: "1s"
max_msg_len: 1024
max_msg_len: 10240
session_name: "client"
......@@ -62,5 +62,5 @@ protocol_conf:
tcp_read_timeout: "1s"
tcp_write_timeout: "5s"
wait_timeout: "1s"
max_msg_len: 1024
max_msg_len: 10240
session_name: "client"
......@@ -62,5 +62,5 @@ protocol_conf:
tcp_read_timeout: "1s"
tcp_write_timeout: "5s"
wait_timeout: "1s"
max_msg_len: 1024
max_msg_len: 10240
session_name: "client"
......@@ -156,6 +156,25 @@ func (u *UserProvider) GetUser0(id string, name string) (User, error) {
return *user, err
}
func (u *UserProvider) GetUsers(req []interface{}) ([]interface{}, error) {
var err error
println("req:%s", req)
t := req[0].([]interface{})
user, err := u.getUser(t[0].(string))
if err != nil {
return nil, err
}
println("user:%v", user)
user1, err := u.getUser(t[1].(string))
if err != nil {
return nil, err
}
println("user1:%v", user1)
return []interface{}{user, user1}, err
}
func (u *UserProvider) Service() string {
return "com.ikurento.user.UserProvider"
}
......
......@@ -79,7 +79,7 @@ public class Consumer {
//启动consumer的入口函数(在配置文件中指定)
public void start() throws Exception {
testGetUser();
// testGetUsers();
testGetUsers();
// Thread.sleep(120000);
Thread.sleep(2000);
}
......
......@@ -72,13 +72,20 @@ func main() {
}
println("response result: %v", user)
println("\n\n\nstart to test dubbo - GetUser0")
println("\n\n\nstart to test jsonrpc - GetUser0")
ret, err := conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUser0("A003", "Moorse")
if err != nil {
panic(err)
}
println("response result: %v", ret)
println("\n\n\nstart to test jsonrpc - GetUsers")
ret1, err := conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUsers([]interface{}{[]interface{}{"A002", "A003"}})
if err != nil {
panic(err)
}
println("response result: %v", ret1)
println("\n\n\nstart to test jsonrpc - getUser")
user = &JsonRPCUser{}
err = conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUser2(context.TODO(), []interface{}{1}, user)
......
......@@ -44,6 +44,7 @@ func (u JsonRPCUser) String() string {
}
type UserProvider struct {
GetUsers func(req []interface{}) ([]JsonRPCUser, error)
GetUser func(ctx context.Context, req []interface{}, rsp *JsonRPCUser) error
GetUser0 func(id string, name string) (JsonRPCUser, error)
GetUser1 func(ctx context.Context, req []interface{}, rsp *JsonRPCUser) error
......
......@@ -124,6 +124,25 @@ func (u *UserProvider) GetUser0(id string, name string) (User, error) {
return *user, err
}
func (u *UserProvider) GetUsers(req []interface{}) ([]User, error) {
var err error
println("req:%s", req)
t := req[0].([]interface{})
user, err := u.getUser(t[0].(string))
if err != nil {
return nil, err
}
println("user:%v", user)
user1, err := u.getUser(t[1].(string))
if err != nil {
return nil, err
}
println("user1:%v", user1)
return []User{*user, *user1}, err
}
func (u *UserProvider) Service() string {
return "com.ikurento.user.UserProvider"
}
......
......@@ -83,7 +83,7 @@ public class Consumer {
//启动consumer的入口函数(在配置文件中指定)
public void start() throws Exception {
testGetUser();
// testGetUsers();
testGetUsers();
// Thread.sleep(120000);
Thread.sleep(2000);
}
......
......@@ -2,7 +2,7 @@ module github.com/dubbo/go-for-apache-dubbo
require (
github.com/dubbogo/getty v0.0.0-20190523180329-bdf5e640ea53
github.com/dubbogo/hessian2 v0.0.0-20190521184416-2dbe10487e1d
github.com/dubbogo/hessian2 v0.0.0-20190525165532-d994415a90c3
github.com/pkg/errors v0.8.1
github.com/samuel/go-zookeeper v0.0.0-20180130194729-c4fab1ac1bec
github.com/stretchr/testify v1.3.0
......
......@@ -16,13 +16,13 @@ package dubbo
import (
"context"
"github.com/dubbogo/hessian2"
"sync"
"testing"
"time"
)
import (
"github.com/dubbogo/hessian2"
perrors "github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
......@@ -79,6 +79,26 @@ func TestClient_Call(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, User{Id: "1", Name: "username"}, *user)
user = &User{}
err = c.Call("127.0.0.1:20000", url, "GetUser1", []interface{}{"1", "username"}, user)
assert.EqualError(t, err, "java exception:error")
user2 := []interface{}{}
err = c.Call("127.0.0.1:20000", url, "GetUser2", []interface{}{"1", "username"}, &user2)
assert.NoError(t, err)
assert.Equal(t, &User{Id: "1", Name: "username"}, user2[0])
user2 = []interface{}{}
err = c.Call("127.0.0.1:20000", url, "GetUser3", []interface{}{[]interface{}{"1", "username"}}, &user2)
assert.NoError(t, err)
assert.Equal(t, &User{Id: "1", Name: "username"}, user2[0])
user3 := map[interface{}]interface{}{}
err = c.Call("127.0.0.1:20000", url, "GetUser4", []interface{}{map[interface{}]interface{}{"id": "1", "name": "username"}}, &user3)
assert.NoError(t, err)
assert.NotNil(t, user3)
assert.Equal(t, &User{Id: "1", Name: "username"}, user3["key"])
// destroy
proto.Destroy()
}
......@@ -114,7 +134,7 @@ func InitTest(t *testing.T) (protocol.Protocol, common.URL) {
methods, err := common.ServiceMap.Register("dubbo", &UserProvider{})
assert.NoError(t, err)
assert.Equal(t, "GetUser,GetUser0,GetUser1", methods)
assert.Equal(t, "GetUser,GetUser0,GetUser1,GetUser2,GetUser3,GetUser4", methods)
// config
SetClientConf(ClientConfig{
......@@ -191,6 +211,20 @@ func (u *UserProvider) GetUser1(ctx context.Context, req []interface{}, rsp *Use
return perrors.New("error")
}
func (u *UserProvider) GetUser2(ctx context.Context, req []interface{}, rsp *[]interface{}) error {
*rsp = append(*rsp, User{Id: req[0].(string), Name: req[1].(string)})
return nil
}
func (u *UserProvider) GetUser3(ctx context.Context, req []interface{}) ([]interface{}, error) {
return []interface{}{User{Id: req[0].([]interface{})[0].(string), Name: req[0].([]interface{})[1].(string)}}, nil
}
func (u *UserProvider) GetUser4(ctx context.Context, req []interface{}) (map[interface{}]interface{}, error) {
return map[interface{}]interface{}{"key": User{Id: req[0].(map[interface{}]interface{})["id"].(string), Name: req[0].(map[interface{}]interface{})["name"].(string)}}, nil
}
func (u *UserProvider) Service() string {
return "com.ikurento.user.UserProvider"
}
......
......@@ -47,7 +47,7 @@ func TestHTTPClient_Call(t *testing.T) {
methods, err := common.ServiceMap.Register("jsonrpc", &UserProvider{})
assert.NoError(t, err)
assert.Equal(t, "GetUser,GetUser0,GetUser1", methods)
assert.Equal(t, "GetUser,GetUser0,GetUser1,GetUser2,GetUser3", methods)
// Export
proto := GetProtocol()
......@@ -75,7 +75,7 @@ func TestHTTPClient_Call(t *testing.T) {
assert.Equal(t, "1", reply.Id)
assert.Equal(t, "username", reply.Name)
// call GetUser
// call GetUser0
ctx = context.WithValue(context.Background(), constant.DUBBOGO_CTX_KEY, map[string]string{
"X-Proxy-Id": "dubbogo",
"X-Services": url.Path,
......@@ -100,6 +100,30 @@ func TestHTTPClient_Call(t *testing.T) {
assert.True(t, strings.Contains(err.Error(), "500 Internal Server Error"))
assert.True(t, strings.Contains(err.Error(), "\\\"result\\\":{},\\\"error\\\":{\\\"code\\\":-32000,\\\"message\\\":\\\"error\\\"}"))
// call GetUser2
ctx = context.WithValue(context.Background(), constant.DUBBOGO_CTX_KEY, map[string]string{
"X-Proxy-Id": "dubbogo",
"X-Services": url.Path,
"X-Method": "GetUser",
})
req = client.NewRequest(url, "GetUser2", []interface{}{"1", "username"})
reply1 := []User{}
err = client.Call(ctx, url, req, &reply1)
assert.NoError(t, err)
assert.Equal(t, User{Id: "1", Name: "username"}, reply1[0])
// call GetUser3
ctx = context.WithValue(context.Background(), constant.DUBBOGO_CTX_KEY, map[string]string{
"X-Proxy-Id": "dubbogo",
"X-Services": url.Path,
"X-Method": "GetUser",
})
req = client.NewRequest(url, "GetUser3", []interface{}{"1", "username"})
reply1 = []User{}
err = client.Call(ctx, url, req, &reply1)
assert.NoError(t, err)
assert.Equal(t, User{Id: "1", Name: "username"}, reply1[0])
// destroy
proto.Destroy()
......@@ -119,6 +143,15 @@ func (u *UserProvider) GetUser1(ctx context.Context, req []interface{}, rsp *Use
return perrors.New("error")
}
func (u *UserProvider) GetUser2(ctx context.Context, req []interface{}, rsp *[]User) error {
*rsp = append(*rsp, User{Id: req[0].(string), Name: req[1].(string)})
return nil
}
func (u *UserProvider) GetUser3(ctx context.Context, req []interface{}) ([]User, error) {
return []User{{Id: req[0].(string), Name: req[1].(string)}}, nil
}
func (u *UserProvider) Service() string {
return "com.ikurento.user.UserProvider"
}
......
......@@ -34,7 +34,7 @@ func TestJsonrpcInvoker_Invoke(t *testing.T) {
methods, err := common.ServiceMap.Register("jsonrpc", &UserProvider{})
assert.NoError(t, err)
assert.Equal(t, "GetUser,GetUser0,GetUser1", methods)
assert.Equal(t, "GetUser,GetUser0,GetUser1,GetUser2,GetUser3", methods)
// Export
proto := GetProtocol()
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment