1 package httpmsghandlers
5 "e2mgr/e2managererrors"
11 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
12 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
13 "github.com/stretchr/testify/assert"
17 func setupX2ResetRequestHandlerTest(t *testing.T) (*X2ResetRequestHandler, *mocks.RmrMessengerMock, *mocks.RnibReaderMock) {
19 config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
20 readerMock := &mocks.RnibReaderMock{}
21 writerMock := &mocks.RnibWriterMock{}
22 rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
23 rmrMessengerMock := &mocks.RmrMessengerMock{}
24 rmrSender := getRmrSender(rmrMessengerMock, log)
25 handler := NewX2ResetRequestHandler(log, rmrSender, rnibDataService)
27 return handler, rmrMessengerMock, readerMock
29 func TestHandleSuccessfulDefaultCause(t *testing.T) {
30 handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(t)
34 payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x64}
36 msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xAction)
38 rmrMessengerMock.On("SendMsg", msg).Return(msg, nil)
40 var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
41 readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
43 _, actual := handler.Handle(models.ResetRequest{RanName: ranName})
48 func TestHandleSuccessfulRequestedCause(t *testing.T) {
49 handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(t)
52 payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x40}
54 msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xAction)
55 rmrMessengerMock.On("SendMsg", msg).Return(msg, nil)
57 var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
58 readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
60 _, actual := handler.Handle(models.ResetRequest{RanName: ranName, Cause: "protocol:transfer-syntax-error"})
65 func TestHandleFailureUnknownCause(t *testing.T) {
66 handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
69 var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
70 readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
72 _, actual := handler.Handle(models.ResetRequest{RanName: ranName, Cause: "XXX"})
74 assert.IsType(t, e2managererrors.NewRequestValidationError(), actual)
78 func TestHandleFailureWrongState(t *testing.T) {
79 handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
82 var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
83 readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
85 _, actual := handler.Handle(models.ResetRequest{RanName: ranName})
87 assert.IsType(t, e2managererrors.NewWrongStateError(X2_RESET_ACTIVITY_NAME, entities.ConnectionStatus_name[int32(nodeb.ConnectionStatus)]), actual)
90 func TestHandleFailureRanNotFound(t *testing.T) {
91 handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
95 readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("nodeb not found"))
97 _, actual := handler.Handle(models.ResetRequest{RanName: ranName})
99 assert.IsType(t, e2managererrors.NewResourceNotFoundError(), actual)
102 func TestHandleFailureRnibError(t *testing.T) {
103 handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
107 readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{}, common.NewInternalError(fmt.Errorf("internal error")))
109 _, actual := handler.Handle(models.ResetRequest{RanName: ranName})
111 assert.IsType(t, e2managererrors.NewRnibDbError(), actual)
114 func TestHandleFailureRmrError(t *testing.T) {
115 handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(t)
119 payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x64}
121 msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xAction)
122 rmrMessengerMock.On("SendMsg", msg).Return(&rmrCgo.MBuf{}, fmt.Errorf("rmr error"))
124 var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
125 readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
127 _, actual := handler.Handle(models.ResetRequest{RanName: ranName})
129 assert.IsType(t, e2managererrors.NewRmrError(), actual)