* upgrade k8s package version Signed-off-by: hongzhouzi <hongzhouzi@kubesphere.io> * Script upgrade and code formatting. Signed-off-by: hongzhouzi <hongzhouzi@kubesphere.io> Signed-off-by: hongzhouzi <hongzhouzi@kubesphere.io>
143 lines
3.6 KiB
Go
143 lines
3.6 KiB
Go
package v1alpha2
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/emicklei/go-restful"
|
|
corev1 "k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
fakek8s "k8s.io/client-go/kubernetes/fake"
|
|
"k8s.io/klog/v2"
|
|
|
|
"kubesphere.io/kubesphere/pkg/simple/client/kiali"
|
|
"kubesphere.io/kubesphere/pkg/simple/client/servicemesh"
|
|
"kubesphere.io/kubesphere/pkg/utils/reflectutils"
|
|
)
|
|
|
|
func prepare() (*Handler, error) {
|
|
var namespaceName = "kubesphere-system"
|
|
var serviceAccountName = "kubesphere"
|
|
var secretName = "kiali"
|
|
clientset := fakek8s.NewSimpleClientset()
|
|
|
|
ctx := context.Background()
|
|
namespacesClient := clientset.CoreV1().Namespaces()
|
|
ns := &corev1.Namespace{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: namespaceName,
|
|
},
|
|
}
|
|
_, err := namespacesClient.Create(ctx, ns, metav1.CreateOptions{})
|
|
if err != nil {
|
|
klog.Errorf("create namespace failed ")
|
|
return nil, err
|
|
}
|
|
|
|
secret := &corev1.Secret{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: secretName,
|
|
Namespace: namespaceName,
|
|
},
|
|
}
|
|
|
|
object := &corev1.ObjectReference{
|
|
Name: secretName,
|
|
}
|
|
|
|
sa := &corev1.ServiceAccount{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: serviceAccountName,
|
|
Namespace: namespaceName,
|
|
},
|
|
Secrets: []corev1.ObjectReference{*object},
|
|
}
|
|
|
|
serviceAccountClient := clientset.CoreV1().ServiceAccounts(namespaceName)
|
|
|
|
_, err = serviceAccountClient.Create(ctx, sa, metav1.CreateOptions{})
|
|
if err != nil {
|
|
klog.Errorf("create serviceAccount failed ")
|
|
return nil, err
|
|
}
|
|
|
|
secretClient := clientset.CoreV1().Secrets(namespaceName)
|
|
|
|
_, err = secretClient.Create(ctx, secret, metav1.CreateOptions{})
|
|
|
|
if err != nil {
|
|
klog.Errorf("create secret failed ")
|
|
return nil, err
|
|
}
|
|
|
|
// mock jaeger server
|
|
ts := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
|
|
writer.WriteHeader(http.StatusOK)
|
|
}))
|
|
options := &servicemesh.Options{
|
|
IstioPilotHost: "",
|
|
KialiQueryHost: "",
|
|
JaegerQueryHost: ts.URL,
|
|
ServicemeshPrometheusHost: "",
|
|
}
|
|
handler := NewHandler(options, clientset, nil)
|
|
|
|
token, _ := json.Marshal(
|
|
&kiali.TokenResponse{
|
|
Username: "test",
|
|
Token: "test",
|
|
},
|
|
)
|
|
|
|
mc := &kiali.MockClient{
|
|
TokenResult: token,
|
|
RequestResult: "fake",
|
|
}
|
|
|
|
client := kiali.NewClient("token", nil, mc, "token", options.KialiQueryHost)
|
|
|
|
err = reflectutils.SetUnExportedField(handler, "client", client)
|
|
if err != nil {
|
|
klog.Errorf("apply mock client failed")
|
|
return nil, err
|
|
}
|
|
return handler, nil
|
|
}
|
|
|
|
func TestGetServiceTracing(t *testing.T) {
|
|
handler, err := prepare()
|
|
if err != nil {
|
|
t.Fatalf("init handler failed")
|
|
}
|
|
|
|
namespaceName := "namespace-test"
|
|
serviceName := "service-test"
|
|
url := fmt.Sprintf("/namespaces/%s/services/%s/traces", namespaceName, serviceName)
|
|
request, _ := http.NewRequest("GET", url, nil)
|
|
query := request.URL.Query()
|
|
query.Add("start", "1650167872000000")
|
|
query.Add("end", "1650211072000000")
|
|
query.Add("limit", "10")
|
|
request.URL.RawQuery = query.Encode()
|
|
|
|
restfulRequest := restful.NewRequest(request)
|
|
pathMap := make(map[string]string)
|
|
pathMap["namespace"] = namespaceName
|
|
pathMap["service"] = serviceName
|
|
if err := reflectutils.SetUnExportedField(restfulRequest, "pathParameters", pathMap); err != nil {
|
|
t.Fatalf("set pathParameters failed")
|
|
}
|
|
|
|
recorder := httptest.NewRecorder()
|
|
restfulResponse := restful.NewResponse(recorder)
|
|
restfulResponse.SetRequestAccepts("application/json")
|
|
handler.GetServiceTracing(restfulRequest, restfulResponse)
|
|
if status := restfulResponse.StatusCode(); status != http.StatusOK {
|
|
t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK)
|
|
}
|
|
}
|