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

Add end-to-end tests for Alertmanager and ThanosRuler

Signed-off-by: Simon Pasquier <spasquie@redhat.com>
This commit is contained in:
Simon Pasquier
2026-01-30 16:06:25 +01:00
parent 94e8bdedad
commit dd0a792438
4 changed files with 74 additions and 0 deletions

View File

@@ -2729,3 +2729,34 @@ func testAlertManagerServiceName(t *testing.T) {
require.Len(t, svcList.Items, 1)
require.Equal(t, svcList.Items[0].Name, svc.Name)
}
func testAMScaleUpWithoutLabels(t *testing.T) {
// Don't run Alertmanager tests in parallel. See
// https://github.com/prometheus/alertmanager/issues/1835 for details.
ctx := context.Background()
testCtx := framework.NewTestCtx(t)
defer testCtx.Cleanup(t)
ns := framework.CreateNamespace(ctx, t, testCtx)
framework.SetupPrometheusRBAC(ctx, t, testCtx, ns)
name := "test"
// Create an Alertmanager resource with 1 replica
am, err := framework.CreateAlertmanagerAndWaitUntilReady(ctx, framework.MakeBasicAlertmanager(ns, name, 1))
require.NoError(t, err)
// Remove all labels on the StatefulSet using Patch
stsName := fmt.Sprintf("alertmanager-%s", name)
err = framework.RemoveAllLabelsFromStatefulSet(ctx, stsName, ns)
require.NoError(t, err)
// Scale up the Alertmanager resource to 2 replicas
_, err = framework.UpdateAlertmanagerReplicasAndWaitUntilReady(ctx, am.Name, ns, 2)
require.NoError(t, err)
// Verify the StatefulSet now has labels again (restored by the operator)
stsClient := framework.KubeClient.AppsV1().StatefulSets(ns)
sts, err := stsClient.Get(ctx, stsName, metav1.GetOptions{})
require.NoError(t, err)
require.NotEmpty(t, sts.GetLabels(), "expected labels to be restored on the StatefulSet by the operator")
}

View File

@@ -251,6 +251,7 @@ func testAllNSAlertmanager(t *testing.T) {
"AMTemplateReloadConfig": testAMTmplateReloadConfig,
"AMStatusScale": testAlertmanagerStatusScale,
"AMServiceName": testAlertManagerServiceName,
"AMScaleUpWithoutLabels": testAMScaleUpWithoutLabels,
}
for name, f := range testFuncs {
@@ -342,6 +343,7 @@ func testAllNSThanosRuler(t *testing.T) {
"ThanosRulerCheckStorageClass": testTRCheckStorageClass,
"ThanosRulerServiceName": testThanosRulerServiceName,
"ThanosRulerStateless": testThanosRulerStateless,
"ThanosRulerScaleUpWithoutLabels": testThanosRulerScaleUpWithoutLabels,
}
for name, f := range testFuncs {
t.Run(name, f)

View File

@@ -636,3 +636,33 @@ func testThanosRulerStateless(t *testing.T) {
err = framework.WaitForPrometheusFiringAlert(context.Background(), ns, promSVC.Name, testAlert)
require.NoError(t, err)
}
func testThanosRulerScaleUpWithoutLabels(t *testing.T) {
t.Parallel()
ctx := context.Background()
testCtx := framework.NewTestCtx(t)
defer testCtx.Cleanup(t)
ns := framework.CreateNamespace(ctx, t, testCtx)
framework.SetupPrometheusRBAC(ctx, t, testCtx, ns)
name := "test"
// Create a ThanosRuler resource with 1 replica
tr, err := framework.CreateThanosRulerAndWaitUntilReady(ctx, ns, framework.MakeBasicThanosRuler(name, 1, "http://test.example.com"))
require.NoError(t, err)
// Remove all labels on the StatefulSet using Patch
stsName := fmt.Sprintf("thanos-ruler-%s", name)
err = framework.RemoveAllLabelsFromStatefulSet(ctx, stsName, ns)
require.NoError(t, err)
// Scale up the ThanosRuler resource to 2 replicas
_, err = framework.UpdateThanosRulerReplicasAndWaitUntilReady(ctx, tr.Name, ns, 2)
require.NoError(t, err)
// Verify the StatefulSet now has labels again (restored by the operator)
stsClient := framework.KubeClient.AppsV1().StatefulSets(ns)
sts, err := stsClient.Get(ctx, stsName, metav1.GetOptions{})
require.NoError(t, err)
require.NotEmpty(t, sts.GetLabels(), "expected labels to be restored on the StatefulSet by the operator")
}

View File

@@ -108,6 +108,17 @@ func (f *Framework) PatchThanosRuler(ctx context.Context, name, ns string, spec
return tr, nil
}
func (f *Framework) UpdateThanosRulerReplicasAndWaitUntilReady(ctx context.Context, name, ns string, replicas int32) (*monitoringv1.ThanosRuler, error) {
return f.PatchThanosRulerAndWaitUntilReady(
ctx,
name,
ns,
monitoringv1.ThanosRulerSpec{
Replicas: ptr.To(replicas),
},
)
}
func (f *Framework) WaitForThanosRulerReady(ctx context.Context, ns string, tr *monitoringv1.ThanosRuler, timeout time.Duration) error {
expected := *tr.Spec.Replicas