forked from github/multus-cni
Add unit tests for clusterNetwork/defaultNetworks
This commit is contained in:
committed by
Tomofumi Hayashi
parent
3673a07229
commit
4b231c6855
@@ -255,7 +255,7 @@ func getCNIConfigFromFile(name string, confdir string) ([]byte, error) {
|
|||||||
return nil, logging.Errorf("Error loading CNI conflist file %s: %v", confFile, err)
|
return nil, logging.Errorf("Error loading CNI conflist file %s: %v", confFile, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if confList.Name == name {
|
if confList.Name == name || name == "" {
|
||||||
return confList.Bytes, nil
|
return confList.Bytes, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -265,7 +265,7 @@ func getCNIConfigFromFile(name string, confdir string) ([]byte, error) {
|
|||||||
return nil, logging.Errorf("Error loading CNI config file %s: %v", confFile, err)
|
return nil, logging.Errorf("Error loading CNI config file %s: %v", confFile, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if conf.Network.Name == name {
|
if conf.Network.Name == name || name == "" {
|
||||||
// Ensure the config has a "type" so we know what plugin to run.
|
// Ensure the config has a "type" so we know what plugin to run.
|
||||||
// Also catches the case where somebody put a conflist into a conf file.
|
// Also catches the case where somebody put a conflist into a conf file.
|
||||||
if conf.Network.Type == "" {
|
if conf.Network.Type == "" {
|
||||||
@@ -523,8 +523,7 @@ func getDefaultNetDelegateCRD(client KubeClient, net string, confdir string) (*t
|
|||||||
rawPath := fmt.Sprintf("/apis/k8s.cni.cncf.io/v1/namespaces/%s/network-attachment-definitions/%s", "default", net)
|
rawPath := fmt.Sprintf("/apis/k8s.cni.cncf.io/v1/namespaces/%s/network-attachment-definitions/%s", "default", net)
|
||||||
netData, err := client.GetRawWithPath(rawPath)
|
netData, err := client.GetRawWithPath(rawPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logging.Debugf("getDefaultNetDelegate: failed to get network resource, refer Multus README.md for the usage guide: %v", err)
|
return nil, logging.Errorf("getDefaultNetDelegate: failed to get network resource, refer Multus README.md for the usage guide: %v", err)
|
||||||
return nil, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
customResource := &types.NetworkAttachmentDefinition{}
|
customResource := &types.NetworkAttachmentDefinition{}
|
||||||
@@ -569,9 +568,9 @@ func getNetDelegate(client KubeClient, netname string, confdir string) (*types.D
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
if fInfo.IsDir() {
|
if fInfo.IsDir() {
|
||||||
files, err := libcni.ConfFiles(netname, []string{".conf", ".conflist"})
|
files, err := libcni.ConfFiles(netname, []string{".conf", ".conflist"})
|
||||||
if len(files) > 1 {
|
if len(files) > 0 {
|
||||||
var configBytes []byte
|
var configBytes []byte
|
||||||
configBytes, err = getCNIConfigFromFile(files[0], netname)
|
configBytes, err = getCNIConfigFromFile("", netname)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
delegate, err := types.LoadDelegateNetConf(configBytes, "")
|
delegate, err := types.LoadDelegateNetConf(configBytes, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -579,6 +578,7 @@ func getNetDelegate(client KubeClient, netname string, confdir string) (*types.D
|
|||||||
}
|
}
|
||||||
return delegate, nil
|
return delegate, nil
|
||||||
}
|
}
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -602,8 +602,6 @@ func GetDefaultNetworks(k8sArgs *types.K8sArgs, conf *types.NetConf, kubeClient
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
//setKubeClientInfo(clientInfo, kubeClient, k8sArgs) XXX
|
|
||||||
|
|
||||||
delegate, err := getNetDelegate(kubeClient, conf.ClusterNetwork, conf.ConfDir)
|
delegate, err := getNetDelegate(kubeClient, conf.ClusterNetwork, conf.ConfDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -611,9 +609,6 @@ func GetDefaultNetworks(k8sArgs *types.K8sArgs, conf *types.NetConf, kubeClient
|
|||||||
delegate.MasterPlugin = true
|
delegate.MasterPlugin = true
|
||||||
delegates = append(delegates, delegate)
|
delegates = append(delegates, delegate)
|
||||||
|
|
||||||
// First delegate is always the master plugin
|
|
||||||
conf.Delegates[0].MasterPlugin = true
|
|
||||||
|
|
||||||
//need to revisit
|
//need to revisit
|
||||||
for _, netname := range conf.DefaultNetworks {
|
for _, netname := range conf.DefaultNetworks {
|
||||||
delegate, err := getNetDelegate(kubeClient, netname, conf.ConfDir)
|
delegate, err := getNetDelegate(kubeClient, netname, conf.ConfDir)
|
||||||
|
@@ -24,6 +24,7 @@ import (
|
|||||||
|
|
||||||
testutils "github.com/intel/multus-cni/testing"
|
testutils "github.com/intel/multus-cni/testing"
|
||||||
|
|
||||||
|
"github.com/intel/multus-cni/types"
|
||||||
"github.com/containernetworking/cni/pkg/skel"
|
"github.com/containernetworking/cni/pkg/skel"
|
||||||
|
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
@@ -278,12 +279,13 @@ var _ = Describe("k8sclient operations", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
It("retrieves cluster network from CRD", func() {
|
It("retrieves cluster network from CRD", func() {
|
||||||
|
fakePod := testutils.NewFakePod("testpod", "")
|
||||||
conf := `{
|
conf := `{
|
||||||
"name":"node-cni-network",
|
"name":"node-cni-network",
|
||||||
"type":"multus",
|
"type":"multus",
|
||||||
"clusterNetwork": "myCRD1",
|
"clusterNetwork": "myCRD1",
|
||||||
"kubeconfig":"/etc/kubernetes/node-kubeconfig.yaml"
|
"kubeconfig":"/etc/kubernetes/node-kubeconfig.yaml"
|
||||||
}` // XXX: is confDir required?
|
}`
|
||||||
netConf, err := types.LoadNetConf([]byte(conf))
|
netConf, err := types.LoadNetConf([]byte(conf))
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
@@ -292,13 +294,110 @@ var _ = Describe("k8sclient operations", func() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fKubeClient := testutils.NewFakeKubeClient()
|
fKubeClient := testutils.NewFakeKubeClient()
|
||||||
fKubeClient.AddNetConfig(fakePod.ObjectMeta.Namespace, "myCRD1", "{\"type\": \"mynet\"}")
|
fKubeClient.AddNetConfig("default", "myCRD1", "{\"type\": \"mynet\"}")
|
||||||
kubeClient, err := GetK8sClient("", fKubeClient)
|
kubeClient, err := GetK8sClient("", fKubeClient)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
k8sArgs, err := GetK8sArgs(args)
|
k8sArgs, err := GetK8sArgs(args)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
err := GetDefaultNetworks(k8sArgs, netConf, kubeClient)
|
err = GetDefaultNetworks(k8sArgs, netConf, kubeClient)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
Expect(len(netConf.Delegates)).To(Equal(1))
|
||||||
|
Expect(netConf.Delegates[0].Conf.Name).To(Equal("myCRD1"))
|
||||||
|
Expect(netConf.Delegates[0].Conf.Type).To(Equal("mynet"))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("retrieves cluster network from file", func() {
|
||||||
|
fakePod := testutils.NewFakePod("testpod", "")
|
||||||
|
conf := `{
|
||||||
|
"name":"node-cni-network",
|
||||||
|
"type":"multus",
|
||||||
|
"clusterNetwork": "myFile1",
|
||||||
|
"kubeconfig":"/etc/kubernetes/node-kubeconfig.yaml"
|
||||||
|
}`
|
||||||
|
netConf, err := types.LoadNetConf([]byte(conf))
|
||||||
|
netConf.ConfDir = tmpDir
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
|
args := &skel.CmdArgs{
|
||||||
|
Args: fmt.Sprintf("K8S_POD_NAME=%s;K8S_POD_NAMESPACE=%s", fakePod.ObjectMeta.Name, fakePod.ObjectMeta.Namespace),
|
||||||
|
}
|
||||||
|
|
||||||
|
fKubeClient := testutils.NewFakeKubeClient()
|
||||||
|
net1Name := filepath.Join(tmpDir, "10-net1.conf")
|
||||||
|
fKubeClient.AddNetFile(fakePod.ObjectMeta.Namespace, "net1", net1Name, `{
|
||||||
|
"name": "myFile1",
|
||||||
|
"type": "mynet",
|
||||||
|
"cniVersion": "0.2.0"
|
||||||
|
}`)
|
||||||
|
kubeClient, err := GetK8sClient("", fKubeClient)
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
k8sArgs, err := GetK8sArgs(args)
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
|
err = GetDefaultNetworks(k8sArgs, netConf, kubeClient)
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
Expect(len(netConf.Delegates)).To(Equal(1))
|
||||||
|
Expect(netConf.Delegates[0].Conf.Name).To(Equal("myFile1"))
|
||||||
|
Expect(netConf.Delegates[0].Conf.Type).To(Equal("mynet"))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("retrieves cluster network from path", func() {
|
||||||
|
fakePod := testutils.NewFakePod("testpod", "")
|
||||||
|
conf := fmt.Sprintf(`{
|
||||||
|
"name":"node-cni-network",
|
||||||
|
"type":"multus",
|
||||||
|
"clusterNetwork": "%s",
|
||||||
|
"kubeconfig":"/etc/kubernetes/node-kubeconfig.yaml"
|
||||||
|
}`, tmpDir)
|
||||||
|
netConf, err := types.LoadNetConf([]byte(conf))
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
|
args := &skel.CmdArgs{
|
||||||
|
Args: fmt.Sprintf("K8S_POD_NAME=%s;K8S_POD_NAMESPACE=%s", fakePod.ObjectMeta.Name, fakePod.ObjectMeta.Namespace),
|
||||||
|
}
|
||||||
|
|
||||||
|
fKubeClient := testutils.NewFakeKubeClient()
|
||||||
|
net1Name := filepath.Join(tmpDir, "10-net1.conf")
|
||||||
|
fKubeClient.AddNetFile(fakePod.ObjectMeta.Namespace, "10-net1", net1Name, `{
|
||||||
|
"name": "net1",
|
||||||
|
"type": "mynet",
|
||||||
|
"cniVersion": "0.2.0"
|
||||||
|
}`)
|
||||||
|
kubeClient, err := GetK8sClient("", fKubeClient)
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
k8sArgs, err := GetK8sArgs(args)
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
|
err = GetDefaultNetworks(k8sArgs, netConf, kubeClient)
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
Expect(len(netConf.Delegates)).To(Equal(1))
|
||||||
|
Expect(netConf.Delegates[0].Conf.Name).To(Equal("net1"))
|
||||||
|
Expect(netConf.Delegates[0].Conf.Type).To(Equal("mynet"))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("Error in case of CRD not found", func() {
|
||||||
|
fakePod := testutils.NewFakePod("testpod", "")
|
||||||
|
conf := `{
|
||||||
|
"name":"node-cni-network",
|
||||||
|
"type":"multus",
|
||||||
|
"clusterNetwork": "myCRD1",
|
||||||
|
"kubeconfig":"/etc/kubernetes/node-kubeconfig.yaml"
|
||||||
|
}`
|
||||||
|
netConf, err := types.LoadNetConf([]byte(conf))
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
|
args := &skel.CmdArgs{
|
||||||
|
Args: fmt.Sprintf("K8S_POD_NAME=%s;K8S_POD_NAMESPACE=%s", fakePod.ObjectMeta.Name, fakePod.ObjectMeta.Namespace),
|
||||||
|
}
|
||||||
|
|
||||||
|
fKubeClient := testutils.NewFakeKubeClient()
|
||||||
|
kubeClient, err := GetK8sClient("", fKubeClient)
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
k8sArgs, err := GetK8sArgs(args)
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
|
err = GetDefaultNetworks(k8sArgs, netConf, kubeClient)
|
||||||
|
Expect(err).To(HaveOccurred())
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@@ -206,7 +206,7 @@ func LoadNetConf(bytes []byte) (*NetConf, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// get RawDelegates and put delegates field
|
// get RawDelegates and put delegates field
|
||||||
if len(netconf.DefaultNetworks) == 0 {
|
if netconf.ClusterNetwork == "" {
|
||||||
// for Delegates
|
// for Delegates
|
||||||
if len(netconf.RawDelegates) == 0 {
|
if len(netconf.RawDelegates) == 0 {
|
||||||
return nil, logging.Errorf("at least one delegate must be specified")
|
return nil, logging.Errorf("at least one delegate must be specified")
|
||||||
|
Reference in New Issue
Block a user