Skip to content

Commit f051464

Browse files
author
Mateus Oliveira
authored
šŸ› (go/v4) ensure that schemas are added before start EnvTest-based suite tests for webhooks and controllers (#4466)
fix: add schemas prior to envtest start Signed-off-by: Mateus Oliveira <[email protected]>
1 parent 9c36b61 commit f051464

File tree

30 files changed

+270
-267
lines changed

30 files changed

+270
-267
lines changed

ā€Ždocs/book/src/cronjob-tutorial/testdata/project/internal/controller/suite_test.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,20 @@ var _ = BeforeSuite(func() {
7474

7575
ctx, cancel = context.WithCancel(context.TODO())
7676

77+
var err error
78+
/*
79+
The CronJob Kind is added to the runtime scheme used by the test environment.
80+
This ensures that the CronJob API is registered with the scheme, allowing the test controller to recognize and interact with CronJob resources.
81+
*/
82+
err = batchv1.AddToScheme(scheme.Scheme)
83+
Expect(err).NotTo(HaveOccurred())
84+
/*
85+
After the schemas, you will see the following marker.
86+
This marker is what allows new schemas to be added here automatically when a new API is added to the project.
87+
*/
88+
89+
// +kubebuilder:scaffold:scheme
90+
7791
/*
7892
The envtest environment is configured to load Custom Resource Definitions (CRDs) from the specified directory.
7993
This setup enables the test environment to recognize and interact with the custom resources defined by these CRDs.
@@ -92,25 +106,11 @@ var _ = BeforeSuite(func() {
92106
Then, we start the envtest cluster.
93107
*/
94108

95-
var err error
96109
// cfg is defined in this file globally.
97110
cfg, err = testEnv.Start()
98111
Expect(err).NotTo(HaveOccurred())
99112
Expect(cfg).NotTo(BeNil())
100113

101-
/*
102-
The CronJob Kind is added to the runtime scheme used by the test environment.
103-
This ensures that the CronJob API is registered with the scheme, allowing the test controller to recognize and interact with CronJob resources.
104-
*/
105-
err = batchv1.AddToScheme(scheme.Scheme)
106-
Expect(err).NotTo(HaveOccurred())
107-
/*
108-
After the schemas, you will see the following marker.
109-
This marker is what allows new schemas to be added here automatically when a new API is added to the project.
110-
*/
111-
112-
// +kubebuilder:scaffold:scheme
113-
114114
/*
115115
A client is created for our test CRUD operations.
116116
*/

ā€Ždocs/book/src/cronjob-tutorial/testdata/project/internal/webhook/v1/webhook_suite_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ var _ = BeforeSuite(func() {
6666

6767
ctx, cancel = context.WithCancel(context.TODO())
6868

69+
var err error
70+
scheme := apimachineryruntime.NewScheme()
71+
err = batchv1.AddToScheme(scheme)
72+
Expect(err).NotTo(HaveOccurred())
73+
74+
err = admissionv1.AddToScheme(scheme)
75+
Expect(err).NotTo(HaveOccurred())
76+
77+
// +kubebuilder:scaffold:scheme
78+
6979
By("bootstrapping test environment")
7080
testEnv = &envtest.Environment{
7181
CRDDirectoryPaths: []string{filepath.Join("..", "..", "..", "config", "crd", "bases")},
@@ -81,21 +91,11 @@ var _ = BeforeSuite(func() {
8191
testEnv.BinaryAssetsDirectory = getFirstFoundEnvTestBinaryDir()
8292
}
8393

84-
var err error
8594
// cfg is defined in this file globally.
8695
cfg, err = testEnv.Start()
8796
Expect(err).NotTo(HaveOccurred())
8897
Expect(cfg).NotTo(BeNil())
8998

90-
scheme := apimachineryruntime.NewScheme()
91-
err = batchv1.AddToScheme(scheme)
92-
Expect(err).NotTo(HaveOccurred())
93-
94-
err = admissionv1.AddToScheme(scheme)
95-
Expect(err).NotTo(HaveOccurred())
96-
97-
// +kubebuilder:scaffold:scheme
98-
9999
k8sClient, err = client.New(cfg, client.Options{Scheme: scheme})
100100
Expect(err).NotTo(HaveOccurred())
101101
Expect(k8sClient).NotTo(BeNil())

ā€Ždocs/book/src/getting-started/testdata/project/internal/controller/suite_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@ var _ = BeforeSuite(func() {
5858

5959
ctx, cancel = context.WithCancel(context.TODO())
6060

61+
var err error
62+
err = cachev1alpha1.AddToScheme(scheme.Scheme)
63+
Expect(err).NotTo(HaveOccurred())
64+
65+
// +kubebuilder:scaffold:scheme
66+
6167
By("bootstrapping test environment")
6268
testEnv = &envtest.Environment{
6369
CRDDirectoryPaths: []string{filepath.Join("..", "..", "config", "crd", "bases")},
@@ -69,17 +75,11 @@ var _ = BeforeSuite(func() {
6975
testEnv.BinaryAssetsDirectory = getFirstFoundEnvTestBinaryDir()
7076
}
7177

72-
var err error
7378
// cfg is defined in this file globally.
7479
cfg, err = testEnv.Start()
7580
Expect(err).NotTo(HaveOccurred())
7681
Expect(cfg).NotTo(BeNil())
7782

78-
err = cachev1alpha1.AddToScheme(scheme.Scheme)
79-
Expect(err).NotTo(HaveOccurred())
80-
81-
// +kubebuilder:scaffold:scheme
82-
8383
k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme})
8484
Expect(err).NotTo(HaveOccurred())
8585
Expect(k8sClient).NotTo(BeNil())

ā€Ždocs/book/src/multiversion-tutorial/testdata/project/internal/controller/suite_test.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,20 @@ var _ = BeforeSuite(func() {
7474

7575
ctx, cancel = context.WithCancel(context.TODO())
7676

77+
var err error
78+
/*
79+
The CronJob Kind is added to the runtime scheme used by the test environment.
80+
This ensures that the CronJob API is registered with the scheme, allowing the test controller to recognize and interact with CronJob resources.
81+
*/
82+
err = batchv1.AddToScheme(scheme.Scheme)
83+
Expect(err).NotTo(HaveOccurred())
84+
/*
85+
After the schemas, you will see the following marker.
86+
This marker is what allows new schemas to be added here automatically when a new API is added to the project.
87+
*/
88+
89+
// +kubebuilder:scaffold:scheme
90+
7791
/*
7892
The envtest environment is configured to load Custom Resource Definitions (CRDs) from the specified directory.
7993
This setup enables the test environment to recognize and interact with the custom resources defined by these CRDs.
@@ -92,25 +106,11 @@ var _ = BeforeSuite(func() {
92106
Then, we start the envtest cluster.
93107
*/
94108

95-
var err error
96109
// cfg is defined in this file globally.
97110
cfg, err = testEnv.Start()
98111
Expect(err).NotTo(HaveOccurred())
99112
Expect(cfg).NotTo(BeNil())
100113

101-
/*
102-
The CronJob Kind is added to the runtime scheme used by the test environment.
103-
This ensures that the CronJob API is registered with the scheme, allowing the test controller to recognize and interact with CronJob resources.
104-
*/
105-
err = batchv1.AddToScheme(scheme.Scheme)
106-
Expect(err).NotTo(HaveOccurred())
107-
/*
108-
After the schemas, you will see the following marker.
109-
This marker is what allows new schemas to be added here automatically when a new API is added to the project.
110-
*/
111-
112-
// +kubebuilder:scaffold:scheme
113-
114114
/*
115115
A client is created for our test CRUD operations.
116116
*/

ā€Ždocs/book/src/multiversion-tutorial/testdata/project/internal/webhook/v1/webhook_suite_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ var _ = BeforeSuite(func() {
6666

6767
ctx, cancel = context.WithCancel(context.TODO())
6868

69+
var err error
70+
scheme := apimachineryruntime.NewScheme()
71+
err = batchv1.AddToScheme(scheme)
72+
Expect(err).NotTo(HaveOccurred())
73+
74+
err = admissionv1.AddToScheme(scheme)
75+
Expect(err).NotTo(HaveOccurred())
76+
77+
// +kubebuilder:scaffold:scheme
78+
6979
By("bootstrapping test environment")
7080
testEnv = &envtest.Environment{
7181
CRDDirectoryPaths: []string{filepath.Join("..", "..", "..", "config", "crd", "bases")},
@@ -81,21 +91,11 @@ var _ = BeforeSuite(func() {
8191
testEnv.BinaryAssetsDirectory = getFirstFoundEnvTestBinaryDir()
8292
}
8393

84-
var err error
8594
// cfg is defined in this file globally.
8695
cfg, err = testEnv.Start()
8796
Expect(err).NotTo(HaveOccurred())
8897
Expect(cfg).NotTo(BeNil())
8998

90-
scheme := apimachineryruntime.NewScheme()
91-
err = batchv1.AddToScheme(scheme)
92-
Expect(err).NotTo(HaveOccurred())
93-
94-
err = admissionv1.AddToScheme(scheme)
95-
Expect(err).NotTo(HaveOccurred())
96-
97-
// +kubebuilder:scaffold:scheme
98-
9999
k8sClient, err = client.New(cfg, client.Options{Scheme: scheme})
100100
Expect(err).NotTo(HaveOccurred())
101101
Expect(k8sClient).NotTo(BeNil())

ā€Ždocs/book/src/multiversion-tutorial/testdata/project/internal/webhook/v2/webhook_suite_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ var _ = BeforeSuite(func() {
6666

6767
ctx, cancel = context.WithCancel(context.TODO())
6868

69+
var err error
70+
scheme := apimachineryruntime.NewScheme()
71+
err = batchv2.AddToScheme(scheme)
72+
Expect(err).NotTo(HaveOccurred())
73+
74+
err = admissionv1.AddToScheme(scheme)
75+
Expect(err).NotTo(HaveOccurred())
76+
77+
// +kubebuilder:scaffold:scheme
78+
6979
By("bootstrapping test environment")
7080
testEnv = &envtest.Environment{
7181
CRDDirectoryPaths: []string{filepath.Join("..", "..", "..", "config", "crd", "bases")},
@@ -81,21 +91,11 @@ var _ = BeforeSuite(func() {
8191
testEnv.BinaryAssetsDirectory = getFirstFoundEnvTestBinaryDir()
8292
}
8393

84-
var err error
8594
// cfg is defined in this file globally.
8695
cfg, err = testEnv.Start()
8796
Expect(err).NotTo(HaveOccurred())
8897
Expect(cfg).NotTo(BeNil())
8998

90-
scheme := apimachineryruntime.NewScheme()
91-
err = batchv2.AddToScheme(scheme)
92-
Expect(err).NotTo(HaveOccurred())
93-
94-
err = admissionv1.AddToScheme(scheme)
95-
Expect(err).NotTo(HaveOccurred())
96-
97-
// +kubebuilder:scaffold:scheme
98-
9999
k8sClient, err = client.New(cfg, client.Options{Scheme: scheme})
100100
Expect(err).NotTo(HaveOccurred())
101101
Expect(k8sClient).NotTo(BeNil())

ā€Žhack/docs/internal/cronjob-tutorial/generate_cronjob.go

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -540,11 +540,15 @@ var (
540540
`, suiteTestEnv)
541541
hackutils.CheckError("updating suite_test.go to add more variables", err)
542542

543-
err = pluginutil.InsertCode(
543+
err = pluginutil.ReplaceInFile(
544544
filepath.Join(sp.ctx.Dir, "internal/controller/suite_test.go"),
545-
`ctx, cancel = context.WithCancel(context.TODO())
546-
`, suiteTestReadCRD)
547-
hackutils.CheckError("updating suite_test.go to add text about CRD", err)
545+
`
546+
err = batchv1.AddToScheme(scheme.Scheme)
547+
Expect(err).NotTo(HaveOccurred())
548+
549+
// +kubebuilder:scaffold:scheme
550+
`, suiteTestAddSchema)
551+
hackutils.CheckError("updating suite_test.go to add schema", err)
548552

549553
err = pluginutil.InsertCode(
550554
filepath.Join(sp.ctx.Dir, "internal/controller/suite_test.go"),
@@ -555,15 +559,14 @@ var (
555559
*/`)
556560
hackutils.CheckError("updating suite_test.go to add text to show where envtest cluster start", err)
557561

558-
err = pluginutil.ReplaceInFile(
562+
err = pluginutil.InsertCode(
559563
filepath.Join(sp.ctx.Dir, "internal/controller/suite_test.go"),
560564
`
561-
err = batchv1.AddToScheme(scheme.Scheme)
565+
cfg, err = testEnv.Start()
562566
Expect(err).NotTo(HaveOccurred())
563-
564-
// +kubebuilder:scaffold:scheme
565-
`, suiteTestAddSchema)
566-
hackutils.CheckError("updating suite_test.go to add schema", err)
567+
Expect(cfg).NotTo(BeNil())
568+
`, suiteTestClient)
569+
hackutils.CheckError("updating suite_test.go to add text about test client", err)
567570

568571
err = pluginutil.InsertCode(
569572
filepath.Join(sp.ctx.Dir, "internal/controller/suite_test.go"),

ā€Žhack/docs/internal/cronjob-tutorial/writing_tests_env.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,6 @@ var (
4343
)
4444
`
4545

46-
const suiteTestReadCRD = `
47-
/*
48-
The envtest environment is configured to load Custom Resource Definitions (CRDs) from the specified directory.
49-
This setup enables the test environment to recognize and interact with the custom resources defined by these CRDs.
50-
*/`
51-
5246
const suiteTestAddSchema = `
5347
/*
5448
The CronJob Kind is added to the runtime scheme used by the test environment.
@@ -63,6 +57,12 @@ const suiteTestAddSchema = `
6357
6458
// +kubebuilder:scaffold:scheme
6559
60+
/*
61+
The envtest environment is configured to load Custom Resource Definitions (CRDs) from the specified directory.
62+
This setup enables the test environment to recognize and interact with the custom resources defined by these CRDs.
63+
*/`
64+
65+
const suiteTestClient = `
6666
/*
6767
A client is created for our test CRUD operations.
6868
*/`

ā€Žpkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller_suitetest.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,9 @@ var _ = BeforeSuite(func() {
171171
172172
ctx, cancel = context.WithCancel(context.TODO())
173173
174+
var err error
175+
%s
176+
174177
By("bootstrapping test environment")
175178
testEnv = &envtest.Environment{
176179
CRDDirectoryPaths: []string{filepath.Join({{ .CRDDirectoryRelativePath }}, "config", "crd", "bases")},
@@ -182,14 +185,11 @@ var _ = BeforeSuite(func() {
182185
testEnv.BinaryAssetsDirectory = getFirstFoundEnvTestBinaryDir()
183186
}
184187
185-
var err error
186188
// cfg is defined in this file globally.
187189
cfg, err = testEnv.Start()
188190
Expect(err).NotTo(HaveOccurred())
189191
Expect(cfg).NotTo(BeNil())
190192
191-
%s
192-
193193
k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme})
194194
Expect(err).NotTo(HaveOccurred())
195195
Expect(k8sClient).NotTo(BeNil())

ā€Žpkg/plugins/golang/v4/scaffolds/internal/templates/webhooks/webhook_suitetest.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,16 @@ var _ = BeforeSuite(func() {
230230
231231
ctx, cancel = context.WithCancel(context.TODO())
232232
233+
var err error
234+
scheme := apimachineryruntime.NewScheme()
235+
err = %s.AddToScheme(scheme)
236+
Expect(err).NotTo(HaveOccurred())
237+
238+
err = %s.AddToScheme(scheme)
239+
Expect(err).NotTo(HaveOccurred())
240+
241+
%s
242+
233243
By("bootstrapping test environment")
234244
testEnv = &envtest.Environment{
235245
CRDDirectoryPaths: []string{filepath.Join({{ .BaseDirectoryRelativePath }}, "config", "crd", "bases")},
@@ -245,21 +255,11 @@ var _ = BeforeSuite(func() {
245255
testEnv.BinaryAssetsDirectory = getFirstFoundEnvTestBinaryDir()
246256
}
247257
248-
var err error
249258
// cfg is defined in this file globally.
250259
cfg, err = testEnv.Start()
251260
Expect(err).NotTo(HaveOccurred())
252261
Expect(cfg).NotTo(BeNil())
253262
254-
scheme := apimachineryruntime.NewScheme()
255-
err = %s.AddToScheme(scheme)
256-
Expect(err).NotTo(HaveOccurred())
257-
258-
err = %s.AddToScheme(scheme)
259-
Expect(err).NotTo(HaveOccurred())
260-
261-
%s
262-
263263
k8sClient, err = client.New(cfg, client.Options{Scheme: scheme})
264264
Expect(err).NotTo(HaveOccurred())
265265
Expect(k8sClient).NotTo(BeNil())

0 commit comments

Comments
Ā (0)