4 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
5 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
6 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
7 "github.com/pkg/errors"
8 "github.com/stretchr/testify/assert"
17 "rsm/tests/testhelper"
22 const RanName = "test"
24 func initResourceStatusInitiateManagerTest(t *testing.T) (*mocks.RmrMessengerMock, *mocks.RnibReaderMock, *e2pdus.ResourceStatusRequestData, *ResourceStatusInitiateManager) {
25 logger, err := logger.InitLogger(logger.InfoLevel)
27 t.Errorf("#... - failed to initialize logger, error: %s", err)
30 config, err := configuration.ParseConfiguration()
32 t.Errorf("#... - failed to parse configuration error: %s", err)
35 rmrMessengerMock := &mocks.RmrMessengerMock{}
36 rmrSender := testhelper.InitRmrSender(rmrMessengerMock, logger)
38 readerMock := &mocks.RnibReaderMock{}
39 rnibReaderProvider := func() reader.RNibReader {
43 resourceStatusRequestData := &e2pdus.ResourceStatusRequestData{}
44 populateResourceStatusInitiateRequestParams(resourceStatusRequestData, config)
46 rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider)
47 resourceStatusInitiateManager := NewResourceStatusInitiateManager(logger, rnibDataService, rmrSender)
48 return rmrMessengerMock, readerMock, resourceStatusRequestData, resourceStatusInitiateManager
51 func TestGetNodebFailure(t *testing.T) {
52 rmrMessengerMock, readerMock, resourceStatusInitiateRequestParams, resourceStatusInitiateManager := initResourceStatusInitiateManagerTest(t)
53 var nodebInfo *entities.NodebInfo
54 readerMock.On("GetNodeb", RanName).Return(nodebInfo, common.NewInternalError(errors.New("Error")))
55 err := resourceStatusInitiateManager.Execute(RanName, resourceStatusInitiateRequestParams)
56 readerMock.AssertCalled(t, "GetNodeb", RanName)
57 assert.IsType(t, &rsmerrors.RnibDbError{}, err)
58 rmrMessengerMock.AssertNotCalled(t, "SendMsg")
61 func TestInvalidConnectionStatus(t *testing.T) {
62 rmrMessengerMock, readerMock, resourceStatusInitiateRequestParams, resourceStatusInitiateManager := initResourceStatusInitiateManagerTest(t)
64 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}, err)
65 err = resourceStatusInitiateManager.Execute(RanName, resourceStatusInitiateRequestParams)
66 readerMock.AssertCalled(t, "GetNodeb", RanName)
67 assert.IsType(t, &rsmerrors.WrongStateError{}, err)
68 rmrMessengerMock.AssertNotCalled(t, "SendMsg")
71 func TestPackFailure(t *testing.T) {
72 rmrMessengerMock, readerMock, resourceRequestData, resourceStatusInitiateManager := initResourceStatusInitiateManagerTest(t)
74 nodebInfo := &entities.NodebInfo{
76 ConnectionStatus: entities.ConnectionStatus_CONNECTED,
77 Configuration: &entities.NodebInfo_Enb{
79 ServedCells: []*entities.ServedCellInfo{{CellId: ""}},
84 readerMock.On("GetNodeb", RanName).Return(nodebInfo, err)
85 err = resourceStatusInitiateManager.Execute(RanName, resourceRequestData)
87 readerMock.AssertCalled(t, "GetNodeb", RanName)
88 rmrMessengerMock.AssertNotCalled(t, "SendMsg")
91 func TestOneCellSuccess(t *testing.T) {
92 cellId := "02f829:0007ab00"
93 rmrMessengerMock, readerMock, resourceRequestData, resourceStatusInitiateManager := initResourceStatusInitiateManagerTest(t)
94 xaction := []byte(RanName)
96 nodebInfo := &entities.NodebInfo{
98 ConnectionStatus: entities.ConnectionStatus_CONNECTED,
99 Configuration: &entities.NodebInfo_Enb{
101 ServedCells: []*entities.ServedCellInfo{{CellId: cellId}},
106 readerMock.On("GetNodeb", RanName).Return(nodebInfo, err)
107 expectedPayload := getPackedPayloadForCell(cellId, 1, *resourceRequestData)
108 expectedMbuf := rmrcgo.NewMBuf(rmrcgo.RicResStatusReq, len(expectedPayload), RanName, &expectedPayload, &xaction)
109 rmrMessengerMock.On("SendMsg", expectedMbuf).Return(&rmrcgo.MBuf{}, err)
110 err = resourceStatusInitiateManager.Execute(RanName, resourceRequestData)
111 time.Sleep(100 * time.Millisecond)
112 readerMock.AssertCalled(t, "GetNodeb", RanName)
114 rmrMessengerMock.AssertCalled(t, "SendMsg", expectedMbuf)
115 rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
118 func TestTwoCellOneFailureOneSuccess(t *testing.T) {
119 cellId1 := "02f829:0007ab00"
120 cellId2 := "02f829:0007ab50"
121 rmrMessengerMock, readerMock, resourceRequestData, resourceStatusInitiateManager := initResourceStatusInitiateManagerTest(t)
122 xaction := []byte(RanName)
124 nodebInfo := &entities.NodebInfo{
126 ConnectionStatus: entities.ConnectionStatus_CONNECTED,
127 Configuration: &entities.NodebInfo_Enb{
129 ServedCells: []*entities.ServedCellInfo{{CellId: cellId1}, {CellId: cellId2}},
134 readerMock.On("GetNodeb", RanName).Return(nodebInfo, err)
135 expectedPayload1 := getPackedPayloadForCell(cellId1, 1, *resourceRequestData)
136 expectedMbuf1 := rmrcgo.NewMBuf(rmrcgo.RicResStatusReq, len(expectedPayload1), RanName, &expectedPayload1, &xaction)
138 expectedPayload2 := getPackedPayloadForCell(cellId2, 2, *resourceRequestData)
139 expectedMbuf2 := rmrcgo.NewMBuf(rmrcgo.RicResStatusReq, len(expectedPayload2), RanName, &expectedPayload2, &xaction)
140 rmrMessengerMock.On("SendMsg", expectedMbuf1).Return(&rmrcgo.MBuf{}, rsmerrors.NewRmrError())
141 rmrMessengerMock.On("SendMsg", expectedMbuf2).Return(&rmrcgo.MBuf{}, err)
142 err = resourceStatusInitiateManager.Execute(RanName, resourceRequestData)
143 time.Sleep(100 * time.Millisecond)
144 readerMock.AssertCalled(t, "GetNodeb", RanName)
146 rmrMessengerMock.AssertCalled(t, "SendMsg", expectedMbuf1)
147 rmrMessengerMock.AssertCalled(t, "SendMsg", expectedMbuf2)
148 rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 2)
151 func TestFiveCellsSuccess(t *testing.T) {
152 cellId1 := "02f829:0007ab00"
153 cellId2 := "02f829:0007ab50"
154 cellId3 := "02f829:0007ab60"
155 cellId4 := "02f829:0007ab70"
156 cellId5 := "02f829:0007ab80"
158 rmrMessengerMock, readerMock, resourceRequestData, resourceStatusInitiateManager := initResourceStatusInitiateManagerTest(t)
159 xaction := []byte(RanName)
161 nodebInfo := &entities.NodebInfo{
163 ConnectionStatus: entities.ConnectionStatus_CONNECTED,
164 Configuration: &entities.NodebInfo_Enb{
166 ServedCells: []*entities.ServedCellInfo{{CellId: cellId1}, {CellId: cellId2}, {CellId: cellId3}, {CellId: cellId4}, {CellId: cellId5}},
171 readerMock.On("GetNodeb", RanName).Return(nodebInfo, err)
172 expectedPayload1 := getPackedPayloadForCell(cellId1, 1, *resourceRequestData)
173 expectedMbuf1 := rmrcgo.NewMBuf(rmrcgo.RicResStatusReq, len(expectedPayload1), RanName, &expectedPayload1, &xaction)
175 expectedPayload2 := getPackedPayloadForCell(cellId2, 2, *resourceRequestData)
176 expectedMbuf2 := rmrcgo.NewMBuf(rmrcgo.RicResStatusReq, len(expectedPayload2), RanName, &expectedPayload2, &xaction)
178 expectedPayload3 := getPackedPayloadForCell(cellId3, 3, *resourceRequestData)
179 expectedMbuf3 := rmrcgo.NewMBuf(rmrcgo.RicResStatusReq, len(expectedPayload3), RanName, &expectedPayload3, &xaction)
181 expectedPayload4 := getPackedPayloadForCell(cellId4, 4, *resourceRequestData)
182 expectedMbuf4 := rmrcgo.NewMBuf(rmrcgo.RicResStatusReq, len(expectedPayload4), RanName, &expectedPayload4, &xaction)
184 expectedPayload5 := getPackedPayloadForCell(cellId5, 5, *resourceRequestData)
185 expectedMbuf5 := rmrcgo.NewMBuf(rmrcgo.RicResStatusReq, len(expectedPayload5), RanName, &expectedPayload5, &xaction)
187 rmrMessengerMock.On("SendMsg", expectedMbuf1).Return(&rmrcgo.MBuf{}, err)
188 rmrMessengerMock.On("SendMsg", expectedMbuf2).Return(&rmrcgo.MBuf{}, err)
189 rmrMessengerMock.On("SendMsg", expectedMbuf3).Return(&rmrcgo.MBuf{}, err)
190 rmrMessengerMock.On("SendMsg", expectedMbuf4).Return(&rmrcgo.MBuf{}, err)
191 rmrMessengerMock.On("SendMsg", expectedMbuf5).Return(&rmrcgo.MBuf{}, err)
193 err = resourceStatusInitiateManager.Execute(RanName, resourceRequestData)
194 time.Sleep(100 * time.Millisecond)
195 readerMock.AssertCalled(t, "GetNodeb", RanName)
197 rmrMessengerMock.AssertCalled(t, "SendMsg", expectedMbuf1)
198 rmrMessengerMock.AssertCalled(t, "SendMsg", expectedMbuf2)
199 rmrMessengerMock.AssertCalled(t, "SendMsg", expectedMbuf3)
200 rmrMessengerMock.AssertCalled(t, "SendMsg", expectedMbuf4)
201 rmrMessengerMock.AssertCalled(t, "SendMsg", expectedMbuf5)
203 rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 5)
206 func getPackedPayloadForCell(cellId string, index int, resourceStatusRequestData e2pdus.ResourceStatusRequestData) []byte {
207 resourceStatusRequestData.CellID = cellId
208 resourceStatusRequestData.MeasurementID = e2pdus.Measurement_ID(index)
209 expectedPayload, _, _ := e2pdus.BuildPackedResourceStatusRequest(enums.Registration_Request_start, &resourceStatusRequestData, e2pdus.MaxAsn1PackedBufferSize, e2pdus.MaxAsn1CodecMessageBufferSize, false)
210 return expectedPayload
213 func populateResourceStatusInitiateRequestParams(params *e2pdus.ResourceStatusRequestData, config *configuration.Configuration) {
214 params.PartialSuccessAllowed = config.ResourceStatusParams.PartialSuccessAllowed
215 params.PrbPeriodic = config.ResourceStatusParams.PrbPeriodic
216 params.TnlLoadIndPeriodic = config.ResourceStatusParams.TnlLoadIndPeriodic
217 params.HwLoadIndPeriodic = config.ResourceStatusParams.HwLoadIndPeriodic
218 params.AbsStatusPeriodic = config.ResourceStatusParams.AbsStatusPeriodic
219 params.RsrpMeasurementPeriodic = config.ResourceStatusParams.RsrpMeasurementPeriodic
220 params.CsiPeriodic = config.ResourceStatusParams.CsiPeriodic
221 params.PeriodicityMS = config.ResourceStatusParams.PeriodicityMs
222 params.PeriodicityRsrpMeasurementMS = config.ResourceStatusParams.PeriodicityRsrpMeasurementMs
223 params.PeriodicityCsiMS = config.ResourceStatusParams.PeriodicityCsiMs