123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550 |
- /*
- Copyright 2014 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package meta
- import (
- "errors"
- "reflect"
- "strings"
- "testing"
- "k8s.io/kubernetes/pkg/api/unversioned"
- "k8s.io/kubernetes/pkg/runtime"
- )
- type fakeConvertor struct{}
- func (fakeConvertor) Convert(in, out, context interface{}) error {
- return nil
- }
- func (fakeConvertor) ConvertToVersion(in runtime.Object, _ runtime.GroupVersioner) (runtime.Object, error) {
- return in, nil
- }
- func (fakeConvertor) ConvertFieldLabel(version, kind, label, value string) (string, string, error) {
- return label, value, nil
- }
- var validAccessor = resourceAccessor{}
- var validConvertor = fakeConvertor{}
- func fakeInterfaces(version unversioned.GroupVersion) (*VersionInterfaces, error) {
- return &VersionInterfaces{ObjectConvertor: validConvertor, MetadataAccessor: validAccessor}, nil
- }
- var unmatchedErr = errors.New("no version")
- func unmatchedVersionInterfaces(version unversioned.GroupVersion) (*VersionInterfaces, error) {
- return nil, unmatchedErr
- }
- func TestRESTMapperVersionAndKindForResource(t *testing.T) {
- testGroup := "test.group"
- testVersion := "test"
- testGroupVersion := unversioned.GroupVersion{Group: testGroup, Version: testVersion}
- testCases := []struct {
- Resource unversioned.GroupVersionResource
- GroupVersionToRegister unversioned.GroupVersion
- ExpectedGVK unversioned.GroupVersionKind
- Err bool
- }{
- {Resource: unversioned.GroupVersionResource{Resource: "internalobjec"}, Err: true},
- {Resource: unversioned.GroupVersionResource{Resource: "internalObjec"}, Err: true},
- {Resource: unversioned.GroupVersionResource{Resource: "internalobject"}, ExpectedGVK: testGroupVersion.WithKind("InternalObject")},
- {Resource: unversioned.GroupVersionResource{Resource: "internalobjects"}, ExpectedGVK: testGroupVersion.WithKind("InternalObject")},
- }
- for i, testCase := range testCases {
- mapper := NewDefaultRESTMapper([]unversioned.GroupVersion{testGroupVersion}, fakeInterfaces)
- if len(testCase.ExpectedGVK.Kind) != 0 {
- mapper.Add(testCase.ExpectedGVK, RESTScopeNamespace)
- }
- actualGVK, err := mapper.KindFor(testCase.Resource)
- hasErr := err != nil
- if hasErr != testCase.Err {
- t.Errorf("%d: unexpected error behavior %t: %v", i, testCase.Err, err)
- continue
- }
- if err != nil {
- continue
- }
- if actualGVK != testCase.ExpectedGVK {
- t.Errorf("%d: unexpected version and kind: e=%s a=%s", i, testCase.ExpectedGVK, actualGVK)
- }
- }
- }
- func TestRESTMapperGroupForResource(t *testing.T) {
- testCases := []struct {
- Resource unversioned.GroupVersionResource
- GroupVersionKind unversioned.GroupVersionKind
- Err bool
- }{
- {Resource: unversioned.GroupVersionResource{Resource: "myObject"}, GroupVersionKind: unversioned.GroupVersionKind{Group: "testapi", Version: "test", Kind: "MyObject"}},
- {Resource: unversioned.GroupVersionResource{Resource: "myobject"}, GroupVersionKind: unversioned.GroupVersionKind{Group: "testapi2", Version: "test", Kind: "MyObject"}},
- {Resource: unversioned.GroupVersionResource{Resource: "myObje"}, Err: true, GroupVersionKind: unversioned.GroupVersionKind{Group: "testapi", Version: "test", Kind: "MyObject"}},
- {Resource: unversioned.GroupVersionResource{Resource: "myobje"}, Err: true, GroupVersionKind: unversioned.GroupVersionKind{Group: "testapi", Version: "test", Kind: "MyObject"}},
- }
- for i, testCase := range testCases {
- mapper := NewDefaultRESTMapper([]unversioned.GroupVersion{testCase.GroupVersionKind.GroupVersion()}, fakeInterfaces)
- mapper.Add(testCase.GroupVersionKind, RESTScopeNamespace)
- actualGVK, err := mapper.KindFor(testCase.Resource)
- if testCase.Err {
- if err == nil {
- t.Errorf("%d: expected error", i)
- }
- } else if err != nil {
- t.Errorf("%d: unexpected error: %v", i, err)
- } else if actualGVK != testCase.GroupVersionKind {
- t.Errorf("%d: expected group %q, got %q", i, testCase.GroupVersionKind, actualGVK)
- }
- }
- }
- func TestRESTMapperKindsFor(t *testing.T) {
- testCases := []struct {
- Name string
- PreferredOrder []unversioned.GroupVersion
- KindsToRegister []unversioned.GroupVersionKind
- PartialResourceToRequest unversioned.GroupVersionResource
- ExpectedKinds []unversioned.GroupVersionKind
- ExpectedKindErr string
- }{
- {
- Name: "ambiguous groups, with preference order",
- PreferredOrder: []unversioned.GroupVersion{
- {Group: "second-group", Version: "first-version"},
- {Group: "first-group", Version: "first-version"},
- },
- KindsToRegister: []unversioned.GroupVersionKind{
- {Group: "first-group", Version: "first-version", Kind: "my-kind"},
- {Group: "first-group", Version: "first-version", Kind: "your-kind"},
- {Group: "second-group", Version: "first-version", Kind: "my-kind"},
- {Group: "second-group", Version: "first-version", Kind: "your-kind"},
- },
- PartialResourceToRequest: unversioned.GroupVersionResource{Resource: "my-kinds"},
- ExpectedKinds: []unversioned.GroupVersionKind{
- {Group: "second-group", Version: "first-version", Kind: "my-kind"},
- {Group: "first-group", Version: "first-version", Kind: "my-kind"},
- },
- ExpectedKindErr: " matches multiple kinds ",
- },
- {
- Name: "ambiguous groups, with explicit group match",
- PreferredOrder: []unversioned.GroupVersion{
- {Group: "second-group", Version: "first-version"},
- {Group: "first-group", Version: "first-version"},
- },
- KindsToRegister: []unversioned.GroupVersionKind{
- {Group: "first-group", Version: "first-version", Kind: "my-kind"},
- {Group: "first-group", Version: "first-version", Kind: "your-kind"},
- {Group: "second-group", Version: "first-version", Kind: "my-kind"},
- {Group: "second-group", Version: "first-version", Kind: "your-kind"},
- },
- PartialResourceToRequest: unversioned.GroupVersionResource{Group: "first-group", Resource: "my-kinds"},
- ExpectedKinds: []unversioned.GroupVersionKind{
- {Group: "first-group", Version: "first-version", Kind: "my-kind"},
- },
- },
- {
- Name: "ambiguous groups, with ambiguous version match",
- PreferredOrder: []unversioned.GroupVersion{
- {Group: "first-group", Version: "first-version"},
- {Group: "second-group", Version: "first-version"},
- },
- KindsToRegister: []unversioned.GroupVersionKind{
- {Group: "first-group", Version: "first-version", Kind: "my-kind"},
- {Group: "first-group", Version: "first-version", Kind: "your-kind"},
- {Group: "second-group", Version: "first-version", Kind: "my-kind"},
- {Group: "second-group", Version: "first-version", Kind: "your-kind"},
- },
- PartialResourceToRequest: unversioned.GroupVersionResource{Version: "first-version", Resource: "my-kinds"},
- ExpectedKinds: []unversioned.GroupVersionKind{
- {Group: "first-group", Version: "first-version", Kind: "my-kind"},
- {Group: "second-group", Version: "first-version", Kind: "my-kind"},
- },
- ExpectedKindErr: " matches multiple kinds ",
- },
- }
- for _, testCase := range testCases {
- tcName := testCase.Name
- mapper := NewDefaultRESTMapper(testCase.PreferredOrder, fakeInterfaces)
- for _, kind := range testCase.KindsToRegister {
- mapper.Add(kind, RESTScopeNamespace)
- }
- actualKinds, err := mapper.KindsFor(testCase.PartialResourceToRequest)
- if err != nil {
- t.Errorf("%s: unexpected error: %v", tcName, err)
- continue
- }
- if !reflect.DeepEqual(testCase.ExpectedKinds, actualKinds) {
- t.Errorf("%s: expected %v, got %v", tcName, testCase.ExpectedKinds, actualKinds)
- }
- singleKind, err := mapper.KindFor(testCase.PartialResourceToRequest)
- if err == nil && len(testCase.ExpectedKindErr) != 0 {
- t.Errorf("%s: expected error: %v", tcName, testCase.ExpectedKindErr)
- continue
- }
- if err != nil {
- if len(testCase.ExpectedKindErr) == 0 {
- t.Errorf("%s: unexpected error: %v", tcName, err)
- continue
- } else {
- if !strings.Contains(err.Error(), testCase.ExpectedKindErr) {
- t.Errorf("%s: expected %v, got %v", tcName, testCase.ExpectedKindErr, err)
- continue
- }
- }
- } else {
- if testCase.ExpectedKinds[0] != singleKind {
- t.Errorf("%s: expected %v, got %v", tcName, testCase.ExpectedKinds[0], singleKind)
- }
- }
- }
- }
- func TestRESTMapperResourcesFor(t *testing.T) {
- testCases := []struct {
- Name string
- PreferredOrder []unversioned.GroupVersion
- KindsToRegister []unversioned.GroupVersionKind
- PluralPartialResourceToRequest unversioned.GroupVersionResource
- SingularPartialResourceToRequest unversioned.GroupVersionResource
- ExpectedResources []unversioned.GroupVersionResource
- ExpectedResourceErr string
- }{
- {
- Name: "ambiguous groups, with preference order",
- PreferredOrder: []unversioned.GroupVersion{
- {Group: "second-group", Version: "first-version"},
- {Group: "first-group", Version: "first-version"},
- },
- KindsToRegister: []unversioned.GroupVersionKind{
- {Group: "first-group", Version: "first-version", Kind: "my-kind"},
- {Group: "first-group", Version: "first-version", Kind: "your-kind"},
- {Group: "second-group", Version: "first-version", Kind: "my-kind"},
- {Group: "second-group", Version: "first-version", Kind: "your-kind"},
- },
- PluralPartialResourceToRequest: unversioned.GroupVersionResource{Resource: "my-kinds"},
- SingularPartialResourceToRequest: unversioned.GroupVersionResource{Resource: "my-kind"},
- ExpectedResources: []unversioned.GroupVersionResource{
- {Group: "second-group", Version: "first-version", Resource: "my-kinds"},
- {Group: "first-group", Version: "first-version", Resource: "my-kinds"},
- },
- ExpectedResourceErr: " matches multiple resources ",
- },
- {
- Name: "ambiguous groups, with explicit group match",
- PreferredOrder: []unversioned.GroupVersion{
- {Group: "second-group", Version: "first-version"},
- {Group: "first-group", Version: "first-version"},
- },
- KindsToRegister: []unversioned.GroupVersionKind{
- {Group: "first-group", Version: "first-version", Kind: "my-kind"},
- {Group: "first-group", Version: "first-version", Kind: "your-kind"},
- {Group: "second-group", Version: "first-version", Kind: "my-kind"},
- {Group: "second-group", Version: "first-version", Kind: "your-kind"},
- },
- PluralPartialResourceToRequest: unversioned.GroupVersionResource{Group: "first-group", Resource: "my-kinds"},
- SingularPartialResourceToRequest: unversioned.GroupVersionResource{Group: "first-group", Resource: "my-kind"},
- ExpectedResources: []unversioned.GroupVersionResource{
- {Group: "first-group", Version: "first-version", Resource: "my-kinds"},
- },
- },
- {
- Name: "ambiguous groups, with ambiguous version match",
- PreferredOrder: []unversioned.GroupVersion{
- {Group: "first-group", Version: "first-version"},
- {Group: "second-group", Version: "first-version"},
- },
- KindsToRegister: []unversioned.GroupVersionKind{
- {Group: "first-group", Version: "first-version", Kind: "my-kind"},
- {Group: "first-group", Version: "first-version", Kind: "your-kind"},
- {Group: "second-group", Version: "first-version", Kind: "my-kind"},
- {Group: "second-group", Version: "first-version", Kind: "your-kind"},
- },
- PluralPartialResourceToRequest: unversioned.GroupVersionResource{Version: "first-version", Resource: "my-kinds"},
- SingularPartialResourceToRequest: unversioned.GroupVersionResource{Version: "first-version", Resource: "my-kind"},
- ExpectedResources: []unversioned.GroupVersionResource{
- {Group: "first-group", Version: "first-version", Resource: "my-kinds"},
- {Group: "second-group", Version: "first-version", Resource: "my-kinds"},
- },
- ExpectedResourceErr: " matches multiple resources ",
- },
- }
- for _, testCase := range testCases {
- tcName := testCase.Name
- for _, partialResource := range []unversioned.GroupVersionResource{testCase.PluralPartialResourceToRequest, testCase.SingularPartialResourceToRequest} {
- mapper := NewDefaultRESTMapper(testCase.PreferredOrder, fakeInterfaces)
- for _, kind := range testCase.KindsToRegister {
- mapper.Add(kind, RESTScopeNamespace)
- }
- actualResources, err := mapper.ResourcesFor(partialResource)
- if err != nil {
- t.Errorf("%s: unexpected error: %v", tcName, err)
- continue
- }
- if !reflect.DeepEqual(testCase.ExpectedResources, actualResources) {
- 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
- } else {
- if !strings.Contains(err.Error(), testCase.ExpectedResourceErr) {
- t.Errorf("%s: expected %v, got %v", tcName, testCase.ExpectedResourceErr, err)
- continue
- }
- }
- } else {
- if testCase.ExpectedResources[0] != singleResource {
- t.Errorf("%s: expected %v, got %v", tcName, testCase.ExpectedResources[0], singleResource)
- }
- }
- }
- }
- }
- func TestKindToResource(t *testing.T) {
- testCases := []struct {
- Kind string
- Plural, Singular string
- }{
- {Kind: "Pod", Plural: "pods", Singular: "pod"},
- {Kind: "ReplicationController", Plural: "replicationcontrollers", Singular: "replicationcontroller"},
- // Add "ies" when ending with "y"
- {Kind: "ImageRepository", Plural: "imagerepositories", Singular: "imagerepository"},
- // Add "es" when ending with "s"
- {Kind: "miss", Plural: "misses", Singular: "miss"},
- // Add "s" otherwise
- {Kind: "lowercase", Plural: "lowercases", Singular: "lowercase"},
- }
- for i, testCase := range testCases {
- version := unversioned.GroupVersion{}
- plural, singular := KindToResource(version.WithKind(testCase.Kind))
- if singular != version.WithResource(testCase.Singular) || plural != version.WithResource(testCase.Plural) {
- t.Errorf("%d: unexpected plural and singular: %v %v", i, plural, singular)
- }
- }
- }
- func TestRESTMapperResourceSingularizer(t *testing.T) {
- testGroupVersion := unversioned.GroupVersion{Group: "tgroup", Version: "test"}
- testCases := []struct {
- Kind string
- Plural string
- Singular string
- }{
- {Kind: "Pod", Plural: "pods", Singular: "pod"},
- {Kind: "ReplicationController", Plural: "replicationcontrollers", Singular: "replicationcontroller"},
- {Kind: "ImageRepository", Plural: "imagerepositories", Singular: "imagerepository"},
- {Kind: "Status", Plural: "statuses", Singular: "status"},
- {Kind: "lowercase", Plural: "lowercases", Singular: "lowercase"},
- // TODO this test is broken. This updates to reflect actual behavior. Kinds are expected to be singular
- // old (incorrect), coment: Don't add extra s if the original object is already plural
- {Kind: "lowercases", Plural: "lowercaseses", Singular: "lowercases"},
- }
- for i, testCase := range testCases {
- mapper := NewDefaultRESTMapper([]unversioned.GroupVersion{testGroupVersion}, fakeInterfaces)
- // create singular/plural mapping
- mapper.Add(testGroupVersion.WithKind(testCase.Kind), RESTScopeNamespace)
- singular, err := mapper.ResourceSingularizer(testCase.Plural)
- if err != nil {
- t.Errorf("%d: unexpected error: %v", i, err)
- }
- if singular != testCase.Singular {
- t.Errorf("%d: mismatched singular: got %v, expected %v", i, singular, testCase.Singular)
- }
- }
- }
- func TestRESTMapperRESTMapping(t *testing.T) {
- testGroup := "tgroup"
- testGroupVersion := unversioned.GroupVersion{Group: testGroup, Version: "test"}
- internalGroupVersion := unversioned.GroupVersion{Group: testGroup, Version: "test"}
- testCases := []struct {
- Kind string
- APIGroupVersions []unversioned.GroupVersion
- DefaultVersions []unversioned.GroupVersion
- Resource string
- ExpectedGroupVersion *unversioned.GroupVersion
- Err bool
- }{
- {Kind: "Unknown", Err: true},
- {Kind: "InternalObject", Err: true},
- {DefaultVersions: []unversioned.GroupVersion{testGroupVersion}, Kind: "Unknown", Err: true},
- {DefaultVersions: []unversioned.GroupVersion{testGroupVersion}, Kind: "InternalObject", APIGroupVersions: []unversioned.GroupVersion{{Group: testGroup, Version: "test"}}, Resource: "internalobjects"},
- {DefaultVersions: []unversioned.GroupVersion{testGroupVersion}, Kind: "InternalObject", APIGroupVersions: []unversioned.GroupVersion{{Group: testGroup, Version: "test"}}, Resource: "internalobjects"},
- {DefaultVersions: []unversioned.GroupVersion{testGroupVersion}, Kind: "InternalObject", APIGroupVersions: []unversioned.GroupVersion{{Group: testGroup, Version: "test"}}, Resource: "internalobjects"},
- {DefaultVersions: []unversioned.GroupVersion{testGroupVersion}, Kind: "InternalObject", APIGroupVersions: []unversioned.GroupVersion{}, Resource: "internalobjects", ExpectedGroupVersion: &unversioned.GroupVersion{Group: testGroup, Version: "test"}},
- {DefaultVersions: []unversioned.GroupVersion{testGroupVersion}, Kind: "InternalObject", APIGroupVersions: []unversioned.GroupVersion{{Group: testGroup, Version: "test"}}, Resource: "internalobjects"},
- // TODO: add test for a resource that exists in one version but not another
- }
- for i, testCase := range testCases {
- mapper := NewDefaultRESTMapper(testCase.DefaultVersions, fakeInterfaces)
- mapper.Add(internalGroupVersion.WithKind("InternalObject"), RESTScopeNamespace)
- preferredVersions := []string{}
- for _, gv := range testCase.APIGroupVersions {
- preferredVersions = append(preferredVersions, gv.Version)
- }
- gk := unversioned.GroupKind{Group: testGroup, Kind: testCase.Kind}
- mapping, err := mapper.RESTMapping(gk, preferredVersions...)
- hasErr := err != nil
- if hasErr != testCase.Err {
- t.Errorf("%d: unexpected error behavior %t: %v", i, testCase.Err, err)
- }
- if hasErr {
- continue
- }
- if mapping.Resource != testCase.Resource {
- t.Errorf("%d: unexpected resource: %#v", i, mapping)
- }
- if mapping.MetadataAccessor == nil || mapping.ObjectConvertor == nil {
- t.Errorf("%d: missing codec and accessor: %#v", i, mapping)
- }
- groupVersion := testCase.ExpectedGroupVersion
- if groupVersion == nil {
- groupVersion = &testCase.APIGroupVersions[0]
- }
- if mapping.GroupVersionKind.GroupVersion() != *groupVersion {
- t.Errorf("%d: unexpected version: %#v", i, mapping)
- }
- }
- }
- func TestRESTMapperRESTMappingSelectsVersion(t *testing.T) {
- expectedGroupVersion1 := unversioned.GroupVersion{Group: "tgroup", Version: "test1"}
- expectedGroupVersion2 := unversioned.GroupVersion{Group: "tgroup", Version: "test2"}
- expectedGroupVersion3 := unversioned.GroupVersion{Group: "tgroup", Version: "test3"}
- internalObjectGK := unversioned.GroupKind{Group: "tgroup", Kind: "InternalObject"}
- otherObjectGK := unversioned.GroupKind{Group: "tgroup", Kind: "OtherObject"}
- mapper := NewDefaultRESTMapper([]unversioned.GroupVersion{expectedGroupVersion1, expectedGroupVersion2}, fakeInterfaces)
- mapper.Add(expectedGroupVersion1.WithKind("InternalObject"), RESTScopeNamespace)
- mapper.Add(expectedGroupVersion2.WithKind("OtherObject"), RESTScopeNamespace)
- // pick default matching object kind based on search order
- mapping, err := mapper.RESTMapping(otherObjectGK)
- if err != nil {
- t.Fatalf("unexpected error: %v", err)
- }
- if mapping.Resource != "otherobjects" || mapping.GroupVersionKind.GroupVersion() != expectedGroupVersion2 {
- t.Errorf("unexpected mapping: %#v", mapping)
- }
- mapping, err = mapper.RESTMapping(internalObjectGK)
- if err != nil {
- t.Fatalf("unexpected error: %v", err)
- }
- if mapping.Resource != "internalobjects" || mapping.GroupVersionKind.GroupVersion() != expectedGroupVersion1 {
- t.Errorf("unexpected mapping: %#v", mapping)
- }
- // mismatch of version
- mapping, err = mapper.RESTMapping(internalObjectGK, expectedGroupVersion2.Version)
- if err == nil {
- t.Errorf("unexpected non-error")
- }
- mapping, err = mapper.RESTMapping(otherObjectGK, expectedGroupVersion1.Version)
- if err == nil {
- t.Errorf("unexpected non-error")
- }
- // not in the search versions
- mapping, err = mapper.RESTMapping(otherObjectGK, expectedGroupVersion3.Version)
- if err == nil {
- t.Errorf("unexpected non-error")
- }
- // explicit search order
- mapping, err = mapper.RESTMapping(otherObjectGK, expectedGroupVersion3.Version, expectedGroupVersion1.Version)
- if err == nil {
- t.Errorf("unexpected non-error")
- }
- mapping, err = mapper.RESTMapping(otherObjectGK, expectedGroupVersion3.Version, expectedGroupVersion2.Version)
- if err != nil {
- t.Fatalf("unexpected error: %v", err)
- }
- if mapping.Resource != "otherobjects" || mapping.GroupVersionKind.GroupVersion() != expectedGroupVersion2 {
- t.Errorf("unexpected mapping: %#v", mapping)
- }
- }
- func TestRESTMapperReportsErrorOnBadVersion(t *testing.T) {
- expectedGroupVersion1 := unversioned.GroupVersion{Group: "tgroup", Version: "test1"}
- expectedGroupVersion2 := unversioned.GroupVersion{Group: "tgroup", Version: "test2"}
- internalObjectGK := unversioned.GroupKind{Group: "tgroup", Kind: "InternalObject"}
- mapper := NewDefaultRESTMapper([]unversioned.GroupVersion{expectedGroupVersion1, expectedGroupVersion2}, unmatchedVersionInterfaces)
- mapper.Add(expectedGroupVersion1.WithKind("InternalObject"), RESTScopeNamespace)
- _, err := mapper.RESTMapping(internalObjectGK, expectedGroupVersion1.Version)
- if err == nil {
- t.Errorf("unexpected non-error")
- }
- }
|