github.com/kubewharf/katalyst-core@v0.5.3/pkg/controller/resource-recommend/datasource/prometheus/prometheus_query_test.go (about)

     1  /*
     2  Copyright 2022 The Katalyst 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 prometheus
    18  
    19  import (
    20  	"testing"
    21  
    22  	datasourcetypes "github.com/kubewharf/katalyst-core/pkg/util/resource-recommend/types/datasource"
    23  )
    24  
    25  func TestGetContainerCpuUsageQueryExp(t *testing.T) {
    26  	type args struct {
    27  		namespace     string
    28  		workloadName  string
    29  		kind          string
    30  		containerName string
    31  	}
    32  	tests := []struct {
    33  		name string
    34  		args args
    35  		want string
    36  	}{
    37  		{
    38  			name: "Deployment workload kind",
    39  			args: args{
    40  				namespace:     "my-namespace",
    41  				workloadName:  "my-deployment",
    42  				kind:          string(datasourcetypes.WorkloadDeployment),
    43  				containerName: "test",
    44  			},
    45  			want: "rate(container_cpu_usage_seconds_total{container!=\"POD\",namespace=\"my-namespace\",pod=~\"^my-deployment-[a-z0-9]+-[a-z0-9]{5}$\",container=\"test\"}[30s])",
    46  		},
    47  	}
    48  	for _, tt := range tests {
    49  		t.Run(tt.name, func(t *testing.T) {
    50  			if got := GetContainerCpuUsageQueryExp(tt.args.namespace, tt.args.workloadName, tt.args.kind, tt.args.containerName, ""); got != tt.want {
    51  				t.Errorf("GetContainerCpuUsageQueryExp() = %v, want %v", got, tt.want)
    52  			}
    53  		})
    54  	}
    55  }
    56  
    57  func TestGetContainerMemUsageQueryExp(t *testing.T) {
    58  	type args struct {
    59  		namespace     string
    60  		workloadName  string
    61  		kind          string
    62  		containerName string
    63  		extraFilter   string
    64  	}
    65  	tests := []struct {
    66  		name string
    67  		args args
    68  		want string
    69  	}{
    70  		{
    71  			name: "Deployment workload kind",
    72  			args: args{
    73  				namespace:     "my-namespace",
    74  				workloadName:  "my-deployment",
    75  				kind:          string(datasourcetypes.WorkloadDeployment),
    76  				containerName: "test",
    77  				extraFilter:   "",
    78  			},
    79  			want: "container_memory_working_set_bytes{container!=\"POD\",namespace=\"my-namespace\",pod=~\"^my-deployment-[a-z0-9]+-[a-z0-9]{5}$\",container=\"test\"}",
    80  		},
    81  		{
    82  			name: "Deployment workload kind",
    83  			args: args{
    84  				namespace:     "my-namespace",
    85  				workloadName:  "my-deployment",
    86  				kind:          string(datasourcetypes.WorkloadDeployment),
    87  				containerName: "test2",
    88  				extraFilter:   "key1=\"value\"",
    89  			},
    90  			want: "container_memory_working_set_bytes{container!=\"POD\",namespace=\"my-namespace\",pod=~\"^my-deployment-[a-z0-9]+-[a-z0-9]{5}$\",container=\"test2\",key1=\"value\"}",
    91  		},
    92  	}
    93  	for _, tt := range tests {
    94  		t.Run(tt.name, func(t *testing.T) {
    95  			if got := GetContainerMemUsageQueryExp(tt.args.namespace, tt.args.workloadName, tt.args.kind, tt.args.containerName, tt.args.extraFilter); got != tt.want {
    96  				t.Errorf("GetContainerMemUsageQueryExp() = %v, want %v", got, tt.want)
    97  			}
    98  		})
    99  	}
   100  }
   101  
   102  func Test_convertWorkloadNameToPods(t *testing.T) {
   103  	type args struct {
   104  		workloadName string
   105  		workloadKind string
   106  	}
   107  	tests := []struct {
   108  		name string
   109  		args args
   110  		want string
   111  	}{
   112  		{
   113  			name: "Deployment workload kind",
   114  			args: args{
   115  				workloadName: "my-deployment",
   116  				workloadKind: string(datasourcetypes.WorkloadDeployment),
   117  			},
   118  			want: "^my-deployment-[a-z0-9]+-[a-z0-9]{5}$",
   119  		},
   120  		{
   121  			name: "Unknown workload kind",
   122  			args: args{
   123  				workloadName: "my-workload",
   124  				workloadKind: "unknown",
   125  			},
   126  			want: "^my-workload-.*",
   127  		},
   128  	}
   129  	for _, tt := range tests {
   130  		t.Run(tt.name, func(t *testing.T) {
   131  			if got := convertWorkloadNameToPods(tt.args.workloadName, tt.args.workloadKind); got != tt.want {
   132  				t.Errorf("convertWorkloadNameToPods() = %v, want %v", got, tt.want)
   133  			}
   134  		})
   135  	}
   136  }
   137  
   138  func TestGetExtraFilters(t *testing.T) {
   139  	type args struct {
   140  		extraFilters string
   141  		baseFilter   string
   142  	}
   143  	tests := []struct {
   144  		name string
   145  		args args
   146  		want string
   147  	}{
   148  		{
   149  			name: "all is empty",
   150  			args: args{
   151  				extraFilters: "",
   152  				baseFilter:   "",
   153  			},
   154  			want: "",
   155  		},
   156  		{
   157  			name: "extraFilters is empty",
   158  			args: args{
   159  				extraFilters: "",
   160  				baseFilter:   "cluster=\"cfeaf782fasdfe\"",
   161  			},
   162  			want: "cluster=\"cfeaf782fasdfe\"",
   163  		},
   164  		{
   165  			name: "baseFilter is empty",
   166  			args: args{
   167  				extraFilters: "service=\"Katalyst\"",
   168  				baseFilter:   "",
   169  			},
   170  			want: "service=\"Katalyst\"",
   171  		},
   172  		{
   173  			name: "all is not empty",
   174  			args: args{
   175  				extraFilters: "service=\"Katalyst\"",
   176  				baseFilter:   "cluster=\"cfeaf782fasdfe\"",
   177  			},
   178  			want: "service=\"Katalyst\",cluster=\"cfeaf782fasdfe\"",
   179  		},
   180  	}
   181  	for _, tt := range tests {
   182  		t.Run(tt.name, func(t *testing.T) {
   183  			if got := GetExtraFilters(tt.args.extraFilters, tt.args.baseFilter); got != tt.want {
   184  				t.Errorf("GetExtraFilters() = %v, want %v", got, tt.want)
   185  			}
   186  		})
   187  	}
   188  }