Skip to content

Commit 41d5fca

Browse files
committed
Add observability controller unit tests
Signed-off-by: João Vilaça <[email protected]>
1 parent e48d9f2 commit 41d5fca

File tree

24 files changed

+429
-72
lines changed

24 files changed

+429
-72
lines changed

controllers/alerts/metrics_test.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414
. "github.com/onsi/gomega"
1515
"github.com/onsi/gomega/gstruct"
1616

17-
"github.com/machadovilaca/operator-observability/pkg/operatorrules"
1817
monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
1918
appsv1 "k8s.io/api/apps/v1"
2019
corev1 "k8s.io/api/core/v1"
@@ -53,8 +52,7 @@ var _ = Describe("alert tests", func() {
5352

5453
req = commontestutils.NewReq(nil)
5554

56-
err := operatorrules.CleanRegistry()
57-
Expect(err).ToNot(HaveOccurred())
55+
rules.ResetRules()
5856
})
5957

6058
Context("test reconciler", func() {
@@ -349,13 +347,12 @@ var _ = Describe("alert tests", func() {
349347
})
350348

351349
It("should use the desired runbook URL template when its ENV Variable is set", func() {
352-
err := operatorrules.CleanRegistry()
353-
Expect(err).ToNot(HaveOccurred())
350+
rules.ResetRules()
354351

355352
desiredRunbookURLTemplate := "desired/runbookURL/template/%s"
356353
os.Setenv(runbookURLTemplateEnv, desiredRunbookURLTemplate)
357354

358-
err = rules.SetupRules()
355+
err := rules.SetupRules()
359356
Expect(err).ToNot(HaveOccurred())
360357

361358
owner := getDeploymentReference(ci.GetDeployment())
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package observability
2+
3+
import (
4+
"os"
5+
"time"
6+
7+
. "github.com/onsi/ginkgo/v2"
8+
. "github.com/onsi/gomega"
9+
10+
appsv1 "k8s.io/api/apps/v1"
11+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
12+
"k8s.io/client-go/rest"
13+
"sigs.k8s.io/controller-runtime/pkg/client"
14+
logf "sigs.k8s.io/controller-runtime/pkg/log"
15+
"sigs.k8s.io/controller-runtime/pkg/manager"
16+
17+
"github.com/kubevirt/hyperconverged-cluster-operator/controllers/commontestutils"
18+
"github.com/kubevirt/hyperconverged-cluster-operator/pkg/monitoring/observability/rules"
19+
)
20+
21+
const testNamespace = "observability_test"
22+
23+
var logger = logf.Log.WithName("observability-controller")
24+
25+
var _ = Describe("Observability Controller", func() {
26+
var mgr manager.Manager
27+
28+
BeforeEach(func() {
29+
err := os.Setenv("OPERATOR_NAMESPACE", testNamespace)
30+
Expect(err).ToNot(HaveOccurred())
31+
32+
cl := commontestutils.InitClient([]client.Object{})
33+
34+
mgr, err = commontestutils.NewManagerMock(&rest.Config{}, manager.Options{}, cl, logger)
35+
Expect(err).ToNot(HaveOccurred())
36+
})
37+
38+
It("Should successfully setup the controller", func() {
39+
err := SetupWithManager(mgr, &appsv1.Deployment{})
40+
Expect(err).ToNot(HaveOccurred())
41+
Expect(rules.ListAlerts()).To(Not(BeEmpty()))
42+
})
43+
44+
It("Should successfully reconcile observability", func() {
45+
ownerDeployment := &appsv1.Deployment{
46+
ObjectMeta: metav1.ObjectMeta{
47+
Name: "test-deployment",
48+
},
49+
}
50+
51+
reconciler := NewReconciler(mgr, testNamespace, ownerDeployment)
52+
Expect(reconciler.owner.Name).To(Equal(ownerDeployment.Name))
53+
Expect(reconciler.namespace).To(Equal(testNamespace))
54+
Expect(reconciler.config).To(Equal(mgr.GetConfig()))
55+
Expect(reconciler.Client).To(Equal(mgr.GetClient()))
56+
})
57+
58+
It("Should receive periodic events in reconciler events channel", func() {
59+
reconciler := NewReconciler(mgr, testNamespace, &appsv1.Deployment{})
60+
reconciler.startEventLoop()
61+
62+
Eventually(reconciler.events).
63+
WithTimeout(5 * time.Second).
64+
WithPolling(100 * time.Millisecond).
65+
Should(Receive())
66+
})
67+
})

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ require (
1212
github.com/google/uuid v1.6.0
1313
github.com/kubevirt/cluster-network-addons-operator v0.95.1
1414
github.com/kubevirt/monitoring/pkg/metrics/parser v0.0.0-20240505100225-e29dee0bb12b
15-
github.com/machadovilaca/operator-observability v0.0.21
15+
github.com/machadovilaca/operator-observability v0.0.26
1616
github.com/onsi/ginkgo/v2 v2.20.2
1717
github.com/onsi/gomega v1.34.2
1818
github.com/openshift/api v3.9.1-0.20190517100836-d5b34b957e91+incompatible

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,8 @@ github.com/kubevirt/monitoring/pkg/metrics/parser v0.0.0-20240505100225-e29dee0b
151151
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
152152
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
153153
github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs=
154-
github.com/machadovilaca/operator-observability v0.0.21 h1:H0nH+45wtqsxCrJOm8wmcrJLuRZ5QY6iTlHKMlMEZss=
155-
github.com/machadovilaca/operator-observability v0.0.21/go.mod h1:trC+BjI6zhvZMBcX0q7vHrKKRX3lWZdwJxgVUmRJCfw=
154+
github.com/machadovilaca/operator-observability v0.0.26 h1:bSwjBQ5Ua4Y9jukLn4HY2ajUfkWraPRAUcn7eRq079g=
155+
github.com/machadovilaca/operator-observability v0.0.26/go.mod h1:trC+BjI6zhvZMBcX0q7vHrKKRX3lWZdwJxgVUmRJCfw=
156156
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
157157
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
158158
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=

pkg/monitoring/hyperconverged/rules/alerts/prometheus.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const (
2020
runbookURLTemplateEnv = "RUNBOOK_URL_TEMPLATE"
2121
)
2222

23-
func Register() error {
23+
func Register(operatorRegistry *operatorrules.Registry) error {
2424
alerts := [][]promv1.Rule{
2525
operatorAlerts(),
2626
}
@@ -35,7 +35,7 @@ func Register() error {
3535

3636
}
3737

38-
return operatorrules.RegisterAlerts(alerts...)
38+
return operatorRegistry.RegisterAlerts(alerts...)
3939
}
4040

4141
func getRunbookURLTemplate() string {

pkg/monitoring/hyperconverged/rules/recordingrules/recordingrules.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package recordingrules
22

33
import "github.com/machadovilaca/operator-observability/pkg/operatorrules"
44

5-
func Register() error {
6-
return operatorrules.RegisterRecordingRules(
7-
operatorRecordingRules,
8-
)
5+
func Register(operatorRegistry *operatorrules.Registry) error {
6+
return operatorRegistry.RegisterRecordingRules(operatorRecordingRules)
97
}

pkg/monitoring/hyperconverged/rules/rules.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,28 @@ const (
1515
ruleName = hcoutil.HyperConvergedName + "-prometheus-rule"
1616
)
1717

18+
var operatorRegistry = operatorrules.NewRegistry()
19+
1820
func SetupRules() error {
19-
err := recordingrules.Register()
21+
err := recordingrules.Register(operatorRegistry)
2022
if err != nil {
2123
return err
2224
}
2325

24-
err = alerts.Register()
26+
err = alerts.Register(operatorRegistry)
2527
if err != nil {
2628
return err
2729
}
2830

2931
return nil
3032
}
3133

34+
func ResetRules() {
35+
operatorRegistry = operatorrules.NewRegistry()
36+
}
37+
3238
func BuildPrometheusRule(namespace string, owner metav1.OwnerReference) (*promv1.PrometheusRule, error) {
33-
rules, err := operatorrules.BuildPrometheusRule(
39+
rules, err := operatorRegistry.BuildPrometheusRule(
3440
ruleName,
3541
namespace,
3642
hcoutil.GetLabels(hcoutil.HyperConvergedName, hcoutil.AppComponentMonitoring),
@@ -45,9 +51,9 @@ func BuildPrometheusRule(namespace string, owner metav1.OwnerReference) (*promv1
4551
}
4652

4753
func ListRecordingRules() []operatorrules.RecordingRule {
48-
return operatorrules.ListRecordingRules()
54+
return operatorRegistry.ListRecordingRules()
4955
}
5056

5157
func ListAlerts() []promv1.Rule {
52-
return operatorrules.ListAlerts()
58+
return operatorRegistry.ListAlerts()
5359
}

vendor/github.com/machadovilaca/operator-observability/pkg/operatormetrics/collector.go

Lines changed: 1 addition & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/machadovilaca/operator-observability/pkg/operatormetrics/collector_result.go

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/machadovilaca/operator-observability/pkg/operatormetrics/counter.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/machadovilaca/operator-observability/pkg/operatormetrics/counter_vec.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/machadovilaca/operator-observability/pkg/operatormetrics/gauge.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/machadovilaca/operator-observability/pkg/operatormetrics/gauge_vec.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/machadovilaca/operator-observability/pkg/operatormetrics/histogram.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/machadovilaca/operator-observability/pkg/operatormetrics/histogram_vec.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/machadovilaca/operator-observability/pkg/operatormetrics/metric.go

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/machadovilaca/operator-observability/pkg/operatormetrics/summary.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/machadovilaca/operator-observability/pkg/operatormetrics/summary_vec.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/machadovilaca/operator-observability/pkg/operatormetrics/wrapper_registry.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/machadovilaca/operator-observability/pkg/operatorrules/compatibility.go

Lines changed: 37 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)