@@ -16,6 +16,18 @@ type fakeGV struct {
16
16
err error
17
17
}
18
18
19
+ type mockOpenAPIClient struct {
20
+ paths map [string ]openapi.GroupVersion
21
+ err error
22
+ }
23
+
24
+ type MockCRDResolver struct {
25
+ * CRDResolver
26
+ preferredResources []* metav1.APIResourceList
27
+ err error
28
+ openAPIClient * mockOpenAPIClient
29
+ }
30
+
19
31
func (f fakeGV ) Schema (mime string ) ([]byte , error ) {
20
32
return f .data , f .err
21
33
}
@@ -24,6 +36,18 @@ func (f fakeGV) ServerRelativeURL() string {
24
36
return ""
25
37
}
26
38
39
+ func (m * mockOpenAPIClient ) Paths () (map [string ]openapi.GroupVersion , error ) {
40
+ return m .paths , m .err
41
+ }
42
+
43
+ func (m * MockCRDResolver ) ServerPreferredResources () ([]* metav1.APIResourceList , error ) {
44
+ return m .preferredResources , m .err
45
+ }
46
+
47
+ func (m * MockCRDResolver ) OpenAPIV3 () openapi.Client {
48
+ return m .openAPIClient
49
+ }
50
+
27
51
// TestGetCRDGroupKindVersions tests the getCRDGroupKindVersions function. It checks if the
28
52
// function correctly extracts the Group, Kind, and Versions from the CRD spec.
29
53
func TestGetCRDGroupKindVersions (t * testing.T ) {
@@ -226,3 +250,72 @@ func TestGetSchemaForPath(t *testing.T) {
226
250
})
227
251
}
228
252
}
253
+
254
+ // TestResolveSchema tests the resolveSchema function. It checks if the function correctly
255
+ // resolves the schema for a given path and handles various error cases.
256
+ func TestResolveSchema (t * testing.T ) {
257
+ tests := []struct {
258
+ name string
259
+ preferredResources []* metav1.APIResourceList
260
+ err error
261
+ openAPIPaths map [string ]openapi.GroupVersion
262
+ openAPIErr error
263
+ wantErr bool
264
+ }{
265
+ {
266
+ name : "discovery error" ,
267
+ err : ErrGetServerPreferred ,
268
+ wantErr : true ,
269
+ },
270
+ {
271
+ name : "successful schema resolution" ,
272
+ preferredResources : []* metav1.APIResourceList {
273
+ {
274
+ GroupVersion : "v1" ,
275
+ APIResources : []metav1.APIResource {
276
+ {
277
+ Name : "pods" ,
278
+ Kind : "Pod" ,
279
+ Namespaced : true ,
280
+ },
281
+ },
282
+ },
283
+ },
284
+ openAPIPaths : map [string ]openapi.GroupVersion {
285
+ "/api/v1" : fakeGV {},
286
+ },
287
+ wantErr : false ,
288
+ },
289
+ {
290
+ name : "empty resources list" ,
291
+ preferredResources : []* metav1.APIResourceList {},
292
+ openAPIPaths : map [string ]openapi.GroupVersion {
293
+ "/api/v1" : fakeGV {},
294
+ },
295
+ wantErr : false ,
296
+ },
297
+ }
298
+
299
+ for _ , tt := range tests {
300
+ t .Run (tt .name , func (t * testing.T ) {
301
+ resolver := & MockCRDResolver {
302
+ CRDResolver : & CRDResolver {},
303
+ preferredResources : tt .preferredResources ,
304
+ err : tt .err ,
305
+ openAPIClient : & mockOpenAPIClient {
306
+ paths : tt .openAPIPaths ,
307
+ err : tt .openAPIErr ,
308
+ },
309
+ }
310
+
311
+ got , err := resolveSchema (resolver , resolver )
312
+ if (err != nil ) != tt .wantErr {
313
+ t .Errorf ("resolveSchema() error = %v, wantErr %v" , err , tt .wantErr )
314
+ return
315
+ }
316
+ if ! tt .wantErr && got == nil {
317
+ t .Error ("resolveSchema() returned nil result when no error expected" )
318
+ }
319
+ })
320
+ }
321
+ }
0 commit comments