mirror of
https://github.com/k8snetworkplumbingwg/multus-cni.git
synced 2025-08-31 16:38:43 +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