@@ -32,12 +32,15 @@ import (
32
32
"k8s.io/apimachinery/pkg/runtime/serializer/json"
33
33
"k8s.io/apimachinery/pkg/types"
34
34
"k8s.io/apimachinery/pkg/util/diff"
35
+ "k8s.io/client-go/rest"
36
+ "sigs.k8s.io/controller-runtime/pkg/client"
37
+ "sigs.k8s.io/controller-runtime/pkg/manager"
35
38
"sigs.k8s.io/controller-runtime/pkg/scheme"
39
+ "sigs.k8s.io/kubebuilder-declarative-pattern/mockkubeapiserver"
36
40
"sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon"
37
41
"sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon/pkg/loaders"
38
42
"sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/declarative"
39
43
"sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/declarative/pkg/manifest"
40
- "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/test/mocks"
41
44
"sigs.k8s.io/kustomize/kyaml/filesys"
42
45
)
43
46
@@ -51,18 +54,47 @@ func NewValidator(t *testing.T, b *scheme.Builder) *validator {
51
54
addon .Init ()
52
55
v .findChannelsPath ()
53
56
54
- v .client = mocks .NewClient (v .scheme )
55
- v .mgr = mocks .NewManager (v .client )
56
- v .mgr .Scheme = v .scheme
57
+ k8s , err := mockkubeapiserver .NewMockKubeAPIServer (":0" )
58
+ if err != nil {
59
+ t .Fatalf ("error building mock kube-apiserver: %v" , err )
60
+ }
61
+
62
+ addr , err := k8s .StartServing ()
63
+ if err != nil {
64
+ t .Errorf ("error starting mock kube-apiserver: %v" , err )
65
+ }
66
+ v .k8s = k8s
67
+
68
+ t .Cleanup (func () {
69
+ if err := k8s .Stop (); err != nil {
70
+ t .Errorf ("error stopping mock kube-apiserver: %v" , err )
71
+ }
72
+ })
73
+
74
+ restConfig := & rest.Config {
75
+ Host : addr .String (),
76
+ }
77
+
78
+ mgr , err := manager .New (restConfig , manager.Options {
79
+ Scheme : v .scheme ,
80
+ })
81
+ if err != nil {
82
+ t .Fatalf ("error building manager: %v" , err )
83
+ }
84
+ v .client = mgr .GetClient ()
85
+ v .mgr = mgr
57
86
return v
58
87
}
59
88
60
89
type validator struct {
61
90
T * testing.T
62
91
scheme * runtime.Scheme
63
92
TestDir string
64
- mgr mocks.Manager
65
- client * mocks.FakeClient
93
+
94
+ k8s * mockkubeapiserver.MockKubeAPIServer
95
+
96
+ mgr manager.Manager
97
+ client client.Client
66
98
}
67
99
68
100
// findChannelsPath will search for a channels directory, which is helpful when running under bazel
@@ -129,11 +161,11 @@ func (v *validator) findChannelsPath() {
129
161
t .Logf ("flagChannel = %s" , loaders .FlagChannel )
130
162
}
131
163
132
- func (v * validator ) Manager () * mocks .Manager {
133
- return & v .mgr
164
+ func (v * validator ) Manager () manager .Manager {
165
+ return v .mgr
134
166
}
135
167
136
- func (v * validator ) Client () * mocks. FakeClient {
168
+ func (v * validator ) Client () client. Client {
137
169
return v .client
138
170
}
139
171
@@ -179,12 +211,14 @@ func (v *validator) Validate(r declarative.Reconciler) {
179
211
continue
180
212
}
181
213
182
- objectsToCleanup := []runtime .Object {}
214
+ objectsToCleanup := []client .Object {}
183
215
// Check if there is a file containing side inputs for this test
184
216
sideInputPath := strings .Replace (p , ".in.yaml" , ".side_in.yaml" , - 1 )
185
217
sideInputRead , err := os .ReadFile (sideInputPath )
186
218
if err != nil {
187
- t .Logf ("Could not read side input file %s: %v, skipping" , sideInputPath , err )
219
+ if ! os .IsNotExist (err ) {
220
+ t .Errorf ("Could not read side input file %s: %v" , sideInputPath , err )
221
+ }
188
222
} else {
189
223
objs , err := manifest .ParseObjects (ctx , string (sideInputRead ))
190
224
if err != nil {
@@ -203,8 +237,11 @@ func (v *validator) Validate(r declarative.Reconciler) {
203
237
t .Errorf ("error parsing resource in %s: %v" , p , err )
204
238
continue
205
239
}
206
- v .client .CreateRuntimeObject (ctx , decoded )
207
- objectsToCleanup = append (objectsToCleanup , decoded )
240
+ obj := decoded .(client.Object )
241
+ if err := v .client .Create (ctx , obj ); err != nil {
242
+ t .Errorf ("error creating resource in %s: %v" , p , err )
243
+ }
244
+ objectsToCleanup = append (objectsToCleanup , obj )
208
245
}
209
246
}
210
247
@@ -307,7 +344,9 @@ func (v *validator) Validate(r declarative.Reconciler) {
307
344
}
308
345
309
346
for _ , objectToCleanup := range objectsToCleanup {
310
- v .client .DeleteRuntimeObject (ctx , objectToCleanup )
347
+ if err := v .client .Delete (ctx , objectToCleanup ); err != nil {
348
+ t .Errorf ("error deleting object: %v" , err )
349
+ }
311
350
}
312
351
}
313
352
}
0 commit comments