Skip to content

Commit

Permalink
Add unit tests for clusterNetwork/defaultNetworks
Browse files Browse the repository at this point in the history
  • Loading branch information
s1061123 committed Oct 15, 2018
1 parent ffc3d24 commit 7725437
Show file tree
Hide file tree
Showing 3 changed files with 109 additions and 15 deletions.
17 changes: 6 additions & 11 deletions k8sclient/k8sclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ func getCNIConfigFromFile(name string, confdir string) ([]byte, error) {
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
}

Expand All @@ -260,7 +260,7 @@ func getCNIConfigFromFile(name string, confdir string) ([]byte, error) {
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.
// Also catches the case where somebody put a conflist into a conf file.
if conf.Network.Type == "" {
Expand Down Expand Up @@ -479,8 +479,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)
netData, err := client.GetRawWithPath(rawPath)
if err != nil {
logging.Debugf("getDefaultNetDelegate: failed to get network resource, refer Multus README.md for the usage guide: %v", err)
return nil, nil
return nil, logging.Errorf("getDefaultNetDelegate: failed to get network resource, refer Multus README.md for the usage guide: %v", err)
}

customResource := &types.NetworkAttachmentDefinition{}
Expand Down Expand Up @@ -525,16 +524,17 @@ func getNetDelegate(client KubeClient, netname string, confdir string) (*types.D
if err == nil {
if fInfo.IsDir() {
files, err := libcni.ConfFiles(netname, []string{".conf", ".conflist"})
if len(files) > 1 {
if len(files) > 0 {
var configBytes []byte
configBytes, err = getCNIConfigFromFile(files[0], netname)
configBytes, err = getCNIConfigFromFile("", netname)
if err == nil {
delegate, err := types.LoadDelegateNetConf(configBytes, "")
if err != nil {
return nil, err
}
return delegate, nil
}
return nil, err
}
}
}
Expand All @@ -558,18 +558,13 @@ func GetDefaultNetworks(k8sArgs *types.K8sArgs, conf *types.NetConf, kubeClient
return nil
}

//setKubeClientInfo(clientInfo, kubeClient, k8sArgs) XXX

delegate, err := getNetDelegate(kubeClient, conf.ClusterNetwork, conf.ConfDir)
if err != nil {
return err
}
delegate.MasterPlugin = true
delegates = append(delegates, delegate)

// First delegate is always the master plugin
conf.Delegates[0].MasterPlugin = true

//need to revisit
for _, netname := range conf.DefaultNetworks {
delegate, err := getNetDelegate(kubeClient, netname, conf.ConfDir)
Expand Down
105 changes: 102 additions & 3 deletions k8sclient/k8sclient_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (

testutils "github.com/intel/multus-cni/testing"

"github.com/intel/multus-cni/types"
"github.com/containernetworking/cni/pkg/skel"

. "github.com/onsi/ginkgo"
Expand Down Expand Up @@ -278,12 +279,13 @@ var _ = Describe("k8sclient operations", func() {
})

It("retrieves cluster network from CRD", func() {
fakePod := testutils.NewFakePod("testpod", "")
conf := `{
"name":"node-cni-network",
"type":"multus",
"clusterNetwork": "myCRD1",
"kubeconfig":"/etc/kubernetes/node-kubeconfig.yaml"
}` // XXX: is confDir required?
}`
netConf, err := types.LoadNetConf([]byte(conf))
Expect(err).NotTo(HaveOccurred())

Expand All @@ -292,13 +294,110 @@ var _ = Describe("k8sclient operations", func() {
}

fKubeClient := testutils.NewFakeKubeClient()
fKubeClient.AddNetConfig(fakePod.ObjectMeta.Namespace, "myCRD1", "{\"type\": \"mynet\"}")
fKubeClient.AddNetConfig("default", "myCRD1", "{\"type\": \"mynet\"}")
kubeClient, err := GetK8sClient("", fKubeClient)
Expect(err).NotTo(HaveOccurred())
k8sArgs, err := GetK8sArgs(args)
Expect(err).NotTo(HaveOccurred())

err := GetDefaultNetworks(k8sArgs, netConf, kubeClient)
err = GetDefaultNetworks(k8sArgs, netConf, kubeClient)
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())
})
})
2 changes: 1 addition & 1 deletion types/conf.go
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ func LoadNetConf(bytes []byte) (*NetConf, error) {
}

// get RawDelegates and put delegates field
if len(netconf.DefaultNetworks) == 0 {
if netconf.ClusterNetwork == "" {
// for Delegates
if len(netconf.RawDelegates) == 0 {
return nil, logging.Errorf("at least one delegate must be specified")
Expand Down

0 comments on commit 7725437

Please sign in to comment.