| /* |
| * 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 getty |
| |
| import ( |
| . "github.com/apache/dubbo-go/common/constant" |
| "github.com/apache/dubbo-go/protocol/dubbo/impl" |
| "github.com/apache/dubbo-go/remoting" |
| "github.com/stretchr/testify/assert" |
| "reflect" |
| "testing" |
| ) |
| |
| func TestTCPPackageHandle(t *testing.T) { |
| svr, url := InitTest(t) |
| client := getClient(url) |
| testDecodeTCPPackage(t, svr, client) |
| svr.Stop() |
| } |
| |
| func testDecodeTCPPackage(t *testing.T, svr *Server, client *Client) { |
| request := buildTestRequest() |
| pkgWriteHandler := NewRpcClientPackageHandler(client) |
| pkgBytes, err := pkgWriteHandler.Write(nil, request) |
| assert.NoError(t, err) |
| pkgReadHandler := NewRpcServerPackageHandler(svr) |
| _, pkgLen, err := pkgReadHandler.Read(nil, pkgBytes) |
| assert.NoError(t, err) |
| assert.Equal(t, pkgLen, len(pkgBytes)) |
| |
| // simulate incomplete tcp package |
| incompletePkgLen := len(pkgBytes) - 10 |
| assert.True(t, incompletePkgLen >= impl.HEADER_LENGTH, "header buffer too short") |
| incompletePkg := pkgBytes[0 : incompletePkgLen-1] |
| pkg, pkgLen, err := pkgReadHandler.Read(nil, incompletePkg) |
| assert.NoError(t, err) |
| assert.Equal(t, pkg, nil) |
| assert.Equal(t, pkgLen, 0) |
| } |
| |
| func buildTestRequest() *remoting.Request { |
| request := remoting.NewRequest("2.0.2") |
| up := &UserProvider{} |
| invocation := createInvocation("GetUser", nil, nil, []interface{}{[]interface{}{"1", "username"}}, |
| []reflect.Value{reflect.ValueOf([]interface{}{"1", "username"}), reflect.ValueOf(up)}) |
| attachment := map[string]string{INTERFACE_KEY: "com.ikurento.user.UserProvider", |
| PATH_KEY: "UserProvider", |
| VERSION_KEY: "1.0.0", |
| } |
| setAttachment(invocation, attachment) |
| request.Data = invocation |
| request.Event = false |
| request.TwoWay = false |
| return request |
| } |