mirror of
https://github.com/k8snetworkplumbingwg/multus-cni.git
synced 2025-09-03 18:06:11 +00:00
testing: add fake kube client testing helpers
This commit is contained in:
committed by
Kuralamudhan Ramakrishnan
parent
fa9f209fed
commit
88c3b366f6
127
testing/testing.go
Normal file
127
testing/testing.go
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
// Copyright (c) 2017 Intel Corporation
|
||||||
|
//
|
||||||
|
// 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 (
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"net"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
v1 "k8s.io/client-go/pkg/api/v1"
|
||||||
|
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
)
|
||||||
|
|
||||||
|
type FakeKubeClient struct {
|
||||||
|
pods map[string]*v1.Pod
|
||||||
|
PodCount int
|
||||||
|
nets map[string]string
|
||||||
|
NetCount int
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewFakeKubeClient() *FakeKubeClient {
|
||||||
|
return &FakeKubeClient{
|
||||||
|
pods: make(map[string]*v1.Pod),
|
||||||
|
nets: make(map[string]string),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FakeKubeClient) GetRawWithPath(path string) ([]byte, error) {
|
||||||
|
obj, ok := f.nets[path]
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("resource not found")
|
||||||
|
}
|
||||||
|
f.NetCount++
|
||||||
|
return []byte(obj), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FakeKubeClient) AddNetConfig(namespace, name, data string) {
|
||||||
|
cr := fmt.Sprintf(`{
|
||||||
|
"apiVersion": "kubernetes.cni.cncf.io/v1",
|
||||||
|
"kind": "Network",
|
||||||
|
"metadata": {
|
||||||
|
"namespace": "%s",
|
||||||
|
"name": "%s"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"config": "%s"
|
||||||
|
}
|
||||||
|
}`, namespace, name, strings.Replace(data, "\"", "\\\"", -1))
|
||||||
|
cr = strings.Replace(cr, "\n", "", -1)
|
||||||
|
cr = strings.Replace(cr, "\t", "", -1)
|
||||||
|
f.nets[fmt.Sprintf("/apis/kubernetes.cni.cncf.io/v1/namespaces/%s/networks/%s", namespace, name)] = cr
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FakeKubeClient) AddNetFile(namespace, name, filePath, fileData string) {
|
||||||
|
cr := fmt.Sprintf(`{
|
||||||
|
"apiVersion": "kubernetes.cni.cncf.io/v1",
|
||||||
|
"kind": "Network",
|
||||||
|
"metadata": {
|
||||||
|
"namespace": "%s",
|
||||||
|
"name": "%s"
|
||||||
|
}
|
||||||
|
}`, namespace, name)
|
||||||
|
f.nets[fmt.Sprintf("/apis/kubernetes.cni.cncf.io/v1/namespaces/%s/networks/%s", namespace, name)] = cr
|
||||||
|
|
||||||
|
err := ioutil.WriteFile(filePath, []byte(fileData), 0600)
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FakeKubeClient) GetPod(namespace, name string) (*v1.Pod, error) {
|
||||||
|
key := fmt.Sprintf("%s/%s", namespace, name)
|
||||||
|
pod, ok := f.pods[key]
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("pod not found")
|
||||||
|
}
|
||||||
|
f.PodCount++
|
||||||
|
return pod, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FakeKubeClient) AddPod(pod *v1.Pod) {
|
||||||
|
key := fmt.Sprintf("%s/%s", pod.ObjectMeta.Namespace, pod.ObjectMeta.Name)
|
||||||
|
f.pods[key] = pod
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewFakePod(name string, netAnnotation string) *v1.Pod {
|
||||||
|
pod := &v1.Pod{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: name,
|
||||||
|
Namespace: "test",
|
||||||
|
},
|
||||||
|
Spec: v1.PodSpec{
|
||||||
|
Containers: []v1.Container{
|
||||||
|
{Name: "ctr1", Image: "image"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
if netAnnotation != "" {
|
||||||
|
netAnnotation = strings.Replace(netAnnotation, "\n", "", -1)
|
||||||
|
netAnnotation = strings.Replace(netAnnotation, "\t", "", -1)
|
||||||
|
pod.ObjectMeta.Annotations = map[string]string{
|
||||||
|
"kubernetes.v1.cni.cncf.io/networks": netAnnotation,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pod
|
||||||
|
}
|
||||||
|
|
||||||
|
func EnsureCIDR(cidr string) *net.IPNet {
|
||||||
|
ip, net, err := net.ParseCIDR(cidr)
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
net.IP = ip
|
||||||
|
return net
|
||||||
|
}
|
Reference in New Issue
Block a user