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 }