代码拉取完成,页面将自动刷新
/**
* Tencent is pleased to support the open source community by making polaris-go available.
*
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
*
* Licensed under the BSD 3-Clause License (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://opensource.org/licenses/BSD-3-Clause
*
* 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 discover
import (
"fmt"
"log"
"net"
"time"
"github.com/golang/protobuf/ptypes/wrappers"
"github.com/google/uuid"
apimodel "github.com/polarismesh/specification/source/go/api/v1/model"
"github.com/polarismesh/specification/source/go/api/v1/service_manage"
"google.golang.org/grpc"
"gopkg.in/check.v1"
"gitee.com/meng_mengs_boys/polaris-go/api"
"gitee.com/meng_mengs_boys/polaris-go/pkg/config"
commontest "gitee.com/meng_mengs_boys/polaris-go/test/common"
"gitee.com/meng_mengs_boys/polaris-go/test/mock"
"gitee.com/meng_mengs_boys/polaris-go/test/util"
)
const (
providerNamespace = "providerNS"
providerService = "providerSVC"
providerIPAddress = "127.0.0.1"
providerPort = commontest.ProviderSuitServerPort
providerInstanceIP = "127.0.0.2"
providerInstancePort = 8848
)
// ProviderTestingSuite Provider测试套件
type ProviderTestingSuite struct {
mockServer mock.NamingServer
grpcServer *grpc.Server
grpcListener net.Listener
serviceToken string
provider api.ProviderAPI
}
// GetName 套件名字
func (t *ProviderTestingSuite) GetName() string {
return "Provider"
}
// SetUpSuite 初始化测试套件
func (t *ProviderTestingSuite) SetUpSuite(c *check.C) {
fmt.Printf("ProviderTestingSuite Start\n")
grpcOptions := make([]grpc.ServerOption, 0)
maxStreams := 100000
grpcOptions = append(grpcOptions, grpc.MaxConcurrentStreams(uint32(maxStreams)))
// get the grpc server wired up
grpc.EnableTracing = true
ipAddr := providerIPAddress
shopPort := providerPort
var err error
t.grpcServer = grpc.NewServer(grpcOptions...)
t.serviceToken = uuid.New().String()
t.mockServer = mock.NewNamingServer()
t.mockServer.RegisterServerServices(ipAddr, shopPort)
t.mockServer.RegisterNamespace(&apimodel.Namespace{
Name: &wrappers.StringValue{Value: providerNamespace},
Comment: &wrappers.StringValue{Value: "for consumer api test"},
Owners: &wrappers.StringValue{Value: "ConsumerAPI"},
})
testService := &service_manage.Service{
Name: &wrappers.StringValue{Value: providerService},
Namespace: &wrappers.StringValue{Value: providerNamespace},
Token: &wrappers.StringValue{Value: t.serviceToken},
}
// 注册测试服务
t.mockServer.RegisterService(testService)
// 注册系统服务
t.mockServer.RegisterServerServices(ipAddr, shopPort)
// 代理到GRPC服务回调
service_manage.RegisterPolarisGRPCServer(t.grpcServer, t.mockServer)
// 进行端口监听
t.grpcListener, err = net.Listen("tcp", fmt.Sprintf("%s:%d", ipAddr, shopPort))
if err != nil {
log.Fatal(fmt.Sprintf("error listening appserver %v", err))
}
log.Printf("appserver listening on %s:%d\n", ipAddr, shopPort)
go func() {
t.grpcServer.Serve(t.grpcListener)
}()
t.provider, err = api.NewProviderAPIByAddress(fmt.Sprintf("%s:%d", providerIPAddress, providerPort))
c.Assert(err, check.IsNil)
time.Sleep(2 * time.Second)
}
// TearDownSuite 结束测试套程序
func (t *ProviderTestingSuite) TearDownSuite(c *check.C) {
t.provider.Destroy()
t.grpcServer.GracefulStop()
util.InsertLog(t, c.GetTestLog())
}
// TestInitProviderAPIByDefault 测试以无文件默认配置初始化providerAPI
func (t *ProviderTestingSuite) TestInitProviderAPIByDefault(c *check.C) {
log.Printf("Start TestInitProviderAPIByDefault")
cfg := config.NewDefaultConfiguration([]string{fmt.Sprintf("%s:%d", providerIPAddress, providerPort)})
enableStat := false
cfg.Consumer.LocalCache.PersistDir = "testdata/backup"
cfg.Global.StatReporter.Enable = &enableStat
providerAPI, err := api.NewProviderAPIByConfig(cfg)
c.Assert(err, check.IsNil)
providerAPI.Destroy()
}
// TestProviderNormal 测试ProviderAPI的三个功能,register,heartbeat,deregister
func (t *ProviderTestingSuite) TestProviderNormal(c *check.C) {
log.Printf("Start TestProviderNormal")
t.testProvider(c, false)
}
// TestProviderTimeout 测试ProviderAPI的三个功能,register,heartbeat,deregister
func (t *ProviderTestingSuite) TestProviderTimeout(c *check.C) {
log.Printf("Start TestProviderTimeout")
t.testProvider(c, true)
}
// 通用的provider接口测试函数
func (t *ProviderTestingSuite) testProvider(c *check.C, timeout bool) {
t.mockServer.MakeOperationTimeout(mock.OperationRegistry, timeout)
t.mockServer.MakeOperationTimeout(mock.OperationHeartbeat, timeout)
t.mockServer.MakeOperationTimeout(mock.OperationDeRegistry, timeout)
registerReq := &api.InstanceRegisterRequest{}
registerReq.Namespace = providerNamespace
registerReq.Service = providerService
registerReq.Host = providerInstanceIP
registerReq.Port = providerInstancePort
registerReq.ServiceToken = t.serviceToken
// 先注册待心跳的服务实例
regResp, err := t.provider.Register(registerReq)
c.Assert(err, check.IsNil)
fmt.Printf("registered instance id: %v\n", regResp.InstanceID)
heartbeatReq := &api.InstanceHeartbeatRequest{}
heartbeatReq.InstanceID = regResp.InstanceID
heartbeatReq.ServiceToken = t.serviceToken
heartbeatReq.Namespace = providerNamespace
heartbeatReq.Service = providerService
// heartbeatReq.Host = providerInstanceIP
// heartbeatReq.Port = providerInstancePort
// 进行心跳上报
err = t.provider.Heartbeat(heartbeatReq)
c.Assert(err, check.IsNil)
deregisterReq := &api.InstanceDeRegisterRequest{}
deregisterReq.ServiceToken = t.serviceToken
deregisterReq.InstanceID = regResp.InstanceID
// 反注册服务实例
err = t.provider.Deregister(deregisterReq)
c.Assert(err, check.IsNil)
errDeregisterReq := &api.InstanceDeRegisterRequest{}
errDeregisterReq.Namespace = providerNamespace
errDeregisterReq.Port = providerInstancePort
errDeregisterReq.Host = providerInstanceIP
errDeregisterReq.Service = providerService
err = t.provider.Deregister(errDeregisterReq)
c.Assert(err, check.NotNil)
fmt.Printf("Error to deregister: %v\n", err.Error())
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。