Skip to content

Commit

Permalink
test(frr): start using mockery
Browse files Browse the repository at this point in the history
Fixes #251

Signed-off-by: Boris Glimcher <[email protected]>
  • Loading branch information
glimchb committed Oct 16, 2023
1 parent 9dafc65 commit 15b7489
Show file tree
Hide file tree
Showing 9 changed files with 143 additions and 109 deletions.
45 changes: 25 additions & 20 deletions pkg/evpn/bridge_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ func Test_CreateLogicalBridge(t *testing.T) {
errCode codes.Code
errMsg string
exist bool
on func(mockNetlink *mocks.Netlink, errMsg string)
on func(mockNetlink *mocks.Netlink, mockFrr *mocks.Frr, errMsg string)
}{
"illegal resource_id": {
id: "CapitalLettersNotAllowed",
Expand Down Expand Up @@ -147,7 +147,7 @@ func Test_CreateLogicalBridge(t *testing.T) {
errCode: codes.NotFound,
errMsg: fmt.Sprintf("unable to find key %v", tenantbridgeName),
exist: false,
on: func(mockNetlink *mocks.Netlink, errMsg string) {
on: func(mockNetlink *mocks.Netlink, mockFrr *mocks.Frr, errMsg string) {
mockNetlink.EXPECT().LinkByName(mock.Anything, tenantbridgeName).Return(nil, errors.New(errMsg)).Once()
},
},
Expand All @@ -158,7 +158,7 @@ func Test_CreateLogicalBridge(t *testing.T) {
errCode: codes.Unknown,
errMsg: "Failed to call LinkAdd",
exist: false,
on: func(mockNetlink *mocks.Netlink, errMsg string) {
on: func(mockNetlink *mocks.Netlink, mockFrr *mocks.Frr, errMsg string) {
// myip := net.ParseIP("10.0.0.2")
myip := make(net.IP, 4)
binary.BigEndian.PutUint32(myip, 167772162)
Expand All @@ -176,7 +176,7 @@ func Test_CreateLogicalBridge(t *testing.T) {
errCode: codes.Unknown,
errMsg: "Failed to call LinkSetMaster",
exist: false,
on: func(mockNetlink *mocks.Netlink, errMsg string) {
on: func(mockNetlink *mocks.Netlink, mockFrr *mocks.Frr, errMsg string) {
myip := make(net.IP, 4)
binary.BigEndian.PutUint32(myip, 167772162)
vxlanName := fmt.Sprintf("vni%d", *testLogicalBridge.Spec.Vni)
Expand All @@ -194,7 +194,7 @@ func Test_CreateLogicalBridge(t *testing.T) {
errCode: codes.Unknown,
errMsg: "Failed to call LinkSetUp",
exist: false,
on: func(mockNetlink *mocks.Netlink, errMsg string) {
on: func(mockNetlink *mocks.Netlink, mockFrr *mocks.Frr, errMsg string) {
myip := make(net.IP, 4)
binary.BigEndian.PutUint32(myip, 167772162)
vxlanName := fmt.Sprintf("vni%d", *testLogicalBridge.Spec.Vni)
Expand All @@ -213,7 +213,7 @@ func Test_CreateLogicalBridge(t *testing.T) {
errCode: codes.Unknown,
errMsg: "Failed to call BridgeVlanAdd",
exist: false,
on: func(mockNetlink *mocks.Netlink, errMsg string) {
on: func(mockNetlink *mocks.Netlink, mockFrr *mocks.Frr, errMsg string) {
myip := make(net.IP, 4)
binary.BigEndian.PutUint32(myip, 167772162)
vxlanName := fmt.Sprintf("vni%d", *testLogicalBridge.Spec.Vni)
Expand All @@ -234,7 +234,7 @@ func Test_CreateLogicalBridge(t *testing.T) {
errCode: codes.OK,
errMsg: "",
exist: false,
on: func(mockNetlink *mocks.Netlink, errMsg string) {
on: func(mockNetlink *mocks.Netlink, mockFrr *mocks.Frr, errMsg string) {
myip := make(net.IP, 4)
binary.BigEndian.PutUint32(myip, 167772162)
vxlanName := fmt.Sprintf("vni%d", *testLogicalBridge.Spec.Vni)
Expand All @@ -256,7 +256,8 @@ func Test_CreateLogicalBridge(t *testing.T) {
// start GRPC mockup server
ctx := context.Background()
mockNetlink := mocks.NewNetlink(t)
opi := NewServerWithArgs(mockNetlink)
mockFrr := mocks.NewFrr(t)
opi := NewServerWithArgs(mockNetlink, mockFrr)
conn, err := grpc.DialContext(ctx,
"",
grpc.WithTransportCredentials(insecure.NewCredentials()),
Expand All @@ -280,7 +281,7 @@ func Test_CreateLogicalBridge(t *testing.T) {
tt.out.Name = testLogicalBridgeName
}
if tt.on != nil {
tt.on(mockNetlink, tt.errMsg)
tt.on(mockNetlink, mockFrr, tt.errMsg)
}

request := &pb.CreateLogicalBridgeRequest{LogicalBridge: tt.in, LogicalBridgeId: tt.id}
Expand Down Expand Up @@ -310,7 +311,7 @@ func Test_DeleteLogicalBridge(t *testing.T) {
errCode codes.Code
errMsg string
missing bool
on func(mockNetlink *mocks.Netlink, errMsg string)
on func(mockNetlink *mocks.Netlink, mockFrr *mocks.Frr, errMsg string)
}{
"valid request with unknown key": {
in: "unknown-id",
Expand Down Expand Up @@ -342,7 +343,7 @@ func Test_DeleteLogicalBridge(t *testing.T) {
errCode: codes.NotFound,
errMsg: fmt.Sprintf("unable to find key %v", "vni11"),
missing: false,
on: func(mockNetlink *mocks.Netlink, errMsg string) {
on: func(mockNetlink *mocks.Netlink, mockFrr *mocks.Frr, errMsg string) {
vxlanName := fmt.Sprintf("vni%d", *testLogicalBridge.Spec.Vni)
mockNetlink.EXPECT().LinkByName(mock.Anything, vxlanName).Return(nil, errors.New(errMsg)).Once()
},
Expand All @@ -353,7 +354,7 @@ func Test_DeleteLogicalBridge(t *testing.T) {
errCode: codes.Unknown,
errMsg: "Failed to call LinkSetDown",
missing: false,
on: func(mockNetlink *mocks.Netlink, errMsg string) {
on: func(mockNetlink *mocks.Netlink, mockFrr *mocks.Frr, errMsg string) {
myip := make(net.IP, 4)
binary.BigEndian.PutUint32(myip, 167772162)
vxlanName := fmt.Sprintf("vni%d", *testLogicalBridge.Spec.Vni)
Expand All @@ -368,7 +369,7 @@ func Test_DeleteLogicalBridge(t *testing.T) {
errCode: codes.Unknown,
errMsg: "Failed to call BridgeVlanDel",
missing: false,
on: func(mockNetlink *mocks.Netlink, errMsg string) {
on: func(mockNetlink *mocks.Netlink, mockFrr *mocks.Frr, errMsg string) {
myip := make(net.IP, 4)
binary.BigEndian.PutUint32(myip, 167772162)
vxlanName := fmt.Sprintf("vni%d", *testLogicalBridge.Spec.Vni)
Expand All @@ -385,7 +386,7 @@ func Test_DeleteLogicalBridge(t *testing.T) {
errCode: codes.Unknown,
errMsg: "Failed to call LinkDel",
missing: false,
on: func(mockNetlink *mocks.Netlink, errMsg string) {
on: func(mockNetlink *mocks.Netlink, mockFrr *mocks.Frr, errMsg string) {
myip := make(net.IP, 4)
binary.BigEndian.PutUint32(myip, 167772162)
vxlanName := fmt.Sprintf("vni%d", *testLogicalBridge.Spec.Vni)
Expand All @@ -403,7 +404,7 @@ func Test_DeleteLogicalBridge(t *testing.T) {
errCode: codes.OK,
errMsg: "",
missing: false,
on: func(mockNetlink *mocks.Netlink, errMsg string) {
on: func(mockNetlink *mocks.Netlink, mockFrr *mocks.Frr, errMsg string) {
myip := make(net.IP, 4)
binary.BigEndian.PutUint32(myip, 167772162)
vxlanName := fmt.Sprintf("vni%d", *testLogicalBridge.Spec.Vni)
Expand All @@ -423,7 +424,8 @@ func Test_DeleteLogicalBridge(t *testing.T) {
// start GRPC mockup server
ctx := context.Background()
mockNetlink := mocks.NewNetlink(t)
opi := NewServerWithArgs(mockNetlink)
mockFrr := mocks.NewFrr(t)
opi := NewServerWithArgs(mockNetlink, mockFrr)
conn, err := grpc.DialContext(ctx,
"",
grpc.WithTransportCredentials(insecure.NewCredentials()),
Expand All @@ -443,7 +445,7 @@ func Test_DeleteLogicalBridge(t *testing.T) {
opi.Bridges[testLogicalBridgeName] = protoClone(&testLogicalBridgeWithStatus)

if tt.on != nil {
tt.on(mockNetlink, tt.errMsg)
tt.on(mockNetlink, mockFrr, tt.errMsg)
}

request := &pb.DeleteLogicalBridgeRequest{Name: fname1, AllowMissing: tt.missing}
Expand Down Expand Up @@ -513,7 +515,8 @@ func Test_UpdateLogicalBridge(t *testing.T) {
// start GRPC mockup server
ctx := context.Background()
mockNetlink := mocks.NewNetlink(t)
opi := NewServerWithArgs(mockNetlink)
mockFrr := mocks.NewFrr(t)
opi := NewServerWithArgs(mockNetlink, mockFrr)
conn, err := grpc.DialContext(ctx,
"",
grpc.WithTransportCredentials(insecure.NewCredentials()),
Expand Down Expand Up @@ -593,7 +596,8 @@ func Test_GetLogicalBridge(t *testing.T) {
// start GRPC mockup server
ctx := context.Background()
mockNetlink := mocks.NewNetlink(t)
opi := NewServerWithArgs(mockNetlink)
mockFrr := mocks.NewFrr(t)
opi := NewServerWithArgs(mockNetlink, mockFrr)
conn, err := grpc.DialContext(ctx,
"",
grpc.WithTransportCredentials(insecure.NewCredentials()),
Expand Down Expand Up @@ -696,7 +700,8 @@ func Test_ListLogicalBridges(t *testing.T) {
// start GRPC mockup server
ctx := context.Background()
mockNetlink := mocks.NewNetlink(t)
opi := NewServerWithArgs(mockNetlink)
mockFrr := mocks.NewFrr(t)
opi := NewServerWithArgs(mockNetlink, mockFrr)
conn, err := grpc.DialContext(ctx,
"",
grpc.WithTransportCredentials(insecure.NewCredentials()),
Expand Down
10 changes: 7 additions & 3 deletions pkg/evpn/evpn.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,16 @@ type Server struct {
// NewServer creates initialized instance of EVPN server
func NewServer() *Server {
nLink := utils.NewNetlinkWrapper()
return NewServerWithArgs(nLink)
frr := utils.NewFrrWrapper()
return NewServerWithArgs(nLink, frr)
}

// NewServerWithArgs creates initialized instance of EVPN server
// with externally created Netlink
func NewServerWithArgs(nLink utils.Netlink) *Server {
func NewServerWithArgs(nLink utils.Netlink, frr utils.Frr) *Server {
if frr == nil {
log.Panic("nil for Frr is not allowed")
}
if nLink == nil {
log.Panic("nil for Netlink is not allowed")
}
Expand All @@ -61,7 +65,7 @@ func NewServerWithArgs(nLink utils.Netlink) *Server {
Vrfs: make(map[string]*pe.Vrf),
Pagination: make(map[string]int),
nLink: nLink,
frr: utils.NewFrrWrapper(),
frr: frr,
tracer: otel.Tracer(""),
}
}
Expand Down
10 changes: 9 additions & 1 deletion pkg/evpn/evpn_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,22 @@ func equalProtoSlices[T proto.Message](x, y []T) bool {

func TestFrontEnd_NewServerWithArgs(t *testing.T) {
tests := map[string]struct {
frr utils.Frr
nLink utils.Netlink
wantPanic bool
}{
"nil netlink argument": {
frr: &utils.FrrWrapper{},
nLink: nil,
wantPanic: true,
},
"nil frr argument": {
frr: nil,
nLink: &utils.NetlinkWrapper{},
wantPanic: true,
},
"all valid arguments": {
frr: &utils.FrrWrapper{},
nLink: &utils.NetlinkWrapper{},
wantPanic: false,
},
Expand All @@ -78,7 +86,7 @@ func TestFrontEnd_NewServerWithArgs(t *testing.T) {
}
}()

server := NewServerWithArgs(tt.nLink)
server := NewServerWithArgs(tt.nLink, tt.frr)
if server == nil && !tt.wantPanic {
t.Error("expected non nil server or panic")
}
Expand Down
Loading

0 comments on commit 15b7489

Please sign in to comment.