1 package httpmsghandlers
5 "e2mgr/e2managererrors"
12 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
13 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
14 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
15 "github.com/stretchr/testify/assert"
16 "github.com/stretchr/testify/mock"
20 func setupX2ResetRequestHandlerTest(t *testing.T) (*X2ResetRequestHandler, *mocks.RmrMessengerMock, *mocks.RnibReaderMock){
22 config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
23 readerMock := &mocks.RnibReaderMock{}
24 readerProvider := func() reader.RNibReader {
27 writerMock := &mocks.RnibWriterMock{}
28 writerProvider := func() rNibWriter.RNibWriter {
31 rnibDataService := services.NewRnibDataService(log, config, readerProvider, writerProvider)
32 rmrMessengerMock := &mocks.RmrMessengerMock{}
33 rmrService := getRmrService(rmrMessengerMock, log)
34 handler := NewX2ResetRequestHandler(log, rmrService, rnibDataService)
36 return handler, rmrMessengerMock, readerMock
38 func TestHandleSuccessfulDefaultCause(t *testing.T) {
39 handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(t)
43 payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x64}
44 xaction := []byte(ranName)
45 msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction)
47 rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
49 var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
50 readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
52 actual := handler.Handle(models.ResetRequest{RanName: ranName})
57 func TestHandleSuccessfulRequestedCause(t *testing.T) {
58 handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(t)
61 payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x40}
62 xaction := []byte(ranName)
63 msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction)
64 rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
66 var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
67 readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
69 actual := handler.Handle(models.ResetRequest{RanName: ranName, Cause: "protocol:transfer-syntax-error"})
74 func TestHandleFailureUnknownCause(t *testing.T) {
75 handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
78 var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
79 readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
81 actual := handler.Handle(models.ResetRequest{RanName: ranName, Cause: "XXX"})
83 assert.IsType(t, e2managererrors.NewRequestValidationError(), actual)
87 func TestHandleFailureWrongState(t *testing.T) {
88 handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
91 var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
92 readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
94 actual := handler.Handle(models.ResetRequest{RanName: ranName})
96 assert.IsType(t, e2managererrors.NewWrongStateError(X2_RESET_ACTIVITY_NAME, entities.ConnectionStatus_name[int32(nodeb.ConnectionStatus)]), actual)
99 func TestHandleFailureRanNotFound(t *testing.T) {
100 handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
104 readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("nodeb not found"))
106 actual := handler.Handle(models.ResetRequest{RanName: ranName})
108 assert.IsType(t, e2managererrors.NewResourceNotFoundError(), actual)
111 func TestHandleFailureRnibError(t *testing.T) {
112 handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
116 readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{}, common.NewInternalError(fmt.Errorf("internal error")))
118 actual := handler.Handle(models.ResetRequest{RanName: ranName})
120 assert.IsType(t, e2managererrors.NewRnibDbError(), actual)
123 func TestHandleFailureRmrError(t *testing.T) {
124 handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(t)
128 payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x64}
129 xaction := []byte(ranName)
130 msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction)
131 rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(&rmrCgo.MBuf{}, fmt.Errorf("rmr error"))
133 var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
134 readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
136 actual := handler.Handle(models.ResetRequest{RanName: ranName})
138 assert.IsType(t, e2managererrors.NewRmrError(), actual)