...

Source file src/k8s.io/api/roundtrip_test.go

Documentation: k8s.io/api

     1  /*
     2  Copyright 2018 The Kubernetes Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package api
    18  
    19  import (
    20  	"math/rand"
    21  	"testing"
    22  
    23  	admissionv1 "k8s.io/api/admission/v1"
    24  	admissionv1beta1 "k8s.io/api/admission/v1beta1"
    25  	admissionregv1 "k8s.io/api/admissionregistration/v1"
    26  	admissionregv1alpha1 "k8s.io/api/admissionregistration/v1alpha1"
    27  	admissionregv1beta1 "k8s.io/api/admissionregistration/v1beta1"
    28  	apidiscoveryv2 "k8s.io/api/apidiscovery/v2"
    29  	apidiscoveryv2beta1 "k8s.io/api/apidiscovery/v2beta1"
    30  	apiserverinternalv1alpha1 "k8s.io/api/apiserverinternal/v1alpha1"
    31  	appsv1 "k8s.io/api/apps/v1"
    32  	appsv1beta1 "k8s.io/api/apps/v1beta1"
    33  	appsv1beta2 "k8s.io/api/apps/v1beta2"
    34  	authenticationv1 "k8s.io/api/authentication/v1"
    35  	authenticationv1beta1 "k8s.io/api/authentication/v1beta1"
    36  	authorizationv1 "k8s.io/api/authorization/v1"
    37  	authorizationv1beta1 "k8s.io/api/authorization/v1beta1"
    38  	autoscalingv1 "k8s.io/api/autoscaling/v1"
    39  	autoscalingv2 "k8s.io/api/autoscaling/v2"
    40  	autoscalingv2beta1 "k8s.io/api/autoscaling/v2beta1"
    41  	autoscalingv2beta2 "k8s.io/api/autoscaling/v2beta2"
    42  	batchv1 "k8s.io/api/batch/v1"
    43  	batchv1beta1 "k8s.io/api/batch/v1beta1"
    44  	certificatesv1 "k8s.io/api/certificates/v1"
    45  	certificatesv1alpha1 "k8s.io/api/certificates/v1alpha1"
    46  	certificatesv1beta1 "k8s.io/api/certificates/v1beta1"
    47  	coordinationv1 "k8s.io/api/coordination/v1"
    48  	coordinationv1beta1 "k8s.io/api/coordination/v1beta1"
    49  	corev1 "k8s.io/api/core/v1"
    50  	discoveryv1 "k8s.io/api/discovery/v1"
    51  	discoveryv1beta1 "k8s.io/api/discovery/v1beta1"
    52  	eventsv1 "k8s.io/api/events/v1"
    53  	eventsv1beta1 "k8s.io/api/events/v1beta1"
    54  	extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
    55  	flowcontrolv1 "k8s.io/api/flowcontrol/v1"
    56  	flowcontrolv1beta1 "k8s.io/api/flowcontrol/v1beta1"
    57  	flowcontrolv1beta2 "k8s.io/api/flowcontrol/v1beta2"
    58  	flowcontrolv1beta3 "k8s.io/api/flowcontrol/v1beta3"
    59  	imagepolicyv1alpha1 "k8s.io/api/imagepolicy/v1alpha1"
    60  	networkingv1 "k8s.io/api/networking/v1"
    61  	networkingv1alpha1 "k8s.io/api/networking/v1alpha1"
    62  	networkingv1beta1 "k8s.io/api/networking/v1beta1"
    63  	nodev1 "k8s.io/api/node/v1"
    64  	nodev1alpha1 "k8s.io/api/node/v1alpha1"
    65  	nodev1beta1 "k8s.io/api/node/v1beta1"
    66  	policyv1 "k8s.io/api/policy/v1"
    67  	policyv1beta1 "k8s.io/api/policy/v1beta1"
    68  	rbacv1 "k8s.io/api/rbac/v1"
    69  	rbacv1alpha1 "k8s.io/api/rbac/v1alpha1"
    70  	rbacv1beta1 "k8s.io/api/rbac/v1beta1"
    71  	resourcev1alpha2 "k8s.io/api/resource/v1alpha2"
    72  	schedulingv1 "k8s.io/api/scheduling/v1"
    73  	schedulingv1alpha1 "k8s.io/api/scheduling/v1alpha1"
    74  	schedulingv1beta1 "k8s.io/api/scheduling/v1beta1"
    75  	storagev1 "k8s.io/api/storage/v1"
    76  	storagev1alpha1 "k8s.io/api/storage/v1alpha1"
    77  	storagev1beta1 "k8s.io/api/storage/v1beta1"
    78  	svmv1alpha1 "k8s.io/api/storagemigration/v1alpha1"
    79  
    80  	"github.com/stretchr/testify/require"
    81  	"k8s.io/apimachinery/pkg/api/apitesting/fuzzer"
    82  	"k8s.io/apimachinery/pkg/api/apitesting/roundtrip"
    83  	genericfuzzer "k8s.io/apimachinery/pkg/apis/meta/fuzzer"
    84  	"k8s.io/apimachinery/pkg/runtime"
    85  	"k8s.io/apimachinery/pkg/runtime/serializer"
    86  )
    87  
    88  var groups = []runtime.SchemeBuilder{
    89  	admissionv1beta1.SchemeBuilder,
    90  	admissionv1.SchemeBuilder,
    91  	admissionregv1alpha1.SchemeBuilder,
    92  	admissionregv1beta1.SchemeBuilder,
    93  	admissionregv1.SchemeBuilder,
    94  	apiserverinternalv1alpha1.SchemeBuilder,
    95  	apidiscoveryv2beta1.SchemeBuilder,
    96  	apidiscoveryv2.SchemeBuilder,
    97  	appsv1beta1.SchemeBuilder,
    98  	appsv1beta2.SchemeBuilder,
    99  	appsv1.SchemeBuilder,
   100  	authenticationv1beta1.SchemeBuilder,
   101  	authenticationv1.SchemeBuilder,
   102  	authorizationv1beta1.SchemeBuilder,
   103  	authorizationv1.SchemeBuilder,
   104  	autoscalingv1.SchemeBuilder,
   105  	autoscalingv2.SchemeBuilder,
   106  	autoscalingv2beta1.SchemeBuilder,
   107  	autoscalingv2beta2.SchemeBuilder,
   108  	batchv1beta1.SchemeBuilder,
   109  	batchv1.SchemeBuilder,
   110  	certificatesv1.SchemeBuilder,
   111  	certificatesv1beta1.SchemeBuilder,
   112  	certificatesv1alpha1.SchemeBuilder,
   113  	coordinationv1.SchemeBuilder,
   114  	coordinationv1beta1.SchemeBuilder,
   115  	corev1.SchemeBuilder,
   116  	discoveryv1.SchemeBuilder,
   117  	discoveryv1beta1.SchemeBuilder,
   118  	eventsv1.SchemeBuilder,
   119  	eventsv1beta1.SchemeBuilder,
   120  	extensionsv1beta1.SchemeBuilder,
   121  	flowcontrolv1beta1.SchemeBuilder,
   122  	flowcontrolv1beta2.SchemeBuilder,
   123  	flowcontrolv1beta3.SchemeBuilder,
   124  	flowcontrolv1.SchemeBuilder,
   125  	imagepolicyv1alpha1.SchemeBuilder,
   126  	networkingv1.SchemeBuilder,
   127  	networkingv1beta1.SchemeBuilder,
   128  	networkingv1alpha1.SchemeBuilder,
   129  	nodev1.SchemeBuilder,
   130  	nodev1alpha1.SchemeBuilder,
   131  	nodev1beta1.SchemeBuilder,
   132  	policyv1.SchemeBuilder,
   133  	policyv1beta1.SchemeBuilder,
   134  	rbacv1alpha1.SchemeBuilder,
   135  	rbacv1beta1.SchemeBuilder,
   136  	rbacv1.SchemeBuilder,
   137  	resourcev1alpha2.SchemeBuilder,
   138  	schedulingv1alpha1.SchemeBuilder,
   139  	schedulingv1beta1.SchemeBuilder,
   140  	schedulingv1.SchemeBuilder,
   141  	storagev1alpha1.SchemeBuilder,
   142  	storagev1beta1.SchemeBuilder,
   143  	storagev1.SchemeBuilder,
   144  	svmv1alpha1.SchemeBuilder,
   145  }
   146  
   147  func TestRoundTripExternalTypes(t *testing.T) {
   148  	scheme := runtime.NewScheme()
   149  	codecs := serializer.NewCodecFactory(scheme)
   150  	for _, builder := range groups {
   151  		require.NoError(t, builder.AddToScheme(scheme))
   152  	}
   153  	seed := rand.Int63()
   154  	// I'm only using the generic fuzzer funcs, but at some point in time we might need to
   155  	// switch to specialized. For now we're happy with the current serialization test.
   156  	fuzzer := fuzzer.FuzzerFor(genericfuzzer.Funcs, rand.NewSource(seed), codecs)
   157  
   158  	roundtrip.RoundTripExternalTypes(t, scheme, codecs, fuzzer, nil)
   159  }
   160  
   161  func TestCompatibility(t *testing.T) {
   162  	scheme := runtime.NewScheme()
   163  	for _, builder := range groups {
   164  		require.NoError(t, builder.AddToScheme(scheme))
   165  	}
   166  	roundtrip.NewCompatibilityTestOptions(scheme).Complete(t).Run(t)
   167  }
   168  

View as plain text