Copy latest code
[ric-plt/e2mgr.git] / E2Manager / handlers / httpmsghandlers / x2_reset_request_handler_test.go
1 package httpmsghandlers
2
3 import (
4         "e2mgr/configuration"
5         "e2mgr/e2managererrors"
6         "e2mgr/mocks"
7         "e2mgr/models"
8         "e2mgr/rmrCgo"
9         "e2mgr/services"
10         "fmt"
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"
14         "testing"
15 )
16
17 func setupX2ResetRequestHandlerTest(t *testing.T) (*X2ResetRequestHandler, *mocks.RmrMessengerMock, *mocks.RnibReaderMock) {
18         log := initLog(t)
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)
26
27         return handler, rmrMessengerMock, readerMock
28 }
29 func TestHandleSuccessfulDefaultCause(t *testing.T) {
30         handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(t)
31
32         ranName := "test1"
33         // o&m intervention
34         payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x64}
35         var xAction[]byte
36         msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xAction)
37
38         rmrMessengerMock.On("SendMsg", msg, true).Return(msg, nil)
39
40         var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
41         readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
42
43         _, actual := handler.Handle(models.ResetRequest{RanName: ranName})
44
45         assert.Nil(t, actual)
46 }
47
48 func TestHandleSuccessfulRequestedCause(t *testing.T) {
49         handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(t)
50
51         ranName := "test1"
52         payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x40}
53         var xAction[]byte
54         msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xAction)
55         rmrMessengerMock.On("SendMsg", msg, true).Return(msg, nil)
56
57         var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
58         readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
59
60         _, actual := handler.Handle(models.ResetRequest{RanName: ranName, Cause: "protocol:transfer-syntax-error"})
61
62         assert.Nil(t, actual)
63 }
64
65 func TestHandleFailureUnknownCause(t *testing.T) {
66         handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
67
68         ranName := "test1"
69         var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
70         readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
71
72         _, actual := handler.Handle(models.ResetRequest{RanName: ranName, Cause: "XXX"})
73
74         assert.IsType(t, e2managererrors.NewRequestValidationError(), actual)
75
76 }
77
78 func TestHandleFailureWrongState(t *testing.T) {
79         handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
80
81         ranName := "test1"
82         var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
83         readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
84
85         _, actual := handler.Handle(models.ResetRequest{RanName: ranName})
86
87         assert.IsType(t, e2managererrors.NewWrongStateError(X2_RESET_ACTIVITY_NAME, entities.ConnectionStatus_name[int32(nodeb.ConnectionStatus)]), actual)
88 }
89
90 func TestHandleFailureRanNotFound(t *testing.T) {
91         handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
92
93         ranName := "test1"
94
95         readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("nodeb not found"))
96
97         _, actual := handler.Handle(models.ResetRequest{RanName: ranName})
98
99         assert.IsType(t, e2managererrors.NewResourceNotFoundError(), actual)
100 }
101
102 func TestHandleFailureRnibError(t *testing.T) {
103         handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
104
105         ranName := "test1"
106
107         readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{}, common.NewInternalError(fmt.Errorf("internal error")))
108
109         _, actual := handler.Handle(models.ResetRequest{RanName: ranName})
110
111         assert.IsType(t, e2managererrors.NewRnibDbError(), actual)
112 }
113
114 func TestHandleFailureRmrError(t *testing.T) {
115         handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(t)
116
117         ranName := "test1"
118         // o&m intervention
119         payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x64}
120         var xAction[]byte
121         msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xAction)
122         rmrMessengerMock.On("SendMsg", msg, true).Return(&rmrCgo.MBuf{}, fmt.Errorf("rmr error"))
123
124         var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
125         readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
126
127         _, actual := handler.Handle(models.ResetRequest{RanName: ranName})
128
129         assert.IsType(t, e2managererrors.NewRmrError(), actual)
130 }