Skip to content

Commit 46a214a

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

File tree

4 files changed

+101
-96
lines changed

4 files changed

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

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)