Skip to content

Commit 5765192

Browse files
committed
fake reconciler for catalog sync tests
Signed-off-by: Ankita Thomas <[email protected]>
1 parent e8738fb commit 5765192

File tree

5 files changed

+272
-96
lines changed

5 files changed

+272
-96
lines changed

cmd/manager/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,11 @@ func main() {
9393
os.Exit(1)
9494
}
9595

96-
if err = (&controllers.OperatorReconciler{
96+
if err = controllers.SetupWithManager(&controllers.OperatorReconciler{
9797
Client: mgr.GetClient(),
9898
Scheme: mgr.GetScheme(),
9999
Resolver: resolution.NewOperatorResolver(mgr.GetClient(), entitysources.NewCatalogdEntitySource(mgr.GetClient())),
100-
}).SetupWithManager(mgr); err != nil {
100+
}, mgr); err != nil {
101101
setupLog.Error(err, "unable to create controller", "controller", "Operator")
102102
os.Exit(1)
103103
}

internal/controllers/catalog_test.go

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package controllers_test
2+
3+
import (
4+
"context"
5+
6+
. "github.com/onsi/ginkgo/v2"
7+
. "github.com/onsi/gomega"
8+
"github.com/operator-framework/operator-controller/internal/controllers"
9+
10+
catalogd "github.com/operator-framework/catalogd/pkg/apis/core/v1beta1"
11+
operatorsv1alpha1 "github.com/operator-framework/operator-controller/api/v1alpha1"
12+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
13+
ctrl "sigs.k8s.io/controller-runtime"
14+
"sigs.k8s.io/controller-runtime/pkg/reconcile"
15+
)
16+
17+
var _ = Describe("Operator Controller Catalog Reconciler", func() {
18+
When("a catalog changes on cluster", func() {
19+
var reconcileReqs, opNames []string
20+
var cancel context.CancelFunc
21+
var logCount int
22+
var ctx context.Context
23+
BeforeEach(func() {
24+
ctx = context.Background()
25+
mgr, err := ctrl.NewManager(cfg, ctrl.Options{Scheme: sch})
26+
Expect(err).To(BeNil())
27+
28+
var fakeReconciler reconcile.Func = func(_ context.Context, request ctrl.Request) (ctrl.Result, error) {
29+
reconcileReqs = append(reconcileReqs, request.Name)
30+
return ctrl.Result{}, nil
31+
}
32+
33+
err = controllers.SetupWithManager(fakeReconciler, mgr)
34+
Expect(err).To(BeNil())
35+
36+
var mgrCtx context.Context
37+
mgrCtx, cancel = context.WithCancel(ctx)
38+
39+
go func() {
40+
err := mgr.Start(mgrCtx)
41+
Expect(err).To(BeNil())
42+
}()
43+
44+
opNames = []string{"prometheus", "project-quay"}
45+
for _, p := range opNames {
46+
op := &operatorsv1alpha1.Operator{ObjectMeta: metav1.ObjectMeta{Name: p}, Spec: operatorsv1alpha1.OperatorSpec{PackageName: p}}
47+
err := cl.Create(ctx, op)
48+
Expect(err).To(BeNil())
49+
}
50+
Eventually(func(g Gomega) {
51+
By("verifying initial reconcile logs for operator creation")
52+
g.Expect(len(reconcileReqs) >= len(opNames)).To(BeTrue())
53+
g.Expect(reconcileReqs).To(ContainElements(opNames))
54+
logCount = len(reconcileReqs)
55+
}).Should(Succeed())
56+
})
57+
It("reconciles all affected operators on cluster", func() {
58+
By("creating a new catalog")
59+
catalog := &catalogd.Catalog{ObjectMeta: metav1.ObjectMeta{Name: "t"}, Spec: catalogd.CatalogSpec{Source: catalogd.CatalogSource{Type: catalogd.SourceTypeImage, Image: &catalogd.ImageSource{}}}}
60+
err := cl.Create(ctx, catalog)
61+
Expect(err).To(BeNil())
62+
Eventually(func(g Gomega) {
63+
By("verifying operator reconcile logs on catalog create")
64+
g.Expect(reconcileReqs).To(HaveLen(logCount + len(opNames)))
65+
g.Expect(reconcileReqs[len(reconcileReqs)-len(opNames):]).To(ConsistOf(opNames))
66+
logCount = len(reconcileReqs)
67+
}).Should(Succeed())
68+
69+
By("updating a catalog")
70+
catalog.Spec.Source.Image.Ref = "s"
71+
err = cl.Update(ctx, catalog)
72+
Expect(err).To(BeNil())
73+
Eventually(func(g Gomega) {
74+
By("verifying operator reconcile logs on catalog update")
75+
g.Expect(reconcileReqs).To(HaveLen(logCount + len(opNames)))
76+
g.Expect(reconcileReqs[len(reconcileReqs)-len(opNames):]).To(ConsistOf(opNames))
77+
logCount = len(reconcileReqs)
78+
}).Should(Succeed())
79+
80+
By("deleting a catalog")
81+
err = cl.Delete(ctx, catalog)
82+
Expect(err).To(BeNil())
83+
Eventually(func(g Gomega) {
84+
By("verifying operator reconcile logs on catalog delete")
85+
g.Expect(reconcileReqs).To(HaveLen(logCount + len(opNames)))
86+
g.Expect(reconcileReqs[len(reconcileReqs)-len(opNames):]).To(ConsistOf(opNames))
87+
}).Should(Succeed())
88+
})
89+
AfterEach(func() {
90+
for _, p := range opNames {
91+
op := &operatorsv1alpha1.Operator{ObjectMeta: metav1.ObjectMeta{Name: p}, Spec: operatorsv1alpha1.OperatorSpec{PackageName: p}}
92+
Expect(cl.Delete(ctx, op)).To(BeNil())
93+
}
94+
cancel() // stop manager
95+
})
96+
})
97+
})

internal/controllers/operator_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ func (r *OperatorReconciler) generateExpectedBundleDeployment(o operatorsv1alpha
289289
}
290290

291291
// SetupWithManager sets up the controller with the Manager.
292-
func (r *OperatorReconciler) SetupWithManager(mgr ctrl.Manager) error {
292+
func SetupWithManager(r reconcile.Reconciler, mgr ctrl.Manager) error {
293293
err := ctrl.NewControllerManagedBy(mgr).
294294
For(&operatorsv1alpha1.Operator{}).
295295
Watches(source.NewKindWithCache(&catalogd.Catalog{}, mgr.GetCache()),

internal/controllers/operator_controller_test.go

Lines changed: 0 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@ package controllers_test
33
import (
44
"context"
55
"fmt"
6-
"strings"
7-
"time"
86

9-
"github.com/go-logr/logr/funcr"
107
. "github.com/onsi/ginkgo/v2"
118
. "github.com/onsi/gomega"
12-
catalogd "github.com/operator-framework/catalogd/pkg/apis/core/v1beta1"
139
"github.com/operator-framework/deppy/pkg/deppy"
1410
"github.com/operator-framework/deppy/pkg/deppy/input"
1511
operatorsv1alpha1 "github.com/operator-framework/operator-controller/api/v1alpha1"
@@ -25,7 +21,6 @@ import (
2521
ctrl "sigs.k8s.io/controller-runtime"
2622
"sigs.k8s.io/controller-runtime/pkg/client"
2723
"sigs.k8s.io/controller-runtime/pkg/client/fake"
28-
"sigs.k8s.io/controller-runtime/pkg/log"
2924
)
3025

3126
var _ = Describe("Operator Controller Test", func() {
@@ -1022,94 +1017,6 @@ var _ = Describe("Operator Controller Test", func() {
10221017
Expect(cond.Message).To(Equal("installation has not been attempted as spec is invalid"))
10231018
})
10241019
})
1025-
When("a catalog changes on cluster", func() {
1026-
var testLogs, opNames []string
1027-
var cancel context.CancelFunc
1028-
var logCount int
1029-
BeforeEach(func() {
1030-
l := funcr.New(func(prefix, args string) {
1031-
if prefix == "operator-controller" &&
1032-
strings.Contains(args, `"controller"="operator"`) &&
1033-
strings.Contains(args, `"msg"="ending"`) {
1034-
// filter for only relevant logs
1035-
testLogs = append(testLogs, fmt.Sprintf("%s", args))
1036-
}
1037-
}, funcr.Options{Verbosity: 1})
1038-
mgr, err := ctrl.NewManager(cfg, ctrl.Options{Scheme: sch, Logger: l})
1039-
Expect(err).To(BeNil())
1040-
1041-
err = reconciler.SetupWithManager(mgr)
1042-
Expect(err).To(BeNil())
1043-
var mgrCtx context.Context
1044-
mgrCtx, cancel = context.WithCancel(log.IntoContext(ctx, l))
1045-
1046-
go func() {
1047-
err := mgr.Start(mgrCtx)
1048-
Expect(err).To(BeNil())
1049-
}()
1050-
1051-
opNames = []string{"prometheus", "project-quay"}
1052-
for _, p := range opNames {
1053-
op := &operatorsv1alpha1.Operator{ObjectMeta: metav1.ObjectMeta{Name: p}, Spec: operatorsv1alpha1.OperatorSpec{PackageName: p}}
1054-
err := cl.Create(ctx, op)
1055-
Expect(err).To(BeNil())
1056-
}
1057-
Eventually(func(g Gomega) {
1058-
By("verifying initial reconcile logs for operator creation")
1059-
g.Expect(len(testLogs) >= len(opNames)).To(BeTrue())
1060-
for _, p := range opNames {
1061-
g.Expect(testLogs[len(testLogs)-len(opNames):]).To(ContainElement(ContainSubstring(fmt.Sprintf("\"Operator\"={\"name\":\"%s\"}", p))))
1062-
}
1063-
logCount = len(testLogs)
1064-
}).WithTimeout(2 * time.Second).WithPolling(1 * time.Second).Should(Succeed())
1065-
})
1066-
1067-
It("reconciles all affected operators on cluster", func() {
1068-
By("creating a new catalog")
1069-
catalog := &catalogd.Catalog{ObjectMeta: metav1.ObjectMeta{Name: "t"}, Spec: catalogd.CatalogSpec{Source: catalogd.CatalogSource{Type: catalogd.SourceTypeImage, Image: &catalogd.ImageSource{}}}}
1070-
err := cl.Create(ctx, catalog)
1071-
Expect(err).To(BeNil())
1072-
Eventually(func(g Gomega) {
1073-
By("verifying operator reconcile logs on catalog create")
1074-
g.Expect(testLogs).To(HaveLen(logCount + len(opNames)))
1075-
for _, p := range opNames {
1076-
g.Expect(testLogs[len(testLogs)-len(opNames):]).To(ContainElement(ContainSubstring(fmt.Sprintf("\"Operator\"={\"name\":\"%s\"}", p))))
1077-
}
1078-
logCount = len(testLogs)
1079-
}).WithTimeout(2 * time.Second).WithPolling(1 * time.Second).Should(Succeed())
1080-
1081-
By("updating a catalog")
1082-
catalog.Spec.Source.Image.Ref = "s"
1083-
err = cl.Update(ctx, catalog)
1084-
Expect(err).To(BeNil())
1085-
Eventually(func(g Gomega) {
1086-
By("verifying operator reconcile logs on catalog update")
1087-
g.Expect(testLogs).To(HaveLen(logCount + len(opNames)))
1088-
for _, p := range opNames {
1089-
g.Expect(testLogs[len(testLogs)-len(opNames):]).To(ContainElement(ContainSubstring(fmt.Sprintf("\"Operator\"={\"name\":\"%s\"}", p))))
1090-
}
1091-
logCount = len(testLogs)
1092-
}).WithTimeout(2 * time.Second).WithPolling(1 * time.Second).Should(Succeed())
1093-
1094-
By("deleting a catalog")
1095-
err = cl.Delete(ctx, catalog)
1096-
Expect(err).To(BeNil())
1097-
Eventually(func(g Gomega) {
1098-
By("verifying operator reconcile logs on catalog delete")
1099-
g.Expect(testLogs).To(HaveLen(logCount + len(opNames)))
1100-
for _, p := range opNames {
1101-
g.Expect(testLogs[len(testLogs)-len(opNames):]).To(ContainElement(ContainSubstring(fmt.Sprintf("\"Operator\"={\"name\":\"%s\"}", p))))
1102-
}
1103-
}).WithTimeout(2 * time.Second).WithPolling(1 * time.Second).Should(Succeed())
1104-
})
1105-
AfterEach(func() {
1106-
for _, p := range opNames {
1107-
op := &operatorsv1alpha1.Operator{ObjectMeta: metav1.ObjectMeta{Name: p}, Spec: operatorsv1alpha1.OperatorSpec{PackageName: p}}
1108-
Expect(cl.Delete(ctx, op)).To(BeNil())
1109-
}
1110-
cancel() // stop manager
1111-
})
1112-
})
11131020
})
11141021

11151022
func verifyInvariants(ctx context.Context, op *operatorsv1alpha1.Operator) {

0 commit comments

Comments
 (0)