mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-31 15:25:57 +00:00
make partial resource detection work for singular matches
This commit is contained in:
parent
c0dd58c001
commit
5822955713
@ -206,23 +206,32 @@ func (m *DefaultRESTMapper) ResourcesFor(resource unversioned.GroupVersionResour
|
|||||||
|
|
||||||
case hasGroup:
|
case hasGroup:
|
||||||
requestedGroupResource := resource.GroupResource()
|
requestedGroupResource := resource.GroupResource()
|
||||||
for currResource := range m.pluralToSingular {
|
for plural, singular := range m.pluralToSingular {
|
||||||
if currResource.GroupResource() == requestedGroupResource {
|
if singular.GroupResource() == requestedGroupResource {
|
||||||
ret = append(ret, currResource)
|
ret = append(ret, plural)
|
||||||
|
}
|
||||||
|
if plural.GroupResource() == requestedGroupResource {
|
||||||
|
ret = append(ret, plural)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case hasVersion:
|
case hasVersion:
|
||||||
for currResource := range m.pluralToSingular {
|
for plural, singular := range m.pluralToSingular {
|
||||||
if currResource.Version == resource.Version && currResource.Resource == resource.Resource {
|
if singular.Version == resource.Version && singular.Resource == resource.Resource {
|
||||||
ret = append(ret, currResource)
|
ret = append(ret, plural)
|
||||||
|
}
|
||||||
|
if plural.Version == resource.Version && plural.Resource == resource.Resource {
|
||||||
|
ret = append(ret, plural)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
for currResource := range m.pluralToSingular {
|
for plural, singular := range m.pluralToSingular {
|
||||||
if currResource.Resource == resource.Resource {
|
if singular.Resource == resource.Resource {
|
||||||
ret = append(ret, currResource)
|
ret = append(ret, plural)
|
||||||
|
}
|
||||||
|
if plural.Resource == resource.Resource {
|
||||||
|
ret = append(ret, plural)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -234,10 +234,11 @@ func TestRESTMapperKindsFor(t *testing.T) {
|
|||||||
|
|
||||||
func TestRESTMapperResourcesFor(t *testing.T) {
|
func TestRESTMapperResourcesFor(t *testing.T) {
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
Name string
|
Name string
|
||||||
PreferredOrder []unversioned.GroupVersion
|
PreferredOrder []unversioned.GroupVersion
|
||||||
KindsToRegister []unversioned.GroupVersionKind
|
KindsToRegister []unversioned.GroupVersionKind
|
||||||
PartialResourceToRequest unversioned.GroupVersionResource
|
PluralPartialResourceToRequest unversioned.GroupVersionResource
|
||||||
|
SingularPartialResourceToRequest unversioned.GroupVersionResource
|
||||||
|
|
||||||
ExpectedResources []unversioned.GroupVersionResource
|
ExpectedResources []unversioned.GroupVersionResource
|
||||||
ExpectedResourceErr string
|
ExpectedResourceErr string
|
||||||
@ -254,7 +255,8 @@ func TestRESTMapperResourcesFor(t *testing.T) {
|
|||||||
{Group: "second-group", Version: "first-version", Kind: "my-kind"},
|
{Group: "second-group", Version: "first-version", Kind: "my-kind"},
|
||||||
{Group: "second-group", Version: "first-version", Kind: "your-kind"},
|
{Group: "second-group", Version: "first-version", Kind: "your-kind"},
|
||||||
},
|
},
|
||||||
PartialResourceToRequest: unversioned.GroupVersionResource{Resource: "my-kinds"},
|
PluralPartialResourceToRequest: unversioned.GroupVersionResource{Resource: "my-kinds"},
|
||||||
|
SingularPartialResourceToRequest: unversioned.GroupVersionResource{Resource: "my-kind"},
|
||||||
|
|
||||||
ExpectedResources: []unversioned.GroupVersionResource{
|
ExpectedResources: []unversioned.GroupVersionResource{
|
||||||
{Group: "second-group", Version: "first-version", Resource: "my-kinds"},
|
{Group: "second-group", Version: "first-version", Resource: "my-kinds"},
|
||||||
@ -275,7 +277,8 @@ func TestRESTMapperResourcesFor(t *testing.T) {
|
|||||||
{Group: "second-group", Version: "first-version", Kind: "my-kind"},
|
{Group: "second-group", Version: "first-version", Kind: "my-kind"},
|
||||||
{Group: "second-group", Version: "first-version", Kind: "your-kind"},
|
{Group: "second-group", Version: "first-version", Kind: "your-kind"},
|
||||||
},
|
},
|
||||||
PartialResourceToRequest: unversioned.GroupVersionResource{Group: "first-group", Resource: "my-kinds"},
|
PluralPartialResourceToRequest: unversioned.GroupVersionResource{Group: "first-group", Resource: "my-kinds"},
|
||||||
|
SingularPartialResourceToRequest: unversioned.GroupVersionResource{Group: "first-group", Resource: "my-kind"},
|
||||||
|
|
||||||
ExpectedResources: []unversioned.GroupVersionResource{
|
ExpectedResources: []unversioned.GroupVersionResource{
|
||||||
{Group: "first-group", Version: "first-version", Resource: "my-kinds"},
|
{Group: "first-group", Version: "first-version", Resource: "my-kinds"},
|
||||||
@ -294,7 +297,8 @@ func TestRESTMapperResourcesFor(t *testing.T) {
|
|||||||
{Group: "second-group", Version: "first-version", Kind: "my-kind"},
|
{Group: "second-group", Version: "first-version", Kind: "my-kind"},
|
||||||
{Group: "second-group", Version: "first-version", Kind: "your-kind"},
|
{Group: "second-group", Version: "first-version", Kind: "your-kind"},
|
||||||
},
|
},
|
||||||
PartialResourceToRequest: unversioned.GroupVersionResource{Version: "first-version", Resource: "my-kinds"},
|
PluralPartialResourceToRequest: unversioned.GroupVersionResource{Version: "first-version", Resource: "my-kinds"},
|
||||||
|
SingularPartialResourceToRequest: unversioned.GroupVersionResource{Version: "first-version", Resource: "my-kind"},
|
||||||
|
|
||||||
ExpectedResources: []unversioned.GroupVersionResource{
|
ExpectedResources: []unversioned.GroupVersionResource{
|
||||||
{Group: "first-group", Version: "first-version", Resource: "my-kinds"},
|
{Group: "first-group", Version: "first-version", Resource: "my-kinds"},
|
||||||
@ -305,41 +309,44 @@ func TestRESTMapperResourcesFor(t *testing.T) {
|
|||||||
}
|
}
|
||||||
for _, testCase := range testCases {
|
for _, testCase := range testCases {
|
||||||
tcName := testCase.Name
|
tcName := testCase.Name
|
||||||
mapper := NewDefaultRESTMapper(testCase.PreferredOrder, fakeInterfaces)
|
|
||||||
for _, kind := range testCase.KindsToRegister {
|
|
||||||
mapper.Add(kind, RESTScopeNamespace)
|
|
||||||
}
|
|
||||||
|
|
||||||
actualResources, err := mapper.ResourcesFor(testCase.PartialResourceToRequest)
|
for _, partialResource := range []unversioned.GroupVersionResource{testCase.PluralPartialResourceToRequest, testCase.SingularPartialResourceToRequest} {
|
||||||
if err != nil {
|
mapper := NewDefaultRESTMapper(testCase.PreferredOrder, fakeInterfaces)
|
||||||
t.Errorf("%s: unexpected error: %v", tcName, err)
|
for _, kind := range testCase.KindsToRegister {
|
||||||
continue
|
mapper.Add(kind, RESTScopeNamespace)
|
||||||
}
|
}
|
||||||
if !reflect.DeepEqual(testCase.ExpectedResources, actualResources) {
|
|
||||||
t.Errorf("%s: expected %v, got %v", tcName, testCase.ExpectedResources, actualResources)
|
|
||||||
}
|
|
||||||
|
|
||||||
singleResource, err := mapper.ResourceFor(testCase.PartialResourceToRequest)
|
actualResources, err := mapper.ResourcesFor(partialResource)
|
||||||
if err == nil && len(testCase.ExpectedResourceErr) != 0 {
|
if err != nil {
|
||||||
t.Errorf("%s: expected error: %v", tcName, testCase.ExpectedResourceErr)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
if len(testCase.ExpectedResourceErr) == 0 {
|
|
||||||
t.Errorf("%s: unexpected error: %v", tcName, err)
|
t.Errorf("%s: unexpected error: %v", tcName, err)
|
||||||
continue
|
continue
|
||||||
} else {
|
}
|
||||||
if !strings.Contains(err.Error(), testCase.ExpectedResourceErr) {
|
if !reflect.DeepEqual(testCase.ExpectedResources, actualResources) {
|
||||||
t.Errorf("%s: expected %v, got %v", tcName, testCase.ExpectedResourceErr, err)
|
t.Errorf("%s: expected %v, got %v", tcName, testCase.ExpectedResources, actualResources)
|
||||||
|
}
|
||||||
|
|
||||||
|
singleResource, err := mapper.ResourceFor(partialResource)
|
||||||
|
if err == nil && len(testCase.ExpectedResourceErr) != 0 {
|
||||||
|
t.Errorf("%s: expected error: %v", tcName, testCase.ExpectedResourceErr)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
if len(testCase.ExpectedResourceErr) == 0 {
|
||||||
|
t.Errorf("%s: unexpected error: %v", tcName, err)
|
||||||
continue
|
continue
|
||||||
|
} else {
|
||||||
|
if !strings.Contains(err.Error(), testCase.ExpectedResourceErr) {
|
||||||
|
t.Errorf("%s: expected %v, got %v", tcName, testCase.ExpectedResourceErr, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if testCase.ExpectedResources[0] != singleResource {
|
if testCase.ExpectedResources[0] != singleResource {
|
||||||
t.Errorf("%s: expected %v, got %v", tcName, testCase.ExpectedResources[0], singleResource)
|
t.Errorf("%s: expected %v, got %v", tcName, testCase.ExpectedResources[0], singleResource)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user