Skip to content

Commit

Permalink
Merge pull request #116195 from seans3/openapi3-root-fix
Browse files Browse the repository at this point in the history
Fixes bug with Root not handling Group without Version
  • Loading branch information
k8s-ci-robot committed Mar 2, 2023
2 parents 5157158 + 17cd59e commit bb8e9f3
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 7 deletions.
4 changes: 4 additions & 0 deletions staging/src/k8s.io/client-go/openapi3/root.go
Expand Up @@ -157,6 +157,10 @@ func pathToGroupVersion(path string) (schema.GroupVersion, error) {
}
apiPrefix := parts[0]
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.Version = parts[2]
} else if apiPrefix == "api" {
Expand Down
25 changes: 18 additions & 7 deletions staging/src/k8s.io/client-go/openapi3/root_test.go
Expand Up @@ -70,6 +70,7 @@ func TestOpenAPIV3Root_GroupVersions(t *testing.T) {
"foo/apps/v1": nil, // bad prefix
"apis/networking.k8s.io/v1alpha1": nil,
"api": nil, // No version
"apis/apps": nil, // Missing Version
"apis/apps/v1": nil,
},
// Alphabetical ordering, since GV's are returned sorted.
Expand Down Expand Up @@ -268,18 +269,24 @@ func TestOpenAPIV3Root_GroupVersionToPath(t *testing.T) {

func TestOpenAPIV3Root_PathToGroupVersion(t *testing.T) {
tests := []struct {
name string
path string
expectedGV schema.GroupVersion
name string
path string
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",
expectedGV: schema.GroupVersion{
Group: "apps",
Version: "v1",
},
},
{
name: "Group without Version throws error",
path: "apis/apps",
expectedErr: true,
},
{
name: "OpenAPI V3 Root: Path to GroupVersion batch group",
path: "apis/batch/v1beta1",
Expand All @@ -300,9 +307,13 @@ func TestOpenAPIV3Root_PathToGroupVersion(t *testing.T) {
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
actualGV, err := pathToGroupVersion(test.path)
require.NoError(t, err)
assert.Equal(t, test.expectedGV, actualGV, "expected GroupVersion (%s), got (%s)",
test.expectedGV, actualGV)
if test.expectedErr {
require.Error(t, err, "should have received error for path: %s", test.path)
} 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)
}
})
}
}

0 comments on commit bb8e9f3

Please sign in to comment.