diff --git a/cmd/evpn-vrf.go b/cmd/evpn-vrf.go index 4302de0d..6a04603b 100644 --- a/cmd/evpn-vrf.go +++ b/cmd/evpn-vrf.go @@ -35,7 +35,7 @@ func CreateVRF() *cobra.Command { vrf, err := evpnClient.CreateVrf(ctx, name, vni, loopback, vtep) if err != nil { - log.Fatalf("failed to create logical bridge: %v", err) + log.Fatalf("failed to create vrf: %v", err) } log.Printf("Created VRF with \n name: %s\n operation status: %d\n vni : %d\n vtep ip : %s\n loopback ip: %s\n", vrf.GetName(), vrf.GetStatus().GetOperStatus(), vrf.GetSpec().GetVni(), vrf.GetSpec().GetVtepIpPrefix(), vrf.GetSpec().GetLoopbackIpPrefix()) diff --git a/mocks/EvpnClient.go b/mocks/EvpnClient.go new file mode 100644 index 00000000..8284ba6d --- /dev/null +++ b/mocks/EvpnClient.go @@ -0,0 +1,552 @@ +// Code generated by mockery v2.32.4. DO NOT EDIT. + +package mocks + +import ( + context "context" + + _go "github.com/opiproject/opi-api/network/evpn-gw/v1alpha1/gen/go" + + emptypb "google.golang.org/protobuf/types/known/emptypb" + + mock "github.com/stretchr/testify/mock" +) + +// EvpnClient is an autogenerated mock type for the EvpnClient type +type EvpnClient struct { + mock.Mock +} + +// CreateBridgePort provides a mock function with given fields: ctx, name, mac, bridgePortType, logicalBridges +func (_m *EvpnClient) CreateBridgePort(ctx context.Context, name string, mac string, bridgePortType string, logicalBridges []string) (*_go.BridgePort, error) { + ret := _m.Called(ctx, name, mac, bridgePortType, logicalBridges) + + var r0 *_go.BridgePort + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, string, string, []string) (*_go.BridgePort, error)); ok { + return rf(ctx, name, mac, bridgePortType, logicalBridges) + } + if rf, ok := ret.Get(0).(func(context.Context, string, string, string, []string) *_go.BridgePort); ok { + r0 = rf(ctx, name, mac, bridgePortType, logicalBridges) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*_go.BridgePort) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, string, string, []string) error); ok { + r1 = rf(ctx, name, mac, bridgePortType, logicalBridges) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CreateLogicalBridge provides a mock function with given fields: ctx, name, vlanID, vni +func (_m *EvpnClient) CreateLogicalBridge(ctx context.Context, name string, vlanID uint32, vni uint32) (*_go.LogicalBridge, error) { + ret := _m.Called(ctx, name, vlanID, vni) + + var r0 *_go.LogicalBridge + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, uint32, uint32) (*_go.LogicalBridge, error)); ok { + return rf(ctx, name, vlanID, vni) + } + if rf, ok := ret.Get(0).(func(context.Context, string, uint32, uint32) *_go.LogicalBridge); ok { + r0 = rf(ctx, name, vlanID, vni) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*_go.LogicalBridge) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, uint32, uint32) error); ok { + r1 = rf(ctx, name, vlanID, vni) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CreateSvi provides a mock function with given fields: ctx, name, vrf, logicalBridge, mac, gwIPs, ebgp, remoteAS +func (_m *EvpnClient) CreateSvi(ctx context.Context, name string, vrf string, logicalBridge string, mac string, gwIPs []string, ebgp bool, remoteAS uint32) (*_go.Svi, error) { + ret := _m.Called(ctx, name, vrf, logicalBridge, mac, gwIPs, ebgp, remoteAS) + + var r0 *_go.Svi + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, string, string, string, []string, bool, uint32) (*_go.Svi, error)); ok { + return rf(ctx, name, vrf, logicalBridge, mac, gwIPs, ebgp, remoteAS) + } + if rf, ok := ret.Get(0).(func(context.Context, string, string, string, string, []string, bool, uint32) *_go.Svi); ok { + r0 = rf(ctx, name, vrf, logicalBridge, mac, gwIPs, ebgp, remoteAS) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*_go.Svi) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, string, string, string, []string, bool, uint32) error); ok { + r1 = rf(ctx, name, vrf, logicalBridge, mac, gwIPs, ebgp, remoteAS) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CreateVrf provides a mock function with given fields: ctx, name, vni, loopback, vtep +func (_m *EvpnClient) CreateVrf(ctx context.Context, name string, vni uint32, loopback string, vtep string) (*_go.Vrf, error) { + ret := _m.Called(ctx, name, vni, loopback, vtep) + + var r0 *_go.Vrf + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, uint32, string, string) (*_go.Vrf, error)); ok { + return rf(ctx, name, vni, loopback, vtep) + } + if rf, ok := ret.Get(0).(func(context.Context, string, uint32, string, string) *_go.Vrf); ok { + r0 = rf(ctx, name, vni, loopback, vtep) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*_go.Vrf) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, uint32, string, string) error); ok { + r1 = rf(ctx, name, vni, loopback, vtep) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// DeleteBridgePort provides a mock function with given fields: ctx, name, allowMissing +func (_m *EvpnClient) DeleteBridgePort(ctx context.Context, name string, allowMissing bool) (*emptypb.Empty, error) { + ret := _m.Called(ctx, name, allowMissing) + + var r0 *emptypb.Empty + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, bool) (*emptypb.Empty, error)); ok { + return rf(ctx, name, allowMissing) + } + if rf, ok := ret.Get(0).(func(context.Context, string, bool) *emptypb.Empty); ok { + r0 = rf(ctx, name, allowMissing) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*emptypb.Empty) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, bool) error); ok { + r1 = rf(ctx, name, allowMissing) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// DeleteLogicalBridge provides a mock function with given fields: ctx, name, allowMissing +func (_m *EvpnClient) DeleteLogicalBridge(ctx context.Context, name string, allowMissing bool) (*emptypb.Empty, error) { + ret := _m.Called(ctx, name, allowMissing) + + var r0 *emptypb.Empty + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, bool) (*emptypb.Empty, error)); ok { + return rf(ctx, name, allowMissing) + } + if rf, ok := ret.Get(0).(func(context.Context, string, bool) *emptypb.Empty); ok { + r0 = rf(ctx, name, allowMissing) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*emptypb.Empty) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, bool) error); ok { + r1 = rf(ctx, name, allowMissing) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// DeleteSvi provides a mock function with given fields: ctx, name, allowMissing +func (_m *EvpnClient) DeleteSvi(ctx context.Context, name string, allowMissing bool) (*emptypb.Empty, error) { + ret := _m.Called(ctx, name, allowMissing) + + var r0 *emptypb.Empty + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, bool) (*emptypb.Empty, error)); ok { + return rf(ctx, name, allowMissing) + } + if rf, ok := ret.Get(0).(func(context.Context, string, bool) *emptypb.Empty); ok { + r0 = rf(ctx, name, allowMissing) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*emptypb.Empty) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, bool) error); ok { + r1 = rf(ctx, name, allowMissing) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// DeleteVrf provides a mock function with given fields: ctx, name, allowMissing +func (_m *EvpnClient) DeleteVrf(ctx context.Context, name string, allowMissing bool) (*emptypb.Empty, error) { + ret := _m.Called(ctx, name, allowMissing) + + var r0 *emptypb.Empty + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, bool) (*emptypb.Empty, error)); ok { + return rf(ctx, name, allowMissing) + } + if rf, ok := ret.Get(0).(func(context.Context, string, bool) *emptypb.Empty); ok { + r0 = rf(ctx, name, allowMissing) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*emptypb.Empty) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, bool) error); ok { + r1 = rf(ctx, name, allowMissing) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetBridgePort provides a mock function with given fields: ctx, name +func (_m *EvpnClient) GetBridgePort(ctx context.Context, name string) (*_go.BridgePort, error) { + ret := _m.Called(ctx, name) + + var r0 *_go.BridgePort + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string) (*_go.BridgePort, error)); ok { + return rf(ctx, name) + } + if rf, ok := ret.Get(0).(func(context.Context, string) *_go.BridgePort); ok { + r0 = rf(ctx, name) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*_go.BridgePort) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, name) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetLogicalBridge provides a mock function with given fields: ctx, name +func (_m *EvpnClient) GetLogicalBridge(ctx context.Context, name string) (*_go.LogicalBridge, error) { + ret := _m.Called(ctx, name) + + var r0 *_go.LogicalBridge + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string) (*_go.LogicalBridge, error)); ok { + return rf(ctx, name) + } + if rf, ok := ret.Get(0).(func(context.Context, string) *_go.LogicalBridge); ok { + r0 = rf(ctx, name) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*_go.LogicalBridge) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, name) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetSvi provides a mock function with given fields: ctx, name +func (_m *EvpnClient) GetSvi(ctx context.Context, name string) (*_go.Svi, error) { + ret := _m.Called(ctx, name) + + var r0 *_go.Svi + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string) (*_go.Svi, error)); ok { + return rf(ctx, name) + } + if rf, ok := ret.Get(0).(func(context.Context, string) *_go.Svi); ok { + r0 = rf(ctx, name) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*_go.Svi) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, name) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetVrf provides a mock function with given fields: ctx, name +func (_m *EvpnClient) GetVrf(ctx context.Context, name string) (*_go.Vrf, error) { + ret := _m.Called(ctx, name) + + var r0 *_go.Vrf + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string) (*_go.Vrf, error)); ok { + return rf(ctx, name) + } + if rf, ok := ret.Get(0).(func(context.Context, string) *_go.Vrf); ok { + r0 = rf(ctx, name) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*_go.Vrf) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, name) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ListBridgePorts provides a mock function with given fields: ctx, pageSize, pageToken +func (_m *EvpnClient) ListBridgePorts(ctx context.Context, pageSize int32, pageToken string) (*_go.ListBridgePortsResponse, error) { + ret := _m.Called(ctx, pageSize, pageToken) + + var r0 *_go.ListBridgePortsResponse + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, int32, string) (*_go.ListBridgePortsResponse, error)); ok { + return rf(ctx, pageSize, pageToken) + } + if rf, ok := ret.Get(0).(func(context.Context, int32, string) *_go.ListBridgePortsResponse); ok { + r0 = rf(ctx, pageSize, pageToken) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*_go.ListBridgePortsResponse) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, int32, string) error); ok { + r1 = rf(ctx, pageSize, pageToken) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ListLogicalBridges provides a mock function with given fields: ctx, pageSize, pageToken +func (_m *EvpnClient) ListLogicalBridges(ctx context.Context, pageSize int32, pageToken string) (*_go.ListLogicalBridgesResponse, error) { + ret := _m.Called(ctx, pageSize, pageToken) + + var r0 *_go.ListLogicalBridgesResponse + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, int32, string) (*_go.ListLogicalBridgesResponse, error)); ok { + return rf(ctx, pageSize, pageToken) + } + if rf, ok := ret.Get(0).(func(context.Context, int32, string) *_go.ListLogicalBridgesResponse); ok { + r0 = rf(ctx, pageSize, pageToken) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*_go.ListLogicalBridgesResponse) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, int32, string) error); ok { + r1 = rf(ctx, pageSize, pageToken) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ListSvis provides a mock function with given fields: ctx, pageSize, pageToken +func (_m *EvpnClient) ListSvis(ctx context.Context, pageSize int32, pageToken string) (*_go.ListSvisResponse, error) { + ret := _m.Called(ctx, pageSize, pageToken) + + var r0 *_go.ListSvisResponse + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, int32, string) (*_go.ListSvisResponse, error)); ok { + return rf(ctx, pageSize, pageToken) + } + if rf, ok := ret.Get(0).(func(context.Context, int32, string) *_go.ListSvisResponse); ok { + r0 = rf(ctx, pageSize, pageToken) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*_go.ListSvisResponse) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, int32, string) error); ok { + r1 = rf(ctx, pageSize, pageToken) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ListVrfs provides a mock function with given fields: ctx, pageSize, pageToken +func (_m *EvpnClient) ListVrfs(ctx context.Context, pageSize int32, pageToken string) (*_go.ListVrfsResponse, error) { + ret := _m.Called(ctx, pageSize, pageToken) + + var r0 *_go.ListVrfsResponse + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, int32, string) (*_go.ListVrfsResponse, error)); ok { + return rf(ctx, pageSize, pageToken) + } + if rf, ok := ret.Get(0).(func(context.Context, int32, string) *_go.ListVrfsResponse); ok { + r0 = rf(ctx, pageSize, pageToken) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*_go.ListVrfsResponse) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, int32, string) error); ok { + r1 = rf(ctx, pageSize, pageToken) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// UpdateBridgePort provides a mock function with given fields: ctx, name, updateMask, allowMissing +func (_m *EvpnClient) UpdateBridgePort(ctx context.Context, name string, updateMask []string, allowMissing bool) (*_go.BridgePort, error) { + ret := _m.Called(ctx, name, updateMask, allowMissing) + + var r0 *_go.BridgePort + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, []string, bool) (*_go.BridgePort, error)); ok { + return rf(ctx, name, updateMask, allowMissing) + } + if rf, ok := ret.Get(0).(func(context.Context, string, []string, bool) *_go.BridgePort); ok { + r0 = rf(ctx, name, updateMask, allowMissing) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*_go.BridgePort) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, []string, bool) error); ok { + r1 = rf(ctx, name, updateMask, allowMissing) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// UpdateLogicalBridge provides a mock function with given fields: ctx, name, updateMask +func (_m *EvpnClient) UpdateLogicalBridge(ctx context.Context, name string, updateMask []string) (*_go.LogicalBridge, error) { + ret := _m.Called(ctx, name, updateMask) + + var r0 *_go.LogicalBridge + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, []string) (*_go.LogicalBridge, error)); ok { + return rf(ctx, name, updateMask) + } + if rf, ok := ret.Get(0).(func(context.Context, string, []string) *_go.LogicalBridge); ok { + r0 = rf(ctx, name, updateMask) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*_go.LogicalBridge) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, []string) error); ok { + r1 = rf(ctx, name, updateMask) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// UpdateSvi provides a mock function with given fields: ctx, name, updateMask, allowMissing +func (_m *EvpnClient) UpdateSvi(ctx context.Context, name string, updateMask []string, allowMissing bool) (*_go.Svi, error) { + ret := _m.Called(ctx, name, updateMask, allowMissing) + + var r0 *_go.Svi + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, []string, bool) (*_go.Svi, error)); ok { + return rf(ctx, name, updateMask, allowMissing) + } + if rf, ok := ret.Get(0).(func(context.Context, string, []string, bool) *_go.Svi); ok { + r0 = rf(ctx, name, updateMask, allowMissing) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*_go.Svi) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, []string, bool) error); ok { + r1 = rf(ctx, name, updateMask, allowMissing) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// UpdateVrf provides a mock function with given fields: ctx, name, updateMask, allowMissing +func (_m *EvpnClient) UpdateVrf(ctx context.Context, name string, updateMask []string, allowMissing bool) (*_go.Vrf, error) { + ret := _m.Called(ctx, name, updateMask, allowMissing) + + var r0 *_go.Vrf + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, []string, bool) (*_go.Vrf, error)); ok { + return rf(ctx, name, updateMask, allowMissing) + } + if rf, ok := ret.Get(0).(func(context.Context, string, []string, bool) *_go.Vrf); ok { + r0 = rf(ctx, name, updateMask, allowMissing) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*_go.Vrf) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, []string, bool) error); ok { + r1 = rf(ctx, name, updateMask, allowMissing) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// NewEvpnClient creates a new instance of EvpnClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewEvpnClient(t interface { + mock.TestingT + Cleanup(func()) +}) *EvpnClient { + mock := &EvpnClient{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/network/bridge_port_test.go b/network/bridge_port_test.go index eaee0dd8..598ff8db 100644 --- a/network/bridge_port_test.go +++ b/network/bridge_port_test.go @@ -3,4 +3,162 @@ // Copyright (c) 2022-2023 Dell Inc, or its subsidiaries. // Package network implements the go library for OPI to be used to establish networking -package network +package network_test + +import ( + "context" + "errors" + "testing" + + "github.com/opiproject/godpu/mocks" + _go "github.com/opiproject/opi-api/network/evpn-gw/v1alpha1/gen/go" + emptypb "google.golang.org/protobuf/types/known/emptypb" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" +) + +func TestCreateBridgePortSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedBridgePort := &_go.BridgePort{} // Create your expected response + mockEvpnClient.On("CreateBridgePort", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(expectedBridgePort, nil) + + resultBridgePort, err := mockEvpnClient.CreateBridgePort(context.TODO(), "bp1", "00:11:22:AA:BB:CC", "access", []string{"lb1", "lb2"}) + + assert.NoError(t, err) + assert.Equal(t, expectedBridgePort, resultBridgePort) + mockEvpnClient.AssertExpectations(t) +} + +func TestCreateBridgePortError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("CreateBridgePort", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultBridgePort, err := mockEvpnClient.CreateBridgePort(context.TODO(), "bp1", "00:11:22:AA:BB:CC", "access", []string{"lb1", "lb2"}) + + assert.Error(t, err) + assert.Nil(t, resultBridgePort) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} + +func TestDeleteBridgePortSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedResponse := &emptypb.Empty{} // Create your expected response + mockEvpnClient.On("DeleteBridgePort", mock.Anything, mock.Anything, mock.Anything). + Return(expectedResponse, nil) + + resultResponse, err := mockEvpnClient.DeleteBridgePort(context.TODO(), "bp1", true) + + assert.NoError(t, err) + assert.Equal(t, expectedResponse, resultResponse) + mockEvpnClient.AssertExpectations(t) +} + +func TestDeleteBridgePortError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("DeleteBridgePort", mock.Anything, mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultResponse, err := mockEvpnClient.DeleteBridgePort(context.TODO(), "bp1", true) + + assert.Error(t, err) + assert.Nil(t, resultResponse) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} + +func TestGetBridgePortSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedBridgePort := &_go.BridgePort{} // Create your expected response + mockEvpnClient.On("GetBridgePort", mock.Anything, mock.Anything). + Return(expectedBridgePort, nil) + + resultBridgePort, err := mockEvpnClient.GetBridgePort(context.TODO(), "bp1") + + assert.NoError(t, err) + assert.Equal(t, expectedBridgePort, resultBridgePort) + mockEvpnClient.AssertExpectations(t) +} + +func TestGetBridgePortError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("GetBridgePort", mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultBridgePort, err := mockEvpnClient.GetBridgePort(context.TODO(), "bp1") + + assert.Error(t, err) + assert.Nil(t, resultBridgePort) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} + +func TestListBridgePortsSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedResponse := &_go.ListBridgePortsResponse{} // Create your expected response + mockEvpnClient.On("ListBridgePorts", mock.Anything, mock.Anything, mock.Anything). + Return(expectedResponse, nil) + + resultResponse, err := mockEvpnClient.ListBridgePorts(context.TODO(), 10, "token") + + assert.NoError(t, err) + assert.Equal(t, expectedResponse, resultResponse) + mockEvpnClient.AssertExpectations(t) +} + +func TestListBridgePortsError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("ListBridgePorts", mock.Anything, mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultResponse, err := mockEvpnClient.ListBridgePorts(context.TODO(), 10, "token") + + assert.Error(t, err) + assert.Nil(t, resultResponse) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} + +func TestUpdateBridgePortSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedBridgePort := &_go.BridgePort{} // Create your expected response + mockEvpnClient.On("UpdateBridgePort", mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(expectedBridgePort, nil) + + resultBridgePort, err := mockEvpnClient.UpdateBridgePort(context.TODO(), "bp1", []string{"Ptype", "LogicalBridges"}, false) + + assert.NoError(t, err) + assert.Equal(t, expectedBridgePort, resultBridgePort) + mockEvpnClient.AssertExpectations(t) +} + +func TestUpdateBridgePortError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("UpdateBridgePort", mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultBridgePort, err := mockEvpnClient.UpdateBridgePort(context.TODO(), "bp1", []string{"Ptype", "LogicalBridges"}, false) + + assert.Error(t, err) + assert.Nil(t, resultBridgePort) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} diff --git a/network/logical_bridge_test.go b/network/logical_bridge_test.go index eaee0dd8..05adcb61 100644 --- a/network/logical_bridge_test.go +++ b/network/logical_bridge_test.go @@ -3,4 +3,161 @@ // Copyright (c) 2022-2023 Dell Inc, or its subsidiaries. // Package network implements the go library for OPI to be used to establish networking -package network +package network_test + +import ( + "context" + "errors" + "testing" + + "github.com/opiproject/godpu/mocks" + _go "github.com/opiproject/opi-api/network/evpn-gw/v1alpha1/gen/go" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +func TestCreateLogicalBridgeSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedLogicalBridge := &_go.LogicalBridge{} // Create your expected response + mockEvpnClient.On("CreateLogicalBridge", mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(expectedLogicalBridge, nil) + + resultLogicalBridge, err := mockEvpnClient.CreateLogicalBridge(context.TODO(), "lb1", 1000, 1000) + + assert.NoError(t, err) + assert.Equal(t, expectedLogicalBridge, resultLogicalBridge) + mockEvpnClient.AssertExpectations(t) +} + +func TestCreateLogicalBridgeError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("CreateLogicalBridge", mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultLogicalBridge, err := mockEvpnClient.CreateLogicalBridge(context.TODO(), "lb1", 1000, 1000) + + assert.Error(t, err) + assert.Nil(t, resultLogicalBridge) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} + +func TestDeleteLogicalBridgeSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedResponse := &emptypb.Empty{} // Create your expected response + mockEvpnClient.On("DeleteLogicalBridge", mock.Anything, mock.Anything, mock.Anything). + Return(expectedResponse, nil) + + resultResponse, err := mockEvpnClient.DeleteLogicalBridge(context.TODO(), "lb1", true) + + assert.NoError(t, err) + assert.Equal(t, expectedResponse, resultResponse) + mockEvpnClient.AssertExpectations(t) +} + +func TestDeleteLogicalBridgeError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("DeleteLogicalBridge", mock.Anything, mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultResponse, err := mockEvpnClient.DeleteLogicalBridge(context.TODO(), "lb1", true) + + assert.Error(t, err) + assert.Nil(t, resultResponse) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} + +func TestGetLogicalBridgeSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedLogicalBridge := &_go.LogicalBridge{} // Create your expected response + mockEvpnClient.On("GetLogicalBridge", mock.Anything, mock.Anything). + Return(expectedLogicalBridge, nil) + + resultLogicalBridge, err := mockEvpnClient.GetLogicalBridge(context.TODO(), "lb1") + + assert.NoError(t, err) + assert.Equal(t, expectedLogicalBridge, resultLogicalBridge) + mockEvpnClient.AssertExpectations(t) +} + +func TestGetLogicalBridgeError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("GetLogicalBridge", mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultLogicalBridge, err := mockEvpnClient.GetLogicalBridge(context.TODO(), "lb1") + + assert.Error(t, err) + assert.Nil(t, resultLogicalBridge) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} + +func TestListLogicalBridgesSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedResponse := &_go.ListLogicalBridgesResponse{} // Create your expected response + mockEvpnClient.On("ListLogicalBridges", mock.Anything, mock.Anything, mock.Anything). + Return(expectedResponse, nil) + + resultResponse, err := mockEvpnClient.ListLogicalBridges(context.TODO(), 10, "token") + + assert.NoError(t, err) + assert.Equal(t, expectedResponse, resultResponse) + mockEvpnClient.AssertExpectations(t) +} + +func TestListLogicalBridgesError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("ListLogicalBridges", mock.Anything, mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultResponse, err := mockEvpnClient.ListLogicalBridges(context.TODO(), 10, "token") + + assert.Error(t, err) + assert.Nil(t, resultResponse) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} + +func TestUpdateLogicalBridgeSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedLogicalBridge := &_go.LogicalBridge{} // Create your expected response + mockEvpnClient.On("UpdateLogicalBridge", mock.Anything, mock.Anything, mock.Anything). + Return(expectedLogicalBridge, nil) + + resultLogicalBridge, err := mockEvpnClient.UpdateLogicalBridge(context.TODO(), "lb1", []string{"VlanId", "Vni"}) + + assert.NoError(t, err) + assert.Equal(t, expectedLogicalBridge, resultLogicalBridge) + mockEvpnClient.AssertExpectations(t) +} + +func TestUpdateLogicalBridgeError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("UpdateLogicalBridge", mock.Anything, mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultLogicalBridge, err := mockEvpnClient.UpdateLogicalBridge(context.TODO(), "name", []string{"VlanId", "Vni"}) + + assert.Error(t, err) + assert.Nil(t, resultLogicalBridge) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} diff --git a/network/svi_test.go b/network/svi_test.go index eaee0dd8..630114b3 100644 --- a/network/svi_test.go +++ b/network/svi_test.go @@ -3,4 +3,161 @@ // Copyright (c) 2022-2023 Dell Inc, or its subsidiaries. // Package network implements the go library for OPI to be used to establish networking -package network +package network_test + +import ( + "context" + "errors" + "testing" + + "github.com/opiproject/godpu/mocks" + _go "github.com/opiproject/opi-api/network/evpn-gw/v1alpha1/gen/go" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +func TestCreateSviSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedSvi := &_go.Svi{} // Create your expected response + mockEvpnClient.On("CreateSvi", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(expectedSvi, nil) + + resultSvi, err := mockEvpnClient.CreateSvi(context.TODO(), "svi1", "vrf1", "lb1", "00:11:22:AA:BB:CC", []string{"10.0.0.1/24, 20.0.0.1/24"}, true, 65000) + + assert.NoError(t, err) + assert.Equal(t, expectedSvi, resultSvi) + mockEvpnClient.AssertExpectations(t) +} + +func TestCreateSviError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("CreateSvi", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultSvi, err := mockEvpnClient.CreateSvi(context.TODO(), "svi1", "vrf1", "lb1", "00:11:22:AA:BB:CC", []string{"10.0.0.1/24, 20.0.0.1/24"}, true, 65000) + + assert.Error(t, err) + assert.Nil(t, resultSvi) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} + +func TestDeleteSviSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedResponse := &emptypb.Empty{} // Create your expected response + mockEvpnClient.On("DeleteSvi", mock.Anything, mock.Anything, mock.Anything). + Return(expectedResponse, nil) + + resultResponse, err := mockEvpnClient.DeleteSvi(context.TODO(), "svi1", true) + + assert.NoError(t, err) + assert.Equal(t, expectedResponse, resultResponse) + mockEvpnClient.AssertExpectations(t) +} + +func TestDeleteSviError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("DeleteSvi", mock.Anything, mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultResponse, err := mockEvpnClient.DeleteSvi(context.TODO(), "svi1", true) + + assert.Error(t, err) + assert.Nil(t, resultResponse) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} + +func TestGetSviSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedSvi := &_go.Svi{} // Create your expected response + mockEvpnClient.On("GetSvi", mock.Anything, mock.Anything). + Return(expectedSvi, nil) + + resultSvi, err := mockEvpnClient.GetSvi(context.TODO(), "svi1") + + assert.NoError(t, err) + assert.Equal(t, expectedSvi, resultSvi) + mockEvpnClient.AssertExpectations(t) +} + +func TestGetSviError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("GetSvi", mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultSvi, err := mockEvpnClient.GetSvi(context.TODO(), "svi1") + + assert.Error(t, err) + assert.Nil(t, resultSvi) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} + +func TestListSvisSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedResponse := &_go.ListSvisResponse{} // Create your expected response + mockEvpnClient.On("ListSvis", mock.Anything, mock.Anything, mock.Anything). + Return(expectedResponse, nil) + + resultResponse, err := mockEvpnClient.ListSvis(context.TODO(), 10, "token") + + assert.NoError(t, err) + assert.Equal(t, expectedResponse, resultResponse) + mockEvpnClient.AssertExpectations(t) +} + +func TestListSvisError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("ListSvis", mock.Anything, mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultResponse, err := mockEvpnClient.ListSvis(context.TODO(), 10, "token") + + assert.Error(t, err) + assert.Nil(t, resultResponse) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} + +func TestUpdateSviSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedSvi := &_go.Svi{} // Create your expected response + mockEvpnClient.On("UpdateSvi", mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(expectedSvi, nil) + + resultSvi, err := mockEvpnClient.UpdateSvi(context.TODO(), "svi1", []string{"field1", "field2"}, false) + + assert.NoError(t, err) + assert.Equal(t, expectedSvi, resultSvi) + mockEvpnClient.AssertExpectations(t) +} + +func TestUpdateSviError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("UpdateSvi", mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultSvi, err := mockEvpnClient.UpdateSvi(context.TODO(), "svi1", []string{"Vrf", "LogicalBridge"}, false) + + assert.Error(t, err) + assert.Nil(t, resultSvi) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} diff --git a/network/vrf_test.go b/network/vrf_test.go index eaee0dd8..83235687 100644 --- a/network/vrf_test.go +++ b/network/vrf_test.go @@ -3,4 +3,160 @@ // Copyright (c) 2022-2023 Dell Inc, or its subsidiaries. // Package network implements the go library for OPI to be used to establish networking -package network +package network_test + +import ( + "context" + "errors" + "testing" + + "github.com/opiproject/godpu/mocks" + _go "github.com/opiproject/opi-api/network/evpn-gw/v1alpha1/gen/go" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +func TestCreateVrfSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedVrf := &_go.Vrf{} // Create your expected response + mockEvpnClient.On("CreateVrf", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(expectedVrf, nil) + + resultVrf, err := mockEvpnClient.CreateVrf(context.TODO(), "vrf1", 1000, "10.10.10.10/16", "20.20.20.20/16") + + assert.NoError(t, err) + assert.Equal(t, expectedVrf, resultVrf) + mockEvpnClient.AssertExpectations(t) +} + +func TestCreateVrfError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("CreateVrf", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultVrf, err := mockEvpnClient.CreateVrf(context.TODO(), "vrf1", 1000, "10.10.10.10/16", "20.20.20.20/16") + + assert.Error(t, err) + assert.Nil(t, resultVrf) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} + +func TestDeleteVrfSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedResponse := &emptypb.Empty{} // Create your expected response + mockEvpnClient.On("DeleteVrf", mock.Anything, mock.Anything, mock.Anything). + Return(expectedResponse, nil) + + resultResponse, err := mockEvpnClient.DeleteVrf(context.TODO(), "vrf1", true) + + assert.NoError(t, err) + assert.Equal(t, expectedResponse, resultResponse) + mockEvpnClient.AssertExpectations(t) +} + +func TestDeleteVrfError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("DeleteVrf", mock.Anything, mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultResponse, err := mockEvpnClient.DeleteVrf(context.TODO(), "vrf1", true) + + assert.Error(t, err) + assert.Nil(t, resultResponse) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} + +func TestGetVrfSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedVrf := &_go.Vrf{} // Create your expected response + mockEvpnClient.On("GetVrf", mock.Anything, mock.Anything). + Return(expectedVrf, nil) + + resultVrf, err := mockEvpnClient.GetVrf(context.TODO(), "vrf1") + + assert.NoError(t, err) + assert.Equal(t, expectedVrf, resultVrf) + mockEvpnClient.AssertExpectations(t) +} + +func TestGetVrfError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("GetVrf", mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultVrf, err := mockEvpnClient.GetVrf(context.TODO(), "vrf1") + + assert.Error(t, err) + assert.Nil(t, resultVrf) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} + +func TestListVrfsSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedResponse := &_go.ListVrfsResponse{} // Create your expected response + mockEvpnClient.On("ListVrfs", mock.Anything, mock.Anything, mock.Anything). + Return(expectedResponse, nil) + + resultResponse, err := mockEvpnClient.ListVrfs(context.TODO(), 10, "token") + + assert.NoError(t, err) + assert.Equal(t, expectedResponse, resultResponse) + mockEvpnClient.AssertExpectations(t) +} + +func TestListVrfsError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("ListVrfs", mock.Anything, mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultResponse, err := mockEvpnClient.ListVrfs(context.TODO(), 10, "token") + + assert.Error(t, err) + assert.Nil(t, resultResponse) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +} +func TestUpdateVrfSuccess(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedVrf := &_go.Vrf{} // Create your expected response + mockEvpnClient.On("UpdateVrf", mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(expectedVrf, nil) + + resultVrf, err := mockEvpnClient.UpdateVrf(context.TODO(), "vrf1", []string{"LoopbackIpPrefix", "VtepIpPrefix"}, false) + + assert.NoError(t, err) + assert.Equal(t, expectedVrf, resultVrf) + mockEvpnClient.AssertExpectations(t) +} + +func TestUpdateVrfError(t *testing.T) { + mockEvpnClient := &mocks.EvpnClient{} + + expectedError := errors.New("mocked error") + mockEvpnClient.On("UpdateVrf", mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(nil, expectedError) + + resultVrf, err := mockEvpnClient.UpdateVrf(context.TODO(), "vrf1", []string{"LoopbackIpPrefix", "VtepIpPrefix"}, false) + + assert.Error(t, err) + assert.Nil(t, resultVrf) + assert.Equal(t, expectedError, err) + mockEvpnClient.AssertExpectations(t) +}