make partial resource detection work for singular matches

This commit is contained in:
deads2k 2016-02-10 08:11:13 -05:00
parent c0dd58c001
commit 5822955713
2 changed files with 59 additions and 43 deletions

View File

@ -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)
} }
} }
} }

View File

@ -237,7 +237,8 @@ func TestRESTMapperResourcesFor(t *testing.T) {
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,12 +309,14 @@ func TestRESTMapperResourcesFor(t *testing.T) {
} }
for _, testCase := range testCases { for _, testCase := range testCases {
tcName := testCase.Name tcName := testCase.Name
for _, partialResource := range []unversioned.GroupVersionResource{testCase.PluralPartialResourceToRequest, testCase.SingularPartialResourceToRequest} {
mapper := NewDefaultRESTMapper(testCase.PreferredOrder, fakeInterfaces) mapper := NewDefaultRESTMapper(testCase.PreferredOrder, fakeInterfaces)
for _, kind := range testCase.KindsToRegister { for _, kind := range testCase.KindsToRegister {
mapper.Add(kind, RESTScopeNamespace) mapper.Add(kind, RESTScopeNamespace)
} }
actualResources, err := mapper.ResourcesFor(testCase.PartialResourceToRequest) actualResources, err := mapper.ResourcesFor(partialResource)
if err != nil { if err != nil {
t.Errorf("%s: unexpected error: %v", tcName, err) t.Errorf("%s: unexpected error: %v", tcName, err)
continue continue
@ -319,7 +325,7 @@ func TestRESTMapperResourcesFor(t *testing.T) {
t.Errorf("%s: expected %v, got %v", tcName, testCase.ExpectedResources, actualResources) t.Errorf("%s: expected %v, got %v", tcName, testCase.ExpectedResources, actualResources)
} }
singleResource, err := mapper.ResourceFor(testCase.PartialResourceToRequest) singleResource, err := mapper.ResourceFor(partialResource)
if err == nil && len(testCase.ExpectedResourceErr) != 0 { if err == nil && len(testCase.ExpectedResourceErr) != 0 {
t.Errorf("%s: expected error: %v", tcName, testCase.ExpectedResourceErr) t.Errorf("%s: expected error: %v", tcName, testCase.ExpectedResourceErr)
continue continue
@ -343,6 +349,7 @@ func TestRESTMapperResourcesFor(t *testing.T) {
} }
} }
} }
}
func TestKindToResource(t *testing.T) { func TestKindToResource(t *testing.T) {
testCases := []struct { testCases := []struct {