Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VX-166 remove validate function #89

Merged
merged 1 commit into from
Jul 13, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions src/entity/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package entity
import (
"time"

"github.com/linkernetworks/vortex/src/errors"
"gopkg.in/mgo.v2/bson"
)

Expand Down Expand Up @@ -47,3 +48,13 @@ type Network struct {
func (m Network) GetCollection() string {
return NetworkCollectionName
}

// Validate VLAN tags
func ValidateVLANTags(vlanTags []int32) error {
for _, tag := range vlanTags {
if tag < 0 || tag > 4095 {
return errors.NewErrInvalidVLAN("VLAN tag should between 0 and 4095")
}
}
return nil
}
15 changes: 15 additions & 0 deletions src/errors/network.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package errors

type ErrInvalidVLAN struct {
message string
}

func NewErrInvalidVLAN(message string) *ErrInvalidVLAN {
return &ErrInvalidVLAN{
message: message,
}
}

func (e *ErrInvalidVLAN) Error() string {
return e.message
}
9 changes: 0 additions & 9 deletions src/networkprovider/fake.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,6 @@ type fakeNetworkProvider struct {
isDPDKPort bool
}

func (fnp fakeNetworkProvider) ValidateBeforeCreating(sp *serviceprovider.Container) error {
for _, node := range fnp.nodes {
if node.FakeParameter == "" {
return fmt.Errorf("Fail to validate but don't worry, I'm fake network")
}
}
return nil
}

func (fnp fakeNetworkProvider) CreateNetwork(sp *serviceprovider.Container) error {
for _, node := range fnp.nodes {
if node.ShouldFail {
Expand Down
28 changes: 0 additions & 28 deletions src/networkprovider/fake_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,6 @@ import (
"github.com/linkernetworks/vortex/src/entity"
)

func TestNetworkValidateBeforeCreating(t *testing.T) {
fake, err := GetNetworkProvider(&entity.Network{
Type: entity.FakeNetworkType,
Nodes: []entity.Node{
entity.Node{
FakeParameter: "yes",
},
},
})
assert.NoError(t, err)
err = fake.ValidateBeforeCreating(nil)
assert.NoError(t, err)
}

func TestFakeNetworkCreating(t *testing.T) {
fake, err := GetNetworkProvider(&entity.Network{
Type: entity.FakeNetworkType,
Expand All @@ -37,20 +23,6 @@ func TestFakeNetworkCreating(t *testing.T) {
assert.NoError(t, err)
}

func TestFakeNetworkValidateBeforeCreatingFail(t *testing.T) {
fake, err := GetNetworkProvider(&entity.Network{
Type: entity.FakeNetworkType,
Nodes: []entity.Node{
entity.Node{
FakeParameter: "",
},
},
})
assert.NoError(t, err)
err = fake.ValidateBeforeCreating(nil)
assert.Error(t, err)
}

func TestFakeNetworkCreatingFail(t *testing.T) {
fake, err := GetNetworkProvider(&entity.Network{
Type: entity.FakeNetworkType,
Expand Down
1 change: 0 additions & 1 deletion src/networkprovider/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
)

type NetworkProvider interface {
ValidateBeforeCreating(sp *serviceprovider.Container) error
CreateNetwork(sp *serviceprovider.Container) error
DeleteNetwork(sp *serviceprovider.Container) error
}
Expand Down
26 changes: 2 additions & 24 deletions src/networkprovider/ovs_netdev.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
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 userspaceNetworkProvider struct {
Expand All @@ -18,30 +16,10 @@ type userspaceNetworkProvider struct {
isDPDKPort bool
}

func (unp userspaceNetworkProvider) ValidateBeforeCreating(sp *serviceprovider.Container) error {
session := sp.Mongo.NewSession()
defer session.Close()

// Check whether VLAN Tag is 0~4095
for _, tag := range unp.vlanTags {
if tag < 0 || tag > 4095 {
return fmt.Errorf("The vlangTag %d should between 0 and 4095", tag)
}
}

q := bson.M{
"name": unp.networkName,
}
n, err := session.Count(entity.NetworkCollectionName, q)
if n >= 1 {
return fmt.Errorf("The network name: %s is exist.", unp.networkName)
} else if err != nil {
func (unp userspaceNetworkProvider) CreateNetwork(sp *serviceprovider.Container) error {
if err := entity.ValidateVLANTags(unp.vlanTags); err != nil {
return err
}
return nil
}

func (unp userspaceNetworkProvider) CreateNetwork(sp *serviceprovider.Container) error {
for _, node := range unp.nodes {
nodeIP, err := sp.KubeCtl.GetNodeExternalIP(node.Name)
if err != nil {
Expand Down
110 changes: 0 additions & 110 deletions src/networkprovider/ovs_netdev_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,13 @@ func init() {
rand.Seed(time.Now().UnixNano())
}

// OK
type OVSNetdevNetworkTestSuite struct {
suite.Suite
sp *serviceprovider.Container
standaloneNetwork entity.Network
clusterwiseNetwork entity.Network
}

// OK
func (suite *OVSNetdevNetworkTestSuite) SetupSuite() {
cf := config.MustRead("../../config/testing.json")
suite.sp = serviceprovider.NewForTesting(cf)
Expand Down Expand Up @@ -111,7 +109,6 @@ func (suite *OVSNetdevNetworkTestSuite) SetupSuite() {

func (suite *OVSNetdevNetworkTestSuite) TearDownSuite() {}

// OK
func TestNetworkSuite(t *testing.T) {
if runtime.GOOS != "linux" {
fmt.Println("We only testing the ovs function on Linux Host")
Expand All @@ -125,7 +122,6 @@ func TestNetworkSuite(t *testing.T) {
suite.Run(t, new(OVSNetdevNetworkTestSuite))
}

// OK. might fail
func (suite *OVSNetdevNetworkTestSuite) TestCreateOVSDPDKNetwork() {
brName := namesgenerator.GetRandomName(0)
err := createOVSDPDKNetwork(
Expand All @@ -138,7 +134,6 @@ func (suite *OVSNetdevNetworkTestSuite) TestCreateOVSDPDKNetwork() {
suite.NoError(err)
}

// OK
func (suite *OVSNetdevNetworkTestSuite) TestCreateOVSUserspaceNetwork() {
brName := namesgenerator.GetRandomName(0)
err := createOVSUserspaceNetwork(
Expand All @@ -151,7 +146,6 @@ func (suite *OVSNetdevNetworkTestSuite) TestCreateOVSUserspaceNetwork() {
suite.NoError(err)
}

// OK
func (suite *OVSNetdevNetworkTestSuite) TestDeleteOVSUserspaceNetwork() {
brName := namesgenerator.GetRandomName(0)
// ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev
Expand All @@ -160,7 +154,6 @@ func (suite *OVSNetdevNetworkTestSuite) TestDeleteOVSUserspaceNetwork() {
suite.NoError(err)
}

// OK
func (suite *OVSNetdevNetworkTestSuite) TestCreateNetwork() {
testCases := []struct {
caseName string
Expand All @@ -182,7 +175,6 @@ func (suite *OVSNetdevNetworkTestSuite) TestCreateNetwork() {
}
}

// OK
func (suite *OVSNetdevNetworkTestSuite) TestCreateNetworkFail() {
network := entity.Network{
Type: entity.OVSUserspaceNetworkType,
Expand All @@ -202,107 +194,6 @@ func (suite *OVSNetdevNetworkTestSuite) TestCreateNetworkFail() {
suite.Error(err)
}

// OK
func (suite *OVSNetdevNetworkTestSuite) TestValidateBeforeCreating() {
tName := namesgenerator.GetRandomName(0)
// Valid VLAN number
validVLANnetwork := entity.Network{
Type: entity.OVSUserspaceNetworkType,
IsDPDKPort: false,
Name: tName,
VLANTags: []int32{0, 2048, 4095},
BridgeName: "bro",
Nodes: []entity.Node{
entity.Node{
Name: "node-1",
PhyInterfaces: []entity.PhyInterface{
entity.PhyInterface{
Name: namesgenerator.GetRandomName(0),
PCIID: "",
},
},
},
},
}

testCases := []struct {
caseName string
network *entity.Network
}{
{"validVLAN", &validVLANnetwork},
{"singelNetwork", &suite.standaloneNetwork},
{"clusterNetwork", &suite.clusterwiseNetwork},
}

for _, tc := range testCases {
suite.T().Run(tc.caseName, func(t *testing.T) {
//Parameters
np, err := GetNetworkProvider(tc.network)
suite.NoError(err)
np = np.(userspaceNetworkProvider)

err = np.ValidateBeforeCreating(suite.sp)
suite.NoError(err)
})
}
}

// OK
func (suite *OVSNetdevNetworkTestSuite) TestValidateBeforeCreatingFail() {
tName := namesgenerator.GetRandomName(0)
// Invalid VLAN number
invalidVLANnetwork := entity.Network{
Type: entity.OVSUserspaceNetworkType,
IsDPDKPort: false,
Name: tName,
VLANTags: []int32{22435, 2143, 4096},
BridgeName: "brx",
Nodes: []entity.Node{
entity.Node{
Name: "node-1",
PhyInterfaces: []entity.PhyInterface{
entity.PhyInterface{
Name: namesgenerator.GetRandomName(0),
PCIID: "",
},
},
},
},
}

// Invalid Case for duplicated name in standalone network
// Invalid Case for duplicates name in clusterwise network
testCases := []struct {
caseName string
network *entity.Network
mongo bool
}{
{"invalidVLAN", &invalidVLANnetwork, false},
{"standaloneNetwork", &suite.standaloneNetwork, true},
{"clusterwiseNetwork", &suite.clusterwiseNetwork, true},
}

for _, tc := range testCases {
suite.T().Run(tc.caseName, func(t *testing.T) {
//Parameters
np, err := GetNetworkProvider(tc.network)
suite.NoError(err)
np = np.(userspaceNetworkProvider)

if tc.mongo {
//create a mongo-document to test duplicated name
session := suite.sp.Mongo.NewSession()
err := session.C(entity.NetworkCollectionName).Insert(tc.network)
defer session.C(entity.NetworkCollectionName).Remove(tc.network)
suite.NoError(err)
}
err = np.ValidateBeforeCreating(suite.sp)
suite.Error(err)
})
}
}

// OK
func (suite *OVSNetdevNetworkTestSuite) TestDeleteNetwork() {
testCases := []struct {
caseName string
Expand Down Expand Up @@ -330,7 +221,6 @@ func (suite *OVSNetdevNetworkTestSuite) TestDeleteNetwork() {
}
}

// OK
func (suite *OVSNetdevNetworkTestSuite) TestDeleteNetworkFail() {
network := entity.Network{
Type: entity.OVSUserspaceNetworkType,
Expand Down
29 changes: 0 additions & 29 deletions src/networkprovider/ovs_system.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
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 kernelspaceNetworkProvider struct {
Expand All @@ -18,33 +16,6 @@ type kernelspaceNetworkProvider struct {
isDPDKPort bool
}

func (knp kernelspaceNetworkProvider) ValidateBeforeCreating(sp *serviceprovider.Container) error {
session := sp.Mongo.NewSession()
defer session.Close()

// Check whether VLAN Tag is 0~4095
for _, tag := range knp.vlanTags {
if tag < 0 || tag > 4095 {
return fmt.Errorf("The vlangTag %d should between 0 and 4095", tag)
}
}

if knp.isDPDKPort != false {
return fmt.Errorf("unsupport dpdk in kernel space datapath")
}

q := bson.M{
"name": knp.networkName,
}
n, err := session.Count(entity.NetworkCollectionName, q)
if n >= 1 {
return fmt.Errorf("The network name: %s is exist.", knp.networkName)
} else if err != nil {
return err
}
return nil
}

func (knp kernelspaceNetworkProvider) CreateNetwork(sp *serviceprovider.Container) error {
for _, node := range knp.nodes {
nodeIP, err := sp.KubeCtl.GetNodeExternalIP(node.Name)
Expand Down
Loading