| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- package metrics
- import (
- "testing"
- "github.com/opencost/opencost/core/pkg/clustercache"
- "github.com/prometheus/client_golang/prometheus"
- dto "github.com/prometheus/client_model/go"
- v1 "k8s.io/api/core/v1"
- "k8s.io/apimachinery/pkg/api/resource"
- "k8s.io/apimachinery/pkg/types"
- )
- func collectMetrics(collector KubePVCCollector) []prometheus.Metric {
- ch := make(chan prometheus.Metric, 10)
- go func() {
- defer close(ch)
- collector.Collect(ch)
- }()
- var metrics []prometheus.Metric
- for metric := range ch {
- metrics = append(metrics, metric)
- }
- return metrics
- }
- func TestKubePVCCollector_Describe(t *testing.T) {
- collector := KubePVCCollector{metricsConfig: MetricsConfig{}}
- ch := make(chan *prometheus.Desc, 5)
- go func() {
- defer close(ch)
- collector.Describe(ch)
- }()
- count := 0
- for range ch {
- count++
- }
- if count != 2 {
- t.Errorf("Expected 2 metrics described, got %d", count)
- }
- }
- func TestKubePVCCollector_Collect(t *testing.T) {
- storageSize := resource.MustParse("1Gi")
- pvc := &clustercache.PersistentVolumeClaim{
- UID: types.UID("test-uid"),
- Name: "test-pvc",
- Namespace: "default",
- Spec: v1.PersistentVolumeClaimSpec{
- Resources: v1.VolumeResourceRequirements{
- Requests: v1.ResourceList{v1.ResourceStorage: storageSize},
- },
- },
- }
- cache := NewFakePVCCache([]*clustercache.PersistentVolumeClaim{pvc})
- collector := KubePVCCollector{
- KubeClusterCache: cache,
- metricsConfig: MetricsConfig{},
- }
- metrics := collectMetrics(collector)
- if len(metrics) != 2 {
- t.Errorf("Expected 2 metrics, got %d", len(metrics))
- }
- // Verify UID label exists in metrics
- for _, metric := range metrics {
- var m dto.Metric
- if err := metric.Write(&m); err != nil {
- t.Errorf("Error writing metric: %v", err)
- }
- hasUID := false
- for _, label := range m.Label {
- if *label.Name == "uid" && *label.Value == "test-uid" {
- hasUID = true
- break
- }
- }
- if !hasUID {
- t.Error("Metric missing UID label")
- }
- }
- }
- func TestKubePVCMetrics_UIDLabel(t *testing.T) {
- metric := newKubePVCResourceRequestsStorageBytesMetric(
- "test_metric", "test-pvc", "test-namespace", "test-uid", 1000.0,
- )
- var m dto.Metric
- if err := metric.Write(&m); err != nil {
- t.Fatalf("Error writing metric: %v", err)
- }
- // Verify UID label exists
- for _, label := range m.Label {
- if *label.Name == "uid" && *label.Value == "test-uid" {
- return
- }
- }
- t.Error("UID label not found in metric")
- }
- type FakePVCCache struct {
- clustercache.ClusterCache
- pvcs []*clustercache.PersistentVolumeClaim
- }
- func (f FakePVCCache) GetAllPersistentVolumeClaims() []*clustercache.PersistentVolumeClaim {
- return f.pvcs
- }
- func NewFakePVCCache(pvcs []*clustercache.PersistentVolumeClaim) FakePVCCache {
- return FakePVCCache{
- pvcs: pvcs,
- }
- }
|