Skip to content

Commit 7d8a287

Browse files
Merge pull request #26921 from dgoodwin/related-obj-tests
Add test for validating related object references.
2 parents d0ece94 + 16c6e48 commit 7d8a287

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

test/extended/operators/clusteroperators.go

+43-1
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@ package operators
22

33
import (
44
"context"
5+
"strings"
56

67
g "github.com/onsi/ginkgo"
78
o "github.com/onsi/gomega"
89
s "github.com/onsi/gomega/gstruct"
910
t "github.com/onsi/gomega/types"
10-
1111
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
12+
"k8s.io/apimachinery/pkg/runtime/schema"
1213
"k8s.io/kube-openapi/pkg/util/sets"
1314
e2e "k8s.io/kubernetes/test/e2e/framework"
1415

@@ -81,6 +82,47 @@ var _ = g.Describe("[sig-arch] ClusterOperators", func() {
8182
}
8283
})
8384

85+
g.Specify("valid related objects", func() {
86+
controlplaneTopology, err := exutil.GetControlPlaneTopology(oc)
87+
o.Expect(err).NotTo(o.HaveOccurred())
88+
if *controlplaneTopology == config.ExternalTopologyMode {
89+
// The packageserver runs in a different cluster along the other controlplane components
90+
// when the controlplane is external.
91+
whitelistNoOperatorConfig.Insert("operator-lifecycle-manager-packageserver")
92+
}
93+
restMapper := oc.RESTMapper()
94+
95+
for _, clusterOperator := range clusterOperators {
96+
if !whitelistNoOperatorConfig.Has(clusterOperator.Name) {
97+
for _, relatedObj := range clusterOperator.Status.RelatedObjects {
98+
99+
// any uppercase immediately signals an improper mapping:
100+
o.Expect(relatedObj.Resource).To(o.Equal(strings.ToLower(relatedObj.Resource)),
101+
"Cluster operator %s should be using lowercase resource references: %s",
102+
clusterOperator.Name, relatedObj.Resource)
103+
104+
// also ensure we find a valid rest mapping:
105+
106+
// "storage" ClusterOperator has some relatedResource refs to CRDs that only exists if
107+
// TechPreviewNoUpgrade is enabled. This is acceptable and not a bug, but needs a special case here.
108+
if clusterOperator.Name == "storage" && (relatedObj.Resource == "sharedconfigmaps" ||
109+
relatedObj.Resource == "sharedsecrets") {
110+
continue
111+
}
112+
113+
resourceMatches, err := restMapper.ResourcesFor(schema.GroupVersionResource{
114+
Group: relatedObj.Group,
115+
Resource: relatedObj.Resource,
116+
})
117+
o.Expect(err).ToNot(o.HaveOccurred())
118+
o.Expect(len(resourceMatches)).To(o.BeNumerically(">", 0),
119+
"No valid rest mapping found for cluster operator %s related object %s",
120+
clusterOperator.Name, relatedObj.Resource)
121+
}
122+
}
123+
}
124+
})
125+
84126
})
85127
})
86128

test/extended/util/annotate/generated/zz_generated.annotations.go

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)