diff --git a/test/integration/api_discovery_test.go b/test/integration/api_discovery_test.go index f13e35ae..96fa3951 100644 --- a/test/integration/api_discovery_test.go +++ b/test/integration/api_discovery_test.go @@ -22,81 +22,65 @@ func TestGetAPIResourceList(t *testing.T) { groups, resources, err := client.Discovery().ServerGroupsAndResources() require.NoError(t, err) - groupName := "pinniped.dev" - actualGroup := findGroup(groupName, groups) - require.NotNil(t, actualGroup) - - expectedGroup := &metav1.APIGroup{ - Name: "pinniped.dev", - Versions: []metav1.GroupVersionForDiscovery{ - { + t.Run("has group", func(t *testing.T) { + require.Contains(t, groups, &metav1.APIGroup{ + Name: "pinniped.dev", + Versions: []metav1.GroupVersionForDiscovery{ + { + GroupVersion: "pinniped.dev/v1alpha1", + Version: "v1alpha1", + }, + }, + PreferredVersion: metav1.GroupVersionForDiscovery{ GroupVersion: "pinniped.dev/v1alpha1", Version: "v1alpha1", }, - }, - PreferredVersion: metav1.GroupVersionForDiscovery{ - GroupVersion: "pinniped.dev/v1alpha1", - Version: "v1alpha1", - }, - } - require.Equal(t, expectedGroup, actualGroup) + }) + }) - actualPinnipedResources := findResources("pinniped.dev/v1alpha1", resources) - require.NotNil(t, actualPinnipedResources) - actualCrdPinnipedResources := findResources("crd.pinniped.dev/v1alpha1", resources) - require.NotNil(t, actualPinnipedResources) + t.Run("has non-CRD APIs", func(t *testing.T) { + expectResources(t, "pinniped.dev/v1alpha1", resources, []metav1.APIResource{ + { + Name: "credentialrequests", + Kind: "CredentialRequest", + Verbs: []string{"create"}, + Namespaced: false, - expectedCredentialRequestAPIResource := metav1.APIResource{ - Name: "credentialrequests", - Kind: "CredentialRequest", - Verbs: metav1.Verbs([]string{ - "create", - }), - Namespaced: false, + // This is currently an empty string in the response; maybe it should not be + // empty? Seems like no harm in keeping it like this for now, but feel free + // to update in the future if there is a compelling reason to do so. + SingularName: "", + }, + }) + }) - // This is currently an empty string in the response; maybe it should not be - // empty? Seems like no harm in keeping it like this for now, but feel free - // to update in the future if there is a compelling reason to do so. - SingularName: "", - } - - expectedCredentialIssuerConfigResource := metav1.APIResource{ - Name: "credentialissuerconfigs", - SingularName: "credentialissuerconfig", - Namespaced: true, - Kind: "CredentialIssuerConfig", - Verbs: metav1.Verbs([]string{ - "delete", "deletecollection", "get", "list", "patch", "create", "update", "watch", - }), - ShortNames: []string{"cic"}, - StorageVersionHash: "unknown: to be filled in automatically below", - } - - require.Len(t, actualPinnipedResources.APIResources, 1) - require.Equal(t, expectedCredentialRequestAPIResource, actualPinnipedResources.APIResources[0]) - - require.Len(t, actualCrdPinnipedResources.APIResources, 1) - actualAPIResource := actualCrdPinnipedResources.APIResources[0] - // workaround because its hard to predict the storage version hash (e.g. "t/+v41y+3e4=") - // so just don't worry about comparing that field - expectedCredentialIssuerConfigResource.StorageVersionHash = actualAPIResource.StorageVersionHash - require.Equal(t, expectedCredentialIssuerConfigResource, actualAPIResource) + t.Run("has CRD APIs", func(t *testing.T) { + expectResources(t, "crd.pinniped.dev/v1alpha1", resources, []metav1.APIResource{ + { + Name: "credentialissuerconfigs", + SingularName: "credentialissuerconfig", + Namespaced: true, + Kind: "CredentialIssuerConfig", + Verbs: []string{"delete", "deletecollection", "get", "list", "patch", "create", "update", "watch"}, + ShortNames: []string{"cic"}, + }, + }) + }) } -func findGroup(name string, groups []*metav1.APIGroup) *metav1.APIGroup { - for _, group := range groups { - if group.Name == name { - return group - } - } - return nil -} - -func findResources(groupVersion string, resources []*metav1.APIResourceList) *metav1.APIResourceList { +func expectResources(t *testing.T, groupVersion string, resources []*metav1.APIResourceList, expected []metav1.APIResource) { + var actualResourceList *metav1.APIResourceList for _, resource := range resources { if resource.GroupVersion == groupVersion { - return resource + actualResourceList = resource.DeepCopy() } } - return nil + require.NotNilf(t, actualResourceList, "could not find groupVersion %s", groupVersion) + + // Because its hard to predict the storage version hash (e.g. "t/+v41y+3e4="), we just don't + // worry about comparing that field. + for i := range actualResourceList.APIResources { + actualResourceList.APIResources[i].StorageVersionHash = "" + } + require.EqualValues(t, expected, actualResourceList.APIResources, "unexpected API resources") }