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:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user