github.com/cilium/cilium@v1.16.2/test/controlplane/suite/marshalling.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package suite
     5  
     6  import (
     7  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     8  	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
     9  	k8sRuntime "k8s.io/apimachinery/pkg/runtime"
    10  	"k8s.io/apimachinery/pkg/runtime/serializer"
    11  	"k8s.io/apimachinery/pkg/util/yaml"
    12  	"k8s.io/client-go/kubernetes/fake"
    13  
    14  	cilium_v2 "github.com/cilium/cilium/pkg/k8s/apis/cilium.io/v2"
    15  	slim_corev1 "github.com/cilium/cilium/pkg/k8s/slim/k8s/api/core/v1"
    16  	slim_fake "github.com/cilium/cilium/pkg/k8s/slim/k8s/client/clientset/versioned/fake"
    17  )
    18  
    19  //
    20  // Marshalling utilities for control-plane tests.
    21  //
    22  // While we could have one decoder for all kinds, we need separate decoders
    23  // to know to which ObjectTracker to hand the decoded object to.
    24  //
    25  // We use CodecFactory's UniversalDeserializer instead of Scheme.Convert as the
    26  // Cilium CRDs have unexported fields and need to be decoded using their
    27  // custom UnmarshalJSON functions.
    28  
    29  var (
    30  	// coreDecoder decodes objects using only the corev1 scheme
    31  	coreDecoder k8sRuntime.Decoder
    32  
    33  	// slimDecoder decodes objects with the slim scheme
    34  	slimDecoder k8sRuntime.Decoder
    35  
    36  	// ciliumDecoder decodes objects with the cilium v2 scheme
    37  	ciliumDecoder k8sRuntime.Decoder
    38  )
    39  
    40  func init() {
    41  	coreScheme := k8sRuntime.NewScheme()
    42  	fake.AddToScheme(coreScheme)
    43  	coreDecoder = serializer.NewCodecFactory(coreScheme).UniversalDeserializer()
    44  
    45  	slimScheme := k8sRuntime.NewScheme()
    46  	slim_fake.AddToScheme(slimScheme)
    47  	slimScheme.AddKnownTypes(slim_corev1.SchemeGroupVersion, &metav1.List{})
    48  	slimDecoder = serializer.NewCodecFactory(slimScheme).UniversalDeserializer()
    49  
    50  	ciliumScheme := k8sRuntime.NewScheme()
    51  	cilium_v2.AddToScheme(ciliumScheme)
    52  	ciliumDecoder = serializer.NewCodecFactory(ciliumScheme).UniversalDeserializer()
    53  }
    54  
    55  // unmarshalList unmarshals the input yaml data into an unstructured list.
    56  func unmarshalList(bs []byte) ([]k8sRuntime.Object, error) {
    57  	var items unstructured.UnstructuredList
    58  	err := yaml.Unmarshal(bs, &items)
    59  	if err != nil {
    60  		return nil, err
    61  	}
    62  	var objs []k8sRuntime.Object
    63  	items.EachListItem(func(obj k8sRuntime.Object) error {
    64  		objs = append(objs, obj)
    65  		return nil
    66  	})
    67  	return objs, nil
    68  
    69  }