234 lines
5.5 KiB
Go
234 lines
5.5 KiB
Go
package v1alpha3
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/google/go-cmp/cmp"
|
|
corev1 "k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/client-go/kubernetes/fake"
|
|
"kubesphere.io/kubesphere/pkg/informers"
|
|
model "kubesphere.io/kubesphere/pkg/models/monitoring"
|
|
"kubesphere.io/kubesphere/pkg/simple/client/monitoring"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestIsRangeQuery(t *testing.T) {
|
|
tests := []struct {
|
|
opt queryOptions
|
|
expected bool
|
|
}{
|
|
{
|
|
opt: queryOptions{
|
|
time: time.Now(),
|
|
},
|
|
expected: false,
|
|
},
|
|
{
|
|
opt: queryOptions{
|
|
start: time.Now().Add(-time.Hour),
|
|
end: time.Now(),
|
|
},
|
|
expected: true,
|
|
},
|
|
}
|
|
|
|
for i, tt := range tests {
|
|
t.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
|
|
b := tt.opt.isRangeQuery()
|
|
if b != tt.expected {
|
|
t.Fatalf("expected %v, but got %v", tt.expected, b)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestParseRequestParams(t *testing.T) {
|
|
tests := []struct {
|
|
params reqParams
|
|
lvl monitoring.Level
|
|
namespace corev1.Namespace
|
|
expected queryOptions
|
|
expectedErr bool
|
|
}{
|
|
{
|
|
params: reqParams{
|
|
time: "abcdef",
|
|
},
|
|
lvl: monitoring.LevelCluster,
|
|
expectedErr: true,
|
|
},
|
|
{
|
|
params: reqParams{
|
|
time: "1585831995",
|
|
},
|
|
lvl: monitoring.LevelCluster,
|
|
expected: queryOptions{
|
|
time: time.Unix(1585831995, 0),
|
|
metricFilter: ".*",
|
|
namedMetrics: model.ClusterMetrics,
|
|
option: monitoring.ClusterOption{},
|
|
},
|
|
expectedErr: false,
|
|
},
|
|
{
|
|
params: reqParams{
|
|
start: "1585830000",
|
|
end: "1585839999",
|
|
step: "1m",
|
|
namespaceName: "default",
|
|
},
|
|
lvl: monitoring.LevelNamespace,
|
|
namespace: corev1.Namespace{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "default",
|
|
CreationTimestamp: metav1.Time{
|
|
Time: time.Unix(1585836666, 0),
|
|
},
|
|
},
|
|
},
|
|
expected: queryOptions{
|
|
start: time.Unix(1585836666, 0),
|
|
end: time.Unix(1585839999, 0),
|
|
step: time.Minute,
|
|
identifier: model.IdentifierNamespace,
|
|
metricFilter: ".*",
|
|
namedMetrics: model.NamespaceMetrics,
|
|
option: monitoring.NamespaceOption{
|
|
ResourceFilter: ".*",
|
|
NamespaceName: "default",
|
|
},
|
|
},
|
|
expectedErr: false,
|
|
},
|
|
{
|
|
params: reqParams{
|
|
time: "1585830000",
|
|
namespaceName: "default",
|
|
},
|
|
lvl: monitoring.LevelNamespace,
|
|
namespace: corev1.Namespace{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "default",
|
|
CreationTimestamp: metav1.Time{
|
|
Time: time.Unix(1585836666, 0),
|
|
},
|
|
},
|
|
},
|
|
expected: queryOptions{
|
|
time: time.Unix(1585836666, 0),
|
|
identifier: model.IdentifierNamespace,
|
|
metricFilter: ".*",
|
|
namedMetrics: model.NamespaceMetrics,
|
|
option: monitoring.NamespaceOption{
|
|
ResourceFilter: ".*",
|
|
NamespaceName: "default",
|
|
},
|
|
},
|
|
expectedErr: false,
|
|
},
|
|
{
|
|
params: reqParams{
|
|
start: "1585830000",
|
|
end: "1585839999",
|
|
step: "1m",
|
|
namespaceName: "default",
|
|
},
|
|
lvl: monitoring.LevelNamespace,
|
|
namespace: corev1.Namespace{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "default",
|
|
CreationTimestamp: metav1.Time{
|
|
Time: time.Unix(1589999999, 0),
|
|
},
|
|
},
|
|
},
|
|
expectedErr: true,
|
|
},
|
|
{
|
|
params: reqParams{
|
|
start: "1585830000",
|
|
end: "1585839999",
|
|
step: "1m",
|
|
namespaceName: "non-exist",
|
|
},
|
|
lvl: monitoring.LevelNamespace,
|
|
namespace: corev1.Namespace{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "default",
|
|
CreationTimestamp: metav1.Time{
|
|
Time: time.Unix(1589999999, 0),
|
|
},
|
|
},
|
|
},
|
|
expectedErr: true,
|
|
},
|
|
{
|
|
params: reqParams{
|
|
time: "1585830000",
|
|
componentType: "etcd",
|
|
metricFilter: "etcd_server_list",
|
|
},
|
|
lvl: monitoring.LevelComponent,
|
|
expected: queryOptions{
|
|
time: time.Unix(1585830000, 0),
|
|
metricFilter: "etcd_server_list",
|
|
namedMetrics: model.EtcdMetrics,
|
|
option: monitoring.ComponentOption{},
|
|
},
|
|
expectedErr: false,
|
|
},
|
|
{
|
|
params: reqParams{
|
|
time: "1585830000",
|
|
workspaceName: "system-workspace",
|
|
metricFilter: "namespace_memory_usage_wo_cache|namespace_memory_limit_hard|namespace_cpu_usage",
|
|
page: "1",
|
|
limit: "10",
|
|
order: "desc",
|
|
target: "namespace_cpu_usage",
|
|
},
|
|
lvl: monitoring.LevelNamespace,
|
|
expected: queryOptions{
|
|
time: time.Unix(1585830000, 0),
|
|
metricFilter: "namespace_memory_usage_wo_cache|namespace_memory_limit_hard|namespace_cpu_usage",
|
|
namedMetrics: model.NamespaceMetrics,
|
|
option: monitoring.NamespaceOption{
|
|
ResourceFilter: ".*",
|
|
WorkspaceName: "system-workspace",
|
|
},
|
|
target: "namespace_cpu_usage",
|
|
identifier: "namespace",
|
|
order: "desc",
|
|
page: 1,
|
|
limit: 10,
|
|
},
|
|
expectedErr: false,
|
|
},
|
|
}
|
|
|
|
for i, tt := range tests {
|
|
t.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
|
|
client := fake.NewSimpleClientset(&tt.namespace)
|
|
fakeInformerFactory := informers.NewInformerFactories(client, nil, nil, nil, nil, nil)
|
|
handler := newHandler(client, nil, fakeInformerFactory, nil)
|
|
|
|
result, err := handler.makeQueryOptions(tt.params, tt.lvl)
|
|
if err != nil {
|
|
if !tt.expectedErr {
|
|
t.Fatalf("unexpected err: %s.", err.Error())
|
|
}
|
|
return
|
|
}
|
|
|
|
if tt.expectedErr {
|
|
t.Fatalf("failed to catch error.")
|
|
}
|
|
|
|
if diff := cmp.Diff(result, tt.expected, cmp.AllowUnexported(result, tt.expected)); diff != "" {
|
|
t.Fatalf("%T differ (-got, +want): %s", tt.expected, diff)
|
|
}
|
|
})
|
|
}
|
|
}
|