Fixes bug with Root not handling Group without Version

Kubernetes-commit: 17cd59ec1cf5c0a83d52bc94995025e802f1a123
This commit is contained in:
Sean Sullivan 2023-03-01 21:24:02 +00:00 committed by Kubernetes Publisher
parent 91199a69ee
commit 6ddf61b8c1
2 changed files with 22 additions and 7 deletions

View File

@ -157,6 +157,10 @@ func pathToGroupVersion(path string) (schema.GroupVersion, error) {
} }
apiPrefix := parts[0] apiPrefix := parts[0]
if apiPrefix == "apis" { if apiPrefix == "apis" {
// Example: apis/apps (without version)
if len(parts) < 3 {
return gv, fmt.Errorf("Group without Version not allowed")
}
gv.Group = parts[1] gv.Group = parts[1]
gv.Version = parts[2] gv.Version = parts[2]
} else if apiPrefix == "api" { } else if apiPrefix == "api" {

View File

@ -70,6 +70,7 @@ func TestOpenAPIV3Root_GroupVersions(t *testing.T) {
"foo/apps/v1": nil, // bad prefix "foo/apps/v1": nil, // bad prefix
"apis/networking.k8s.io/v1alpha1": nil, "apis/networking.k8s.io/v1alpha1": nil,
"api": nil, // No version "api": nil, // No version
"apis/apps": nil, // Missing Version
"apis/apps/v1": nil, "apis/apps/v1": nil,
}, },
// Alphabetical ordering, since GV's are returned sorted. // Alphabetical ordering, since GV's are returned sorted.
@ -268,18 +269,24 @@ func TestOpenAPIV3Root_GroupVersionToPath(t *testing.T) {
func TestOpenAPIV3Root_PathToGroupVersion(t *testing.T) { func TestOpenAPIV3Root_PathToGroupVersion(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
path string path string
expectedGV schema.GroupVersion expectedGV schema.GroupVersion
expectedErr bool
}{ }{
{ {
name: "OpenAPI V3 Root: Path to GroupVersion apps group", name: "OpenAPI V3 Root: Path to GroupVersion apps/v1 group",
path: "apis/apps/v1", path: "apis/apps/v1",
expectedGV: schema.GroupVersion{ expectedGV: schema.GroupVersion{
Group: "apps", Group: "apps",
Version: "v1", Version: "v1",
}, },
}, },
{
name: "Group without Version throws error",
path: "apis/apps",
expectedErr: true,
},
{ {
name: "OpenAPI V3 Root: Path to GroupVersion batch group", name: "OpenAPI V3 Root: Path to GroupVersion batch group",
path: "apis/batch/v1beta1", path: "apis/batch/v1beta1",
@ -300,9 +307,13 @@ func TestOpenAPIV3Root_PathToGroupVersion(t *testing.T) {
for _, test := range tests { for _, test := range tests {
t.Run(test.name, func(t *testing.T) { t.Run(test.name, func(t *testing.T) {
actualGV, err := pathToGroupVersion(test.path) actualGV, err := pathToGroupVersion(test.path)
require.NoError(t, err) if test.expectedErr {
assert.Equal(t, test.expectedGV, actualGV, "expected GroupVersion (%s), got (%s)", require.Error(t, err, "should have received error for path: %s", test.path)
test.expectedGV, actualGV) } else {
require.NoError(t, err, "expected no error, got (%v)", err)
assert.Equal(t, test.expectedGV, actualGV, "expected GroupVersion (%s), got (%s)",
test.expectedGV, actualGV)
}
}) })
} }
} }