Skip to content

Commit

Permalink
test/e2e: add thanos ruler PVC tests
Browse files Browse the repository at this point in the history
  • Loading branch information
s-urbaniak committed Nov 23, 2020
1 parent 5abb40b commit 5f41752
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 27 deletions.
11 changes: 3 additions & 8 deletions test/e2e/alertmanager_test.go
Expand Up @@ -64,20 +64,15 @@ func TestAlertmanagerVolumeClaim(t *testing.T) {
t.Fatal(err)
}

var lastErr error
// Wait for persistent volume claim
err = wait.Poll(time.Second, 5*time.Minute, func() (bool, error) {
err = framework.Poll(time.Second, 5*time.Minute, func() error {
_, err := f.KubeClient.CoreV1().PersistentVolumeClaims(f.Ns).Get(context.TODO(), "alertmanager-main-db-alertmanager-main-0", metav1.GetOptions{})
lastErr = errors.Wrap(err, "getting alertmanager persistent volume claim failed")
if err != nil {
return false, nil
return errors.Wrap(err, "getting alertmanager persistent volume claim failed")
}
return true, nil
return nil
})
if err != nil {
if err == wait.ErrWaitTimeout && lastErr != nil {
err = lastErr
}
t.Fatal(err)
}

Expand Down
14 changes: 4 additions & 10 deletions test/e2e/prometheus_test.go
Expand Up @@ -20,11 +20,11 @@ import (
"testing"
"time"

"github.com/openshift/cluster-monitoring-operator/test/e2e/framework"
"github.com/pkg/errors"
appsv1 "k8s.io/api/apps/v1"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/wait"
)

func TestPrometheusVolumeClaim(t *testing.T) {
Expand Down Expand Up @@ -59,20 +59,14 @@ func TestPrometheusVolumeClaim(t *testing.T) {
t.Fatal(err)
}

var lastErr error
// Wait for persistent volume claim
err = wait.Poll(time.Second, 5*time.Minute, func() (bool, error) {
err = framework.Poll(time.Second, 5*time.Minute, func() error {
_, err := f.KubeClient.CoreV1().PersistentVolumeClaims(f.Ns).Get(context.TODO(), "prometheus-k8s-db-prometheus-k8s-0", metav1.GetOptions{})
lastErr = errors.Wrap(err, "getting prometheus persistent volume claim failed")
if err != nil {
return false, nil
return errors.Wrap(err, "getting prometheus persistent volume claim failed")
}
return true, nil
return nil
})
if err != nil {
if err == wait.ErrWaitTimeout && lastErr != nil {
err = lastErr
}
t.Fatal(err)
}

Expand Down
86 changes: 77 additions & 9 deletions test/e2e/user_workload_monitoring_test.go
Expand Up @@ -34,7 +34,6 @@ import (
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/apimachinery/pkg/util/wait"
)

// The namespace where to deploy the test application.
Expand Down Expand Up @@ -129,20 +128,15 @@ func assertPrometheusVCConfig(cm *v1.ConfigMap) func(*testing.T) {
t.Fatal(err)
}

var lastErr error
// Wait for persistent volume claim
err := wait.Poll(time.Second, 5*time.Minute, func() (bool, error) {
err := framework.Poll(time.Second, 5*time.Minute, func() error {
_, err := f.KubeClient.CoreV1().PersistentVolumeClaims(f.UserWorkloadMonitoringNs).Get(context.TODO(), "prometheus-user-workload-db-prometheus-user-workload-0", metav1.GetOptions{})
lastErr = errors.Wrap(err, "getting prometheus persistent volume claim failed")
if err != nil {
return false, nil
return errors.Wrap(err, "getting thanos ruler persistent volume claim failed")
}
return true, nil
return nil
})
if err != nil {
if err == wait.ErrWaitTimeout && lastErr != nil {
err = lastErr
}
t.Fatal(err)
}

Expand All @@ -159,6 +153,80 @@ func assertPrometheusVCConfig(cm *v1.ConfigMap) func(*testing.T) {

}

func TestUserWorkloadMonitoringThanosRulerVolumeClaim(t *testing.T) {
cm := &v1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: "cluster-monitoring-config",
Namespace: f.Ns,
},
Data: map[string]string{
"config.yaml": `enableUserWorkload: true
`,
},
}

uwmCM := &v1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: "user-workload-monitoring-config",
Namespace: f.UserWorkloadMonitoringNs,
},
Data: map[string]string{
"config.yaml": `thanosRuler:
volumeClaimTemplate:
spec:
storageClassName: gp2
resources:
requests:
storage: 2Gi
`,
},
}

for _, scenario := range []struct {
name string
f func(*testing.T)
}{
{"enable user workload monitoring, assert prometheus rollout", createUserWorkloadAssets(cm)},
{"set VolumeClaimTemplate for thanosRuler CR, assert that it is created", assertThanosRulerVCConfig(uwmCM)},
//{"assert assets are deleted when user workload monitoring is disabled", assertDeletedUserWorkloadAssets(cm)},
} {
if ok := t.Run(scenario.name, scenario.f); !ok {
t.Fatalf("scenario %q failed", scenario.name)
}
}
}

func assertThanosRulerVCConfig(cm *v1.ConfigMap) func(*testing.T) {
return func(t *testing.T) {
if err := f.OperatorClient.CreateOrUpdateConfigMap(cm); err != nil {
t.Fatal(err)
}

// Wait for persistent volume claim
err := framework.Poll(time.Second, 5*time.Minute, func() error {
_, err := f.KubeClient.CoreV1().PersistentVolumeClaims(f.UserWorkloadMonitoringNs).Get(context.TODO(), "thanos-ruler-user-workload-data-thanos-ruler-user-workload-0", metav1.GetOptions{})
if err != nil {
return errors.Wrap(err, "getting prometheus persistent volume claim failed")
}
return nil
})
if err != nil {
t.Fatal(err)
}

err = f.OperatorClient.WaitForStatefulsetRollout(&appsv1.StatefulSet{
ObjectMeta: metav1.ObjectMeta{
Name: "thanos-ruler-user-workload",
Namespace: f.UserWorkloadMonitoringNs,
},
})
if err != nil {
t.Fatal(err)
}
}

}

func createUserWorkloadAssets(cm *v1.ConfigMap) func(*testing.T) {
return func(t *testing.T) {
if err := f.OperatorClient.CreateOrUpdateConfigMap(cm); err != nil {
Expand Down

0 comments on commit 5f41752

Please sign in to comment.