mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 22:46:12 +00:00
Remove testapi
This commit is contained in:
parent
78a3a4a2b1
commit
424d5e20df
@ -81,13 +81,6 @@ KUBE_COVERPROCS=${KUBE_COVERPROCS:-4}
|
|||||||
KUBE_RACE=${KUBE_RACE:-} # use KUBE_RACE="-race" to enable race testing
|
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.
|
# Set to the goveralls binary path to report coverage results to Coveralls.io.
|
||||||
KUBE_GOVERALLS_BIN=${KUBE_GOVERALLS_BIN:-}
|
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
|
# once we have multiple group supports
|
||||||
# Create a junit-style XML test report in this directory if set.
|
# Create a junit-style XML test report in this directory if set.
|
||||||
KUBE_JUNIT_REPORT_DIR=${KUBE_JUNIT_REPORT_DIR:-}
|
KUBE_JUNIT_REPORT_DIR=${KUBE_JUNIT_REPORT_DIR:-}
|
||||||
@ -372,16 +365,7 @@ checkFDs() {
|
|||||||
|
|
||||||
checkFDs
|
checkFDs
|
||||||
|
|
||||||
|
runTests "$@"
|
||||||
# Convert the CSVs to arrays.
|
|
||||||
IFS=';' read -r -a apiVersions <<< "${KUBE_TEST_API_VERSIONS}"
|
|
||||||
apiVersionsCount=${#apiVersions[@]}
|
|
||||||
for (( i=0; i<apiVersionsCount; i++ )); do
|
|
||||||
apiVersion=${apiVersions[i]}
|
|
||||||
echo "Running tests for APIVersion: ${apiVersion}"
|
|
||||||
# KUBE_TEST_API sets the version of each group to be tested.
|
|
||||||
KUBE_TEST_API="${apiVersion}" runTests "$@"
|
|
||||||
done
|
|
||||||
|
|
||||||
# We might run the tests for multiple versions, but we want to report only
|
# We might run the tests for multiple versions, but we want to report only
|
||||||
# one of them to coveralls. Here we report coverage from the last run.
|
# one of them to coveralls. Here we report coverage from the last run.
|
||||||
|
@ -18,7 +18,6 @@ filegroup(
|
|||||||
"//pkg/api/pod:all-srcs",
|
"//pkg/api/pod:all-srcs",
|
||||||
"//pkg/api/podsecuritypolicy:all-srcs",
|
"//pkg/api/podsecuritypolicy:all-srcs",
|
||||||
"//pkg/api/service:all-srcs",
|
"//pkg/api/service:all-srcs",
|
||||||
"//pkg/api/testapi:all-srcs",
|
|
||||||
"//pkg/api/testing:all-srcs",
|
"//pkg/api/testing:all-srcs",
|
||||||
"//pkg/api/v1/endpoints:all-srcs",
|
"//pkg/api/v1/endpoints:all-srcs",
|
||||||
"//pkg/api/v1/persistentvolume:all-srcs",
|
"//pkg/api/v1/persistentvolume:all-srcs",
|
||||||
|
@ -1,85 +0,0 @@
|
|||||||
package(default_visibility = ["//visibility:public"])
|
|
||||||
|
|
||||||
load(
|
|
||||||
"@io_bazel_rules_go//go:def.bzl",
|
|
||||||
"go_library",
|
|
||||||
"go_test",
|
|
||||||
)
|
|
||||||
|
|
||||||
go_library(
|
|
||||||
name = "go_default_library",
|
|
||||||
srcs = ["testapi.go"],
|
|
||||||
importpath = "k8s.io/kubernetes/pkg/api/testapi",
|
|
||||||
deps = [
|
|
||||||
"//pkg/api/legacyscheme:go_default_library",
|
|
||||||
"//pkg/apis/admission:go_default_library",
|
|
||||||
"//pkg/apis/admission/install:go_default_library",
|
|
||||||
"//pkg/apis/admissionregistration:go_default_library",
|
|
||||||
"//pkg/apis/admissionregistration/install:go_default_library",
|
|
||||||
"//pkg/apis/apps:go_default_library",
|
|
||||||
"//pkg/apis/apps/install:go_default_library",
|
|
||||||
"//pkg/apis/auditregistration:go_default_library",
|
|
||||||
"//pkg/apis/auditregistration/install:go_default_library",
|
|
||||||
"//pkg/apis/authentication/install:go_default_library",
|
|
||||||
"//pkg/apis/authorization:go_default_library",
|
|
||||||
"//pkg/apis/authorization/install:go_default_library",
|
|
||||||
"//pkg/apis/autoscaling:go_default_library",
|
|
||||||
"//pkg/apis/autoscaling/install:go_default_library",
|
|
||||||
"//pkg/apis/batch:go_default_library",
|
|
||||||
"//pkg/apis/batch/install:go_default_library",
|
|
||||||
"//pkg/apis/certificates:go_default_library",
|
|
||||||
"//pkg/apis/certificates/install:go_default_library",
|
|
||||||
"//pkg/apis/coordination:go_default_library",
|
|
||||||
"//pkg/apis/coordination/install:go_default_library",
|
|
||||||
"//pkg/apis/core:go_default_library",
|
|
||||||
"//pkg/apis/core/install:go_default_library",
|
|
||||||
"//pkg/apis/discovery:go_default_library",
|
|
||||||
"//pkg/apis/discovery/install:go_default_library",
|
|
||||||
"//pkg/apis/events:go_default_library",
|
|
||||||
"//pkg/apis/events/install:go_default_library",
|
|
||||||
"//pkg/apis/extensions:go_default_library",
|
|
||||||
"//pkg/apis/extensions/install:go_default_library",
|
|
||||||
"//pkg/apis/imagepolicy:go_default_library",
|
|
||||||
"//pkg/apis/imagepolicy/install:go_default_library",
|
|
||||||
"//pkg/apis/networking:go_default_library",
|
|
||||||
"//pkg/apis/networking/install:go_default_library",
|
|
||||||
"//pkg/apis/node:go_default_library",
|
|
||||||
"//pkg/apis/node/install:go_default_library",
|
|
||||||
"//pkg/apis/policy:go_default_library",
|
|
||||||
"//pkg/apis/policy/install:go_default_library",
|
|
||||||
"//pkg/apis/rbac:go_default_library",
|
|
||||||
"//pkg/apis/rbac/install:go_default_library",
|
|
||||||
"//pkg/apis/scheduling:go_default_library",
|
|
||||||
"//pkg/apis/scheduling/install:go_default_library",
|
|
||||||
"//pkg/apis/settings:go_default_library",
|
|
||||||
"//pkg/apis/settings/install:go_default_library",
|
|
||||||
"//pkg/apis/storage:go_default_library",
|
|
||||||
"//pkg/apis/storage/install:go_default_library",
|
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/runtime/serializer/recognizer:go_default_library",
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
go_test(
|
|
||||||
name = "go_default_test",
|
|
||||||
srcs = ["testapi_test.go"],
|
|
||||||
embed = [":go_default_library"],
|
|
||||||
deps = [
|
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
filegroup(
|
|
||||||
name = "package-srcs",
|
|
||||||
srcs = glob(["**"]),
|
|
||||||
tags = ["automanaged"],
|
|
||||||
visibility = ["//visibility:private"],
|
|
||||||
)
|
|
||||||
|
|
||||||
filegroup(
|
|
||||||
name = "all-srcs",
|
|
||||||
srcs = [":package-srcs"],
|
|
||||||
tags = ["automanaged"],
|
|
||||||
)
|
|
@ -1,20 +0,0 @@
|
|||||||
# See the OWNERS docs at https://go.k8s.io/owners
|
|
||||||
|
|
||||||
reviewers:
|
|
||||||
- thockin
|
|
||||||
- lavalamp
|
|
||||||
- smarterclayton
|
|
||||||
- wojtek-t
|
|
||||||
- deads2k
|
|
||||||
- caesarxuchao
|
|
||||||
- mikedanese
|
|
||||||
- liggitt
|
|
||||||
- nikhiljindal
|
|
||||||
- erictune
|
|
||||||
- tallclair
|
|
||||||
- eparis
|
|
||||||
- soltysh
|
|
||||||
- madhusudancs
|
|
||||||
- mml
|
|
||||||
- david-mcmahon
|
|
||||||
- jianhuiz
|
|
@ -1,409 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2014 The Kubernetes Authors.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Package testapi provides a helper for retrieving the KUBE_TEST_API environment variable.
|
|
||||||
//
|
|
||||||
// TODO(lavalamp): this package is a huge disaster at the moment. I intend to
|
|
||||||
// refactor. All code currently using this package should change:
|
|
||||||
// 1. Declare your own api.Registry.APIGroupRegistrationManager in your own test code.
|
|
||||||
// 2. Import the relevant install packages.
|
|
||||||
// 3. Register the types you need, from the announced.APIGroupAnnouncementManager.
|
|
||||||
package testapi
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"mime"
|
|
||||||
"os"
|
|
||||||
"reflect"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
||||||
"k8s.io/apimachinery/pkg/runtime/serializer/recognizer"
|
|
||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/admission"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/admissionregistration"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/apps"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/auditregistration"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/authorization"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/autoscaling"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/batch"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/certificates"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/coordination"
|
|
||||||
api "k8s.io/kubernetes/pkg/apis/core"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/discovery"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/events"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/imagepolicy"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/networking"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/node"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/policy"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/rbac"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/scheduling"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/settings"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/storage"
|
|
||||||
|
|
||||||
// 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/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"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Variables to store GroupName
|
|
||||||
var (
|
|
||||||
Groups = make(map[string]TestGroup)
|
|
||||||
Default TestGroup
|
|
||||||
Autoscaling TestGroup
|
|
||||||
Batch TestGroup
|
|
||||||
Extensions TestGroup
|
|
||||||
Apps TestGroup
|
|
||||||
Policy TestGroup
|
|
||||||
Rbac TestGroup
|
|
||||||
Storage TestGroup
|
|
||||||
Admission TestGroup
|
|
||||||
|
|
||||||
serializer runtime.SerializerInfo
|
|
||||||
storageSerializer runtime.SerializerInfo
|
|
||||||
)
|
|
||||||
|
|
||||||
// TestGroup contains GroupVersion to uniquely identify the API
|
|
||||||
type TestGroup struct {
|
|
||||||
externalGroupVersion schema.GroupVersion
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
if apiMediaType := os.Getenv("KUBE_TEST_API_TYPE"); len(apiMediaType) > 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
|
|
||||||
}
|
|
@ -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())
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user