diff --git a/test/e2e/apimachinery/discovery.go b/test/e2e/apimachinery/discovery.go index ddc6ad3d2e9..6c30f317c29 100644 --- a/test/e2e/apimachinery/discovery.go +++ b/test/e2e/apimachinery/discovery.go @@ -17,6 +17,8 @@ limitations under the License. package apimachinery import ( + "context" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" utilversion "k8s.io/apimachinery/pkg/util/version" "k8s.io/apiserver/pkg/endpoints/discovery" "k8s.io/kubernetes/test/e2e/framework" @@ -77,4 +79,37 @@ var _ = SIGDescribe("Discovery", func() { framework.Failf("didn't find resource %s in the discovery doc", spec.Names.Plural) } }) + + ginkgo.It("should validate PreferredVersion for each APIGroup", func() { + + // get list of APIGroup endpoints + list := &metav1.APIGroupList{} + err := f.ClientSet.Discovery().RESTClient().Get().AbsPath("/apis/").Do(context.TODO()).Into(list) + framework.ExpectNoError(err, "Failed to find /apis/") + framework.ExpectNotEqual(len(list.Groups), 0, "Missing APIGroups") + + for _, group := range list.Groups { + framework.Logf("Checking APIGroup: %v", group.Name) + + // locate APIGroup endpoint + checkGroup := &metav1.APIGroup{} + apiPath := "/apis/" + group.Name + "/" + err = f.ClientSet.Discovery().RESTClient().Get().AbsPath(apiPath).Do(context.TODO()).Into(checkGroup) + framework.ExpectNoError(err, "Fail to access: %s", apiPath) + framework.ExpectNotEqual(len(checkGroup.Versions), 0, "No version found for %v", group.Name) + framework.Logf("PreferredVersion.GroupVersion: %s", checkGroup.PreferredVersion.GroupVersion) + framework.Logf("Versions found %v", checkGroup.Versions) + + // confirm that the PreferredVersion is a valid version + match := false + for _, version := range checkGroup.Versions { + if version.GroupVersion == checkGroup.PreferredVersion.GroupVersion { + framework.Logf("%s matches %s", version.GroupVersion, checkGroup.PreferredVersion.GroupVersion) + match = true + break + } + } + framework.ExpectEqual(true, match, "failed to find a valid version for PreferredVersion") + } + }) })