github.com/verrazzano/verrazzano@v1.7.1/application-operator/internal/metrics/service_monitor_test.go (about) 1 // Copyright (c) 2022, 2023, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 package metrics 5 6 import ( 7 "testing" 8 9 promoperapi "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1" 10 asserts "github.com/stretchr/testify/assert" 11 "github.com/verrazzano/verrazzano/pkg/log/vzlog" 12 corev1 "k8s.io/api/core/v1" 13 ) 14 15 func TestPopulateServiceMonitor(t *testing.T) { 16 trueVal := true 17 falseVal := false 18 19 tests := []struct { 20 name string 21 info ScrapeInfo 22 expectError bool 23 }{ 24 { 25 name: "empty info", 26 info: ScrapeInfo{}, 27 expectError: false, 28 }, 29 { 30 name: "true value test", 31 info: ScrapeInfo{ 32 Ports: 5, 33 BasicAuthSecret: &corev1.Secret{}, 34 IstioEnabled: &trueVal, 35 VZPrometheusLabels: &trueVal, 36 KeepLabels: map[string]string{"test": "label"}, 37 ClusterName: "local1", 38 }, 39 expectError: false, 40 }, 41 { 42 name: "false value test", 43 info: ScrapeInfo{ 44 Ports: 3, 45 BasicAuthSecret: &corev1.Secret{}, 46 IstioEnabled: &falseVal, 47 VZPrometheusLabels: &falseVal, 48 KeepLabels: map[string]string{"test": "label"}, 49 ClusterName: "local2", 50 }, 51 expectError: false, 52 }, 53 } 54 for _, tt := range tests { 55 t.Run(tt.name, func(t *testing.T) { 56 serviceMonitor := &promoperapi.ServiceMonitor{} 57 err := PopulateServiceMonitor(tt.info, serviceMonitor, vzlog.DefaultLogger()) 58 if tt.expectError { 59 asserts.Error(t, err) 60 } else { 61 asserts.NoError(t, err) 62 asserts.Equal(t, tt.info.Ports, len(serviceMonitor.Spec.Endpoints)) 63 if len(serviceMonitor.Spec.Endpoints) == 0 { 64 return 65 } 66 asserts.Equal(t, serviceMonitor.Spec.Endpoints[0].RelabelConfigs[0].Replacement, tt.info.ClusterName) 67 asserts.Equal(t, 10, len(serviceMonitor.Spec.Endpoints[0].RelabelConfigs)) 68 if tt.info.BasicAuthSecret != nil { 69 asserts.NotNil(t, serviceMonitor.Spec.Endpoints[0].BasicAuth) 70 } 71 if tt.info.IstioEnabled == nil || tt.info.IstioEnabled == &falseVal { 72 asserts.Equal(t, "http", serviceMonitor.Spec.Endpoints[0].Scheme) 73 } else { 74 asserts.Equal(t, "https", serviceMonitor.Spec.Endpoints[0].Scheme) 75 } 76 if tt.info.VZPrometheusLabels == nil || tt.info.VZPrometheusLabels == &falseVal { 77 asserts.Contains(t, serviceMonitor.Spec.Endpoints[0].RelabelConfigs[1].SourceLabels, 78 promoperapi.LabelName("__meta_kubernetes_pod_annotation_prometheus_io_scrape")) 79 asserts.Contains(t, serviceMonitor.Spec.Endpoints[0].RelabelConfigs[1].SourceLabels, 80 promoperapi.LabelName("test")) 81 } else { 82 asserts.Contains(t, serviceMonitor.Spec.Endpoints[0].RelabelConfigs[1].SourceLabels, 83 promoperapi.LabelName("__meta_kubernetes_pod_annotation_verrazzano_io_metricsEnabled")) 84 if len(serviceMonitor.Spec.Endpoints) >= 1 { 85 asserts.Contains(t, serviceMonitor.Spec.Endpoints[1].RelabelConfigs[1].SourceLabels, 86 promoperapi.LabelName("__meta_kubernetes_pod_annotation_verrazzano_io_metricsEnabled1")) 87 } 88 asserts.Contains(t, serviceMonitor.Spec.Endpoints[0].RelabelConfigs[1].SourceLabels, 89 promoperapi.LabelName("test")) 90 } 91 } 92 }) 93 } 94 }