mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-13 01:50:55 +00:00
Determine namespaceability of resources from openapi schema
This commit is contained in:
@@ -16,7 +16,7 @@ func TestAddSchema(t *testing.T) {
|
||||
// reset package vars
|
||||
globalSchema = openapiData{}
|
||||
|
||||
_, err := AddSchema(additionalSchema)
|
||||
err := AddSchema(additionalSchema)
|
||||
if !assert.NoError(t, err) {
|
||||
t.FailNow()
|
||||
}
|
||||
@@ -36,7 +36,7 @@ func TestNoUseBuiltInSchema_AddSchema(t *testing.T) {
|
||||
globalSchema = openapiData{}
|
||||
|
||||
SuppressBuiltInSchemaUse()
|
||||
_, err := AddSchema(additionalSchema)
|
||||
err := AddSchema(additionalSchema)
|
||||
if !assert.NoError(t, err) {
|
||||
t.FailNow()
|
||||
}
|
||||
@@ -313,3 +313,100 @@ kind: Example
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsNamespaceScoped_builtin(t *testing.T) {
|
||||
testCases := []struct {
|
||||
name string
|
||||
typeMeta yaml.TypeMeta
|
||||
expectIsFound bool
|
||||
expectIsNamespaced bool
|
||||
}{
|
||||
{
|
||||
name: "namespacescoped resource",
|
||||
typeMeta: yaml.TypeMeta{
|
||||
APIVersion: "apps/v1",
|
||||
Kind: "Deployment",
|
||||
},
|
||||
expectIsFound: true,
|
||||
expectIsNamespaced: true,
|
||||
},
|
||||
{
|
||||
name: "clusterscoped resource",
|
||||
typeMeta: yaml.TypeMeta{
|
||||
APIVersion: "v1",
|
||||
Kind: "Namespace",
|
||||
},
|
||||
expectIsFound: true,
|
||||
expectIsNamespaced: false,
|
||||
},
|
||||
{
|
||||
name: "unknown resource",
|
||||
typeMeta: yaml.TypeMeta{
|
||||
APIVersion: "custom.io/v1",
|
||||
Kind: "Custom",
|
||||
},
|
||||
expectIsFound: false,
|
||||
},
|
||||
}
|
||||
|
||||
for i := range testCases {
|
||||
test := testCases[i]
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
ResetOpenAPI()
|
||||
isNamespaceable, isFound := IsNamespaceScoped(test.typeMeta)
|
||||
|
||||
if !test.expectIsFound {
|
||||
assert.False(t, isFound)
|
||||
return
|
||||
}
|
||||
assert.True(t, isFound)
|
||||
assert.Equal(t, test.expectIsNamespaced, isNamespaceable)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsNamespaceScoped_custom(t *testing.T) {
|
||||
SuppressBuiltInSchemaUse()
|
||||
err := AddSchema([]byte(`
|
||||
{
|
||||
"definitions": {},
|
||||
"paths": {
|
||||
"/apis/custom.io/v1/namespaces/{namespace}/customs/{name}": {
|
||||
"get": {
|
||||
"x-kubernetes-action": "get",
|
||||
"x-kubernetes-group-version-kind": {
|
||||
"group": "custom.io",
|
||||
"kind": "Custom",
|
||||
"version": "v1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"/apis/custom.io/v1/clustercustoms": {
|
||||
"get": {
|
||||
"x-kubernetes-action": "get",
|
||||
"x-kubernetes-group-version-kind": {
|
||||
"group": "custom.io",
|
||||
"kind": "ClusterCustom",
|
||||
"version": "v1"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`))
|
||||
assert.NoError(t, err)
|
||||
|
||||
isNamespaceable, isFound := IsNamespaceScoped(yaml.TypeMeta{
|
||||
APIVersion: "custom.io/v1",
|
||||
Kind: "ClusterCustom",
|
||||
})
|
||||
assert.True(t, isFound)
|
||||
assert.False(t, isNamespaceable)
|
||||
|
||||
isNamespaceable, isFound = IsNamespaceScoped(yaml.TypeMeta{
|
||||
APIVersion: "custom.io/v1",
|
||||
Kind: "Custom",
|
||||
})
|
||||
assert.True(t, isFound)
|
||||
assert.True(t, isNamespaceable)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user