Skip to content

Commit 9e967e5

Browse files
committed
fix: increased coverage for apischema/crd_resolver
1 parent 308e374 commit 9e967e5

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed

listener/apischema/crd_resolver_test.go

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,18 @@ type fakeGV struct {
1616
err error
1717
}
1818

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+
1931
func (f fakeGV) Schema(mime string) ([]byte, error) {
2032
return f.data, f.err
2133
}
@@ -24,6 +36,18 @@ func (f fakeGV) ServerRelativeURL() string {
2436
return ""
2537
}
2638

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+
2751
// TestGetCRDGroupKindVersions tests the getCRDGroupKindVersions function. It checks if the
2852
// function correctly extracts the Group, Kind, and Versions from the CRD spec.
2953
func TestGetCRDGroupKindVersions(t *testing.T) {
@@ -226,3 +250,72 @@ func TestGetSchemaForPath(t *testing.T) {
226250
})
227251
}
228252
}
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

Comments
 (0)