github.com/cloudwego/kitex@v0.9.0/pkg/remote/trans/gonet/trans_server_test.go (about) 1 /* 2 * Copyright 2022 CloudWeGo Authors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package gonet 18 19 import ( 20 "context" 21 "net" 22 "os" 23 "testing" 24 "time" 25 26 "github.com/cloudwego/kitex/internal/mocks" 27 "github.com/cloudwego/kitex/internal/test" 28 "github.com/cloudwego/kitex/pkg/remote" 29 "github.com/cloudwego/kitex/pkg/rpcinfo" 30 "github.com/cloudwego/kitex/pkg/serviceinfo" 31 "github.com/cloudwego/kitex/pkg/utils" 32 ) 33 34 var ( 35 svrTransHdlr remote.ServerTransHandler 36 rwTimeout = time.Second 37 addrStr = "test addr" 38 addr = utils.NewNetAddr("tcp", addrStr) 39 method = "mock" 40 transSvr *transServer 41 svrOpt *remote.ServerOption 42 ) 43 44 func TestMain(m *testing.M) { 45 svcInfo := mocks.ServiceInfo() 46 svrOpt = &remote.ServerOption{ 47 InitOrResetRPCInfoFunc: func(ri rpcinfo.RPCInfo, addr net.Addr) rpcinfo.RPCInfo { 48 fromInfo := rpcinfo.EmptyEndpointInfo() 49 rpcCfg := rpcinfo.NewRPCConfig() 50 mCfg := rpcinfo.AsMutableRPCConfig(rpcCfg) 51 mCfg.SetReadWriteTimeout(rwTimeout) 52 ink := rpcinfo.NewInvocation("", method) 53 rpcStat := rpcinfo.NewRPCStats() 54 nri := rpcinfo.NewRPCInfo(fromInfo, nil, ink, rpcCfg, rpcStat) 55 rpcinfo.AsMutableEndpointInfo(nri.From()).SetAddress(addr) 56 return nri 57 }, 58 Codec: &MockCodec{ 59 EncodeFunc: nil, 60 DecodeFunc: func(ctx context.Context, msg remote.Message, in remote.ByteBuffer) error { 61 msg.SpecifyServiceInfo(mocks.MockServiceName, mocks.MockMethod) 62 return nil 63 }, 64 }, 65 SvcSearchMap: map[string]*serviceinfo.ServiceInfo{ 66 remote.BuildMultiServiceKey(mocks.MockServiceName, mocks.MockMethod): svcInfo, 67 remote.BuildMultiServiceKey(mocks.MockServiceName, mocks.MockExceptionMethod): svcInfo, 68 remote.BuildMultiServiceKey(mocks.MockServiceName, mocks.MockErrorMethod): svcInfo, 69 remote.BuildMultiServiceKey(mocks.MockServiceName, mocks.MockOnewayMethod): svcInfo, 70 mocks.MockMethod: svcInfo, 71 mocks.MockExceptionMethod: svcInfo, 72 mocks.MockErrorMethod: svcInfo, 73 mocks.MockOnewayMethod: svcInfo, 74 }, 75 TargetSvcInfo: svcInfo, 76 TracerCtl: &rpcinfo.TraceController{}, 77 } 78 svrTransHdlr, _ = newSvrTransHandler(svrOpt) 79 transSvr = NewTransServerFactory().NewTransServer(svrOpt, svrTransHdlr).(*transServer) 80 81 os.Exit(m.Run()) 82 } 83 84 // TestCreateListener test trans_server CreateListener success 85 func TestCreateListener(t *testing.T) { 86 // tcp init 87 addrStr := "127.0.0.1:9093" 88 addr = utils.NewNetAddr("tcp", addrStr) 89 90 // test 91 ln, err := transSvr.CreateListener(addr) 92 test.Assert(t, err == nil, err) 93 test.Assert(t, ln.Addr().String() == addrStr) 94 ln.Close() 95 96 // uds init 97 addrStr = "server.addr" 98 addr, err = net.ResolveUnixAddr("unix", addrStr) 99 test.Assert(t, err == nil, err) 100 101 // test 102 ln, err = transSvr.CreateListener(addr) 103 test.Assert(t, err == nil, err) 104 test.Assert(t, ln.Addr().String() == addrStr) 105 ln.Close() 106 }