sigs.k8s.io/kueue@v0.6.2/pkg/metrics/metrics_test.go (about) 1 /* 2 Copyright 2023 The Kubernetes 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 metrics 18 19 import ( 20 "testing" 21 22 "github.com/prometheus/client_golang/prometheus" 23 24 "sigs.k8s.io/kueue/pkg/features" 25 "sigs.k8s.io/kueue/pkg/util/testing/metrics" 26 ) 27 28 func expectFilteredMetricsCount(t *testing.T, vec *prometheus.GaugeVec, count int, kvs ...string) { 29 labels := prometheus.Labels{} 30 for i := 0; i < len(kvs)/2; i++ { 31 labels[kvs[i*2]] = kvs[i*2+1] 32 } 33 all := metrics.CollectFilteredGaugeVec(vec, labels) 34 if len(all) != count { 35 t.Helper() 36 t.Errorf("Expecting %d metrics got %d, matching labels %v", count, len(all), kvs) 37 } 38 } 39 40 func TestReportAndCleanupClusterQueueMetrics(t *testing.T) { 41 defer features.SetFeatureGateDuringTest(t, features.LendingLimit, true)() 42 ReportClusterQueueQuotas("cohort", "queue", "flavor", "res", 5, 10, 3) 43 ReportClusterQueueQuotas("cohort", "queue", "flavor2", "res", 1, 2, 1) 44 45 expectFilteredMetricsCount(t, ClusterQueueResourceNominalQuota, 2, "cluster_queue", "queue") 46 expectFilteredMetricsCount(t, ClusterQueueResourceBorrowingLimit, 2, "cluster_queue", "queue") 47 expectFilteredMetricsCount(t, ClusterQueueResourceLendingLimit, 2, "cluster_queue", "queue") 48 49 ReportClusterQueueResourceReservations("cohort", "queue", "flavor", "res", 7) 50 ReportClusterQueueResourceReservations("cohort", "queue", "flavor2", "res", 3) 51 52 ReportClusterQueueResourceUsage("cohort", "queue", "flavor", "res", 7) 53 ReportClusterQueueResourceUsage("cohort", "queue", "flavor2", "res", 3) 54 55 expectFilteredMetricsCount(t, ClusterQueueResourceReservations, 2, "cluster_queue", "queue") 56 expectFilteredMetricsCount(t, ClusterQueueResourceUsage, 2, "cluster_queue", "queue") 57 58 ClearClusterQueueResourceMetrics("queue") 59 60 expectFilteredMetricsCount(t, ClusterQueueResourceNominalQuota, 0, "cluster_queue", "queue") 61 expectFilteredMetricsCount(t, ClusterQueueResourceBorrowingLimit, 0, "cluster_queue", "queue") 62 expectFilteredMetricsCount(t, ClusterQueueResourceLendingLimit, 0, "cluster_queue", "queue") 63 expectFilteredMetricsCount(t, ClusterQueueResourceReservations, 0, "cluster_queue", "queue") 64 expectFilteredMetricsCount(t, ClusterQueueResourceUsage, 0, "cluster_queue", "queue") 65 } 66 67 func TestReportAndCleanupClusterQueueQuotas(t *testing.T) { 68 defer features.SetFeatureGateDuringTest(t, features.LendingLimit, true)() 69 ReportClusterQueueQuotas("cohort", "queue", "flavor", "res", 5, 10, 3) 70 ReportClusterQueueQuotas("cohort", "queue", "flavor", "res2", 5, 10, 3) 71 ReportClusterQueueQuotas("cohort", "queue", "flavor2", "res", 1, 2, 1) 72 ReportClusterQueueQuotas("cohort", "queue", "flavor2", "res2", 1, 2, 1) 73 74 expectFilteredMetricsCount(t, ClusterQueueResourceNominalQuota, 4, "cluster_queue", "queue") 75 expectFilteredMetricsCount(t, ClusterQueueResourceBorrowingLimit, 4, "cluster_queue", "queue") 76 expectFilteredMetricsCount(t, ClusterQueueResourceLendingLimit, 4, "cluster_queue", "queue") 77 78 // drop flavor2 79 ClearClusterQueueResourceQuotas("queue", "flavor2", "") 80 81 expectFilteredMetricsCount(t, ClusterQueueResourceNominalQuota, 2, "cluster_queue", "queue") 82 expectFilteredMetricsCount(t, ClusterQueueResourceBorrowingLimit, 2, "cluster_queue", "queue") 83 expectFilteredMetricsCount(t, ClusterQueueResourceLendingLimit, 2, "cluster_queue", "queue") 84 85 expectFilteredMetricsCount(t, ClusterQueueResourceNominalQuota, 0, "cluster_queue", "queue", "flavor", "flavor2") 86 expectFilteredMetricsCount(t, ClusterQueueResourceBorrowingLimit, 0, "cluster_queue", "queue", "flavor", "flavor2") 87 expectFilteredMetricsCount(t, ClusterQueueResourceLendingLimit, 0, "cluster_queue", "queue", "flavor", "flavor2") 88 89 // drop res2 90 ClearClusterQueueResourceQuotas("queue", "flavor", "res2") 91 92 expectFilteredMetricsCount(t, ClusterQueueResourceNominalQuota, 1, "cluster_queue", "queue") 93 expectFilteredMetricsCount(t, ClusterQueueResourceBorrowingLimit, 1, "cluster_queue", "queue") 94 expectFilteredMetricsCount(t, ClusterQueueResourceLendingLimit, 1, "cluster_queue", "queue") 95 96 expectFilteredMetricsCount(t, ClusterQueueResourceNominalQuota, 0, "cluster_queue", "queue", "flavor", "flavor", "resource", "res2") 97 expectFilteredMetricsCount(t, ClusterQueueResourceBorrowingLimit, 0, "cluster_queue", "queue", "flavor", "flavor", "resource", "res2") 98 expectFilteredMetricsCount(t, ClusterQueueResourceLendingLimit, 0, "cluster_queue", "queue", "flavor", "flavor", "resource", "res2") 99 } 100 101 func TestReportAndCleanupClusterQueueUsage(t *testing.T) { 102 ReportClusterQueueResourceReservations("cohort", "queue", "flavor", "res", 5) 103 ReportClusterQueueResourceReservations("cohort", "queue", "flavor", "res2", 5) 104 ReportClusterQueueResourceReservations("cohort", "queue", "flavor2", "res", 1) 105 ReportClusterQueueResourceReservations("cohort", "queue", "flavor2", "res2", 1) 106 107 expectFilteredMetricsCount(t, ClusterQueueResourceReservations, 4, "cluster_queue", "queue") 108 109 // drop flavor2 110 ClearClusterQueueResourceReservations("queue", "flavor2", "") 111 112 expectFilteredMetricsCount(t, ClusterQueueResourceReservations, 2, "cluster_queue", "queue") 113 expectFilteredMetricsCount(t, ClusterQueueResourceReservations, 0, "cluster_queue", "queue", "flavor", "flavor2") 114 115 // drop res2 116 ClearClusterQueueResourceReservations("queue", "flavor", "res2") 117 118 expectFilteredMetricsCount(t, ClusterQueueResourceReservations, 1, "cluster_queue", "queue") 119 expectFilteredMetricsCount(t, ClusterQueueResourceReservations, 0, "cluster_queue", "queue", "flavor", "flavor", "resource", "res2") 120 121 ReportClusterQueueResourceUsage("cohort", "queue", "flavor", "res", 5) 122 ReportClusterQueueResourceUsage("cohort", "queue", "flavor", "res2", 5) 123 ReportClusterQueueResourceUsage("cohort", "queue", "flavor2", "res", 1) 124 ReportClusterQueueResourceUsage("cohort", "queue", "flavor2", "res2", 1) 125 126 expectFilteredMetricsCount(t, ClusterQueueResourceUsage, 4, "cluster_queue", "queue") 127 128 // drop flavor2 129 ClearClusterQueueResourceUsage("queue", "flavor2", "") 130 131 expectFilteredMetricsCount(t, ClusterQueueResourceUsage, 2, "cluster_queue", "queue") 132 expectFilteredMetricsCount(t, ClusterQueueResourceUsage, 0, "cluster_queue", "queue", "flavor", "flavor2") 133 134 // drop res2 135 ClearClusterQueueResourceUsage("queue", "flavor", "res2") 136 137 expectFilteredMetricsCount(t, ClusterQueueResourceUsage, 1, "cluster_queue", "queue") 138 expectFilteredMetricsCount(t, ClusterQueueResourceUsage, 0, "cluster_queue", "queue", "flavor", "flavor", "resource", "res2") 139 }