diff --git a/hack/make-rules/test.sh b/hack/make-rules/test.sh index 4dc755988df..f70a4b966dd 100755 --- a/hack/make-rules/test.sh +++ b/hack/make-rules/test.sh @@ -81,13 +81,6 @@ KUBE_COVERPROCS=${KUBE_COVERPROCS:-4} KUBE_RACE=${KUBE_RACE:-} # use KUBE_RACE="-race" to enable race testing # Set to the goveralls binary path to report coverage results to Coveralls.io. KUBE_GOVERALLS_BIN=${KUBE_GOVERALLS_BIN:-} -# Lists of API Versions of each groups that should be tested, groups are -# separated by comma, lists are separated by semicolon. e.g., -# "v1,compute/v1alpha1,experimental/v1alpha2;v1,compute/v2,experimental/v1alpha3" -# FIXME: due to current implementation of a test client (see: pkg/api/testapi/testapi.go) -# ONLY the last version is tested in each group. -ALL_VERSIONS_CSV=$(IFS=',';echo "${KUBE_AVAILABLE_GROUP_VERSIONS[*]// /,}";IFS=$) -KUBE_TEST_API_VERSIONS="${KUBE_TEST_API_VERSIONS:-${ALL_VERSIONS_CSV}}" # once we have multiple group supports # Create a junit-style XML test report in this directory if set. KUBE_JUNIT_REPORT_DIR=${KUBE_JUNIT_REPORT_DIR:-} @@ -372,16 +365,7 @@ checkFDs() { checkFDs - -# Convert the CSVs to arrays. -IFS=';' read -r -a apiVersions <<< "${KUBE_TEST_API_VERSIONS}" -apiVersionsCount=${#apiVersions[@]} -for (( i=0; i 0 { - var ok bool - mediaType, _, err := mime.ParseMediaType(apiMediaType) - if err != nil { - panic(err) - } - serializer, ok = runtime.SerializerInfoForMediaType(legacyscheme.Codecs.SupportedMediaTypes(), mediaType) - if !ok { - panic(fmt.Sprintf("no serializer for %s", apiMediaType)) - } - } - - if storageMediaType := StorageMediaType(); len(storageMediaType) > 0 { - var ok bool - mediaType, _, err := mime.ParseMediaType(storageMediaType) - if err != nil { - panic(err) - } - storageSerializer, ok = runtime.SerializerInfoForMediaType(legacyscheme.Codecs.SupportedMediaTypes(), mediaType) - if !ok { - panic(fmt.Sprintf("no serializer for %s", storageMediaType)) - } - } - - kubeTestAPI := os.Getenv("KUBE_TEST_API") - if len(kubeTestAPI) != 0 { - // priority is "first in list preferred", so this has to run in reverse order - testGroupVersions := strings.Split(kubeTestAPI, ",") - for i := len(testGroupVersions) - 1; i >= 0; i-- { - gvString := testGroupVersions[i] - groupVersion, err := schema.ParseGroupVersion(gvString) - if err != nil { - panic(fmt.Sprintf("Error parsing groupversion %v: %v", gvString, err)) - } - - Groups[groupVersion.Group] = TestGroup{ - externalGroupVersion: groupVersion, - } - } - } - - if _, ok := Groups[api.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: api.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(api.GroupName)[0].Version} - Groups[api.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[extensions.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: extensions.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(extensions.GroupName)[0].Version} - Groups[extensions.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[autoscaling.GroupName]; !ok { - internalTypes := make(map[string]reflect.Type) - for k, t := range legacyscheme.Scheme.KnownTypes(extensions.SchemeGroupVersion) { - if k == "Scale" { - continue - } - internalTypes[k] = t - } - externalGroupVersion := schema.GroupVersion{Group: autoscaling.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(autoscaling.GroupName)[0].Version} - Groups[autoscaling.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[autoscaling.GroupName+"IntraGroup"]; !ok { - internalTypes := make(map[string]reflect.Type) - for k, t := range legacyscheme.Scheme.KnownTypes(extensions.SchemeGroupVersion) { - if k == "Scale" { - internalTypes[k] = t - break - } - } - externalGroupVersion := schema.GroupVersion{Group: autoscaling.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(autoscaling.GroupName)[0].Version} - Groups[autoscaling.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[batch.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: batch.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(batch.GroupName)[0].Version} - Groups[batch.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[apps.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: apps.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(apps.GroupName)[0].Version} - Groups[apps.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[policy.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: policy.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(policy.GroupName)[0].Version} - Groups[policy.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[rbac.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: rbac.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(rbac.GroupName)[0].Version} - Groups[rbac.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[scheduling.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: scheduling.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(scheduling.GroupName)[0].Version} - Groups[scheduling.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[settings.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: settings.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(settings.GroupName)[0].Version} - Groups[settings.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[storage.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: storage.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(storage.GroupName)[0].Version} - Groups[storage.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[certificates.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: certificates.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(certificates.GroupName)[0].Version} - Groups[certificates.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[imagepolicy.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: imagepolicy.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(imagepolicy.GroupName)[0].Version} - Groups[imagepolicy.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[authorization.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: authorization.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(authorization.GroupName)[0].Version} - Groups[authorization.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[admissionregistration.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: admissionregistration.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(admissionregistration.GroupName)[0].Version} - Groups[admissionregistration.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[admission.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: admission.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(admission.GroupName)[0].Version} - Groups[admission.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[networking.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: networking.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(networking.GroupName)[0].Version} - Groups[networking.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[node.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: node.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(node.GroupName)[0].Version} - Groups[node.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[events.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: events.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(events.GroupName)[0].Version} - Groups[events.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[coordination.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: coordination.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(coordination.GroupName)[0].Version} - Groups[coordination.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[auditregistration.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: auditregistration.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(auditregistration.GroupName)[0].Version} - Groups[auditregistration.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - if _, ok := Groups[discovery.GroupName]; !ok { - externalGroupVersion := schema.GroupVersion{Group: discovery.GroupName, Version: legacyscheme.Scheme.PrioritizedVersionsForGroup(discovery.GroupName)[0].Version} - Groups[discovery.GroupName] = TestGroup{ - externalGroupVersion: externalGroupVersion, - } - } - - Default = Groups[api.GroupName] - Autoscaling = Groups[autoscaling.GroupName] - Batch = Groups[batch.GroupName] - Apps = Groups[apps.GroupName] - Policy = Groups[policy.GroupName] - Extensions = Groups[extensions.GroupName] - Rbac = Groups[rbac.GroupName] - Storage = Groups[storage.GroupName] - Admission = Groups[admission.GroupName] -} - -// GroupVersion makes copy of schema.GroupVersion -func (g TestGroup) GroupVersion() *schema.GroupVersion { - copyOfGroupVersion := g.externalGroupVersion - return ©OfGroupVersion -} - -// Codec returns the codec for the API version to test against, as set by the -// KUBE_TEST_API_TYPE env var. -func (g TestGroup) Codec() runtime.Codec { - if serializer.Serializer == nil { - return legacyscheme.Codecs.LegacyCodec(g.externalGroupVersion) - } - return legacyscheme.Codecs.CodecForVersions(serializer.Serializer, legacyscheme.Codecs.UniversalDeserializer(), schema.GroupVersions{g.externalGroupVersion}, nil) -} - -// StorageMediaType finds media type set by KUBE_TEST_API_STORAGE_TYPE env var used to store objects in storage -func StorageMediaType() string { - return os.Getenv("KUBE_TEST_API_STORAGE_TYPE") -} - -// StorageCodec returns the codec for the API version to store in etcd, as set by the -// KUBE_TEST_API_STORAGE_TYPE env var. -func (g TestGroup) StorageCodec() runtime.Codec { - s := storageSerializer.Serializer - - if s == nil { - return legacyscheme.Codecs.LegacyCodec(g.externalGroupVersion) - } - - // etcd2 only supports string data - we must wrap any result before returning - // TODO: remove for etcd3 / make parameterizable - if !storageSerializer.EncodesAsText { - s = runtime.NewBase64Serializer(s, s) - } - ds := recognizer.NewDecoder(s, legacyscheme.Codecs.UniversalDeserializer()) - - return legacyscheme.Codecs.CodecForVersions(s, ds, schema.GroupVersions{g.externalGroupVersion}, nil) -} - -// SelfLink returns a self link that will appear to be for the version Version(). -// 'resource' should be the resource path, e.g. "pods" for the Pod type. 'name' should be -// empty for lists. -func (g TestGroup) SelfLink(resource, name string) string { - if g.externalGroupVersion.Group == api.GroupName { - if name == "" { - return fmt.Sprintf("/api/%s/%s", g.externalGroupVersion.Version, resource) - } - return fmt.Sprintf("/api/%s/%s/%s", g.externalGroupVersion.Version, resource, name) - } - // TODO: will need a /apis prefix once we have proper multi-group - // support - if name == "" { - return fmt.Sprintf("/apis/%s/%s/%s", g.externalGroupVersion.Group, g.externalGroupVersion.Version, resource) - } - return fmt.Sprintf("/apis/%s/%s/%s/%s", g.externalGroupVersion.Group, g.externalGroupVersion.Version, resource, name) -} - -// ResourcePathWithPrefix returns the appropriate path for the given prefix (watch, proxy, redirect, etc), resource, namespace and name. -// For ex, this is of the form: -// /api/v1/watch/namespaces/foo/pods/pod0 for v1. -func (g TestGroup) ResourcePathWithPrefix(prefix, resource, namespace, name string) string { - var path string - if g.externalGroupVersion.Group == api.GroupName { - path = "/api/" + g.externalGroupVersion.Version - } else { - // TODO: switch back once we have proper multiple group support - // path = "/apis/" + g.Group + "/" + Version(group...) - path = "/apis/" + g.externalGroupVersion.Group + "/" + g.externalGroupVersion.Version - } - - if prefix != "" { - path = path + "/" + prefix - } - if namespace != "" { - path = path + "/namespaces/" + namespace - } - // Resource names are lower case. - resource = strings.ToLower(resource) - if resource != "" { - path = path + "/" + resource - } - if name != "" { - path = path + "/" + name - } - return path -} - -// ResourcePath returns the appropriate path for the given resource, namespace and name. -// For example, this is of the form: -// /api/v1/namespaces/foo/pods/pod0 for v1. -func (g TestGroup) ResourcePath(resource, namespace, name string) string { - return g.ResourcePathWithPrefix("", resource, namespace, name) -} - -// SubResourcePath returns the appropriate path for the given resource, namespace, -// name and subresource. -func (g TestGroup) SubResourcePath(resource, namespace, name, sub string) string { - path := g.ResourcePathWithPrefix("", resource, namespace, name) - if sub != "" { - path = path + "/" + sub - } - - return path -} diff --git a/pkg/api/testapi/testapi_test.go b/pkg/api/testapi/testapi_test.go deleted file mode 100644 index f90cb812c66..00000000000 --- a/pkg/api/testapi/testapi_test.go +++ /dev/null @@ -1,204 +0,0 @@ -/* -Copyright 2015 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 testapi - -import ( - "encoding/json" - "reflect" - "testing" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" -) - -func TestResourcePathWithPrefix(t *testing.T) { - testCases := []struct { - prefix string - resource string - namespace string - name string - expected string - }{ - {"prefix", "resource", "mynamespace", "myresource", "/api/" + Default.GroupVersion().Version + "/prefix/namespaces/mynamespace/resource/myresource"}, - {"prefix", "resource", "", "myresource", "/api/" + Default.GroupVersion().Version + "/prefix/resource/myresource"}, - {"prefix", "resource", "mynamespace", "", "/api/" + Default.GroupVersion().Version + "/prefix/namespaces/mynamespace/resource"}, - {"prefix", "resource", "", "", "/api/" + Default.GroupVersion().Version + "/prefix/resource"}, - {"", "resource", "mynamespace", "myresource", "/api/" + Default.GroupVersion().Version + "/namespaces/mynamespace/resource/myresource"}, - } - for _, item := range testCases { - if actual := Default.ResourcePathWithPrefix(item.prefix, item.resource, item.namespace, item.name); actual != item.expected { - t.Errorf("Expected: %s, got: %s for prefix: %s, resource: %s, namespace: %s and name: %s", item.expected, actual, item.prefix, item.resource, item.namespace, item.name) - } - } - - testGroupCases := []struct { - prefix string - resource string - namespace string - name string - expected string - }{ - {"prefix", "resource", "mynamespace", "myresource", "/apis/" + Admission.GroupVersion().Group + "/" + Admission.GroupVersion().Version + "/prefix/namespaces/mynamespace/resource/myresource"}, - {"prefix", "resource", "", "myresource", "/apis/" + Admission.GroupVersion().Group + "/" + Admission.GroupVersion().Version + "/prefix/resource/myresource"}, - {"prefix", "resource", "mynamespace", "", "/apis/" + Admission.GroupVersion().Group + "/" + Admission.GroupVersion().Version + "/prefix/namespaces/mynamespace/resource"}, - {"prefix", "resource", "", "", "/apis/" + Admission.GroupVersion().Group + "/" + Admission.GroupVersion().Version + "/prefix/resource"}, - {"", "resource", "mynamespace", "myresource", "/apis/" + Admission.GroupVersion().Group + "/" + Admission.GroupVersion().Version + "/namespaces/mynamespace/resource/myresource"}, - } - for _, item := range testGroupCases { - if actual := Admission.ResourcePathWithPrefix(item.prefix, item.resource, item.namespace, item.name); actual != item.expected { - t.Errorf("Expected: %s, got: %s for prefix: %s, resource: %s, namespace: %s and name: %s", item.expected, actual, item.prefix, item.resource, item.namespace, item.name) - } - } -} - -func TestResourcePath(t *testing.T) { - testCases := []struct { - resource string - namespace string - name string - expected string - }{ - {"resource", "mynamespace", "myresource", "/api/" + Default.GroupVersion().Version + "/namespaces/mynamespace/resource/myresource"}, - {"resource", "", "myresource", "/api/" + Default.GroupVersion().Version + "/resource/myresource"}, - {"resource", "mynamespace", "", "/api/" + Default.GroupVersion().Version + "/namespaces/mynamespace/resource"}, - {"resource", "", "", "/api/" + Default.GroupVersion().Version + "/resource"}, - } - for _, item := range testCases { - if actual := Default.ResourcePath(item.resource, item.namespace, item.name); actual != item.expected { - t.Errorf("Expected: %s, got: %s for resource: %s, namespace: %s and name: %s", item.expected, actual, item.resource, item.namespace, item.name) - } - } -} - -func TestSubResourcePath(t *testing.T) { - testCases := []struct { - resource string - namespace string - name string - sub string - expected string - }{ - {"resource", "mynamespace", "myresource", "mysub", "/api/" + Default.GroupVersion().Version + "/namespaces/mynamespace/resource/myresource/mysub"}, - {"resource", "", "myresource", "mysub", "/api/" + Default.GroupVersion().Version + "/resource/myresource/mysub"}, - {"resource", "mynamespace", "", "mysub", "/api/" + Default.GroupVersion().Version + "/namespaces/mynamespace/resource/mysub"}, - {"resource", "", "", "mysub", "/api/" + Default.GroupVersion().Version + "/resource/mysub"}, - } - for _, item := range testCases { - if actual := Default.SubResourcePath(item.resource, item.namespace, item.name, item.sub); actual != item.expected { - t.Errorf("Expected: %s, got: %s for resource: %s, namespace: %s and name: %s", item.expected, actual, item.resource, item.namespace, item.name) - } - } -} - -var status = &metav1.Status{ - Status: metav1.StatusFailure, - Code: 200, - Reason: metav1.StatusReasonUnknown, - Message: "", -} - -func TestSelfLink(t *testing.T) { - testCases := []struct { - resource string - name string - expected string - }{ - {"resource", "name", "/api/" + Default.GroupVersion().Version + "/resource/name"}, - {"resource", "", "/api/" + Default.GroupVersion().Version + "/resource"}, - } - for _, item := range testCases { - if actual := Default.SelfLink(item.resource, item.name); actual != item.expected { - t.Errorf("Expected: %s, got: %s for resource: %s and name: %s", item.expected, actual, item.resource, item.name) - } - } - - testGroupCases := []struct { - resource string - name string - expected string - }{ - {"resource", "name", "/apis/" + Admission.GroupVersion().Group + "/" + Admission.GroupVersion().Version + "/resource/name"}, - {"resource", "", "/apis/" + Admission.GroupVersion().Group + "/" + Admission.GroupVersion().Version + "/resource"}, - } - for _, item := range testGroupCases { - if actual := Admission.SelfLink(item.resource, item.name); actual != item.expected { - t.Errorf("Expected: %s, got: %s for resource: %s and name: %s", item.expected, actual, item.resource, item.name) - } - } -} - -func TestV1EncodeDecodeStatus(t *testing.T) { - v1Codec := Default.Codec() - - encoded, err := runtime.Encode(v1Codec, status) - if err != nil { - t.Errorf("unexpected error: %v", err) - } - typeMeta := metav1.TypeMeta{} - if err := json.Unmarshal(encoded, &typeMeta); err != nil { - t.Errorf("unexpected error: %v", err) - } - if typeMeta.Kind != "Status" { - t.Errorf("Kind is not set to \"Status\". Got %v", string(encoded)) - } - if typeMeta.APIVersion != "v1" { - t.Errorf("APIVersion is not set to \"v1\". Got %v", string(encoded)) - } - decoded, err := runtime.Decode(v1Codec, encoded) - if err != nil { - t.Errorf("unexpected error: %v", err) - } - if !reflect.DeepEqual(status, decoded) { - t.Errorf("expected: %#v, got: %#v", status, decoded) - } -} - -func testEncodeDecodeStatus(t *testing.T, codec runtime.Codec) { - encoded, err := runtime.Encode(codec, status) - if err != nil { - t.Errorf("unexpected error: %v", err) - } - typeMeta := metav1.TypeMeta{} - if err := json.Unmarshal(encoded, &typeMeta); err != nil { - t.Errorf("unexpected error: %v", err) - } - if typeMeta.Kind != "Status" { - t.Errorf("Kind is not set to \"Status\". Got %s", encoded) - } - if typeMeta.APIVersion != "v1" { - t.Errorf("APIVersion is not set to \"\". Got %s", encoded) - } - decoded, err := runtime.Decode(codec, encoded) - if err != nil { - t.Errorf("unexpected error: %v", err) - } - if !reflect.DeepEqual(status, decoded) { - t.Errorf("expected: %v, got: %v", status, decoded) - } -} - -func TestAutoscalingEncodeDecodeStatus(t *testing.T) { - testEncodeDecodeStatus(t, Autoscaling.Codec()) -} - -func TestBatchEncodeDecodeStatus(t *testing.T) { - testEncodeDecodeStatus(t, Batch.Codec()) -} - -func TestExperimentalEncodeDecodeStatus(t *testing.T) { - testEncodeDecodeStatus(t, Extensions.Codec()) -} diff --git a/pkg/api/testing/BUILD b/pkg/api/testing/BUILD index 66a98efbe00..cf7b178e2e1 100644 --- a/pkg/api/testing/BUILD +++ b/pkg/api/testing/BUILD @@ -12,27 +12,51 @@ go_library( "conversion.go", "doc.go", "fuzzer.go", + "install.go", "pod_specs.go", ], importpath = "k8s.io/kubernetes/pkg/api/testing", deps = [ "//pkg/api/legacyscheme:go_default_library", + "//pkg/apis/admission/install:go_default_library", "//pkg/apis/admissionregistration/fuzzer:go_default_library", + "//pkg/apis/admissionregistration/install:go_default_library", "//pkg/apis/apps:go_default_library", "//pkg/apis/apps/fuzzer:go_default_library", + "//pkg/apis/apps/install:go_default_library", "//pkg/apis/auditregistration/fuzzer:go_default_library", + "//pkg/apis/auditregistration/install:go_default_library", + "//pkg/apis/authentication/install:go_default_library", + "//pkg/apis/authorization/install:go_default_library", "//pkg/apis/autoscaling/fuzzer:go_default_library", + "//pkg/apis/autoscaling/install:go_default_library", "//pkg/apis/batch/fuzzer:go_default_library", + "//pkg/apis/batch/install:go_default_library", "//pkg/apis/certificates/fuzzer:go_default_library", + "//pkg/apis/certificates/install:go_default_library", + "//pkg/apis/coordination/install:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/apis/core/fuzzer:go_default_library", + "//pkg/apis/core/install:go_default_library", "//pkg/apis/discovery/fuzzer:go_default_library", + "//pkg/apis/discovery/install:go_default_library", + "//pkg/apis/events/install:go_default_library", "//pkg/apis/extensions/fuzzer:go_default_library", + "//pkg/apis/extensions/install:go_default_library", + "//pkg/apis/flowcontrol/install:go_default_library", + "//pkg/apis/imagepolicy/install:go_default_library", "//pkg/apis/networking/fuzzer:go_default_library", + "//pkg/apis/networking/install:go_default_library", + "//pkg/apis/node/install:go_default_library", "//pkg/apis/policy/fuzzer:go_default_library", + "//pkg/apis/policy/install:go_default_library", "//pkg/apis/rbac/fuzzer:go_default_library", + "//pkg/apis/rbac/install:go_default_library", "//pkg/apis/scheduling/fuzzer:go_default_library", + "//pkg/apis/scheduling/install:go_default_library", + "//pkg/apis/settings/install:go_default_library", "//pkg/apis/storage/fuzzer:go_default_library", + "//pkg/apis/storage/install:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/apitesting:go_default_library", @@ -78,7 +102,6 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/api/legacyscheme:go_default_library", - "//pkg/api/testapi:go_default_library", "//pkg/api/testing/compat:go_default_library", "//pkg/apis/apps:go_default_library", "//pkg/apis/apps/v1:go_default_library", diff --git a/pkg/api/testing/conversion_test.go b/pkg/api/testing/conversion_test.go index 1064e050c8c..6dd3408cf54 100644 --- a/pkg/api/testing/conversion_test.go +++ b/pkg/api/testing/conversion_test.go @@ -21,13 +21,13 @@ import ( "math/rand" "testing" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/apitesting/fuzzer" apiequality "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/diff" "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/api/testapi" api "k8s.io/kubernetes/pkg/apis/core" ) @@ -63,7 +63,7 @@ func BenchmarkNodeConversion(b *testing.B) { b.Fatalf("Unexpected error while reading file: %v", err) } var node api.Node - if err := runtime.DecodeInto(testapi.Default.Codec(), data, &node); err != nil { + if err := runtime.DecodeInto(legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), data, &node); err != nil { b.Fatalf("Unexpected error decoding node: %v", err) } @@ -93,7 +93,7 @@ func BenchmarkReplicationControllerConversion(b *testing.B) { b.Fatalf("Unexpected error while reading file: %v", err) } var replicationController api.ReplicationController - if err := runtime.DecodeInto(testapi.Default.Codec(), data, &replicationController); err != nil { + if err := runtime.DecodeInto(legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), data, &replicationController); err != nil { b.Fatalf("Unexpected error decoding node: %v", err) } diff --git a/pkg/api/testing/deep_copy_test.go b/pkg/api/testing/deep_copy_test.go index b29b2f5a313..be6bdea61a9 100644 --- a/pkg/api/testing/deep_copy_test.go +++ b/pkg/api/testing/deep_copy_test.go @@ -21,11 +21,12 @@ import ( "testing" "time" + v1 "k8s.io/api/core/v1" apiequality "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/api/legacyscheme" api "k8s.io/kubernetes/pkg/apis/core" ) @@ -144,7 +145,7 @@ func BenchmarkNodeCopy(b *testing.B) { b.Fatalf("Unexpected error while reading file: %v", err) } var node api.Node - if err := runtime.DecodeInto(testapi.Default.Codec(), data, &node); err != nil { + if err := runtime.DecodeInto(legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), data, &node); err != nil { b.Fatalf("Unexpected error decoding node: %v", err) } @@ -163,7 +164,7 @@ func BenchmarkReplicationControllerCopy(b *testing.B) { b.Fatalf("Unexpected error while reading file: %v", err) } var replicationController api.ReplicationController - if err := runtime.DecodeInto(testapi.Default.Codec(), data, &replicationController); err != nil { + if err := runtime.DecodeInto(legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), data, &replicationController); err != nil { b.Fatalf("Unexpected error decoding node: %v", err) } diff --git a/pkg/api/testing/install.go b/pkg/api/testing/install.go new file mode 100644 index 00000000000..0e26f65bf22 --- /dev/null +++ b/pkg/api/testing/install.go @@ -0,0 +1,44 @@ +/* +Copyright 2019 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 testing + +import ( + // Initialize install packages + _ "k8s.io/kubernetes/pkg/apis/admission/install" + _ "k8s.io/kubernetes/pkg/apis/admissionregistration/install" + _ "k8s.io/kubernetes/pkg/apis/apps/install" + _ "k8s.io/kubernetes/pkg/apis/auditregistration/install" + _ "k8s.io/kubernetes/pkg/apis/authentication/install" + _ "k8s.io/kubernetes/pkg/apis/authorization/install" + _ "k8s.io/kubernetes/pkg/apis/autoscaling/install" + _ "k8s.io/kubernetes/pkg/apis/batch/install" + _ "k8s.io/kubernetes/pkg/apis/certificates/install" + _ "k8s.io/kubernetes/pkg/apis/coordination/install" + _ "k8s.io/kubernetes/pkg/apis/core/install" + _ "k8s.io/kubernetes/pkg/apis/discovery/install" + _ "k8s.io/kubernetes/pkg/apis/events/install" + _ "k8s.io/kubernetes/pkg/apis/extensions/install" + _ "k8s.io/kubernetes/pkg/apis/flowcontrol/install" + _ "k8s.io/kubernetes/pkg/apis/imagepolicy/install" + _ "k8s.io/kubernetes/pkg/apis/networking/install" + _ "k8s.io/kubernetes/pkg/apis/node/install" + _ "k8s.io/kubernetes/pkg/apis/policy/install" + _ "k8s.io/kubernetes/pkg/apis/rbac/install" + _ "k8s.io/kubernetes/pkg/apis/scheduling/install" + _ "k8s.io/kubernetes/pkg/apis/settings/install" + _ "k8s.io/kubernetes/pkg/apis/storage/install" +) diff --git a/pkg/api/testing/serialization_test.go b/pkg/api/testing/serialization_test.go index 5ad56a82e10..b3865203a21 100644 --- a/pkg/api/testing/serialization_test.go +++ b/pkg/api/testing/serialization_test.go @@ -42,7 +42,6 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/watch" "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/apis/apps" k8s_apps_v1 "k8s.io/kubernetes/pkg/apis/apps/v1" api "k8s.io/kubernetes/pkg/apis/core" @@ -173,9 +172,16 @@ var commonKinds = []string{"Status", "ListOptions", "DeleteOptions", "ExportOpti // TestCommonKindsRegistered verifies that all group/versions registered with // the testapi package have the common kinds. func TestCommonKindsRegistered(t *testing.T) { + gvs := map[schema.GroupVersion]bool{} + for gvk := range legacyscheme.Scheme.AllKnownTypes() { + if gvk.Version == runtime.APIVersionInternal { + continue + } + gvs[gvk.GroupVersion()] = true + } + for _, kind := range commonKinds { - for _, group := range testapi.Groups { - gv := group.GroupVersion() + for gv := range gvs { gvk := gv.WithKind(kind) obj, err := legacyscheme.Scheme.New(gvk) if err != nil { @@ -186,7 +192,7 @@ func TestCommonKindsRegistered(t *testing.T) { if obj, got, err = legacyscheme.Codecs.LegacyCodec().Decode([]byte(`{"kind":"`+kind+`"}`), &defaults, obj); err != nil || gvk != *got { t.Errorf("expected %v: %v %v", gvk, got, err) } - data, err := runtime.Encode(legacyscheme.Codecs.LegacyCodec(*gv), obj) + data, err := runtime.Encode(legacyscheme.Codecs.LegacyCodec(gv), obj) if err != nil { t.Errorf("expected %v: %v\n%s", gvk, err, string(data)) continue @@ -239,8 +245,8 @@ func TestEncodePtr(t *testing.T) { }, } obj := runtime.Object(pod) - data, err := runtime.Encode(testapi.Default.Codec(), obj) - obj2, err2 := runtime.Decode(testapi.Default.Codec(), data) + data, err := runtime.Encode(legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), obj) + obj2, err2 := runtime.Decode(legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), data) if err != nil || err2 != nil { t.Fatalf("Failure: '%v' '%v'", err, err2) } @@ -262,7 +268,7 @@ metadata: spec: containers: null status: {}`) - if obj, err := runtime.Decode(testapi.Default.Codec(), testYAML); err != nil { + if obj, err := runtime.Decode(legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), testYAML); err != nil { t.Fatalf("unable to decode yaml: %v", err) } else { if obj2, ok := obj.(*api.Pod); !ok { @@ -279,11 +285,11 @@ status: {}`) // an unknown kind will not be decoded without error. func TestBadJSONRejection(t *testing.T) { badJSONMissingKind := []byte(`{ }`) - if _, err := runtime.Decode(testapi.Default.Codec(), badJSONMissingKind); err == nil { + if _, err := runtime.Decode(legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), badJSONMissingKind); err == nil { t.Errorf("Did not reject despite lack of kind field: %s", badJSONMissingKind) } badJSONUnknownType := []byte(`{"kind": "bar"}`) - if _, err1 := runtime.Decode(testapi.Default.Codec(), badJSONUnknownType); err1 == nil { + if _, err1 := runtime.Decode(legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), badJSONUnknownType); err1 == nil { t.Errorf("Did not reject despite use of unknown type: %s", badJSONUnknownType) } /*badJSONKindMismatch := []byte(`{"kind": "Pod"}`) @@ -305,14 +311,14 @@ func TestUnversionedTypes(t *testing.T) { for _, obj := range testcases { // Make sure the unversioned codec can encode - unversionedJSON, err := runtime.Encode(testapi.Default.Codec(), obj) + unversionedJSON, err := runtime.Encode(legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), obj) if err != nil { t.Errorf("%v: unexpected error: %v", obj, err) continue } // Make sure the versioned codec under test can decode - versionDecodedObject, err := runtime.Decode(testapi.Default.Codec(), unversionedJSON) + versionDecodedObject, err := runtime.Decode(legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), unversionedJSON) if err != nil { t.Errorf("%v: unexpected error: %v", obj, err) continue @@ -454,7 +460,7 @@ func BenchmarkEncodeCodec(b *testing.B) { width := len(items) b.ResetTimer() for i := 0; i < b.N; i++ { - if _, err := runtime.Encode(testapi.Default.Codec(), &items[i%width]); err != nil { + if _, err := runtime.Encode(legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &items[i%width]); err != nil { b.Fatal(err) } } @@ -474,7 +480,7 @@ func BenchmarkEncodeCodecFromInternal(b *testing.B) { } b.ResetTimer() for i := 0; i < b.N; i++ { - if _, err := runtime.Encode(testapi.Default.Codec(), &encodable[i%width]); err != nil { + if _, err := runtime.Encode(legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &encodable[i%width]); err != nil { b.Fatal(err) } } @@ -495,7 +501,7 @@ func BenchmarkEncodeJSONMarshal(b *testing.B) { } func BenchmarkDecodeCodec(b *testing.B) { - codec := testapi.Default.Codec() + codec := legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion) items := benchmarkItems(b) width := len(items) encoded := make([][]byte, width) @@ -517,7 +523,7 @@ func BenchmarkDecodeCodec(b *testing.B) { } func BenchmarkDecodeIntoExternalCodec(b *testing.B) { - codec := testapi.Default.Codec() + codec := legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion) items := benchmarkItems(b) width := len(items) encoded := make([][]byte, width) @@ -540,7 +546,7 @@ func BenchmarkDecodeIntoExternalCodec(b *testing.B) { } func BenchmarkDecodeIntoInternalCodec(b *testing.B) { - codec := testapi.Default.Codec() + codec := legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion) items := benchmarkItems(b) width := len(items) encoded := make([][]byte, width) @@ -564,7 +570,7 @@ func BenchmarkDecodeIntoInternalCodec(b *testing.B) { // BenchmarkDecodeJSON provides a baseline for regular JSON decode performance func BenchmarkDecodeIntoJSON(b *testing.B) { - codec := testapi.Default.Codec() + codec := legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion) items := benchmarkItems(b) width := len(items) encoded := make([][]byte, width) @@ -589,7 +595,7 @@ func BenchmarkDecodeIntoJSON(b *testing.B) { // BenchmarkDecodeIntoJSONCodecGenConfigFast provides a baseline // for JSON decode performance with jsoniter.ConfigFast func BenchmarkDecodeIntoJSONCodecGenConfigFast(b *testing.B) { - kcodec := testapi.Default.Codec() + kcodec := legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion) items := benchmarkItems(b) width := len(items) encoded := make([][]byte, width) @@ -616,7 +622,7 @@ func BenchmarkDecodeIntoJSONCodecGenConfigFast(b *testing.B) { // jsoniter.ConfigCompatibleWithStandardLibrary, but with case sensitivity set // to true func BenchmarkDecodeIntoJSONCodecGenConfigCompatibleWithStandardLibrary(b *testing.B) { - kcodec := testapi.Default.Codec() + kcodec := legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion) items := benchmarkItems(b) width := len(items) encoded := make([][]byte, width) @@ -654,7 +660,7 @@ func BenchmarkEncodeYAMLMarshal(b *testing.B) { // BenchmarkDecodeYAML provides a baseline for regular YAML decode performance func BenchmarkDecodeIntoYAML(b *testing.B) { - codec := testapi.Default.Codec() + codec := legacyscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion) items := benchmarkItems(b) width := len(items) encoded := make([][]byte, width) diff --git a/pkg/api/testing/unstructured_test.go b/pkg/api/testing/unstructured_test.go index 922be30b54a..32d51183402 100644 --- a/pkg/api/testing/unstructured_test.go +++ b/pkg/api/testing/unstructured_test.go @@ -36,7 +36,6 @@ import ( "k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/json" "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/api/testapi" api "k8s.io/kubernetes/pkg/apis/core" ) @@ -120,55 +119,58 @@ func doRoundTrip(t *testing.T, internalVersion schema.GroupVersion, externalVers } func TestRoundTrip(t *testing.T) { - for groupKey, group := range testapi.Groups { - for kind := range legacyscheme.Scheme.KnownTypes(*group.GroupVersion()) { - if nonRoundTrippableTypes.Has(kind) { - continue - } - t.Logf("Testing: %v in %v", kind, groupKey) - for i := 0; i < 50; i++ { - doRoundTrip(t, schema.GroupVersion{Group: groupKey, Version: runtime.APIVersionInternal}, *group.GroupVersion(), kind) - if t.Failed() { - break - } + for gvk := range legacyscheme.Scheme.AllKnownTypes() { + if nonRoundTrippableTypes.Has(gvk.Kind) { + continue + } + if gvk.Version == runtime.APIVersionInternal { + continue + } + t.Logf("Testing: %v in %v", gvk.Kind, gvk.GroupVersion().String()) + for i := 0; i < 50; i++ { + doRoundTrip(t, schema.GroupVersion{Group: gvk.Group, Version: runtime.APIVersionInternal}, gvk.GroupVersion(), gvk.Kind) + if t.Failed() { + break } } } } func TestRoundTripWithEmptyCreationTimestamp(t *testing.T) { - for groupKey, group := range testapi.Groups { - for kind := range legacyscheme.Scheme.KnownTypes(*group.GroupVersion()) { - if nonRoundTrippableTypes.Has(kind) { - continue - } - item, err := legacyscheme.Scheme.New(group.GroupVersion().WithKind(kind)) - if err != nil { - t.Fatalf("Couldn't create external object %v: %v", kind, err) - } - t.Logf("Testing: %v in %v", kind, groupKey) + for gvk := range legacyscheme.Scheme.AllKnownTypes() { + if nonRoundTrippableTypes.Has(gvk.Kind) { + continue + } + if gvk.Version == runtime.APIVersionInternal { + continue + } - unstrBody, err := runtime.DefaultUnstructuredConverter.ToUnstructured(item) - if err != nil { - t.Fatalf("ToUnstructured failed: %v", err) - } + item, err := legacyscheme.Scheme.New(gvk) + if err != nil { + t.Fatalf("Couldn't create external object %v: %v", gvk, err) + } + t.Logf("Testing: %v in %v", gvk.Kind, gvk.GroupVersion().String()) - unstructObj := &metaunstruct.Unstructured{} - unstructObj.Object = unstrBody + unstrBody, err := runtime.DefaultUnstructuredConverter.ToUnstructured(item) + if err != nil { + t.Fatalf("ToUnstructured failed: %v", err) + } - if meta, err := meta.Accessor(unstructObj); err == nil { - meta.SetCreationTimestamp(metav1.Time{}) - } else { - t.Fatalf("Unable to set creation timestamp: %v", err) - } + unstructObj := &metaunstruct.Unstructured{} + unstructObj.Object = unstrBody - // attempt to re-convert unstructured object - conversion should not fail - // based on empty metadata fields, such as creationTimestamp - newObj := reflect.New(reflect.TypeOf(item).Elem()).Interface().(runtime.Object) - err = runtime.DefaultUnstructuredConverter.FromUnstructured(unstructObj.Object, newObj) - if err != nil { - t.Fatalf("FromUnstructured failed: %v", err) - } + if meta, err := meta.Accessor(unstructObj); err == nil { + meta.SetCreationTimestamp(metav1.Time{}) + } else { + t.Fatalf("Unable to set creation timestamp: %v", err) + } + + // attempt to re-convert unstructured object - conversion should not fail + // based on empty metadata fields, such as creationTimestamp + newObj := reflect.New(reflect.TypeOf(item).Elem()).Interface().(runtime.Object) + err = runtime.DefaultUnstructuredConverter.FromUnstructured(unstructObj.Object, newObj) + if err != nil { + t.Fatalf("FromUnstructured failed: %v", err) } } } diff --git a/pkg/apis/core/v1/BUILD b/pkg/apis/core/v1/BUILD index 53cdd374782..8543d8a01a0 100644 --- a/pkg/apis/core/v1/BUILD +++ b/pkg/apis/core/v1/BUILD @@ -41,10 +41,11 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/api/legacyscheme:go_default_library", - "//pkg/api/testapi:go_default_library", "//pkg/apis/apps:go_default_library", + "//pkg/apis/apps/install:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/apis/core/fuzzer:go_default_library", + "//pkg/apis/core/install:go_default_library", "//pkg/features:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", diff --git a/pkg/apis/core/v1/conversion_test.go b/pkg/apis/core/v1/conversion_test.go index aee9c2c8994..32a96754f2a 100644 --- a/pkg/apis/core/v1/conversion_test.go +++ b/pkg/apis/core/v1/conversion_test.go @@ -25,7 +25,7 @@ import ( "time" appsv1 "k8s.io/api/apps/v1" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/apitesting/fuzzer" apiequality "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/api/resource" @@ -40,8 +40,10 @@ import ( corev1 "k8s.io/kubernetes/pkg/apis/core/v1" utilpointer "k8s.io/utils/pointer" - // enforce that all types are installed - _ "k8s.io/kubernetes/pkg/api/testapi" + // ensure types are installed + _ "k8s.io/kubernetes/pkg/apis/core/install" + // ensure types are installed corereplicationcontroller<->replicaset conversions + _ "k8s.io/kubernetes/pkg/apis/apps/install" ) func TestPodLogOptions(t *testing.T) { diff --git a/pkg/apis/core/v1/defaults_test.go b/pkg/apis/core/v1/defaults_test.go index 4e0a9d93586..9761b67b17f 100644 --- a/pkg/apis/core/v1/defaults_test.go +++ b/pkg/apis/core/v1/defaults_test.go @@ -29,16 +29,15 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/intstr" - "k8s.io/kubernetes/pkg/api/legacyscheme" - corev1 "k8s.io/kubernetes/pkg/apis/core/v1" - utilpointer "k8s.io/utils/pointer" - - // enforce that all types are installed - _ "k8s.io/kubernetes/pkg/api/testapi" - utilfeature "k8s.io/apiserver/pkg/util/feature" featuregatetesting "k8s.io/component-base/featuregate/testing" + "k8s.io/kubernetes/pkg/api/legacyscheme" + corev1 "k8s.io/kubernetes/pkg/apis/core/v1" "k8s.io/kubernetes/pkg/features" + utilpointer "k8s.io/utils/pointer" + + // ensure types are installed + _ "k8s.io/kubernetes/pkg/apis/core/install" ) // TestWorkloadDefaults detects changes to defaults within PodTemplateSpec. diff --git a/pkg/apis/core/validation/BUILD b/pkg/apis/core/validation/BUILD index 2db631180e6..024c3632d9e 100644 --- a/pkg/apis/core/validation/BUILD +++ b/pkg/apis/core/validation/BUILD @@ -54,7 +54,6 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//pkg/api/testapi:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/capabilities:go_default_library", "//pkg/features:go_default_library", diff --git a/pkg/apis/core/validation/validation_test.go b/pkg/apis/core/validation/validation_test.go index f7b4377bda9..8ba68da00fe 100644 --- a/pkg/apis/core/validation/validation_test.go +++ b/pkg/apis/core/validation/validation_test.go @@ -32,7 +32,6 @@ import ( "k8s.io/apimachinery/pkg/util/validation/field" utilfeature "k8s.io/apiserver/pkg/util/feature" featuregatetesting "k8s.io/component-base/featuregate/testing" - _ "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/capabilities" "k8s.io/kubernetes/pkg/features" diff --git a/pkg/apis/scheduling/v1/BUILD b/pkg/apis/scheduling/v1/BUILD index 1624bb9802c..a3c74753cf7 100644 --- a/pkg/apis/scheduling/v1/BUILD +++ b/pkg/apis/scheduling/v1/BUILD @@ -49,8 +49,8 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/api/legacyscheme:go_default_library", - "//pkg/api/testapi:go_default_library", "//pkg/apis/scheduling:go_default_library", + "//pkg/apis/scheduling/install:go_default_library", "//pkg/features:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/scheduling/v1:go_default_library", diff --git a/pkg/apis/scheduling/v1/defaults_test.go b/pkg/apis/scheduling/v1/defaults_test.go index 129d069be5b..aa11406e759 100644 --- a/pkg/apis/scheduling/v1/defaults_test.go +++ b/pkg/apis/scheduling/v1/defaults_test.go @@ -20,16 +20,16 @@ import ( "reflect" "testing" - "k8s.io/api/scheduling/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/kubernetes/pkg/api/legacyscheme" - apiv1 "k8s.io/api/core/v1" + v1 "k8s.io/api/scheduling/v1" + "k8s.io/apimachinery/pkg/runtime" utilfeature "k8s.io/apiserver/pkg/util/feature" featuregatetesting "k8s.io/component-base/featuregate/testing" - // enforce that all types are installed - _ "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/features" + + // ensure types are installed + _ "k8s.io/kubernetes/pkg/apis/scheduling/install" ) func roundTrip(t *testing.T, obj runtime.Object) runtime.Object { diff --git a/pkg/apis/scheduling/v1alpha1/BUILD b/pkg/apis/scheduling/v1alpha1/BUILD index fb59ce663d6..7ea479b77b6 100644 --- a/pkg/apis/scheduling/v1alpha1/BUILD +++ b/pkg/apis/scheduling/v1alpha1/BUILD @@ -44,7 +44,7 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/api/legacyscheme:go_default_library", - "//pkg/api/testapi:go_default_library", + "//pkg/apis/scheduling/install:go_default_library", "//pkg/features:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/scheduling/v1alpha1:go_default_library", diff --git a/pkg/apis/scheduling/v1alpha1/defaults_test.go b/pkg/apis/scheduling/v1alpha1/defaults_test.go index 574b4645425..ce62c585977 100644 --- a/pkg/apis/scheduling/v1alpha1/defaults_test.go +++ b/pkg/apis/scheduling/v1alpha1/defaults_test.go @@ -20,16 +20,16 @@ import ( "reflect" "testing" + apiv1 "k8s.io/api/core/v1" "k8s.io/api/scheduling/v1alpha1" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/kubernetes/pkg/api/legacyscheme" - - apiv1 "k8s.io/api/core/v1" utilfeature "k8s.io/apiserver/pkg/util/feature" featuregatetesting "k8s.io/component-base/featuregate/testing" - // enforce that all types are installed - _ "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/features" + + // ensure types are installed + _ "k8s.io/kubernetes/pkg/apis/scheduling/install" ) func roundTrip(t *testing.T, obj runtime.Object) runtime.Object { diff --git a/pkg/apis/scheduling/v1beta1/BUILD b/pkg/apis/scheduling/v1beta1/BUILD index ac56ec19ad9..33eb9ed0bc0 100644 --- a/pkg/apis/scheduling/v1beta1/BUILD +++ b/pkg/apis/scheduling/v1beta1/BUILD @@ -44,7 +44,7 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/api/legacyscheme:go_default_library", - "//pkg/api/testapi:go_default_library", + "//pkg/apis/scheduling/install:go_default_library", "//pkg/features:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/scheduling/v1beta1:go_default_library", diff --git a/pkg/apis/scheduling/v1beta1/defaults_test.go b/pkg/apis/scheduling/v1beta1/defaults_test.go index f758a717eb2..d1166c141d3 100644 --- a/pkg/apis/scheduling/v1beta1/defaults_test.go +++ b/pkg/apis/scheduling/v1beta1/defaults_test.go @@ -20,16 +20,16 @@ import ( "reflect" "testing" + apiv1 "k8s.io/api/core/v1" "k8s.io/api/scheduling/v1beta1" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/kubernetes/pkg/api/legacyscheme" - - apiv1 "k8s.io/api/core/v1" utilfeature "k8s.io/apiserver/pkg/util/feature" featuregatetesting "k8s.io/component-base/featuregate/testing" - // enforce that all types are installed - _ "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/features" + + // ensure types are installed + _ "k8s.io/kubernetes/pkg/apis/scheduling/install" ) func roundTrip(t *testing.T, obj runtime.Object) runtime.Object { diff --git a/pkg/client/tests/BUILD b/pkg/client/tests/BUILD index 4f3d97737ce..4c3982b2864 100644 --- a/pkg/client/tests/BUILD +++ b/pkg/client/tests/BUILD @@ -17,7 +17,6 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/api/legacyscheme:go_default_library", - "//pkg/api/testapi:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/apis/core/install:go_default_library", "//pkg/kubelet/server/portforward:go_default_library", diff --git a/pkg/client/tests/listwatch_test.go b/pkg/client/tests/listwatch_test.go index 10d878199ff..40c1b9f8c4d 100644 --- a/pkg/client/tests/listwatch_test.go +++ b/pkg/client/tests/listwatch_test.go @@ -23,7 +23,7 @@ import ( "testing" "time" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/runtime" @@ -34,7 +34,6 @@ import ( . "k8s.io/client-go/tools/cache" watchtools "k8s.io/client-go/tools/watch" utiltesting "k8s.io/client-go/util/testing" - "k8s.io/kubernetes/pkg/api/testapi" ) func parseSelectorOrDie(s string) fields.Selector { @@ -71,7 +70,7 @@ func TestListWatchesCanList(t *testing.T) { }{ // Node { - location: testapi.Default.ResourcePath("nodes", metav1.NamespaceAll, ""), + location: "/api/v1/nodes", resource: "nodes", namespace: metav1.NamespaceAll, fieldSelector: parseSelectorOrDie(""), @@ -79,7 +78,7 @@ func TestListWatchesCanList(t *testing.T) { // pod with "assigned" field selector. { location: buildLocation( - testapi.Default.ResourcePath("pods", metav1.NamespaceAll, ""), + "/api/v1/pods", buildQueryValues(url.Values{fieldSelectorQueryParamName: []string{"spec.host="}})), resource: "pods", namespace: metav1.NamespaceAll, @@ -88,7 +87,7 @@ func TestListWatchesCanList(t *testing.T) { // pod in namespace "foo" { location: buildLocation( - testapi.Default.ResourcePath("pods", "foo", ""), + "/api/v1/namespaces/foo/pods", buildQueryValues(url.Values{fieldSelectorQueryParamName: []string{"spec.host="}})), resource: "pods", namespace: "foo", @@ -124,7 +123,7 @@ func TestListWatchesCanWatch(t *testing.T) { // Node { location: buildLocation( - testapi.Default.ResourcePath("nodes", metav1.NamespaceAll, ""), + "/api/v1/nodes", buildQueryValues(url.Values{"watch": []string{"true"}})), rv: "", resource: "nodes", @@ -133,7 +132,7 @@ func TestListWatchesCanWatch(t *testing.T) { }, { location: buildLocation( - testapi.Default.ResourcePath("nodes", metav1.NamespaceAll, ""), + "/api/v1/nodes", buildQueryValues(url.Values{"resourceVersion": []string{"42"}, "watch": []string{"true"}})), rv: "42", resource: "nodes", @@ -143,7 +142,7 @@ func TestListWatchesCanWatch(t *testing.T) { // pod with "assigned" field selector. { location: buildLocation( - testapi.Default.ResourcePath("pods", metav1.NamespaceAll, ""), + "/api/v1/pods", buildQueryValues(url.Values{fieldSelectorQueryParamName: []string{"spec.host="}, "resourceVersion": []string{"0"}, "watch": []string{"true"}})), rv: "0", resource: "pods", @@ -153,7 +152,7 @@ func TestListWatchesCanWatch(t *testing.T) { // pod with namespace foo and assigned field selector { location: buildLocation( - testapi.Default.ResourcePath("pods", "foo", ""), + "/api/v1/namespaces/foo/pods", buildQueryValues(url.Values{fieldSelectorQueryParamName: []string{"spec.host="}, "resourceVersion": []string{"0"}, "watch": []string{"true"}})), rv: "0", resource: "pods", diff --git a/pkg/controller/BUILD b/pkg/controller/BUILD index 445672cd963..f447f4c4e5a 100644 --- a/pkg/controller/BUILD +++ b/pkg/controller/BUILD @@ -14,7 +14,6 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//pkg/api/testapi:go_default_library", "//pkg/apis/core/install:go_default_library", "//pkg/controller/testutil:go_default_library", "//pkg/securitycontext:go_default_library", @@ -31,6 +30,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", diff --git a/pkg/controller/controller_utils_test.go b/pkg/controller/controller_utils_test.go index 837a10b22a8..4ede69f007c 100644 --- a/pkg/controller/controller_utils_test.go +++ b/pkg/controller/controller_utils_test.go @@ -28,7 +28,7 @@ import ( "time" apps "k8s.io/api/apps/v1" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" apiequality "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -38,11 +38,11 @@ import ( "k8s.io/apimachinery/pkg/util/uuid" clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/fake" + clientscheme "k8s.io/client-go/kubernetes/scheme" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" utiltesting "k8s.io/client-go/util/testing" - "k8s.io/kubernetes/pkg/api/testapi" _ "k8s.io/kubernetes/pkg/apis/core/install" "k8s.io/kubernetes/pkg/controller/testutil" "k8s.io/kubernetes/pkg/securitycontext" @@ -279,7 +279,7 @@ func TestUIDExpectations(t *testing.T) { func TestCreatePods(t *testing.T) { ns := metav1.NamespaceDefault - body := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "empty_pod"}}) + body := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "empty_pod"}}) fakeHandler := utiltesting.FakeHandler{ StatusCode: 200, ResponseBody: string(body), @@ -306,7 +306,7 @@ func TestCreatePods(t *testing.T) { }, Spec: controllerSpec.Spec.Template.Spec, } - fakeHandler.ValidateRequest(t, testapi.Default.ResourcePath("pods", metav1.NamespaceDefault, ""), "POST", nil) + fakeHandler.ValidateRequest(t, "/api/v1/namespaces/default/pods", "POST", nil) var actualPod = &v1.Pod{} err = json.Unmarshal([]byte(fakeHandler.RequestBody), actualPod) assert.NoError(t, err, "unexpected error: %v", err) diff --git a/pkg/controller/endpoint/BUILD b/pkg/controller/endpoint/BUILD index f4fc32b463f..75574933d9e 100644 --- a/pkg/controller/endpoint/BUILD +++ b/pkg/controller/endpoint/BUILD @@ -45,7 +45,6 @@ go_test( srcs = ["endpoints_controller_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/api/testapi:go_default_library", "//pkg/api/v1/endpoints:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/controller:go_default_library", @@ -61,6 +60,7 @@ go_test( "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/util/testing:go_default_library", diff --git a/pkg/controller/endpoint/endpoints_controller_test.go b/pkg/controller/endpoint/endpoints_controller_test.go index cd6fcc95387..80270b1f604 100644 --- a/pkg/controller/endpoint/endpoints_controller_test.go +++ b/pkg/controller/endpoint/endpoints_controller_test.go @@ -35,11 +35,11 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/informers" clientset "k8s.io/client-go/kubernetes" + clientscheme "k8s.io/client-go/kubernetes/scheme" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" utiltesting "k8s.io/client-go/util/testing" featuregatetesting "k8s.io/component-base/featuregate/testing" - "k8s.io/kubernetes/pkg/api/testapi" endptspkg "k8s.io/kubernetes/pkg/api/v1/endpoints" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/controller" @@ -139,11 +139,14 @@ func addNotReadyPodsWithSpecifiedRestartPolicyAndPhase(store cache.Store, namesp func makeTestServer(t *testing.T, namespace string) (*httptest.Server, *utiltesting.FakeHandler) { fakeEndpointsHandler := utiltesting.FakeHandler{ StatusCode: http.StatusOK, - ResponseBody: runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{}), + ResponseBody: runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{}), } mux := http.NewServeMux() - mux.Handle(testapi.Default.ResourcePath("endpoints", namespace, ""), &fakeEndpointsHandler) - mux.Handle(testapi.Default.ResourcePath("endpoints/", namespace, ""), &fakeEndpointsHandler) + if namespace == "" { + t.Fatal("namespace cannot be empty") + } + mux.Handle("/api/v1/namespaces/"+namespace+"/endpoints", &fakeEndpointsHandler) + mux.Handle("/api/v1/namespaces/"+namespace+"/endpoints/", &fakeEndpointsHandler) mux.HandleFunc("/", func(res http.ResponseWriter, req *http.Request) { t.Errorf("unexpected request: %v", req.RequestURI) http.Error(res, "", http.StatusNotFound) @@ -315,7 +318,7 @@ func TestSyncEndpointsProtocolTCP(t *testing.T) { endpoints.syncService(ns + "/foo") endpointsHandler.ValidateRequestCount(t, 1) - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", Namespace: ns, @@ -329,7 +332,7 @@ func TestSyncEndpointsProtocolTCP(t *testing.T) { Ports: []v1.EndpointPort{{Port: 8080, Protocol: "TCP"}}, }}, }) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, "foo"), "PUT", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints/foo", "PUT", &data) } func TestSyncEndpointsProtocolUDP(t *testing.T) { @@ -359,7 +362,7 @@ func TestSyncEndpointsProtocolUDP(t *testing.T) { endpoints.syncService(ns + "/foo") endpointsHandler.ValidateRequestCount(t, 1) - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", Namespace: ns, @@ -373,7 +376,7 @@ func TestSyncEndpointsProtocolUDP(t *testing.T) { Ports: []v1.EndpointPort{{Port: 8080, Protocol: "UDP"}}, }}, }) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, "foo"), "PUT", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints/foo", "PUT", &data) } func TestSyncEndpointsProtocolSCTP(t *testing.T) { @@ -403,7 +406,7 @@ func TestSyncEndpointsProtocolSCTP(t *testing.T) { endpoints.syncService(ns + "/foo") endpointsHandler.ValidateRequestCount(t, 1) - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", Namespace: ns, @@ -417,7 +420,7 @@ func TestSyncEndpointsProtocolSCTP(t *testing.T) { Ports: []v1.EndpointPort{{Port: 8080, Protocol: "SCTP"}}, }}, }) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, "foo"), "PUT", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints/foo", "PUT", &data) } func TestSyncEndpointsItemsEmptySelectorSelectsAll(t *testing.T) { @@ -443,7 +446,7 @@ func TestSyncEndpointsItemsEmptySelectorSelectsAll(t *testing.T) { }) endpoints.syncService(ns + "/foo") - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", Namespace: ns, @@ -457,7 +460,7 @@ func TestSyncEndpointsItemsEmptySelectorSelectsAll(t *testing.T) { Ports: []v1.EndpointPort{{Port: 8080, Protocol: "TCP"}}, }}, }) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, "foo"), "PUT", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints/foo", "PUT", &data) } func TestSyncEndpointsItemsEmptySelectorSelectsAllNotReady(t *testing.T) { @@ -483,7 +486,7 @@ func TestSyncEndpointsItemsEmptySelectorSelectsAllNotReady(t *testing.T) { }) endpoints.syncService(ns + "/foo") - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", Namespace: ns, @@ -497,7 +500,7 @@ func TestSyncEndpointsItemsEmptySelectorSelectsAllNotReady(t *testing.T) { Ports: []v1.EndpointPort{{Port: 8080, Protocol: "TCP"}}, }}, }) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, "foo"), "PUT", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints/foo", "PUT", &data) } func TestSyncEndpointsItemsEmptySelectorSelectsAllMixed(t *testing.T) { @@ -523,7 +526,7 @@ func TestSyncEndpointsItemsEmptySelectorSelectsAllMixed(t *testing.T) { }) endpoints.syncService(ns + "/foo") - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", Namespace: ns, @@ -538,7 +541,7 @@ func TestSyncEndpointsItemsEmptySelectorSelectsAllMixed(t *testing.T) { Ports: []v1.EndpointPort{{Port: 8080, Protocol: "TCP"}}, }}, }) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, "foo"), "PUT", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints/foo", "PUT", &data) } func TestSyncEndpointsItemsPreexisting(t *testing.T) { @@ -567,7 +570,7 @@ func TestSyncEndpointsItemsPreexisting(t *testing.T) { }) endpoints.syncService(ns + "/foo") - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", Namespace: ns, @@ -581,7 +584,7 @@ func TestSyncEndpointsItemsPreexisting(t *testing.T) { Ports: []v1.EndpointPort{{Port: 8080, Protocol: "TCP"}}, }}, }) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, "foo"), "PUT", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints/foo", "PUT", &data) } func TestSyncEndpointsItemsPreexistingIdentical(t *testing.T) { @@ -643,7 +646,7 @@ func TestSyncEndpointsItems(t *testing.T) { {Name: "port1", Port: 8088, Protocol: "TCP"}, }, }} - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ ResourceVersion: "", Name: "foo", @@ -654,7 +657,7 @@ func TestSyncEndpointsItems(t *testing.T) { Subsets: endptspkg.SortSubsets(expectedSubsets), }) endpointsHandler.ValidateRequestCount(t, 1) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, ""), "POST", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints", "POST", &data) } func TestSyncEndpointsItemsWithLabels(t *testing.T) { @@ -693,7 +696,7 @@ func TestSyncEndpointsItemsWithLabels(t *testing.T) { }} serviceLabels[v1.IsHeadlessService] = "" - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ ResourceVersion: "", Name: "foo", @@ -702,7 +705,7 @@ func TestSyncEndpointsItemsWithLabels(t *testing.T) { Subsets: endptspkg.SortSubsets(expectedSubsets), }) endpointsHandler.ValidateRequestCount(t, 1) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, ""), "POST", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints", "POST", &data) } func TestSyncEndpointsItemsPreexistingLabelsChange(t *testing.T) { @@ -740,7 +743,7 @@ func TestSyncEndpointsItemsPreexistingLabelsChange(t *testing.T) { endpoints.syncService(ns + "/foo") serviceLabels[v1.IsHeadlessService] = "" - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", Namespace: ns, @@ -752,7 +755,7 @@ func TestSyncEndpointsItemsPreexistingLabelsChange(t *testing.T) { Ports: []v1.EndpointPort{{Port: 8080, Protocol: "TCP"}}, }}, }) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, "foo"), "PUT", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints/foo", "PUT", &data) } func TestWaitsForAllInformersToBeSynced2(t *testing.T) { @@ -838,7 +841,7 @@ func TestSyncEndpointsHeadlessService(t *testing.T) { originalService := service.DeepCopy() endpoints.serviceStore.Add(service) endpoints.syncService(ns + "/foo") - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", Namespace: ns, @@ -857,7 +860,7 @@ func TestSyncEndpointsHeadlessService(t *testing.T) { t.Fatalf("syncing endpoints changed service: %s", diff.ObjectReflectDiff(service, originalService)) } endpointsHandler.ValidateRequestCount(t, 1) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, "foo"), "PUT", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints/foo", "PUT", &data) } func TestSyncEndpointsItemsExcludeNotReadyPodsWithRestartPolicyNeverAndPhaseFailed(t *testing.T) { @@ -885,7 +888,7 @@ func TestSyncEndpointsItemsExcludeNotReadyPodsWithRestartPolicyNeverAndPhaseFail }, }) endpoints.syncService(ns + "/foo") - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", Namespace: ns, @@ -896,7 +899,7 @@ func TestSyncEndpointsItemsExcludeNotReadyPodsWithRestartPolicyNeverAndPhaseFail }, Subsets: []v1.EndpointSubset{}, }) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, "foo"), "PUT", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints/foo", "PUT", &data) } func TestSyncEndpointsItemsExcludeNotReadyPodsWithRestartPolicyNeverAndPhaseSucceeded(t *testing.T) { @@ -924,7 +927,7 @@ func TestSyncEndpointsItemsExcludeNotReadyPodsWithRestartPolicyNeverAndPhaseSucc }, }) endpoints.syncService(ns + "/foo") - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", Namespace: ns, @@ -935,7 +938,7 @@ func TestSyncEndpointsItemsExcludeNotReadyPodsWithRestartPolicyNeverAndPhaseSucc }, Subsets: []v1.EndpointSubset{}, }) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, "foo"), "PUT", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints/foo", "PUT", &data) } func TestSyncEndpointsItemsExcludeNotReadyPodsWithRestartPolicyOnFailureAndPhaseSucceeded(t *testing.T) { @@ -963,7 +966,7 @@ func TestSyncEndpointsItemsExcludeNotReadyPodsWithRestartPolicyOnFailureAndPhase }, }) endpoints.syncService(ns + "/foo") - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", Namespace: ns, @@ -974,7 +977,7 @@ func TestSyncEndpointsItemsExcludeNotReadyPodsWithRestartPolicyOnFailureAndPhase }, Subsets: []v1.EndpointSubset{}, }) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, "foo"), "PUT", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints/foo", "PUT", &data) } func TestSyncEndpointsHeadlessWithoutPort(t *testing.T) { @@ -993,7 +996,7 @@ func TestSyncEndpointsHeadlessWithoutPort(t *testing.T) { addPods(endpoints.podStore, ns, 1, 1, 0, false) endpoints.syncService(ns + "/foo") endpointsHandler.ValidateRequestCount(t, 1) - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", Labels: map[string]string{ @@ -1005,7 +1008,7 @@ func TestSyncEndpointsHeadlessWithoutPort(t *testing.T) { Ports: nil, }}, }) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, ""), "POST", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints", "POST", &data) } // There are 3*5 possibilities(3 types of RestartPolicy by 5 types of PodPhase). Not list them all here. @@ -1424,7 +1427,7 @@ func TestLastTriggerChangeTimeAnnotation(t *testing.T) { endpoints.syncService(ns + "/foo") endpointsHandler.ValidateRequestCount(t, 1) - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", Namespace: ns, @@ -1441,7 +1444,7 @@ func TestLastTriggerChangeTimeAnnotation(t *testing.T) { Ports: []v1.EndpointPort{{Port: 8080, Protocol: "TCP"}}, }}, }) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, "foo"), "PUT", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints/foo", "PUT", &data) } func TestLastTriggerChangeTimeAnnotation_AnnotationOverridden(t *testing.T) { @@ -1474,7 +1477,7 @@ func TestLastTriggerChangeTimeAnnotation_AnnotationOverridden(t *testing.T) { endpoints.syncService(ns + "/foo") endpointsHandler.ValidateRequestCount(t, 1) - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", Namespace: ns, @@ -1491,7 +1494,7 @@ func TestLastTriggerChangeTimeAnnotation_AnnotationOverridden(t *testing.T) { Ports: []v1.EndpointPort{{Port: 8080, Protocol: "TCP"}}, }}, }) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, "foo"), "PUT", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints/foo", "PUT", &data) } func TestLastTriggerChangeTimeAnnotation_AnnotationCleared(t *testing.T) { @@ -1525,7 +1528,7 @@ func TestLastTriggerChangeTimeAnnotation_AnnotationCleared(t *testing.T) { endpoints.syncService(ns + "/foo") endpointsHandler.ValidateRequestCount(t, 1) - data := runtime.EncodeOrDie(testapi.Default.Codec(), &v1.Endpoints{ + data := runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &v1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", Namespace: ns, @@ -1539,7 +1542,7 @@ func TestLastTriggerChangeTimeAnnotation_AnnotationCleared(t *testing.T) { Ports: []v1.EndpointPort{{Port: 8080, Protocol: "TCP"}}, }}, }) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, "foo"), "PUT", &data) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints/foo", "PUT", &data) } // TestPodUpdatesBatching verifies that endpoint updates caused by pod updates are batched together. @@ -1941,7 +1944,7 @@ func TestSyncEndpointsServiceNotFound(t *testing.T) { }) endpoints.syncService(ns + "/foo") endpointsHandler.ValidateRequestCount(t, 1) - endpointsHandler.ValidateRequest(t, testapi.Default.ResourcePath("endpoints", ns, "foo"), "DELETE", nil) + endpointsHandler.ValidateRequest(t, "/api/v1/namespaces/"+ns+"/endpoints/foo", "DELETE", nil) } func podChangedHelper(oldPod, newPod *v1.Pod, endpointChanged endpointutil.EndpointsMatch) bool { diff --git a/pkg/controller/history/BUILD b/pkg/controller/history/BUILD index 0a385e679df..8dc1b62907a 100644 --- a/pkg/controller/history/BUILD +++ b/pkg/controller/history/BUILD @@ -12,7 +12,6 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/api/legacyscheme:go_default_library", - "//pkg/api/testapi:go_default_library", "//pkg/controller:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -25,6 +24,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", "//staging/src/k8s.io/client-go/testing:go_default_library", ], ) diff --git a/pkg/controller/history/controller_history_test.go b/pkg/controller/history/controller_history_test.go index dcf6bb609eb..c513d616055 100644 --- a/pkg/controller/history/controller_history_test.go +++ b/pkg/controller/history/controller_history_test.go @@ -27,8 +27,8 @@ import ( "k8s.io/api/core/v1" "k8s.io/client-go/informers" "k8s.io/client-go/kubernetes/fake" + clientscheme "k8s.io/client-go/kubernetes/scheme" "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/controller" "k8s.io/apimachinery/pkg/api/errors" @@ -968,12 +968,12 @@ func TestRealHistory_AdoptControllerRevision(t *testing.T) { return true, nil, errors.NewNotFound(apps.Resource("controllerrevisions"), test.revision.Name) } b, err := strategicpatch.StrategicMergePatch( - []byte(runtime.EncodeOrDie(testapi.Apps.Codec(), test.revision)), + []byte(runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(apps.SchemeGroupVersion), test.revision)), action.GetPatch(), test.revision) if err != nil { return true, nil, err } - obj, err := runtime.Decode(testapi.Apps.Codec(), b) + obj, err := runtime.Decode(clientscheme.Codecs.LegacyCodec(apps.SchemeGroupVersion), b) if err != nil { return true, nil, err } @@ -1219,12 +1219,12 @@ func TestRealHistory_ReleaseControllerRevision(t *testing.T) { test.revision.GroupVersionKind().GroupKind(), test.revision.Name, nil) } b, err := strategicpatch.StrategicMergePatch( - []byte(runtime.EncodeOrDie(testapi.Apps.Codec(), test.revision)), + []byte(runtime.EncodeOrDie(clientscheme.Codecs.LegacyCodec(apps.SchemeGroupVersion), test.revision)), action.GetPatch(), test.revision) if err != nil { return true, nil, err } - obj, err := runtime.Decode(testapi.Apps.Codec(), b) + obj, err := runtime.Decode(clientscheme.Codecs.LegacyCodec(apps.SchemeGroupVersion), b) if err != nil { return true, nil, err } diff --git a/pkg/controller/service/BUILD b/pkg/controller/service/BUILD index a262265ff77..1e5097cd826 100644 --- a/pkg/controller/service/BUILD +++ b/pkg/controller/service/BUILD @@ -42,7 +42,6 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//pkg/api/testapi:go_default_library", "//pkg/controller:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", diff --git a/pkg/controller/service/controller_test.go b/pkg/controller/service/controller_test.go index 55ca8dde47f..c061063f9a2 100644 --- a/pkg/controller/service/controller_test.go +++ b/pkg/controller/service/controller_test.go @@ -41,7 +41,6 @@ import ( fakecloud "k8s.io/cloud-provider/fake" servicehelper "k8s.io/cloud-provider/service/helpers" featuregatetesting "k8s.io/component-base/featuregate/testing" - "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/controller" ) @@ -53,7 +52,7 @@ func newService(name string, uid types.UID, serviceType v1.ServiceType) *v1.Serv Name: name, Namespace: "default", UID: uid, - SelfLink: testapi.Default.SelfLink("services", name), + SelfLink: "/api/v1/namespaces/default/services/" + name, }, Spec: v1.ServiceSpec{ Type: serviceType, @@ -145,7 +144,7 @@ func TestSyncLoadBalancerIfNeeded(t *testing.T) { ObjectMeta: metav1.ObjectMeta{ Name: "udp-service", Namespace: "default", - SelfLink: testapi.Default.SelfLink("services", "udp-service"), + SelfLink: "/api/v1/namespaces/default/services/udp-service", }, Spec: v1.ServiceSpec{ Ports: []v1.ServicePort{{ @@ -166,7 +165,7 @@ func TestSyncLoadBalancerIfNeeded(t *testing.T) { ObjectMeta: metav1.ObjectMeta{ Name: "basic-service1", Namespace: "default", - SelfLink: testapi.Default.SelfLink("services", "basic-service1"), + SelfLink: "/api/v1/namespaces/default/services/basic-service1", }, Spec: v1.ServiceSpec{ Ports: []v1.ServicePort{{ @@ -187,7 +186,7 @@ func TestSyncLoadBalancerIfNeeded(t *testing.T) { ObjectMeta: metav1.ObjectMeta{ Name: "sctp-service", Namespace: "default", - SelfLink: testapi.Default.SelfLink("services", "sctp-service"), + SelfLink: "/api/v1/namespaces/default/services/sctp-service", }, Spec: v1.ServiceSpec{ Ports: []v1.ServicePort{{ @@ -234,7 +233,7 @@ func TestSyncLoadBalancerIfNeeded(t *testing.T) { ObjectMeta: metav1.ObjectMeta{ Name: "basic-service1", Namespace: "default", - SelfLink: testapi.Default.SelfLink("services", "basic-service1"), + SelfLink: "/api/v1/namespaces/default/services/basic-service1", DeletionTimestamp: &metav1.Time{ Time: time.Now(), }, @@ -267,7 +266,7 @@ func TestSyncLoadBalancerIfNeeded(t *testing.T) { ObjectMeta: metav1.ObjectMeta{ Name: "basic-service1", Namespace: "default", - SelfLink: testapi.Default.SelfLink("services", "basic-service1"), + SelfLink: "/api/v1/namespaces/default/services/basic-service1", }, Spec: v1.ServiceSpec{ Ports: []v1.ServicePort{{ @@ -288,7 +287,7 @@ func TestSyncLoadBalancerIfNeeded(t *testing.T) { ObjectMeta: metav1.ObjectMeta{ Name: "basic-service1", Namespace: "default", - SelfLink: testapi.Default.SelfLink("services", "basic-service1"), + SelfLink: "/api/v1/namespaces/default/services/basic-service1", Finalizers: []string{servicehelper.LoadBalancerCleanupFinalizer}, }, Spec: v1.ServiceSpec{ diff --git a/pkg/controller/volume/persistentvolume/BUILD b/pkg/controller/volume/persistentvolume/BUILD index 96442c698f3..7cd45a02ed7 100644 --- a/pkg/controller/volume/persistentvolume/BUILD +++ b/pkg/controller/volume/persistentvolume/BUILD @@ -74,7 +74,6 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//pkg/api/testapi:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/volume/persistentvolume/testing:go_default_library", diff --git a/pkg/controller/volume/persistentvolume/framework_test.go b/pkg/controller/volume/persistentvolume/framework_test.go index fd6c57591fe..05e8af3e005 100644 --- a/pkg/controller/volume/persistentvolume/framework_test.go +++ b/pkg/controller/volume/persistentvolume/framework_test.go @@ -40,7 +40,6 @@ import ( storagelisters "k8s.io/client-go/listers/storage/v1" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" - "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/controller" pvtesting "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/testing" pvutil "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/util" @@ -375,7 +374,7 @@ func newClaim(name, claimUID, capacity, boundToVolume string, phase v1.Persisten }, } // Make sure ref.GetReference(claim) works - claim.ObjectMeta.SelfLink = testapi.Default.SelfLink("pvc", name) + claim.ObjectMeta.SelfLink = "/api/v1/namespaces/" + testNamespace + "/persistentvolumeclaims/" + name if len(annotations) > 0 { claim.Annotations = make(map[string]string) diff --git a/pkg/controller/volume/persistentvolume/index_test.go b/pkg/controller/volume/persistentvolume/index_test.go index 848ed6655f0..8a24c67876f 100644 --- a/pkg/controller/volume/persistentvolume/index_test.go +++ b/pkg/controller/volume/persistentvolume/index_test.go @@ -27,7 +27,6 @@ import ( "k8s.io/client-go/kubernetes/scheme" ref "k8s.io/client-go/tools/reference" featuregatetesting "k8s.io/component-base/featuregate/testing" - "k8s.io/kubernetes/pkg/api/testapi" pvutil "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/util" "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/volume/util" @@ -1396,7 +1395,7 @@ func TestFindingPreboundVolumes(t *testing.T) { ObjectMeta: metav1.ObjectMeta{ Name: "claim01", Namespace: "myns", - SelfLink: testapi.Default.SelfLink("pvc", ""), + SelfLink: "/api/v1/namespaces/myns/persistentvolumeclaims/claim01", }, Spec: v1.PersistentVolumeClaimSpec{ AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, diff --git a/pkg/controller/volume/scheduling/BUILD b/pkg/controller/volume/scheduling/BUILD index 32affc54ccc..59f4a3558bd 100644 --- a/pkg/controller/volume/scheduling/BUILD +++ b/pkg/controller/volume/scheduling/BUILD @@ -45,7 +45,6 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//pkg/api/testapi:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/volume/persistentvolume/testing:go_default_library", "//pkg/controller/volume/persistentvolume/util:go_default_library", diff --git a/pkg/controller/volume/scheduling/scheduler_binder_test.go b/pkg/controller/volume/scheduling/scheduler_binder_test.go index f47f47232cc..457a5cd0c80 100644 --- a/pkg/controller/volume/scheduling/scheduler_binder_test.go +++ b/pkg/controller/volume/scheduling/scheduler_binder_test.go @@ -40,7 +40,6 @@ import ( k8stesting "k8s.io/client-go/testing" featuregatetesting "k8s.io/component-base/featuregate/testing" "k8s.io/klog" - "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/controller" pvtesting "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/testing" pvutil "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/util" @@ -562,7 +561,7 @@ func makeTestPVC(name, size, node string, pvcBoundState int, pvName, resourceVer Namespace: "testns", UID: types.UID("pvc-uid"), ResourceVersion: resourceVersion, - SelfLink: testapi.Default.SelfLink("pvc", name), + SelfLink: "/api/v1/namespaces/testns/persistentvolumeclaims/" + name, }, Spec: v1.PersistentVolumeClaimSpec{ Resources: v1.ResourceRequirements{ diff --git a/pkg/kubelet/config/BUILD b/pkg/kubelet/config/BUILD index c3d577a4ded..25595bd3e9b 100644 --- a/pkg/kubelet/config/BUILD +++ b/pkg/kubelet/config/BUILD @@ -72,7 +72,6 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/api/legacyscheme:go_default_library", - "//pkg/api/testapi:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/apis/core/v1:go_default_library", "//pkg/apis/core/validation:go_default_library", diff --git a/pkg/kubelet/config/common_test.go b/pkg/kubelet/config/common_test.go index 2328a29698f..c220a14e504 100644 --- a/pkg/kubelet/config/common_test.go +++ b/pkg/kubelet/config/common_test.go @@ -26,8 +26,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" + clientscheme "k8s.io/client-go/kubernetes/scheme" "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/core/validation" "k8s.io/kubernetes/pkg/securitycontext" @@ -72,7 +72,7 @@ func TestDecodeSinglePod(t *testing.T) { }, }, } - json, err := runtime.Encode(testapi.Default.Codec(), pod) + json, err := runtime.Encode(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), pod) if err != nil { t.Errorf("unexpected error: %v", err) } @@ -148,7 +148,7 @@ func TestDecodePodList(t *testing.T) { podList := &v1.PodList{ Items: []v1.Pod{*pod}, } - json, err := runtime.Encode(testapi.Default.Codec(), podList) + json, err := runtime.Encode(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), podList) if err != nil { t.Errorf("unexpected error: %v", err) } diff --git a/pkg/kubelet/config/file_linux_test.go b/pkg/kubelet/config/file_linux_test.go index 773718b85ac..ee9f1517b75 100644 --- a/pkg/kubelet/config/file_linux_test.go +++ b/pkg/kubelet/config/file_linux_test.go @@ -33,7 +33,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/kubernetes/pkg/api/testapi" + clientscheme "k8s.io/client-go/kubernetes/scheme" api "k8s.io/kubernetes/pkg/apis/core" k8s_api_v1 "k8s.io/kubernetes/pkg/apis/core/v1" "k8s.io/kubernetes/pkg/apis/core/validation" @@ -199,7 +199,7 @@ func getTestCases(hostname types.NodeName) []*testCase { } func (tc *testCase) writeToFile(dir, name string, t *testing.T) string { - fileContents, err := runtime.Encode(testapi.Default.Codec(), tc.pod) + fileContents, err := runtime.Encode(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), tc.pod) if err != nil { t.Fatalf("%s: error in encoding the pod: %v", tc.desc, err) } diff --git a/pkg/kubelet/config/http_test.go b/pkg/kubelet/config/http_test.go index 5b75b5d850d..398dbc8e679 100644 --- a/pkg/kubelet/config/http_test.go +++ b/pkg/kubelet/config/http_test.go @@ -28,8 +28,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" + clientscheme "k8s.io/client-go/kubernetes/scheme" utiltesting "k8s.io/client-go/util/testing" - "k8s.io/kubernetes/pkg/api/testapi" api "k8s.io/kubernetes/pkg/apis/core" k8s_api_v1 "k8s.io/kubernetes/pkg/apis/core/v1" "k8s.io/kubernetes/pkg/apis/core/validation" @@ -292,7 +292,7 @@ func TestExtractPodsFromHTTP(t *testing.T) { } for _, testCase := range testCases { - data, err := runtime.Encode(testapi.Default.Codec(), testCase.pods) + data, err := runtime.Encode(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), testCase.pods) if err != nil { t.Fatalf("%s: error in encoding the pod: %v", testCase.desc, err) } diff --git a/pkg/master/BUILD b/pkg/master/BUILD index 8352c992662..f8441369f07 100644 --- a/pkg/master/BUILD +++ b/pkg/master/BUILD @@ -149,7 +149,6 @@ go_test( race = "off", deps = [ "//pkg/api/legacyscheme:go_default_library", - "//pkg/api/testapi:go_default_library", "//pkg/apis/batch:go_default_library", "//pkg/apis/networking:go_default_library", "//pkg/apis/storage:go_default_library", diff --git a/pkg/master/master_test.go b/pkg/master/master_test.go index 4b144946187..9829cbb8f23 100644 --- a/pkg/master/master_test.go +++ b/pkg/master/master_test.go @@ -48,7 +48,6 @@ import ( restclient "k8s.io/client-go/rest" kubeversion "k8s.io/component-base/version" "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/apis/batch" "k8s.io/kubernetes/pkg/apis/networking" apisstorage "k8s.io/kubernetes/pkg/apis/storage" @@ -86,7 +85,7 @@ func setUp(t *testing.T) (*etcd3testing.EtcdTestServer, Config, *assert.Assertio networking.Resource("ingresses").WithVersion("v1beta1"), } resourceEncoding = resourceconfig.MergeResourceEncodingConfigs(resourceEncoding, resourceEncodingOverrides) - storageFactory := serverstorage.NewDefaultStorageFactory(*storageConfig, testapi.StorageMediaType(), legacyscheme.Codecs, resourceEncoding, DefaultAPIResourceConfigSource(), nil) + storageFactory := serverstorage.NewDefaultStorageFactory(*storageConfig, "application/vnd.kubernetes.protobuf", legacyscheme.Codecs, resourceEncoding, DefaultAPIResourceConfigSource(), nil) etcdOptions := options.NewEtcdOptions(storageConfig) // unit tests don't need watch cache and it leaks lots of goroutines with etcd testing functions during unit tests diff --git a/pkg/registry/core/event/BUILD b/pkg/registry/core/event/BUILD index e001271d41c..7306c1ad42e 100644 --- a/pkg/registry/core/event/BUILD +++ b/pkg/registry/core/event/BUILD @@ -33,9 +33,9 @@ go_test( srcs = ["strategy_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/api/testapi:go_default_library", "//pkg/api/testing:go_default_library", "//pkg/apis/core:go_default_library", + "//pkg/apis/core/install:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", diff --git a/pkg/registry/core/event/strategy_test.go b/pkg/registry/core/event/strategy_test.go index 62031ec6649..639257c713f 100644 --- a/pkg/registry/core/event/strategy_test.go +++ b/pkg/registry/core/event/strategy_test.go @@ -26,8 +26,8 @@ import ( apitesting "k8s.io/kubernetes/pkg/api/testing" api "k8s.io/kubernetes/pkg/apis/core" - // install all api groups for testing - _ "k8s.io/kubernetes/pkg/api/testapi" + // ensure types are installed + _ "k8s.io/kubernetes/pkg/apis/core/install" ) func TestGetAttrs(t *testing.T) { diff --git a/pkg/registry/core/limitrange/storage/BUILD b/pkg/registry/core/limitrange/storage/BUILD index c8fe6aa9eeb..bb26c966448 100644 --- a/pkg/registry/core/limitrange/storage/BUILD +++ b/pkg/registry/core/limitrange/storage/BUILD @@ -12,6 +12,7 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/apis/core:go_default_library", + "//pkg/apis/core/install:go_default_library", "//pkg/registry/registrytest:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/pkg/registry/core/limitrange/storage/storage_test.go b/pkg/registry/core/limitrange/storage/storage_test.go index 7a4fedede2c..3bbcad7f5e3 100644 --- a/pkg/registry/core/limitrange/storage/storage_test.go +++ b/pkg/registry/core/limitrange/storage/storage_test.go @@ -28,6 +28,7 @@ import ( genericregistrytest "k8s.io/apiserver/pkg/registry/generic/testing" etcd3testing "k8s.io/apiserver/pkg/storage/etcd3/testing" api "k8s.io/kubernetes/pkg/apis/core" + _ "k8s.io/kubernetes/pkg/apis/core/install" "k8s.io/kubernetes/pkg/registry/registrytest" ) diff --git a/pkg/registry/core/namespace/BUILD b/pkg/registry/core/namespace/BUILD index 7f6f7deb66e..91f138f146b 100644 --- a/pkg/registry/core/namespace/BUILD +++ b/pkg/registry/core/namespace/BUILD @@ -32,9 +32,9 @@ go_test( srcs = ["strategy_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/api/testapi:go_default_library", "//pkg/api/testing:go_default_library", "//pkg/apis/core:go_default_library", + "//pkg/apis/core/install:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", ], diff --git a/pkg/registry/core/namespace/strategy_test.go b/pkg/registry/core/namespace/strategy_test.go index 45982ad686b..767077f5b1a 100644 --- a/pkg/registry/core/namespace/strategy_test.go +++ b/pkg/registry/core/namespace/strategy_test.go @@ -24,8 +24,8 @@ import ( apitesting "k8s.io/kubernetes/pkg/api/testing" api "k8s.io/kubernetes/pkg/apis/core" - // install all api groups for testing - _ "k8s.io/kubernetes/pkg/api/testapi" + // ensure types are installed + _ "k8s.io/kubernetes/pkg/apis/core/install" ) func TestNamespaceStrategy(t *testing.T) { diff --git a/pkg/registry/core/node/BUILD b/pkg/registry/core/node/BUILD index c2e8d0eb5d1..d12439d40c0 100644 --- a/pkg/registry/core/node/BUILD +++ b/pkg/registry/core/node/BUILD @@ -40,9 +40,9 @@ go_test( srcs = ["strategy_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/api/testapi:go_default_library", "//pkg/api/testing:go_default_library", "//pkg/apis/core:go_default_library", + "//pkg/apis/core/install:go_default_library", "//pkg/features:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", diff --git a/pkg/registry/core/node/strategy_test.go b/pkg/registry/core/node/strategy_test.go index 80dc00eee8e..198ea59b183 100644 --- a/pkg/registry/core/node/strategy_test.go +++ b/pkg/registry/core/node/strategy_test.go @@ -23,15 +23,14 @@ import ( "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/util/diff" - apitesting "k8s.io/kubernetes/pkg/api/testing" - api "k8s.io/kubernetes/pkg/apis/core" - utilfeature "k8s.io/apiserver/pkg/util/feature" featuregatetesting "k8s.io/component-base/featuregate/testing" + apitesting "k8s.io/kubernetes/pkg/api/testing" + api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/features" - // install all api groups for testing - _ "k8s.io/kubernetes/pkg/api/testapi" + // ensure types are installed + _ "k8s.io/kubernetes/pkg/apis/core/install" ) func TestMatchNode(t *testing.T) { diff --git a/pkg/registry/core/persistentvolume/BUILD b/pkg/registry/core/persistentvolume/BUILD index b66a2a98418..2369e2ce8c4 100644 --- a/pkg/registry/core/persistentvolume/BUILD +++ b/pkg/registry/core/persistentvolume/BUILD @@ -34,9 +34,9 @@ go_test( srcs = ["strategy_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/api/testapi:go_default_library", "//pkg/api/testing:go_default_library", "//pkg/apis/core:go_default_library", + "//pkg/apis/core/install:go_default_library", ], ) diff --git a/pkg/registry/core/persistentvolume/strategy_test.go b/pkg/registry/core/persistentvolume/strategy_test.go index 91d95db68f1..3aac0d1612a 100644 --- a/pkg/registry/core/persistentvolume/strategy_test.go +++ b/pkg/registry/core/persistentvolume/strategy_test.go @@ -22,8 +22,8 @@ import ( apitesting "k8s.io/kubernetes/pkg/api/testing" api "k8s.io/kubernetes/pkg/apis/core" - // install all api groups for testing - _ "k8s.io/kubernetes/pkg/api/testapi" + // ensure types are installed + _ "k8s.io/kubernetes/pkg/apis/core/install" ) func TestSelectableFieldLabelConversions(t *testing.T) { diff --git a/pkg/registry/core/persistentvolumeclaim/BUILD b/pkg/registry/core/persistentvolumeclaim/BUILD index f2f5b03e925..08052378aba 100644 --- a/pkg/registry/core/persistentvolumeclaim/BUILD +++ b/pkg/registry/core/persistentvolumeclaim/BUILD @@ -35,9 +35,9 @@ go_test( srcs = ["strategy_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/api/testapi:go_default_library", "//pkg/api/testing:go_default_library", "//pkg/apis/core:go_default_library", + "//pkg/apis/core/install:go_default_library", "//pkg/features:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", diff --git a/pkg/registry/core/persistentvolumeclaim/strategy_test.go b/pkg/registry/core/persistentvolumeclaim/strategy_test.go index 863079f47b9..7dd07bcd42e 100644 --- a/pkg/registry/core/persistentvolumeclaim/strategy_test.go +++ b/pkg/registry/core/persistentvolumeclaim/strategy_test.go @@ -29,8 +29,8 @@ import ( api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/features" - // install all api groups for testing - _ "k8s.io/kubernetes/pkg/api/testapi" + // ensure types are installed + _ "k8s.io/kubernetes/pkg/apis/core/install" ) func TestSelectableFieldLabelConversions(t *testing.T) { diff --git a/pkg/registry/core/pod/BUILD b/pkg/registry/core/pod/BUILD index fcbd93c06ba..3bffa38009e 100644 --- a/pkg/registry/core/pod/BUILD +++ b/pkg/registry/core/pod/BUILD @@ -42,9 +42,9 @@ go_test( srcs = ["strategy_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/api/testapi:go_default_library", "//pkg/api/testing:go_default_library", "//pkg/apis/core:go_default_library", + "//pkg/apis/core/install:go_default_library", "//pkg/kubelet/client:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", diff --git a/pkg/registry/core/pod/rest/BUILD b/pkg/registry/core/pod/rest/BUILD index b55a736e764..e61a2ff13cf 100644 --- a/pkg/registry/core/pod/rest/BUILD +++ b/pkg/registry/core/pod/rest/BUILD @@ -15,6 +15,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/registry/core/pod/rest", deps = [ "//pkg/apis/core:go_default_library", + "//pkg/apis/core/install:go_default_library", "//pkg/apis/core/validation:go_default_library", "//pkg/capabilities:go_default_library", "//pkg/features:go_default_library", diff --git a/pkg/registry/core/pod/rest/log.go b/pkg/registry/core/pod/rest/log.go index c7fb99b79c3..d4d43750ff1 100644 --- a/pkg/registry/core/pod/rest/log.go +++ b/pkg/registry/core/pod/rest/log.go @@ -27,6 +27,7 @@ import ( "k8s.io/apiserver/pkg/registry/rest" utilfeature "k8s.io/apiserver/pkg/util/feature" api "k8s.io/kubernetes/pkg/apis/core" + _ "k8s.io/kubernetes/pkg/apis/core/install" "k8s.io/kubernetes/pkg/apis/core/validation" "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/kubelet/client" diff --git a/pkg/registry/core/pod/strategy_test.go b/pkg/registry/core/pod/strategy_test.go index f6ccd9c3acd..39d94bd7667 100644 --- a/pkg/registry/core/pod/strategy_test.go +++ b/pkg/registry/core/pod/strategy_test.go @@ -35,8 +35,8 @@ import ( api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/kubelet/client" - // install all api groups for testing - _ "k8s.io/kubernetes/pkg/api/testapi" + // ensure types are installed + _ "k8s.io/kubernetes/pkg/apis/core/install" ) func TestMatchPod(t *testing.T) { diff --git a/pkg/registry/core/replicationcontroller/BUILD b/pkg/registry/core/replicationcontroller/BUILD index cfc09d1b4d9..1586a9a18d8 100644 --- a/pkg/registry/core/replicationcontroller/BUILD +++ b/pkg/registry/core/replicationcontroller/BUILD @@ -39,9 +39,9 @@ go_test( srcs = ["strategy_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/api/testapi:go_default_library", "//pkg/api/testing:go_default_library", "//pkg/apis/core:go_default_library", + "//pkg/apis/core/install:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", ], diff --git a/pkg/registry/core/replicationcontroller/strategy_test.go b/pkg/registry/core/replicationcontroller/strategy_test.go index 36867ceb6f8..252def3201a 100644 --- a/pkg/registry/core/replicationcontroller/strategy_test.go +++ b/pkg/registry/core/replicationcontroller/strategy_test.go @@ -25,8 +25,8 @@ import ( apitesting "k8s.io/kubernetes/pkg/api/testing" api "k8s.io/kubernetes/pkg/apis/core" - // install all api groups for testing - _ "k8s.io/kubernetes/pkg/api/testapi" + // ensure types are installed + _ "k8s.io/kubernetes/pkg/apis/core/install" ) func TestControllerStrategy(t *testing.T) { diff --git a/pkg/registry/core/secret/BUILD b/pkg/registry/core/secret/BUILD index dcf68c9b754..4c88ba54abd 100644 --- a/pkg/registry/core/secret/BUILD +++ b/pkg/registry/core/secret/BUILD @@ -34,9 +34,9 @@ go_test( srcs = ["strategy_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/api/testapi:go_default_library", "//pkg/api/testing:go_default_library", "//pkg/apis/core:go_default_library", + "//pkg/apis/core/install:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", diff --git a/pkg/registry/core/secret/strategy_test.go b/pkg/registry/core/secret/strategy_test.go index f54d5e295aa..d942e26f130 100644 --- a/pkg/registry/core/secret/strategy_test.go +++ b/pkg/registry/core/secret/strategy_test.go @@ -26,8 +26,8 @@ import ( apitesting "k8s.io/kubernetes/pkg/api/testing" api "k8s.io/kubernetes/pkg/apis/core" - // install all api groups for testing - _ "k8s.io/kubernetes/pkg/api/testapi" + // ensure types are installed + _ "k8s.io/kubernetes/pkg/apis/core/install" ) func TestExportSecret(t *testing.T) { diff --git a/pkg/registry/core/service/allocator/storage/BUILD b/pkg/registry/core/service/allocator/storage/BUILD index fcc0b313ecf..49eadbe9ad1 100644 --- a/pkg/registry/core/service/allocator/storage/BUILD +++ b/pkg/registry/core/service/allocator/storage/BUILD @@ -25,6 +25,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/registry/core/service/allocator/storage", deps = [ "//pkg/apis/core:go_default_library", + "//pkg/apis/core/install:go_default_library", "//pkg/registry/core/rangeallocation:go_default_library", "//pkg/registry/core/service/allocator:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", diff --git a/pkg/registry/core/service/allocator/storage/storage.go b/pkg/registry/core/service/allocator/storage/storage.go index 2af9ecd355c..dfa2231fe3e 100644 --- a/pkg/registry/core/service/allocator/storage/storage.go +++ b/pkg/registry/core/service/allocator/storage/storage.go @@ -31,6 +31,7 @@ import ( storeerr "k8s.io/apiserver/pkg/storage/errors" "k8s.io/apiserver/pkg/storage/storagebackend" api "k8s.io/kubernetes/pkg/apis/core" + _ "k8s.io/kubernetes/pkg/apis/core/install" "k8s.io/kubernetes/pkg/registry/core/rangeallocation" "k8s.io/kubernetes/pkg/registry/core/service/allocator" ) diff --git a/pkg/registry/core/service/ipallocator/storage/BUILD b/pkg/registry/core/service/ipallocator/storage/BUILD index 1596e2e9567..3614155d1c1 100644 --- a/pkg/registry/core/service/ipallocator/storage/BUILD +++ b/pkg/registry/core/service/ipallocator/storage/BUILD @@ -12,6 +12,7 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/apis/core:go_default_library", + "//pkg/apis/core/install:go_default_library", "//pkg/registry/core/service/allocator:go_default_library", "//pkg/registry/core/service/allocator/storage:go_default_library", "//pkg/registry/core/service/ipallocator:go_default_library", diff --git a/pkg/registry/core/service/ipallocator/storage/storage_test.go b/pkg/registry/core/service/ipallocator/storage/storage_test.go index defbb8e3cdb..763680d81c1 100644 --- a/pkg/registry/core/service/ipallocator/storage/storage_test.go +++ b/pkg/registry/core/service/ipallocator/storage/storage_test.go @@ -27,6 +27,7 @@ import ( etcd3testing "k8s.io/apiserver/pkg/storage/etcd3/testing" "k8s.io/apiserver/pkg/storage/storagebackend/factory" api "k8s.io/kubernetes/pkg/apis/core" + _ "k8s.io/kubernetes/pkg/apis/core/install" "k8s.io/kubernetes/pkg/registry/core/service/allocator" allocatorstore "k8s.io/kubernetes/pkg/registry/core/service/allocator/storage" "k8s.io/kubernetes/pkg/registry/core/service/ipallocator" diff --git a/pkg/registry/networking/ingress/storage/BUILD b/pkg/registry/networking/ingress/storage/BUILD index 6b5ea3fa4b4..ae7e9787afe 100644 --- a/pkg/registry/networking/ingress/storage/BUILD +++ b/pkg/registry/networking/ingress/storage/BUILD @@ -12,7 +12,9 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/apis/core:go_default_library", + "//pkg/apis/extensions/install:go_default_library", "//pkg/apis/networking:go_default_library", + "//pkg/apis/networking/install:go_default_library", "//pkg/registry/registrytest:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", diff --git a/pkg/registry/networking/ingress/storage/storage_test.go b/pkg/registry/networking/ingress/storage/storage_test.go index 79483b09767..45be3041a8f 100644 --- a/pkg/registry/networking/ingress/storage/storage_test.go +++ b/pkg/registry/networking/ingress/storage/storage_test.go @@ -28,7 +28,9 @@ import ( genericregistrytest "k8s.io/apiserver/pkg/registry/generic/testing" etcd3testing "k8s.io/apiserver/pkg/storage/etcd3/testing" api "k8s.io/kubernetes/pkg/apis/core" + _ "k8s.io/kubernetes/pkg/apis/extensions/install" "k8s.io/kubernetes/pkg/apis/networking" + _ "k8s.io/kubernetes/pkg/apis/networking/install" "k8s.io/kubernetes/pkg/registry/registrytest" ) diff --git a/pkg/registry/networking/networkpolicy/storage/BUILD b/pkg/registry/networking/networkpolicy/storage/BUILD index cf47993d70b..6191ff89c54 100644 --- a/pkg/registry/networking/networkpolicy/storage/BUILD +++ b/pkg/registry/networking/networkpolicy/storage/BUILD @@ -43,6 +43,7 @@ go_test( deps = [ "//pkg/apis/core:go_default_library", "//pkg/apis/networking:go_default_library", + "//pkg/apis/networking/install:go_default_library", "//pkg/registry/registrytest:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", diff --git a/pkg/registry/networking/networkpolicy/storage/storage_test.go b/pkg/registry/networking/networkpolicy/storage/storage_test.go index e1dea17e585..611f8db8905 100644 --- a/pkg/registry/networking/networkpolicy/storage/storage_test.go +++ b/pkg/registry/networking/networkpolicy/storage/storage_test.go @@ -29,6 +29,7 @@ import ( etcd3testing "k8s.io/apiserver/pkg/storage/etcd3/testing" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/networking" + _ "k8s.io/kubernetes/pkg/apis/networking/install" "k8s.io/kubernetes/pkg/registry/registrytest" ) diff --git a/pkg/registry/registrytest/BUILD b/pkg/registry/registrytest/BUILD index 46f75f277bd..2c2e1a75073 100644 --- a/pkg/registry/registrytest/BUILD +++ b/pkg/registry/registrytest/BUILD @@ -19,7 +19,6 @@ go_library( ], importpath = "k8s.io/kubernetes/pkg/registry/registrytest", deps = [ - "//pkg/api/testapi:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/kubeapiserver:go_default_library", "//pkg/util/slice:go_default_library", diff --git a/pkg/registry/registrytest/etcd.go b/pkg/registry/registrytest/etcd.go index 07be8cd6d4a..7a512e99ece 100644 --- a/pkg/registry/registrytest/etcd.go +++ b/pkg/registry/registrytest/etcd.go @@ -24,14 +24,11 @@ import ( serverstorage "k8s.io/apiserver/pkg/server/storage" etcd3testing "k8s.io/apiserver/pkg/storage/etcd3/testing" "k8s.io/apiserver/pkg/storage/storagebackend" - "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/kubeapiserver" ) func NewEtcdStorage(t *testing.T, group string) (*storagebackend.Config, *etcd3testing.EtcdTestServer) { - server, config := etcd3testing.NewUnsecuredEtcd3TestClientServer(t) - config.Codec = testapi.Groups[group].StorageCodec() - return config, server + return NewEtcdStorageForResource(t, schema.GroupResource{Group: group, Resource: "any"}) } func NewEtcdStorageForResource(t *testing.T, resource schema.GroupResource) (*storagebackend.Config, *etcd3testing.EtcdTestServer) { diff --git a/pkg/registry/settings/podpreset/storage/BUILD b/pkg/registry/settings/podpreset/storage/BUILD index 44ea87a357b..eddc3e03bb0 100644 --- a/pkg/registry/settings/podpreset/storage/BUILD +++ b/pkg/registry/settings/podpreset/storage/BUILD @@ -39,6 +39,7 @@ go_test( deps = [ "//pkg/apis/core:go_default_library", "//pkg/apis/settings:go_default_library", + "//pkg/apis/settings/install:go_default_library", "//pkg/registry/registrytest:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", diff --git a/pkg/registry/settings/podpreset/storage/storage_test.go b/pkg/registry/settings/podpreset/storage/storage_test.go index b15cc84c0b7..04d372f6573 100644 --- a/pkg/registry/settings/podpreset/storage/storage_test.go +++ b/pkg/registry/settings/podpreset/storage/storage_test.go @@ -28,6 +28,7 @@ import ( etcd3testing "k8s.io/apiserver/pkg/storage/etcd3/testing" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/settings" + _ "k8s.io/kubernetes/pkg/apis/settings/install" "k8s.io/kubernetes/pkg/registry/registrytest" ) diff --git a/staging/src/k8s.io/apimachinery/pkg/test/runtime_unversioned_test.go b/staging/src/k8s.io/apimachinery/pkg/test/runtime_unversioned_test.go index 4fa920650d9..fc8c1764802 100644 --- a/staging/src/k8s.io/apimachinery/pkg/test/runtime_unversioned_test.go +++ b/staging/src/k8s.io/apimachinery/pkg/test/runtime_unversioned_test.go @@ -70,8 +70,6 @@ func TestExperimentalEncodeDecodeStatus(t *testing.T) { Reason: metav1.StatusReasonUnknown, Message: "", } - // TODO: caesarxuchao: use the testapi.Extensions.Codec() once the PR that - // moves experimental from v1 to v1beta1 got merged. _, codecs := TestScheme() expCodec := apitesting.TestCodec(codecs, schema.GroupVersion{Group: "", Version: runtime.APIVersionInternal}) diff --git a/test/integration/apimachinery/BUILD b/test/integration/apimachinery/BUILD index f74b9041378..33318cc0765 100644 --- a/test/integration/apimachinery/BUILD +++ b/test/integration/apimachinery/BUILD @@ -11,7 +11,6 @@ go_test( "integration", ], deps = [ - "//pkg/api/testapi:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", diff --git a/test/integration/apimachinery/watch_restart_test.go b/test/integration/apimachinery/watch_restart_test.go index 6878c704e1f..4c08e5d7c94 100644 --- a/test/integration/apimachinery/watch_restart_test.go +++ b/test/integration/apimachinery/watch_restart_test.go @@ -34,7 +34,6 @@ import ( restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" watchtools "k8s.io/client-go/tools/watch" - "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/test/integration/framework" ) @@ -75,8 +74,7 @@ func TestWatchRestartsIfTimeoutNotReached(t *testing.T) { defer closeFn() config := &restclient.Config{ - Host: s.URL, - ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Groups[corev1.GroupName].GroupVersion()}, + Host: s.URL, } namespaceObject := framework.CreateTestingNamespace("retry-watch", s, t) diff --git a/test/integration/auth/BUILD b/test/integration/auth/BUILD index 3b32efe33c6..f97b600dada 100644 --- a/test/integration/auth/BUILD +++ b/test/integration/auth/BUILD @@ -24,7 +24,6 @@ go_test( "//cmd/kube-apiserver/app/options:go_default_library", "//cmd/kube-apiserver/app/testing:go_default_library", "//pkg/api/legacyscheme:go_default_library", - "//pkg/api/testapi:go_default_library", "//pkg/apis/autoscaling:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/apis/extensions:go_default_library", diff --git a/test/integration/auth/accessreview_test.go b/test/integration/auth/accessreview_test.go index 5fd56a0f0a3..55fc9b2afc6 100644 --- a/test/integration/auth/accessreview_test.go +++ b/test/integration/auth/accessreview_test.go @@ -30,7 +30,6 @@ import ( "k8s.io/apiserver/pkg/authorization/authorizer" clientset "k8s.io/client-go/kubernetes" restclient "k8s.io/client-go/rest" - "k8s.io/kubernetes/pkg/api/testapi" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/test/integration/framework" ) @@ -62,7 +61,7 @@ func TestSubjectAccessReview(t *testing.T) { _, s, closeFn := framework.RunAMaster(masterConfig) defer closeFn() - clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Groups[api.GroupName].GroupVersion()}}) + clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: s.URL}) tests := []struct { name string @@ -157,7 +156,7 @@ func TestSelfSubjectAccessReview(t *testing.T) { _, s, closeFn := framework.RunAMaster(masterConfig) defer closeFn() - clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Groups[api.GroupName].GroupVersion()}}) + clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: s.URL}) tests := []struct { name string @@ -236,7 +235,7 @@ func TestLocalSubjectAccessReview(t *testing.T) { _, s, closeFn := framework.RunAMaster(masterConfig) defer closeFn() - clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Groups[api.GroupName].GroupVersion()}}) + clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: s.URL}) tests := []struct { name string diff --git a/test/integration/auth/auth_test.go b/test/integration/auth/auth_test.go index 852c2228b69..da3e85e78aa 100644 --- a/test/integration/auth/auth_test.go +++ b/test/integration/auth/auth_test.go @@ -47,8 +47,7 @@ import ( "k8s.io/apiserver/pkg/authorization/authorizerfactory" "k8s.io/apiserver/plugin/pkg/authenticator/token/tokentest" "k8s.io/apiserver/plugin/pkg/authenticator/token/webhook" - "k8s.io/client-go/tools/clientcmd/api/v1" - "k8s.io/kubernetes/pkg/api/testapi" + v1 "k8s.io/client-go/tools/clientcmd/api/v1" "k8s.io/kubernetes/pkg/apis/autoscaling" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/extensions" @@ -94,26 +93,45 @@ func getTestWebhookTokenAuth(serverURL string) (authenticator.Request, error) { } func path(resource, namespace, name string) string { - return testapi.Default.ResourcePath(resource, namespace, name) + return pathWithPrefix("", resource, namespace, name) } func pathWithPrefix(prefix, resource, namespace, name string) string { - return testapi.Default.ResourcePathWithPrefix(prefix, resource, namespace, name) + path := "/api/v1" + if prefix != "" { + path = path + "/" + prefix + } + if namespace != "" { + path = path + "/namespaces/" + namespace + } + // Resource names are lower case. + resource = strings.ToLower(resource) + if resource != "" { + path = path + "/" + resource + } + if name != "" { + path = path + "/" + name + } + return path } func pathWithSubResource(resource, namespace, name, subresource string) string { - return testapi.Default.SubResourcePath(resource, namespace, name, subresource) + path := pathWithPrefix("", resource, namespace, name) + if subresource != "" { + path = path + "/" + subresource + } + return path } func timeoutPath(resource, namespace, name string) string { - return addTimeoutFlag(testapi.Default.ResourcePath(resource, namespace, name)) + return addTimeoutFlag(path(resource, namespace, name)) } // Bodies for requests used in subsequent tests. var aPod = ` { "kind": "Pod", - "apiVersion": "` + testapi.Groups[api.GroupName].GroupVersion().String() + `", + "apiVersion": "v1", "metadata": { "name": "a", "creationTimestamp": null%s @@ -131,7 +149,7 @@ var aPod = ` var aRC = ` { "kind": "ReplicationController", - "apiVersion": "` + testapi.Groups[api.GroupName].GroupVersion().String() + `", + "apiVersion": "v1", "metadata": { "name": "a", "labels": { @@ -164,7 +182,7 @@ var aRC = ` var aService = ` { "kind": "Service", - "apiVersion": "` + testapi.Groups[api.GroupName].GroupVersion().String() + `", + "apiVersion": "v1", "metadata": { "name": "a", "labels": { @@ -188,7 +206,7 @@ var aService = ` var aNode = ` { "kind": "Node", - "apiVersion": "` + testapi.Groups[api.GroupName].GroupVersion().String() + `", + "apiVersion": "v1", "metadata": { "name": "a"%s }, @@ -202,7 +220,7 @@ func aEvent(namespace string) string { return ` { "kind": "Event", - "apiVersion": "` + testapi.Groups[api.GroupName].GroupVersion().String() + `", + "apiVersion": "v1", "metadata": { "name": "a"%s }, @@ -219,7 +237,7 @@ func aEvent(namespace string) string { var aBinding = ` { "kind": "Binding", - "apiVersion": "` + testapi.Groups[api.GroupName].GroupVersion().String() + `", + "apiVersion": "v1", "metadata": { "name": "a"%s }, @@ -242,7 +260,7 @@ var emptyEndpoints = ` var aEndpoints = ` { "kind": "Endpoints", - "apiVersion": "` + testapi.Groups[api.GroupName].GroupVersion().String() + `", + "apiVersion": "v1", "metadata": { "name": "a"%s }, @@ -267,7 +285,7 @@ var aEndpoints = ` var deleteNow = ` { "kind": "DeleteOptions", - "apiVersion": "` + testapi.Groups[api.GroupName].GroupVersion().String() + `", + "apiVersion": "v1", "gracePeriodSeconds": 0%s } ` diff --git a/test/integration/auth/rbac_test.go b/test/integration/auth/rbac_test.go index b8600ef969b..da7461fb920 100644 --- a/test/integration/auth/rbac_test.go +++ b/test/integration/auth/rbac_test.go @@ -23,12 +23,12 @@ import ( "io/ioutil" "net/http" "net/http/httputil" + gopath "path" "reflect" "strings" "testing" "time" - api "k8s.io/api/core/v1" rbacapi "k8s.io/api/rbac/v1" apiextensionsclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -49,7 +49,6 @@ import ( featuregatetesting "k8s.io/component-base/featuregate/testing" "k8s.io/klog" "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/api/testapi" rbachelper "k8s.io/kubernetes/pkg/apis/rbac/v1" "k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/pkg/registry/rbac/clusterrole" @@ -193,12 +192,9 @@ func (s statusCode) String() string { // Declare a set of raw objects to use. var ( - // Make a role binding with the version enabled in testapi.Rbac - // This assumes testapi is using rbac.authorization.k8s.io/v1beta1 or rbac.authorization.k8s.io/v1, which are identical in structure. - // TODO: rework or remove testapi usage to allow writing integration tests that don't depend on envvars writeJobsRoleBinding = ` { - "apiVersion": "` + testapi.Rbac.GroupVersion().String() + `", + "apiVersion": "rbac.authorization.k8s.io/v1", "kind": "RoleBinding", "metadata": { "name": "pi"%s @@ -260,7 +256,7 @@ var ( ` podNamespace = ` { - "apiVersion": "` + testapi.Groups[api.GroupName].GroupVersion().String() + `", + "apiVersion": "v1", "kind": "Namespace", "metadata": { "name": "pod-namespace"%s @@ -269,7 +265,7 @@ var ( ` jobNamespace = ` { - "apiVersion": "` + testapi.Groups[api.GroupName].GroupVersion().String() + `", + "apiVersion": "v1", "kind": "Namespace", "metadata": { "name": "job-namespace"%s @@ -278,7 +274,7 @@ var ( ` forbiddenNamespace = ` { - "apiVersion": "` + testapi.Groups[api.GroupName].GroupVersion().String() + `", + "apiVersion": "v1", "kind": "Namespace", "metadata": { "name": "forbidden-namespace"%s @@ -287,7 +283,7 @@ var ( ` limitRangeNamespace = ` { - "apiVersion": "` + testapi.Groups[api.GroupName].GroupVersion().String() + `", + "apiVersion": "v1", "kind": "Namespace", "metadata": { "name": "limitrange-namespace"%s @@ -560,12 +556,21 @@ func TestRBAC(t *testing.T) { previousResourceVersion := make(map[string]float64) for j, r := range tc.requests { - testGroup, ok := testapi.Groups[r.apiGroup] - if !ok { - t.Errorf("case %d %d: unknown api group %q, %s", i, j, r.apiGroup, r) - continue + path := "/" + if r.apiGroup == "" { + path = gopath.Join(path, "api/v1") + } else { + path = gopath.Join(path, "apis", r.apiGroup, "v1") + } + if r.namespace != "" { + path = gopath.Join(path, "namespaces", r.namespace) + } + if r.resource != "" { + path = gopath.Join(path, r.resource) + } + if r.name != "" { + path = gopath.Join(path, r.name) } - path := testGroup.ResourcePath(r.resource, r.namespace, r.name) var body io.Reader if r.body != "" { @@ -652,7 +657,7 @@ func TestBootstrapping(t *testing.T) { _, s, closeFn := framework.RunAMaster(masterConfig) defer closeFn() - clientset := clientset.NewForConfigOrDie(&restclient.Config{BearerToken: superUser, Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Groups[api.GroupName].GroupVersion()}}) + clientset := clientset.NewForConfigOrDie(&restclient.Config{BearerToken: superUser, Host: s.URL}) watcher, err := clientset.RbacV1().ClusterRoles().Watch(metav1.ListOptions{ResourceVersion: "0"}) if err != nil { @@ -712,7 +717,7 @@ func TestDiscoveryUpgradeBootstrapping(t *testing.T) { })) _, s, tearDownFn := framework.RunAMaster(masterConfig) - client := clientset.NewForConfigOrDie(&restclient.Config{BearerToken: superUser, Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Groups[api.GroupName].GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{BearerToken: superUser, Host: s.URL}) // Modify the default RBAC discovery ClusterRoleBidnings to look more like the defaults that // existed prior to v1.14, but with user modifications. @@ -750,7 +755,7 @@ func TestDiscoveryUpgradeBootstrapping(t *testing.T) { // `system:discovery`, and respect auto-reconciliation annotations. _, s, tearDownFn = framework.RunAMaster(masterConfig) - client = clientset.NewForConfigOrDie(&restclient.Config{BearerToken: superUser, Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Groups[api.GroupName].GroupVersion()}}) + client = clientset.NewForConfigOrDie(&restclient.Config{BearerToken: superUser, Host: s.URL}) newDiscRoleBinding, err := client.RbacV1().ClusterRoleBindings().Get("system:discovery", metav1.GetOptions{}) if err != nil { diff --git a/test/integration/client/BUILD b/test/integration/client/BUILD index 66073bb551f..8f6fd280328 100644 --- a/test/integration/client/BUILD +++ b/test/integration/client/BUILD @@ -18,7 +18,6 @@ go_test( deps = [ "//cmd/kube-apiserver/app/testing:go_default_library", "//pkg/api/legacyscheme:go_default_library", - "//pkg/api/testapi:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", @@ -32,6 +31,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/client-go/dynamic:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", "//staging/src/k8s.io/component-base/version:go_default_library", "//test/integration/framework:go_default_library", "//test/utils/image:go_default_library", diff --git a/test/integration/client/dynamic_client_test.go b/test/integration/client/dynamic_client_test.go index 360c0a698f2..930829c666d 100644 --- a/test/integration/client/dynamic_client_test.go +++ b/test/integration/client/dynamic_client_test.go @@ -32,8 +32,8 @@ import ( "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/dynamic" clientset "k8s.io/client-go/kubernetes" + clientscheme "k8s.io/client-go/kubernetes/scheme" kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing" - "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/test/integration/framework" ) @@ -208,7 +208,7 @@ func unstructuredToPod(obj *unstructured.Unstructured) (*v1.Pod, error) { return nil, err } pod := new(v1.Pod) - err = runtime.DecodeInto(testapi.Default.Codec(), json, pod) + err = runtime.DecodeInto(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), json, pod) pod.Kind = "" pod.APIVersion = "" return pod, err @@ -220,6 +220,6 @@ func unstructuredToEvent(obj *unstructured.Unstructured) (*v1.Event, error) { return nil, err } event := new(v1.Event) - err = runtime.DecodeInto(testapi.Default.Codec(), json, event) + err = runtime.DecodeInto(clientscheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), json, event) return event, err }