From acc01e45eab1a12a875e5a146b5822ec02d1faed Mon Sep 17 00:00:00 2001 From: John-Lin Date: Fri, 6 Jul 2018 19:24:29 +0800 Subject: [PATCH] support generic userspace datapath & merge userspace and kernelspace datapath entity --- src/entity/network.go | 18 +-- src/entity/network_dpdk.go | 13 -- src/entity/network_ovs.go | 18 +++ src/networkcontroller/network_controller.go | 39 +++++- .../network_controller_test.go | 31 ++++- src/networkprovider/network.go | 2 +- src/networkprovider/network_test.go | 2 +- src/networkprovider/ovs_dpdk.go | 105 --------------- src/networkprovider/ovs_netdev.go | 123 ++++++++++++++++++ .../{ovs_dpdk_test.go => ovs_netdev_test.go} | 35 +++-- src/networkprovider/ovs_test.go | 9 ++ src/networkprovider/testutils/testutils.go | 17 --- 12 files changed, 245 insertions(+), 167 deletions(-) delete mode 100644 src/entity/network_dpdk.go delete mode 100644 src/networkprovider/ovs_dpdk.go create mode 100644 src/networkprovider/ovs_netdev.go rename src/networkprovider/{ovs_dpdk_test.go => ovs_netdev_test.go} (86%) delete mode 100644 src/networkprovider/testutils/testutils.go diff --git a/src/entity/network.go b/src/entity/network.go index 6da6ba65..976fc1b9 100644 --- a/src/entity/network.go +++ b/src/entity/network.go @@ -19,15 +19,15 @@ const ( ) type Network struct { - ID bson.ObjectId `bson:"_id,omitempty" json:"id"` - Type NetworkType `bson:"type" json:"type"` - Name string `bson:"name" json:"name"` - Clusterwise bool `bson:"clusterwise" json:"clusterwise"` - NodeName string `bson:"nodeName,omitempty" json:"nodeName,omitempty"` - CreatedAt *time.Time `bson:"createdAt,omitempty" json:"createdAt,omitempty"` - OVS OVSNetwork `bson:"ovs,omitempty" json:"ovs"` - OVSDPDK OVSDPDKNetwork `bson:"ovsdpdk,omitempty" json:"ovsdpdk"` - Fake FakeNetwork `json:"fake"` //FakeNetwork, for restful testing. + ID bson.ObjectId `bson:"_id,omitempty" json:"id"` + Type NetworkType `bson:"type" json:"type"` + Name string `bson:"name" json:"name"` + Clusterwise bool `bson:"clusterwise" json:"clusterwise"` + NodeName string `bson:"nodeName,omitempty" json:"nodeName,omitempty"` + CreatedAt *time.Time `bson:"createdAt,omitempty" json:"createdAt,omitempty"` + OVS OVSNetwork `bson:"ovs,omitempty" json:"ovs"` + OVSUserspace OVSUserspaceNetwork `bson:"ovsUserspace,omitempty" json:"ovsUserspace"` + Fake FakeNetwork `json:"fake"` //FakeNetwork, for restful testing. } //GetCollection - get model mongo collection name. diff --git a/src/entity/network_dpdk.go b/src/entity/network_dpdk.go deleted file mode 100644 index 0a8d56cf..00000000 --- a/src/entity/network_dpdk.go +++ /dev/null @@ -1,13 +0,0 @@ -package entity - -type DPDKPhysicalPort struct { - Name string `bson:"name" json:"name"` - MTU int `bson:"MTU" json:"MTU"` - PCIID string `bson:"pciID" json:"pciID"` - VlanTags []int32 `bson:"vlanTags" json:"vlanTags"` -} - -type OVSDPDKNetwork struct { - BridgeName string `bson:"bridgeName" json:"bridgeName"` - DPDKPhysicalPorts []DPDKPhysicalPort `bson:"physicalPorts" json:"physicalPorts"` -} diff --git a/src/entity/network_ovs.go b/src/entity/network_ovs.go index 84ed3a3b..962b7ee9 100644 --- a/src/entity/network_ovs.go +++ b/src/entity/network_ovs.go @@ -1,12 +1,30 @@ package entity +// physical NIC port type PhysicalPort struct { Name string `bson:"name" json:"name"` MTU int `bson:"MTU" json:"MTU"` VlanTags []int32 `bson:"vlanTags" MTC:"vlanTags"` } +// physical NIC port dpdk enabled +type DPDKPhysicalPort struct { + Name string `bson:"name" json:"name"` + MTU int `bson:"MTU" json:"MTU"` + PCIID string `bson:"pciID" json:"pciID"` + VlanTags []int32 `bson:"vlanTags" json:"vlanTags"` +} + +// kernel space datapath type OVSNetwork struct { BridgeName string `bson:"bridgeName" json:"bridgeName"` PhysicalPorts []PhysicalPort `bson:"physicalPorts" json:"physicalPorts"` } + +// userspace space datapath +type OVSUserspaceNetwork struct { + BridgeName string `bson:"bridgeName" json:"bridgeName"` + // exclusive fields + PhysicalPorts []PhysicalPort `bson:"physicalPorts" json:"physicalPorts"` + DPDKPhysicalPorts []DPDKPhysicalPort `bson:"dpdkPhysicalPorts" json:"dpdkPhysicalPorts"` +} diff --git a/src/networkcontroller/network_controller.go b/src/networkcontroller/network_controller.go index ab7dc58e..92d9df84 100644 --- a/src/networkcontroller/network_controller.go +++ b/src/networkcontroller/network_controller.go @@ -122,14 +122,41 @@ func (nc *NetworkController) CreateOVSDPDKNetwork(bridgeName string, ports []ent return nil } -func (nc *NetworkController) DeleteOVSDPDKNetwork(bridgeName string) error { - _, err := nc.ClientCtl.DeleteBridge( +func (nc *NetworkController) CreateOVSUserpsaceNetwork(bridgeName string, ports []entity.PhysicalPort) error { + if _, err := nc.ClientCtl.CreateBridge( nc.Context, - &pb.DeleteBridgeRequest{ - BridgeName: bridgeName, - }) - if err != nil { + &pb.CreateBridgeRequest{ + BridgeName: bridgeName, + DatapathType: "netdev", + }); err != nil { return err } + + for _, port := range ports { + _, err := nc.ClientCtl.AddPort( + nc.Context, + &pb.AddPortRequest{ + BridgeName: bridgeName, + IfaceName: port.Name, + }) + if err != nil { + return err + } + + if len(port.VlanTags) > 0 { + _, err := nc.ClientCtl.SetPort( + nc.Context, + &pb.SetPortRequest{ + IfaceName: port.Name, + Options: &pb.PortOptions{ + VLANMode: "trunk", + Trunk: port.VlanTags, + }, + }) + if err != nil { + return err + } + } + } return nil } diff --git a/src/networkcontroller/network_controller_test.go b/src/networkcontroller/network_controller_test.go index 59077d62..9936b806 100644 --- a/src/networkcontroller/network_controller_test.go +++ b/src/networkcontroller/network_controller_test.go @@ -122,7 +122,36 @@ func (suite *NetworkControllerTestSuite) TestCreateNetwork() { suite.NoError(err) nc, err := New(net.JoinHostPort(nodeIP, DEFAULT_CONTROLLER_PORT)) suite.NoError(err) - err = nc.CreateOVSNetwork(tName, network.OVS.PhysicalPorts) + err = nc.CreateOVSNetwork(tName, network.OVSUserspace.PhysicalPorts) + suite.NoError(err) + + //TODO we need support the list function to check the ovs is existed + defer exec.Command("ovs-vsctl", "del-br", tName).Run() +} + +func (suite *NetworkControllerTestSuite) TestCreateOVSUserpsaceNetwork() { + eth1 := entity.PhysicalPort{ + Name: suite.ifName, + MTU: 1500, + VlanTags: []int32{2043, 2143, 2243}, + } + + tName := namesgenerator.GetRandomName(0) + network := entity.Network{ + Name: tName, + OVSUserspace: entity.OVSUserspaceNetwork{ + BridgeName: tName, + PhysicalPorts: []entity.PhysicalPort{eth1}, + }, + Type: "netdev", + NodeName: suite.nodeName, + } + + nodeIP, err := suite.kubectl.GetNodeExternalIP(suite.nodeName) + suite.NoError(err) + nc, err := New(net.JoinHostPort(nodeIP, DEFAULT_CONTROLLER_PORT)) + suite.NoError(err) + err = nc.CreateOVSUserpsaceNetwork(tName, network.OVS.PhysicalPorts) suite.NoError(err) //TODO we need support the list function to check the ovs is existed diff --git a/src/networkprovider/network.go b/src/networkprovider/network.go index a57b7856..61fa296c 100644 --- a/src/networkprovider/network.go +++ b/src/networkprovider/network.go @@ -18,7 +18,7 @@ func GetNetworkProvider(network *entity.Network) (NetworkProvider, error) { case entity.OVSKernelspaceNetworkType: return OVSNetworkProvider{network.OVS}, nil case entity.OVSUserspaceNetworkType: - return OVSDPDKNetworkProvider{network.OVSDPDK}, nil + return OVSUserspaceNetworkProvider{network.OVSUserspace}, nil case entity.FakeNetworkType: return FakeNetworkProvider{network.Fake}, nil default: diff --git a/src/networkprovider/network_test.go b/src/networkprovider/network_test.go index 8e29dd6a..9e40fdc2 100644 --- a/src/networkprovider/network_test.go +++ b/src/networkprovider/network_test.go @@ -16,7 +16,7 @@ func TestGetNetworkProvider(t *testing.T) { netProviderType interface{} }{ {"system", entity.OVSKernelspaceNetworkType, reflect.TypeOf(OVSNetworkProvider{})}, - {"netdev", entity.OVSUserspaceNetworkType, reflect.TypeOf(OVSDPDKNetworkProvider{})}, + {"netdev", entity.OVSUserspaceNetworkType, reflect.TypeOf(OVSUserspaceNetworkProvider{})}, {"fake", entity.FakeNetworkType, reflect.TypeOf(FakeNetworkProvider{})}, } diff --git a/src/networkprovider/ovs_dpdk.go b/src/networkprovider/ovs_dpdk.go deleted file mode 100644 index eb85c775..00000000 --- a/src/networkprovider/ovs_dpdk.go +++ /dev/null @@ -1,105 +0,0 @@ -package networkprovider - -import ( - "fmt" - "net" - - "github.com/linkernetworks/vortex/src/entity" - "github.com/linkernetworks/vortex/src/networkcontroller" - "github.com/linkernetworks/vortex/src/serviceprovider" - "gopkg.in/mgo.v2/bson" -) - -type OVSDPDKNetworkProvider struct { - entity.OVSDPDKNetwork -} - -func (ovsdpdk OVSDPDKNetworkProvider) ValidateBeforeCreating(sp *serviceprovider.Container, network *entity.Network) error { - session := sp.Mongo.NewSession() - defer session.Close() - //Check whether vlangTag is 0~4095 - for _, pp := range ovsdpdk.DPDKPhysicalPorts { - for _, vlangTag := range pp.VlanTags { - if vlangTag < 0 || vlangTag > 4095 { - return fmt.Errorf("The vlangTag %v in PhysicalPort %v should between 0 and 4095", pp.Name, vlangTag) - } - } - } - - q := bson.M{} - if network.Clusterwise { - //Only check the bridge name - q = bson.M{"ovs.bridgeName": ovsdpdk.BridgeName} - } else { - q = bson.M{"nodeName": network.NodeName, "ovs.bridgeName": ovsdpdk.BridgeName} - } - - n, err := session.Count(entity.NetworkCollectionName, q) - if n >= 1 { - return fmt.Errorf("The bridge name %s is exist, please check your cluster type and reassign another bridge name", ovsdpdk.BridgeName) - } else if err != nil { - return err - } - return nil -} - -func (ovsdpdk OVSDPDKNetworkProvider) CreateNetwork(sp *serviceprovider.Container, network *entity.Network) error { - if network.Clusterwise { - nodes, _ := sp.KubeCtl.GetNodes() - for _, v := range nodes { - nodeIP, err := sp.KubeCtl.GetNodeExternalIP(v.GetName()) - if err != nil { - return err - } - if err := createOVSDPDKNetwork(nodeIP, network.OVS.BridgeName, network.OVSDPDK.DPDKPhysicalPorts); err != nil { - return err - } - } - return nil - } - nodeIP, err := sp.KubeCtl.GetNodeExternalIP(network.NodeName) - if err != nil { - return err - } - return createOVSDPDKNetwork(nodeIP, network.OVS.BridgeName, network.OVSDPDK.DPDKPhysicalPorts) -} - -func (ovsdpdk OVSDPDKNetworkProvider) DeleteNetwork(sp *serviceprovider.Container, network *entity.Network) error { - if network.Clusterwise { - nodes, _ := sp.KubeCtl.GetNodes() - for _, v := range nodes { - nodeIP, err := sp.KubeCtl.GetNodeExternalIP(v.GetName()) - if err != nil { - return err - } - if err := deleteOVSNetwork(nodeIP, ovsdpdk.BridgeName); err != nil { - return err - } - } - return nil - } - - nodeIP, err := sp.KubeCtl.GetNodeExternalIP(network.NodeName) - if err != nil { - return err - } - return deleteOVSNetwork(nodeIP, ovsdpdk.BridgeName) -} - -func createOVSDPDKNetwork(nodeIP string, bridgeName string, ports []entity.DPDKPhysicalPort) error { - nodeAddr := net.JoinHostPort(nodeIP, networkcontroller.DEFAULT_CONTROLLER_PORT) - nc, err := networkcontroller.New(nodeAddr) - if err != nil { - return err - } - return nc.CreateOVSDPDKNetwork(bridgeName, ports) -} - -func deleteOVSDPDKNetwork(nodeIP string, bridgeName string) error { - nodeAddr := net.JoinHostPort(nodeIP, networkcontroller.DEFAULT_CONTROLLER_PORT) - nc, err := networkcontroller.New(nodeAddr) - if err != nil { - return err - } - return nc.DeleteOVSDPDKNetwork(bridgeName) -} diff --git a/src/networkprovider/ovs_netdev.go b/src/networkprovider/ovs_netdev.go new file mode 100644 index 00000000..c98ef193 --- /dev/null +++ b/src/networkprovider/ovs_netdev.go @@ -0,0 +1,123 @@ +package networkprovider + +import ( + "fmt" + "net" + + "github.com/linkernetworks/vortex/src/entity" + "github.com/linkernetworks/vortex/src/networkcontroller" + "github.com/linkernetworks/vortex/src/serviceprovider" + "gopkg.in/mgo.v2/bson" +) + +type OVSUserspaceNetworkProvider struct { + entity.OVSUserspaceNetwork +} + +func (ovsu OVSUserspaceNetworkProvider) ValidateBeforeCreating(sp *serviceprovider.Container, network *entity.Network) error { + session := sp.Mongo.NewSession() + defer session.Close() + // FIXME validate both dpdk or userspace datapath + // Check whether vlangTag is 0~4095 + for _, pp := range ovsu.DPDKPhysicalPorts { + for _, vlangTag := range pp.VlanTags { + if vlangTag < 0 || vlangTag > 4095 { + return fmt.Errorf("The vlangTag %v in PhysicalPort %v should between 0 and 4095", pp.Name, vlangTag) + } + } + } + + q := bson.M{} + if network.Clusterwise { + //Only check the bridge name + q = bson.M{"ovsUserspace.bridgeName": ovsu.BridgeName} + } else { + q = bson.M{"nodeName": network.NodeName, "ovsUserspace.bridgeName": ovsu.BridgeName} + } + + n, err := session.Count(entity.NetworkCollectionName, q) + if n >= 1 { + return fmt.Errorf("The bridge name %s is exist, please check your cluster type and reassign another bridge name", ovsu.BridgeName) + } else if err != nil { + return err + } + return nil +} + +func (ovsu OVSUserspaceNetworkProvider) CreateNetwork(sp *serviceprovider.Container, network *entity.Network) error { + if network.Clusterwise { + nodes, _ := sp.KubeCtl.GetNodes() + for _, v := range nodes { + nodeIP, err := sp.KubeCtl.GetNodeExternalIP(v.GetName()) + if err != nil { + return err + } + // TODO if dpdk==true + if err := createOVSDPDKNetwork(nodeIP, network.OVSUserspace.BridgeName, network.OVSUserspace.DPDKPhysicalPorts); err != nil { + return err + } + // TODO else dpdk==false + // if err := createOVSUserspaceNetwork(nodeIP, network.OVS.BridgeName, network.OVS.PhysicalPorts); err != nil { + // return err + // } + } + return nil + } + nodeIP, err := sp.KubeCtl.GetNodeExternalIP(network.NodeName) + if err != nil { + return err + } + // TODO if dpdk==true + return createOVSDPDKNetwork(nodeIP, network.OVSUserspace.BridgeName, network.OVSUserspace.DPDKPhysicalPorts) + // TODO else dpdk==false + // return createOVSUserspaceNetwork(nodeIP, network.OVS.BridgeName, network.OVS.PhysicalPorts) +} + +func (ovsu OVSUserspaceNetworkProvider) DeleteNetwork(sp *serviceprovider.Container, network *entity.Network) error { + if network.Clusterwise { + nodes, _ := sp.KubeCtl.GetNodes() + for _, v := range nodes { + nodeIP, err := sp.KubeCtl.GetNodeExternalIP(v.GetName()) + if err != nil { + return err + } + if err := deleteOVSUserspaceNetwork(nodeIP, ovsu.BridgeName); err != nil { + return err + } + } + return nil + } + + nodeIP, err := sp.KubeCtl.GetNodeExternalIP(network.NodeName) + if err != nil { + return err + } + return deleteOVSUserspaceNetwork(nodeIP, ovsu.BridgeName) +} + +func createOVSDPDKNetwork(nodeIP string, bridgeName string, ports []entity.DPDKPhysicalPort) error { + nodeAddr := net.JoinHostPort(nodeIP, networkcontroller.DEFAULT_CONTROLLER_PORT) + nc, err := networkcontroller.New(nodeAddr) + if err != nil { + return err + } + return nc.CreateOVSDPDKNetwork(bridgeName, ports) +} + +func createOVSUserspaceNetwork(nodeIP string, bridgeName string, ports []entity.PhysicalPort) error { + nodeAddr := net.JoinHostPort(nodeIP, networkcontroller.DEFAULT_CONTROLLER_PORT) + nc, err := networkcontroller.New(nodeAddr) + if err != nil { + return err + } + return nc.CreateOVSUserpsaceNetwork(bridgeName, ports) +} + +func deleteOVSUserspaceNetwork(nodeIP string, bridgeName string) error { + nodeAddr := net.JoinHostPort(nodeIP, networkcontroller.DEFAULT_CONTROLLER_PORT) + nc, err := networkcontroller.New(nodeAddr) + if err != nil { + return err + } + return nc.DeleteOVSNetwork(bridgeName) +} diff --git a/src/networkprovider/ovs_dpdk_test.go b/src/networkprovider/ovs_netdev_test.go similarity index 86% rename from src/networkprovider/ovs_dpdk_test.go rename to src/networkprovider/ovs_netdev_test.go index d16434b3..5223753d 100644 --- a/src/networkprovider/ovs_dpdk_test.go +++ b/src/networkprovider/ovs_netdev_test.go @@ -64,7 +64,7 @@ func (suite *DPDKNetworkTestSuite) SetupSuite() { tName := namesgenerator.GetRandomName(0) suite.singleNetwork = entity.Network{ Name: tName, - OVSDPDK: entity.OVSDPDKNetwork{ + OVSUserspace: entity.OVSUserspaceNetwork{ BridgeName: tName, DPDKPhysicalPorts: []entity.DPDKPhysicalPort{}, }, @@ -74,7 +74,7 @@ func (suite *DPDKNetworkTestSuite) SetupSuite() { suite.clusterNetwork = entity.Network{ Name: tName, - OVSDPDK: entity.OVSDPDKNetwork{ + OVSUserspace: entity.OVSUserspaceNetwork{ BridgeName: tName, DPDKPhysicalPorts: []entity.DPDKPhysicalPort{}, }, @@ -108,11 +108,18 @@ func (suite *DPDKNetworkTestSuite) TestCreateOVSDPDKNetwork() { suite.NoError(err) } -func (suite *DPDKNetworkTestSuite) TestDeleteOVSDPDKNetwork() { +func (suite *DPDKNetworkTestSuite) TestCreateOVSUserspaceNetwork() { + name := namesgenerator.GetRandomName(0) + err := createOVSUserspaceNetwork(DPDK_LOCAL_IP, name, []entity.PhysicalPort{}) + defer exec.Command("ovs-vsctl", "del-br", name).Run() + suite.NoError(err) +} + +func (suite *DPDKNetworkTestSuite) TestDeleteOVSUserspaceNetwork() { name := namesgenerator.GetRandomName(0) // ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev exec.Command("ovs-vsctl", "add-br", name, "--", "set", "bridge", name, "datapath_type=netdev").Run() - err := deleteOVSDPDKNetwork(DPDK_LOCAL_IP, name) + err := deleteOVSUserspaceNetwork(DPDK_LOCAL_IP, name) suite.NoError(err) } @@ -130,10 +137,10 @@ func (suite *DPDKNetworkTestSuite) TestCreateNetwork() { //Parameters np, err := GetNetworkProvider(tc.network) suite.NoError(err) - np = np.(OVSDPDKNetworkProvider) + np = np.(OVSUserspaceNetworkProvider) err = np.CreateNetwork(suite.sp, tc.network) suite.NoError(err) - defer exec.Command("ovs-vsctl", "del-br", tc.network.OVS.BridgeName).Run() + defer exec.Command("ovs-vsctl", "del-br", tc.network.OVSUserspace.BridgeName).Run() }) } } @@ -145,7 +152,7 @@ func (suite *DPDKNetworkTestSuite) TestCreateNetworkFail() { network.NodeName = "non-exist" np, err := GetNetworkProvider(&network) suite.NoError(err) - np = np.(OVSDPDKNetworkProvider) + np = np.(OVSUserspaceNetworkProvider) err = np.CreateNetwork(suite.sp, &network) suite.Error(err) } @@ -170,7 +177,7 @@ func (suite *DPDKNetworkTestSuite) TestValidateBeforeCreating() { tName := namesgenerator.GetRandomName(0) network := entity.Network{ Name: tName, - OVSDPDK: entity.OVSDPDKNetwork{ + OVSUserspace: entity.OVSUserspaceNetwork{ BridgeName: tName, DPDKPhysicalPorts: []entity.DPDKPhysicalPort{eth1}, }, @@ -191,7 +198,7 @@ func (suite *DPDKNetworkTestSuite) TestValidateBeforeCreating() { //Parameters np, err := GetNetworkProvider(tc.network) suite.NoError(err) - np = np.(OVSDPDKNetworkProvider) + np = np.(OVSUserspaceNetworkProvider) err = np.ValidateBeforeCreating(suite.sp, tc.network) suite.NoError(err) @@ -215,7 +222,7 @@ func (suite *DPDKNetworkTestSuite) TestValidateBeforeCreatingFail() { tName := namesgenerator.GetRandomName(0) network := entity.Network{ Name: tName, - OVSDPDK: entity.OVSDPDKNetwork{ + OVSUserspace: entity.OVSUserspaceNetwork{ BridgeName: tName, DPDKPhysicalPorts: []entity.DPDKPhysicalPort{eth1}, }, @@ -237,7 +244,7 @@ func (suite *DPDKNetworkTestSuite) TestValidateBeforeCreatingFail() { //Parameters np, err := GetNetworkProvider(tc.network) suite.NoError(err) - np = np.(OVSDPDKNetworkProvider) + np = np.(OVSUserspaceNetworkProvider) if tc.mongo { //create a mongo-document to test duplicated name @@ -266,12 +273,12 @@ func (suite *DPDKNetworkTestSuite) TestDeleteNetwork() { //Parameters np, err := GetNetworkProvider(tc.network) suite.NoError(err) - np = np.(OVSDPDKNetworkProvider) + np = np.(OVSUserspaceNetworkProvider) err = np.CreateNetwork(suite.sp, tc.network) suite.NoError(err) // ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev - exec.Command("ovs-vsctl", "add-br", tc.network.OVSDPDK.BridgeName, "--", "set", "bridge", tc.network.OVSDPDK.BridgeName, "datapath_type=netdev").Run() + exec.Command("ovs-vsctl", "add-br", tc.network.OVSUserspace.BridgeName, "--", "set", "bridge", tc.network.OVSUserspace.BridgeName, "datapath_type=netdev").Run() //FIXME we need a function to check the bridge is exist err = np.DeleteNetwork(suite.sp, tc.network) suite.NoError(err) @@ -287,7 +294,7 @@ func (suite *DPDKNetworkTestSuite) TestDeleteNetworkFail() { np, err := GetNetworkProvider(&network) suite.NoError(err) - np = np.(OVSDPDKNetworkProvider) + np = np.(OVSUserspaceNetworkProvider) err = np.DeleteNetwork(suite.sp, &network) suite.Error(err) } diff --git a/src/networkprovider/ovs_test.go b/src/networkprovider/ovs_test.go index 3de4aec9..71618c51 100644 --- a/src/networkprovider/ovs_test.go +++ b/src/networkprovider/ovs_test.go @@ -1,6 +1,7 @@ package networkprovider import ( + "bytes" "fmt" "math/rand" "os" @@ -27,6 +28,14 @@ func init() { rand.Seed(time.Now().UnixNano()) } +func execute(suite *suite.Suite, cmd *exec.Cmd) { + w := bytes.NewBuffer(nil) + cmd.Stderr = w + err := cmd.Run() + suite.NoError(err) + fmt.Printf("Stderr: %s\n", string(w.Bytes())) +} + type NetworkTestSuite struct { suite.Suite sp *serviceprovider.Container diff --git a/src/networkprovider/testutils/testutils.go b/src/networkprovider/testutils/testutils.go deleted file mode 100644 index 919ee093..00000000 --- a/src/networkprovider/testutils/testutils.go +++ /dev/null @@ -1,17 +0,0 @@ -package testutils - -import ( - "bytes" - "fmt" - "os/exec" - - "github.com/stretchr/testify/suite" -) - -func Execute(suite *suite.Suite, cmd *exec.Cmd) { - w := bytes.NewBuffer(nil) - cmd.Stderr = w - err := cmd.Run() - suite.NoError(err) - fmt.Printf("Stderr: %s\n", string(w.Bytes())) -}