1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
package services
import (
"errors"
"testing"
"github.com/ansible/receptor/pkg/logger"
"github.com/ansible/receptor/pkg/netceptor"
"github.com/ansible/receptor/pkg/netceptor/mock_netceptor"
mock_net_interface "github.com/ansible/receptor/pkg/services/interfaces/mock_interfaces"
"github.com/ansible/receptor/pkg/services/mock_services"
"go.uber.org/mock/gomock"
)
func setUpMocks(ctrl *gomock.Controller) (*mock_services.MockNetcForUDPProxy, *mock_net_interface.MockNetterUDP, *mock_net_interface.MockUDPConnInterface, *mock_netceptor.MockPacketConner) {
mockNetceptor := mock_services.NewMockNetcForUDPProxy(ctrl)
mockNetter := mock_net_interface.NewMockNetterUDP(ctrl)
mockUDPConn := mock_net_interface.NewMockUDPConnInterface(ctrl)
mockPacketCon := mock_netceptor.NewMockPacketConner(ctrl)
logger := logger.NewReceptorLogger("")
mockNetceptor.EXPECT().GetLogger().AnyTimes().Return(logger)
return mockNetceptor, mockNetter, mockUDPConn, mockPacketCon
}
func TestUDPProxyServiceInbound(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
var mockNetceptor *mock_services.MockNetcForUDPProxy
var mockNetter *mock_net_interface.MockNetterUDP
var mockUDPConn *mock_net_interface.MockUDPConnInterface
var mockPacketCon *mock_netceptor.MockPacketConner
type testCase struct {
name string
host string
port int
node string
service string
expectErr bool
calls func()
}
tests := []testCase{
{
name: "Fail ResolveUDPAddr",
expectErr: true,
calls: func() {
mockNetter.EXPECT().ResolveUDPAddr(gomock.Any(), gomock.Any()).Return(nil, errors.New("RecolveUDPAddr error"))
},
},
{
name: "Fail ListenUDP",
expectErr: true,
calls: func() {
mockNetter.EXPECT().ResolveUDPAddr(gomock.Any(), gomock.Any()).Return(nil, nil)
mockNetter.EXPECT().ListenUDP(gomock.Any(), gomock.Any()).Return(nil, errors.New("Listen Udp Error"))
},
},
{
name: "Fail UDP Con Read From",
calls: func() {
mockNetter.EXPECT().ResolveUDPAddr(gomock.Any(), gomock.Any()).Return(nil, nil)
mockNetter.EXPECT().ListenUDP(gomock.Any(), gomock.Any()).Return(mockUDPConn, nil)
mockNetceptor.EXPECT().NewAddr(gomock.Any(), gomock.Any()).Return(netceptor.Addr{})
mockUDPConn.EXPECT().ReadFrom(gomock.Any()).Return(0, nil, errors.New("Read From error")).AnyTimes()
},
},
{
name: "Fail Netceptor listen packet",
calls: func() {
mockNetter.EXPECT().ResolveUDPAddr(gomock.Any(), gomock.Any()).Return(nil, nil)
mockNetter.EXPECT().ListenUDP(gomock.Any(), gomock.Any()).Return(mockUDPConn, nil)
mockNetceptor.EXPECT().NewAddr(gomock.Any(), gomock.Any()).Return(netceptor.Addr{})
mockUDPConn.EXPECT().ReadFrom(gomock.Any()).Return(0, netceptor.Addr{}, nil).AnyTimes()
mockNetceptor.EXPECT().ListenPacket(gomock.Any()).Return(mockPacketCon, errors.New("Clean Up error")).AnyTimes()
},
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
mockNetceptor, mockNetter, mockUDPConn, mockPacketCon = setUpMocks(ctrl)
tc.calls()
err := UDPProxyServiceInbound(mockNetceptor, tc.host, tc.port, tc.node, tc.service, mockNetter)
if tc.expectErr {
if err == nil {
t.Errorf("net UDPProxyServiceInbound fail case error")
}
return
} else if err != nil {
t.Errorf("net UDPProxyServiceInbound error")
}
})
}
}
func TestUDPProxyServiceOutbound(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
var mockNetceptor *mock_services.MockNetcForUDPProxy
var mockNetter *mock_net_interface.MockNetterUDP
var mockPacketCon *mock_netceptor.MockPacketConner
type testCase struct {
name string
service string
address string
expectErr bool
calls func()
}
tests := []testCase{
{
name: "Fail ResolveUDPAddr",
expectErr: true,
calls: func() {
mockNetter.EXPECT().ResolveUDPAddr(gomock.Any(), gomock.Any()).Return(nil, errors.New("RecolveUDPAddr error"))
},
},
{
name: "Fail Listen And Advertive",
expectErr: true,
calls: func() {
mockNetter.EXPECT().ResolveUDPAddr(gomock.Any(), gomock.Any()).Return(nil, nil)
mockNetceptor.EXPECT().ListenPacketAndAdvertise(gomock.Any(), gomock.Any()).Return(nil, errors.New("Netceptor Listen Error"))
},
},
{
name: "Fail Read From",
calls: func() {
mockNetter.EXPECT().ResolveUDPAddr(gomock.Any(), gomock.Any()).Return(nil, nil)
mockNetceptor.EXPECT().ListenPacketAndAdvertise(gomock.Any(), gomock.Any()).Return(mockPacketCon, nil)
mockPacketCon.EXPECT().ReadFrom(gomock.Any()).Return(0, nil, errors.New("Read From error")).AnyTimes()
},
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
mockNetceptor, mockNetter, _, mockPacketCon = setUpMocks(ctrl)
tc.calls()
err := UDPProxyServiceOutbound(mockNetceptor, tc.service, tc.address, mockNetter)
if tc.expectErr {
if err == nil {
t.Errorf("net UDPProxyServiceOutbound fail case error")
}
return
} else if err != nil {
t.Errorf("net UDPProxyServiceOutbound error")
}
})
}
}
|