package util_test import ( "reflect" "testing" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/kubectl" _ "github.com/openshift/origin/pkg/api/install" "github.com/openshift/origin/pkg/cmd/util" "github.com/openshift/origin/pkg/cmd/util/clientcmd" ) func TestResolveResource(t *testing.T) { mapper := clientcmd.ShortcutExpander{RESTMapper: kubectl.ShortcutExpander{RESTMapper: registered.RESTMapper()}} tests := []struct { name string defaultResource unversioned.GroupResource resourceString string expectedResource unversioned.GroupResource expectedName string expectedErr bool }{ { name: "invalid case #1", defaultResource: unversioned.GroupResource{Resource: "foo"}, resourceString: "a/b/c", expectedResource: unversioned.GroupResource{}, expectedName: "", expectedErr: true, }, { name: "invalid case #2", defaultResource: unversioned.GroupResource{Resource: "foo"}, resourceString: "foo/bar", expectedResource: unversioned.GroupResource{}, expectedName: "", expectedErr: true, }, { name: "empty resource string case #1", defaultResource: unversioned.GroupResource{Resource: ""}, resourceString: "", expectedResource: unversioned.GroupResource{Resource: ""}, expectedName: "", expectedErr: false, }, { name: "empty resource string case #2", defaultResource: unversioned.GroupResource{Resource: ""}, resourceString: "bar", expectedResource: unversioned.GroupResource{Resource: ""}, expectedName: "bar", expectedErr: false, }, { name: "empty resource string case #3", defaultResource: unversioned.GroupResource{Resource: "foo"}, resourceString: "bar", expectedResource: unversioned.GroupResource{Resource: "foo"}, expectedName: "bar", expectedErr: false, }, { name: "(KUBE) short name", defaultResource: unversioned.GroupResource{Resource: "foo"}, resourceString: "rc/bar", expectedResource: unversioned.GroupResource{Resource: "replicationcontrollers"}, expectedName: "bar", expectedErr: false, }, { name: "(KUBE) long name, case insensitive #1", defaultResource: unversioned.GroupResource{Resource: "foo"}, resourceString: "replicationcontroller/bar", expectedResource: unversioned.GroupResource{Resource: "replicationcontrollers"}, expectedName: "bar", expectedErr: false, }, { name: "(KUBE) long name, case insensitive #2", defaultResource: unversioned.GroupResource{Resource: "foo"}, resourceString: "replicationcontrollers/bar", expectedResource: unversioned.GroupResource{Resource: "replicationcontrollers"}, expectedName: "bar", expectedErr: false, }, { name: "(KUBE) long name, case insensitive #3", defaultResource: unversioned.GroupResource{Resource: "foo"}, resourceString: "ReplicationControllers/bar", expectedResource: unversioned.GroupResource{Resource: "replicationcontrollers"}, expectedName: "bar", expectedErr: false, }, { name: "(KUBE) long name, case insensitive #4", defaultResource: unversioned.GroupResource{Resource: "foo"}, resourceString: "ReplicationControllers/bar", expectedResource: unversioned.GroupResource{Resource: "replicationcontrollers"}, expectedName: "bar", expectedErr: false, }, { name: "(KUBE) long name, case insensitive #5", defaultResource: unversioned.GroupResource{Resource: "foo"}, resourceString: "ReplicationControllers/Bar", expectedResource: unversioned.GroupResource{Resource: "replicationcontrollers"}, expectedName: "Bar", expectedErr: false, }, { name: "(ORIGIN) short name", defaultResource: unversioned.GroupResource{Resource: "foo"}, resourceString: "bc/bar", expectedResource: unversioned.GroupResource{Resource: "buildconfigs"}, expectedName: "bar", expectedErr: false, }, { name: "(ORIGIN) long name, case insensitive #1", defaultResource: unversioned.GroupResource{Resource: "foo"}, resourceString: "buildconfig/bar", expectedResource: unversioned.GroupResource{Resource: "buildconfigs"}, expectedName: "bar", expectedErr: false, }, { name: "(ORIGIN) long name, case insensitive #2", defaultResource: unversioned.GroupResource{Resource: "foo"}, resourceString: "buildconfigs/bar", expectedResource: unversioned.GroupResource{Resource: "buildconfigs"}, expectedName: "bar", expectedErr: false, }, { name: "(ORIGIN) long name, case insensitive #3", defaultResource: unversioned.GroupResource{Resource: "foo"}, resourceString: "BuildConfigs/bar", expectedResource: unversioned.GroupResource{Resource: "buildconfigs"}, expectedName: "bar", expectedErr: false, }, { name: "(ORIGIN) long name, case insensitive #4", defaultResource: unversioned.GroupResource{Resource: "foo"}, resourceString: "BuildConfigs/bar", expectedResource: unversioned.GroupResource{Resource: "buildconfigs"}, expectedName: "bar", expectedErr: false, }, { name: "(ORIGIN) long name, case insensitive #5", defaultResource: unversioned.GroupResource{Resource: "foo"}, resourceString: "BuildConfigs/Bar", expectedResource: unversioned.GroupResource{Resource: "buildconfigs"}, expectedName: "Bar", expectedErr: false, }, { name: "singular, implicit api group", defaultResource: unversioned.GroupResource{}, resourceString: "job/myjob", expectedResource: unversioned.GroupResource{Group: "extensions", Resource: "jobs"}, expectedName: "myjob", expectedErr: false, }, { name: "singular, explicit extensions api group", defaultResource: unversioned.GroupResource{}, resourceString: "job.extensions/myjob", expectedResource: unversioned.GroupResource{Group: "extensions", Resource: "jobs"}, expectedName: "myjob", expectedErr: false, }, { name: "singular, explicit batch api group", defaultResource: unversioned.GroupResource{}, resourceString: "job.batch/myjob", expectedResource: unversioned.GroupResource{Group: "batch", Resource: "jobs"}, expectedName: "myjob", expectedErr: false, }, { name: "shortname, implicit api group", defaultResource: unversioned.GroupResource{}, resourceString: "hpa/myhpa", expectedResource: unversioned.GroupResource{Group: "extensions", Resource: "horizontalpodautoscalers"}, expectedName: "myhpa", expectedErr: false, }, { name: "shortname, explicit extensions api group", defaultResource: unversioned.GroupResource{}, resourceString: "hpa.extensions/myhpa", expectedResource: unversioned.GroupResource{Group: "extensions", Resource: "horizontalpodautoscalers"}, expectedName: "myhpa", expectedErr: false, }, { name: "shortname, explicit autoscaling api group", defaultResource: unversioned.GroupResource{}, resourceString: "hpa.autoscaling/myhpa", expectedResource: unversioned.GroupResource{Group: "autoscaling", Resource: "horizontalpodautoscalers"}, expectedName: "myhpa", expectedErr: false, }, } for _, test := range tests { gotResource, gotName, gotErr := util.ResolveResource(test.defaultResource, test.resourceString, mapper) if gotErr != nil && !test.expectedErr { t.Errorf("%s: expected no error, got %v", test.name, gotErr) continue } if gotErr == nil && test.expectedErr { t.Errorf("%s: expected error but got none", test.name) continue } if !reflect.DeepEqual(gotResource, test.expectedResource) { t.Errorf("%s: expected resource type %#v, got %#v", test.name, test.expectedResource, gotResource) continue } if gotName != test.expectedName { t.Errorf("%s: expected resource name %s, got %s", test.name, test.expectedName, gotName) continue } } }