Skip to content

Commit f7eaf39

Browse files
committed
add network tests
1 parent a5f66f3 commit f7eaf39

File tree

5 files changed

+114
-15
lines changed

5 files changed

+114
-15
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,4 @@ cloc:
3838
cloc --exclude-dir=vendor,3rdmocks,mocks --not-match-f=test .
3939

4040
unit-test:
41-
go test --race -cover ./utils/... ./types/... ./store/etcdv3/... ./scheduler/complex/... ./source/common/...
41+
go test --race -cover ./utils/... ./types/... ./store/etcdv3/... ./scheduler/complex/... ./source/common/... ./network/sdn/...

network/sdn/plugin.go

+11-10
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@ import (
1313
log "github.com/sirupsen/logrus"
1414
)
1515

16-
type titanium struct{}
16+
// Titanium for calico sdn
17+
type Titanium struct{}
1718

18-
// connect to network with ipv4 address
19-
func (t *titanium) ConnectToNetwork(ctx context.Context, containerID, networkID, ipv4 string) error {
19+
// ConnectToNetwork to network with ipv4 address
20+
func (t *Titanium) ConnectToNetwork(ctx context.Context, containerID, networkID, ipv4 string) error {
2021
if len(containerID) != 64 {
2122
return types.ErrBadContainerID
2223
}
@@ -46,8 +47,8 @@ func (t *titanium) ConnectToNetwork(ctx context.Context, containerID, networkID,
4647
return engine.NetworkConnect(ctx, networkID, containerID, config)
4748
}
4849

49-
// disconnect from network
50-
func (t *titanium) DisconnectFromNetwork(ctx context.Context, containerID, networkID string) error {
50+
// DisconnectFromNetwork from network
51+
func (t *Titanium) DisconnectFromNetwork(ctx context.Context, containerID, networkID string) error {
5152
if len(containerID) != 64 {
5253
return types.ErrBadContainerID
5354
}
@@ -62,8 +63,8 @@ func (t *titanium) DisconnectFromNetwork(ctx context.Context, containerID, netwo
6263
return engine.NetworkDisconnect(ctx, networkID, containerID, false)
6364
}
6465

65-
// list networks from context
66-
func (t *titanium) ListNetworks(ctx context.Context, driver string) ([]*types.Network, error) {
66+
// ListNetworks networks from context
67+
func (t *Titanium) ListNetworks(ctx context.Context, driver string) ([]*types.Network, error) {
6768
networks := []*types.Network{}
6869
engine, ok := utils.GetDockerEngineFromContext(ctx)
6970
if !ok {
@@ -90,7 +91,7 @@ func (t *titanium) ListNetworks(ctx context.Context, driver string) ([]*types.Ne
9091
return networks, nil
9192
}
9293

93-
//New a titanium obj
94-
func New() *titanium {
95-
return &titanium{}
94+
// New a titanium obj
95+
func New() *Titanium {
96+
return &Titanium{}
9697
}

network/sdn/plugin_test.go

+98
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package sdn
2+
3+
import (
4+
"context"
5+
"errors"
6+
"testing"
7+
8+
enginetypes "github.com/docker/docker/api/types"
9+
enginenetwork "github.com/docker/docker/api/types/network"
10+
enginemocks "github.com/projecteru2/core/3rdmocks"
11+
"github.com/projecteru2/core/utils"
12+
"github.com/stretchr/testify/assert"
13+
"github.com/stretchr/testify/mock"
14+
)
15+
16+
func TestConnectToNetwork(t *testing.T) {
17+
s := New()
18+
containerID := "1234567812345678123456781234567812345678123456781234567812345678"
19+
mockEngine := &enginemocks.APIClient{}
20+
// container id not 64
21+
err := s.ConnectToNetwork(context.Background(), "", "", "")
22+
assert.Error(t, err)
23+
// no engine
24+
err = s.ConnectToNetwork(context.Background(), containerID, "", "")
25+
assert.Error(t, err)
26+
27+
ctx := utils.ContextWithDockerEngine(context.Background(), mockEngine)
28+
mockEngine.On("NetworkConnect",
29+
mock.AnythingOfType("*context.valueCtx"), mock.Anything, mock.Anything, mock.Anything,
30+
).Return(nil)
31+
// no ipv4
32+
err = s.ConnectToNetwork(ctx, containerID, "", "")
33+
assert.NoError(t, err)
34+
// invaild ipv4
35+
err = s.ConnectToNetwork(ctx, containerID, "", "x.0.1.8")
36+
assert.Error(t, err)
37+
// vaild ipv4
38+
err = s.ConnectToNetwork(ctx, containerID, "", "127.0.0.1")
39+
assert.NoError(t, err)
40+
}
41+
42+
func TestDisconnectFromNetwork(t *testing.T) {
43+
s := New()
44+
containerID := "1234567812345678123456781234567812345678123456781234567812345678"
45+
mockEngine := &enginemocks.APIClient{}
46+
// container id not 64
47+
err := s.ConnectToNetwork(context.Background(), "", "", "")
48+
assert.Error(t, err)
49+
// no engine
50+
err = s.ConnectToNetwork(context.Background(), containerID, "", "")
51+
assert.Error(t, err)
52+
ctx := utils.ContextWithDockerEngine(context.Background(), mockEngine)
53+
mockEngine.On("NetworkDisconnect",
54+
mock.AnythingOfType("*context.valueCtx"), mock.Anything, mock.Anything, mock.Anything,
55+
).Return(nil)
56+
err = s.DisconnectFromNetwork(ctx, containerID, "")
57+
assert.NoError(t, err)
58+
}
59+
60+
func TestListNetworksFail(t *testing.T) {
61+
s := New()
62+
mockEngine := &enginemocks.APIClient{}
63+
// no engine
64+
_, err := s.ListNetworks(context.Background(), "")
65+
assert.Error(t, err)
66+
ctx := utils.ContextWithDockerEngine(context.Background(), mockEngine)
67+
mockEngine.On("NetworkList",
68+
mock.AnythingOfType("*context.valueCtx"), mock.Anything,
69+
).Return(nil, errors.New("test"))
70+
// List failed
71+
_, err = s.ListNetworks(ctx, "")
72+
assert.Error(t, err)
73+
}
74+
75+
func TestListNetworks(t *testing.T) {
76+
s := New()
77+
mockEngine := &enginemocks.APIClient{}
78+
ctx := utils.ContextWithDockerEngine(context.Background(), mockEngine)
79+
// List
80+
networkName := "test"
81+
subnet := "10.2.0.0/16"
82+
result := []enginetypes.NetworkResource{
83+
enginetypes.NetworkResource{
84+
Name: networkName,
85+
IPAM: enginenetwork.IPAM{
86+
Config: []enginenetwork.IPAMConfig{
87+
enginenetwork.IPAMConfig{Subnet: subnet},
88+
}}},
89+
}
90+
mockEngine.On("NetworkList",
91+
mock.AnythingOfType("*context.valueCtx"), mock.Anything,
92+
).Return(result, nil)
93+
ns, err := s.ListNetworks(ctx, "")
94+
assert.NoError(t, err)
95+
assert.Equal(t, len(ns), 1)
96+
assert.Equal(t, ns[0].Name, networkName)
97+
assert.Equal(t, ns[0].Subnets[0], subnet)
98+
}

store/etcdv3/helper.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
enginetypes "github.com/docker/docker/api/types"
99
engineapi "github.com/docker/docker/client"
1010
"github.com/docker/go-connections/tlsconfig"
11-
enginemock "github.com/projecteru2/core/3rdmocks"
11+
enginemocks "github.com/projecteru2/core/3rdmocks"
1212
"github.com/projecteru2/core/types"
1313
log "github.com/sirupsen/logrus"
1414
"github.com/stretchr/testify/mock"
@@ -33,7 +33,7 @@ func dumpFromString(ca, cert, key *os.File, caStr, certStr, keyStr string) error
3333
}
3434

3535
func makeMockClient() (engineapi.APIClient, error) {
36-
engine := &enginemock.APIClient{}
36+
engine := &enginemocks.APIClient{}
3737
engine.On("Info", mock.AnythingOfType("*context.emptyCtx")).Return(
3838
enginetypes.Info{NCPU: 1, MemTotal: types.GByte + 100}, nil)
3939
return engine, nil

types/node_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ import (
99
"github.com/stretchr/testify/assert"
1010

1111
enginetypes "github.com/docker/docker/api/types"
12-
"github.com/projecteru2/core/3rdmocks"
12+
enginemocks "github.com/projecteru2/core/3rdmocks"
1313
)
1414

1515
func TestNode(t *testing.T) {
16-
mockEngine := &mocks.APIClient{}
16+
mockEngine := &enginemocks.APIClient{}
1717
r := enginetypes.Info{ID: "test"}
1818
mockEngine.On("Info", mock.AnythingOfType("*context.timerCtx")).Return(r, nil)
1919

0 commit comments

Comments
 (0)