pkg/admin/handler/service_testing_impl.go (74 lines of code) (raw):
/*
* 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 handler
import (
"context"
)
import (
"github.com/apache/dubbo-kubernetes/pkg/admin/model"
"github.com/apache/dubbo-kubernetes/pkg/admin/util/reflection"
)
type TestingServiceImpl struct{}
func (t *TestingServiceImpl) GetMethodsNames(ctx context.Context, target, serviceName string) ([]string, error) {
ref := reflection.NewRPCReflection(target)
// dail the reflection server
err := ref.Dail(ctx)
if err != nil {
return nil, err
}
defer ref.Close()
// get methods
methods, err := ref.ListMethods(serviceName)
if err != nil {
return nil, err
}
return methods, nil
}
// GetMethodDescribe get the detail of method
func (t *TestingServiceImpl) GetMethodDescribe(ctx context.Context, target, methodName string) (*model.MethodDescribe, error) {
ref := reflection.NewRPCReflection(target)
// dail the reflection server
err := ref.Dail(ctx)
if err != nil {
return nil, err
}
// get input and output type
inputType, outputType, err := ref.InputAndOutputType(methodName)
if err != nil {
return nil, err
}
// get input and output describe string
inputDescString, err := ref.DescribeString(inputType)
if err != nil {
return nil, err
}
outputDescString, err := ref.DescribeString(outputType)
if err != nil {
return nil, err
}
return &model.MethodDescribe{
InputType: inputType,
InputDescribe: inputDescString,
OutputType: outputType,
OutputDescribe: outputDescString,
}, nil
}
// GetMessageTemplateString get the template string of message
func (t *TestingServiceImpl) GetMessageTemplateString(ctx context.Context, target, messageName string) (string, error) {
ref := reflection.NewRPCReflection(target)
// dail the reflection server
err := ref.Dail(ctx)
if err != nil {
return "", err
}
// get message template
return ref.TemplateString(messageName)
}
// GetMessageDescribeString get the describe string (protobuf define string) of method
func (t *TestingServiceImpl) GetMessageDescribeString(ctx context.Context, target, messageName string) (string, error) {
ref := reflection.NewRPCReflection(target)
// dail the reflection server
err := ref.Dail(ctx)
if err != nil {
return "", err
}
// get messageName describe
return ref.DescribeString(messageName)
}
// Invoke the target method, input is json string,
// and return the response, success and error.
func (t *TestingServiceImpl) Invoke(ctx context.Context, target, methodName, input string, headers map[string]string) (string, error) {
ref := reflection.NewRPCReflection(target)
// dail the reflection server
err := ref.Dail(ctx)
if err != nil {
return "", err
}
defer ref.Close()
// set headers
ref.SetRPCHeaders(headers)
// invoke
response, err := ref.Invoke(ctx, methodName, input)
return response, err
}