1
0
mirror of https://github.com/coreos/prometheus-operator.git synced 2026-02-05 15:46:31 +01:00

test: fix testPrometheusUTF8LabelSupport for Prometheus V2

Assisted-By: Cursor
Signed-off-by: Jayapriya Pai <slashpai9@gmail.com>
This commit is contained in:
Jayapriya Pai
2025-10-15 13:07:53 +05:30
parent 772eefb11f
commit fdeaa44a81

View File

@@ -32,6 +32,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/blang/semver/v4"
"github.com/kylelemons/godebug/pretty" "github.com/kylelemons/godebug/pretty"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"golang.org/x/net/http2" "golang.org/x/net/http2"
@@ -5788,6 +5789,39 @@ func testPrometheusUTF8LabelSupport(t *testing.T) {
_, err = framework.KubeClient.CoreV1().Services(ns).Create(context.Background(), service, metav1.CreateOptions{}) _, err = framework.KubeClient.CoreV1().Services(ns).Create(context.Background(), service, metav1.CreateOptions{})
require.NoError(t, err) require.NoError(t, err)
// Determine the Prometheus version that will be used.
promVersion := operator.DefaultPrometheusVersion
if os.Getenv("TEST_PROMETHEUS_V2") == "true" {
promVersion = operator.DefaultPrometheusV2
}
// Parse the version to check if it supports UTF-8.
parsedVersion, err := semver.ParseTolerant(promVersion)
require.NoError(t, err)
supportsUTF8 := parsedVersion.GTE(semver.MustParse("3.0.0"))
var relabelConfigs []monitoringv1.RelabelConfig
var expectedLabelName string
if supportsUTF8 {
// Use UTF-8 label for Prometheus 3.0+
relabelConfigs = []monitoringv1.RelabelConfig{{
SourceLabels: []monitoringv1.LabelName{"__meta_kubernetes_service_label_cluster"},
TargetLabel: "service_clustér_label",
Action: "replace",
}}
expectedLabelName = "service_clustér_label"
} else {
// Use ASCII-only label for Prometheus 2.x
relabelConfigs = []monitoringv1.RelabelConfig{{
SourceLabels: []monitoringv1.LabelName{"__meta_kubernetes_service_label_cluster"},
TargetLabel: "service_cluster_label",
Action: "replace",
}}
expectedLabelName = "service_cluster_label"
}
sm := &monitoringv1.ServiceMonitor{ sm := &monitoringv1.ServiceMonitor{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "utf8-servicemonitor", Name: "utf8-servicemonitor",
@@ -5799,13 +5833,9 @@ func testPrometheusUTF8LabelSupport(t *testing.T) {
MatchLabels: map[string]string{"app.name": "instrumented-sample-app"}, MatchLabels: map[string]string{"app.name": "instrumented-sample-app"},
}, },
Endpoints: []monitoringv1.Endpoint{{ Endpoints: []monitoringv1.Endpoint{{
Port: "web", Port: "web",
Interval: "2s", Interval: "2s",
RelabelConfigs: []monitoringv1.RelabelConfig{{ RelabelConfigs: relabelConfigs,
SourceLabels: []monitoringv1.LabelName{"__meta_kubernetes_service_label_cluster"},
TargetLabel: "service_clustér_label",
Action: "replace",
}},
BasicAuth: &monitoringv1.BasicAuth{ BasicAuth: &monitoringv1.BasicAuth{
Username: v1.SecretKeySelector{ Username: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{Name: "basic-auth"}, LocalObjectReference: v1.LocalObjectReference{Name: "basic-auth"},
@@ -5847,26 +5877,32 @@ func testPrometheusUTF8LabelSupport(t *testing.T) {
// Default Prometheus service name is "prometheus-operated". // Default Prometheus service name is "prometheus-operated".
promSvcName := "prometheus-operated" promSvcName := "prometheus-operated"
// Wait for the instrumented-sample-app target to be discovered // Wait for the instrumented-sample-app target to be discovered.
err = framework.WaitForHealthyTargets(context.Background(), ns, promSvcName, 1) err = framework.WaitForHealthyTargets(context.Background(), ns, promSvcName, 1)
require.NoError(t, err) require.NoError(t, err)
// Verify UTF8 labels work in queries. // Verify label queries work based on the Prometheus version.
queryLabel := fmt.Sprintf(`{"%s"="dev"}`, expectedLabelName)
err = wait.PollUntilContextTimeout(context.Background(), 5*time.Second, 2*time.Minute, false, func(ctx context.Context) (bool, error) { err = wait.PollUntilContextTimeout(context.Background(), 5*time.Second, 2*time.Minute, false, func(ctx context.Context) (bool, error) {
results, err := framework.PrometheusQuery(ns, promSvcName, "http", `{"service_clustér_label"="dev"}`) results, err := framework.PrometheusQuery(ns, promSvcName, "http", queryLabel)
if err != nil { if err != nil {
t.Logf("UTF8 label query failed: %v", err) t.Logf("Label query failed: %v", err)
return false, nil return false, nil
} }
if len(results) == 0 { if len(results) == 0 {
t.Logf("UTF8 label query returned no results") t.Logf("Label query returned no results")
return false, nil return false, nil
} }
return true, nil return true, nil
}) })
require.NoError(t, err, "UTF-8 label queries should work in Prometheus 3.0+ queries")
if supportsUTF8 {
require.NoError(t, err, "UTF-8 label queries should work in Prometheus 3.0+")
} else {
require.NoError(t, err, "ASCII label queries should work in Prometheus 2.x")
}
} }
func isAlertmanagerDiscoveryWorking(ns, promSVCName, alertmanagerName string) func(ctx context.Context) (bool, error) { func isAlertmanagerDiscoveryWorking(ns, promSVCName, alertmanagerName string) func(ctx context.Context) (bool, error) {