Fix release notes
[ric-plt/resource-status-manager.git] / RSM / managers / resource_status_initiate_manager_test.go
1 package managers
2
3 import (
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"
9         "rsm/configuration"
10         "rsm/e2pdus"
11         "rsm/enums"
12         "rsm/logger"
13         "rsm/mocks"
14         "rsm/rmrcgo"
15         "rsm/rsmerrors"
16         "rsm/services"
17         "rsm/tests/testhelper"
18         "testing"
19         "time"
20 )
21
22 const RanName = "test"
23
24 func initResourceStatusInitiateManagerTest(t *testing.T) (*mocks.RmrMessengerMock, *mocks.RnibReaderMock, *e2pdus.ResourceStatusRequestData, *ResourceStatusInitiateManager) {
25         logger, err := logger.InitLogger(logger.InfoLevel)
26         if err != nil {
27                 t.Errorf("#... - failed to initialize logger, error: %s", err)
28         }
29
30         config, err := configuration.ParseConfiguration()
31         if err != nil {
32                 t.Errorf("#... - failed to parse configuration error: %s", err)
33         }
34
35         rmrMessengerMock := &mocks.RmrMessengerMock{}
36         rmrSender := testhelper.InitRmrSender(rmrMessengerMock, logger)
37
38         readerMock := &mocks.RnibReaderMock{}
39         rnibReaderProvider := func() reader.RNibReader {
40                 return readerMock
41         }
42
43         resourceStatusRequestData := &e2pdus.ResourceStatusRequestData{}
44         populateResourceStatusInitiateRequestParams(resourceStatusRequestData, config)
45
46         rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider)
47         resourceStatusInitiateManager := NewResourceStatusInitiateManager(logger, rnibDataService, rmrSender)
48         return rmrMessengerMock, readerMock, resourceStatusRequestData, resourceStatusInitiateManager
49 }
50
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")
59 }
60
61 func TestInvalidConnectionStatus(t *testing.T) {
62         rmrMessengerMock, readerMock, resourceStatusInitiateRequestParams, resourceStatusInitiateManager := initResourceStatusInitiateManagerTest(t)
63         var err error
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")
69 }
70
71 func TestPackFailure(t *testing.T) {
72         rmrMessengerMock, readerMock, resourceRequestData, resourceStatusInitiateManager := initResourceStatusInitiateManagerTest(t)
73         var err error
74         nodebInfo := &entities.NodebInfo{
75                 RanName:          RanName,
76                 ConnectionStatus: entities.ConnectionStatus_CONNECTED,
77                 Configuration: &entities.NodebInfo_Enb{
78                         Enb: &entities.Enb{
79                                 ServedCells: []*entities.ServedCellInfo{{CellId: ""}},
80                         },
81                 },
82         }
83
84         readerMock.On("GetNodeb", RanName).Return(nodebInfo, err)
85         err = resourceStatusInitiateManager.Execute(RanName, resourceRequestData)
86         assert.Nil(t, err)
87         readerMock.AssertCalled(t, "GetNodeb", RanName)
88         rmrMessengerMock.AssertNotCalled(t, "SendMsg")
89 }
90
91 func TestOneCellSuccess(t *testing.T) {
92         cellId := "02f829:0007ab00"
93         rmrMessengerMock, readerMock, resourceRequestData, resourceStatusInitiateManager := initResourceStatusInitiateManagerTest(t)
94         xaction := []byte(RanName)
95         var err error
96         nodebInfo := &entities.NodebInfo{
97                 RanName:          RanName,
98                 ConnectionStatus: entities.ConnectionStatus_CONNECTED,
99                 Configuration: &entities.NodebInfo_Enb{
100                         Enb: &entities.Enb{
101                                 ServedCells: []*entities.ServedCellInfo{{CellId: cellId}},
102                         },
103                 },
104         }
105
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)
113         assert.Nil(t, err)
114         rmrMessengerMock.AssertCalled(t, "SendMsg", expectedMbuf)
115         rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
116 }
117
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)
123         var err error
124         nodebInfo := &entities.NodebInfo{
125                 RanName:          RanName,
126                 ConnectionStatus: entities.ConnectionStatus_CONNECTED,
127                 Configuration: &entities.NodebInfo_Enb{
128                         Enb: &entities.Enb{
129                                 ServedCells: []*entities.ServedCellInfo{{CellId: cellId1}, {CellId: cellId2}},
130                         },
131                 },
132         }
133
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)
137
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)
145         assert.Nil(t, err)
146         rmrMessengerMock.AssertCalled(t, "SendMsg", expectedMbuf1)
147         rmrMessengerMock.AssertCalled(t, "SendMsg", expectedMbuf2)
148         rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 2)
149 }
150
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"
157
158         rmrMessengerMock, readerMock, resourceRequestData, resourceStatusInitiateManager := initResourceStatusInitiateManagerTest(t)
159         xaction := []byte(RanName)
160         var err error
161         nodebInfo := &entities.NodebInfo{
162                 RanName:          RanName,
163                 ConnectionStatus: entities.ConnectionStatus_CONNECTED,
164                 Configuration: &entities.NodebInfo_Enb{
165                         Enb: &entities.Enb{
166                                 ServedCells: []*entities.ServedCellInfo{{CellId: cellId1}, {CellId: cellId2}, {CellId: cellId3}, {CellId: cellId4}, {CellId: cellId5}},
167                         },
168                 },
169         }
170
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)
174
175         expectedPayload2 := getPackedPayloadForCell(cellId2, 2, *resourceRequestData)
176         expectedMbuf2 := rmrcgo.NewMBuf(rmrcgo.RicResStatusReq, len(expectedPayload2), RanName, &expectedPayload2, &xaction)
177
178         expectedPayload3 := getPackedPayloadForCell(cellId3, 3, *resourceRequestData)
179         expectedMbuf3 := rmrcgo.NewMBuf(rmrcgo.RicResStatusReq, len(expectedPayload3), RanName, &expectedPayload3, &xaction)
180
181         expectedPayload4 := getPackedPayloadForCell(cellId4, 4, *resourceRequestData)
182         expectedMbuf4 := rmrcgo.NewMBuf(rmrcgo.RicResStatusReq, len(expectedPayload4), RanName, &expectedPayload4, &xaction)
183
184         expectedPayload5 := getPackedPayloadForCell(cellId5, 5, *resourceRequestData)
185         expectedMbuf5 := rmrcgo.NewMBuf(rmrcgo.RicResStatusReq, len(expectedPayload5), RanName, &expectedPayload5, &xaction)
186
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)
192
193         err = resourceStatusInitiateManager.Execute(RanName, resourceRequestData)
194         time.Sleep(100 * time.Millisecond)
195         readerMock.AssertCalled(t, "GetNodeb", RanName)
196         assert.Nil(t, err)
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)
202
203         rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 5)
204 }
205
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
211 }
212
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
224 }