2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
17 // This source code is part of the near-RT RIC (RAN Intelligent Controller)
18 // platform project (RICP).
20 package httpmsghandlers
26 "e2mgr/e2managererrors"
35 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
36 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
37 "github.com/stretchr/testify/assert"
38 "github.com/stretchr/testify/mock"
44 const E2TAddress = "10.0.2.15:8989"
45 const RanName = "test"
46 const BaseRMUrl = "http://10.10.2.15:12020/routingmanager"
48 func initSetupRequestTest(t *testing.T, protocol entities.E2ApplicationProtocol) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, *SetupRequestHandler, *mocks.E2TInstancesManagerMock, *mocks.RanSetupManagerMock, *mocks.HttpClientMock) {
50 config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
51 config.RoutingManager.BaseUrl = BaseRMUrl
53 readerMock := &mocks.RnibReaderMock{}
54 writerMock := &mocks.RnibWriterMock{}
56 rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
58 ranSetupManagerMock := &mocks.RanSetupManagerMock{}
59 e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
60 httpClientMock := &mocks.HttpClientMock{}
61 mockHttpClientAssociateRan(httpClientMock)
62 rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock)
63 e2tAssociationManager := managers.NewE2TAssociationManager(log, rnibDataService, e2tInstancesManagerMock, rmClient)
64 handler := NewSetupRequestHandler(log, rnibDataService, ranSetupManagerMock, protocol, e2tInstancesManagerMock, e2tAssociationManager)
66 return readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, httpClientMock
69 func initSetupRequestTestBasicMocks(t *testing.T, protocol entities.E2ApplicationProtocol) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, *SetupRequestHandler, *mocks.RmrMessengerMock, *mocks.HttpClientMock) {
71 config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
73 readerMock := &mocks.RnibReaderMock{}
74 writerMock := &mocks.RnibWriterMock{}
76 rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
78 rmrMessengerMock := &mocks.RmrMessengerMock{}
79 rmrSender := getRmrSender(rmrMessengerMock, log)
80 ranSetupManager := managers.NewRanSetupManager(log, rmrSender, rnibDataService)
81 e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, log)
82 httpClientMock := &mocks.HttpClientMock{}
83 rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock)
84 e2tAssociationManager := managers.NewE2TAssociationManager(log, rnibDataService, e2tInstancesManager, rmClient)
85 handler := NewSetupRequestHandler(log, rnibDataService, ranSetupManager, protocol, e2tInstancesManager, e2tAssociationManager)
87 return readerMock, writerMock, handler, rmrMessengerMock, httpClientMock
90 func mockHttpClientAssociateRan(httpClientMock *mocks.HttpClientMock) {
91 data := models.NewRoutingManagerE2TData(E2TAddress, RanName)
92 marshaled, _ := json.Marshal(data)
93 body := bytes.NewBuffer(marshaled)
94 url := BaseRMUrl + clients.AssociateRanToE2TInstanceApiSuffix
95 respBody := ioutil.NopCloser(bytes.NewBufferString(""))
96 httpClientMock.On("Post", url, "application/json", body).Return(&http.Response{StatusCode: http.StatusCreated, Body: respBody}, nil)
99 func TestX2SetupHandleNoPortError(t *testing.T) {
100 readerMock, _, handler, _, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
102 sr := models.SetupRequest{"127.0.0.1", 0, RanName,}
103 _, err := handler.Handle(sr)
104 assert.IsType(t, &e2managererrors.RequestValidationError{}, err)
105 readerMock.AssertNotCalled(t, "GetNodeb")
108 func TestX2SetupHandleNoRanNameError(t *testing.T) {
109 readerMock, _, handler, _, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
111 sr := models.SetupRequest{RanPort: 8080, RanIp: "127.0.0.1"}
112 _, err := handler.Handle(sr)
113 assert.IsType(t, &e2managererrors.RequestValidationError{}, err)
114 readerMock.AssertNotCalled(t, "GetNodeb")
117 func TestX2SetupHandleNoIpError(t *testing.T) {
118 readerMock, _, handler, _, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
120 sr := models.SetupRequest{RanPort: 8080, RanName: RanName}
121 _, err := handler.Handle(sr)
122 assert.IsType(t, &e2managererrors.RequestValidationError{}, err)
123 readerMock.AssertNotCalled(t, "GetNodeb")
126 func TestX2SetupHandleInvalidIpError(t *testing.T) {
127 readerMock, _, handler, _, _, _:= initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
129 sr := models.SetupRequest{RanPort: 8080, RanName: RanName, RanIp: "invalid ip"}
130 _, err := handler.Handle(sr)
131 assert.IsType(t, &e2managererrors.RequestValidationError{}, err)
132 readerMock.AssertNotCalled(t, "GetNodeb")
135 func TestSetupGetNodebFailure(t *testing.T) {
136 readerMock, _, handler, _, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
138 rnibErr := &common.ValidationError{}
139 nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,}
140 readerMock.On("GetNodeb", RanName).Return(nb, rnibErr)
142 sr := models.SetupRequest{"127.0.0.1", 8080, RanName,}
143 _, err := handler.Handle(sr)
144 assert.IsType(t, &e2managererrors.RnibDbError{}, err)
147 func TestSetupNewRanSelectE2TInstancesDbError(t *testing.T) {
148 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
149 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
150 e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewRnibDbError())
151 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
152 assert.IsType(t, &e2managererrors.RnibDbError{}, err)
153 e2tInstancesManagerMock.AssertNotCalled(t, "AddRanToInstance")
154 writerMock.AssertNotCalled(t, "SaveNodeb")
155 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
158 func TestSetupNewRanSelectE2TInstancesNoInstances(t *testing.T) {
159 readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTestBasicMocks(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
160 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
161 readerMock.On("GetE2TAddresses").Return([]string{}, nil)
162 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
163 assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err)
164 writerMock.AssertNotCalled(t, "SaveNodeb")
165 rmrMessengerMock.AssertNotCalled(t, "SendMsg")
168 func TestSetupNewRanAssociateRanFailure(t *testing.T) {
169 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, httpClientMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
170 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
171 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
172 nbIdentity := &entities.NbIdentity{InventoryName: RanName}
173 writerMock.On("SaveNodeb", nbIdentity, mock.Anything).Return(nil)
174 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
175 assert.IsType(t, &common.ResourceNotFoundError{}, err)
176 writerMock.AssertExpectations(t)
177 readerMock.AssertExpectations(t)
178 e2tInstancesManagerMock.AssertExpectations(t)
179 httpClientMock.AssertExpectations(t)
180 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
183 func TestSetupNewRanSaveNodebFailure(t *testing.T) {
184 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
185 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
186 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
187 e2tInstancesManagerMock.On("AddRanToInstance", RanName, E2TAddress).Return(nil)
188 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
189 nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST, E2TAddress)
190 writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(common.NewInternalError(fmt.Errorf("")))
191 _, err := handler.Handle(setupRequest)
192 assert.IsType(t, &e2managererrors.RnibDbError{}, err)
193 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
196 func TestSetupNewRanSetupDbError(t *testing.T) {
197 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
198 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
199 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
200 e2tInstancesManagerMock.On("AddRanToInstance", RanName, E2TAddress).Return(nil)
201 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
202 nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST, E2TAddress)
203 writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil)
204 ranSetupManagerMock.On("ExecuteSetup", nodebInfo, entities.ConnectionStatus_CONNECTING).Return(e2managererrors.NewRnibDbError())
205 _, err := handler.Handle(setupRequest)
206 assert.IsType(t, &common.ResourceNotFoundError{}, err)
209 func TestSetupNewRanSetupRmrError(t *testing.T) {
210 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
211 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
212 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
213 e2tInstancesManagerMock.On("AddRanToInstance", RanName, E2TAddress).Return(nil)
214 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
215 nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST, E2TAddress)
216 writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil)
217 ranSetupManagerMock.On("ExecuteSetup", nodebInfo, entities.ConnectionStatus_CONNECTING).Return(e2managererrors.NewRmrError())
218 _, err := handler.Handle(setupRequest)
219 assert.IsType(t, /* &e2managererrors.RmrError{} */ &common.ResourceNotFoundError{}, err)
222 func TestSetupNewRanSetupSuccess(t *testing.T) {
223 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
224 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
225 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
226 e2tInstancesManagerMock.On("AddRanToInstance", RanName, E2TAddress).Return(nil)
227 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
228 nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST, E2TAddress)
229 writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil)
230 ranSetupManagerMock.On("ExecuteSetup", nodebInfo, entities.ConnectionStatus_CONNECTING).Return(nil)
231 _, err := handler.Handle(setupRequest)
233 assert.IsType(t, /* &e2managererrors.RnibDbError{} */ &common.ResourceNotFoundError{}, err)
236 func TestX2SetupExistingRanShuttingDown(t *testing.T) {
237 readerMock, _, handler, e2tInstancesManagerMock, ranSetupManagerMock , _:= initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
238 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}, nil)
239 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
240 _, err := handler.Handle(setupRequest)
241 assert.IsType(t, &e2managererrors.WrongStateError{}, err)
242 e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance")
243 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
246 func TestEndcSetupExistingRanShuttingDown(t *testing.T) {
247 readerMock, _, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST)
248 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}, nil)
249 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
250 _, err := handler.Handle(setupRequest)
251 assert.IsType(t, &e2managererrors.WrongStateError{}, err)
252 e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance")
253 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
256 func TestSetupExistingRanWithoutAssocE2TInstanceSelectDbError(t *testing.T) {
257 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
258 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
259 readerMock.On("GetNodeb", RanName).Return(nb, nil)
260 e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewRnibDbError())
262 updatedNb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
263 writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
264 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
265 _, err := handler.Handle(setupRequest)
266 assert.IsType(t, &e2managererrors.RnibDbError{}, err)
267 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
270 func TestSetupExistingRanWithoutAssocE2TInstanceSelectNoInstanceError(t *testing.T) {
271 readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTestBasicMocks(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
272 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
273 readerMock.On("GetNodeb", RanName).Return(nb, nil)
274 readerMock.On("GetE2TAddresses").Return([]string{}, nil)
276 updatedNb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
277 writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
278 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
279 _, err := handler.Handle(setupRequest)
280 assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err)
281 rmrMessengerMock.AssertNotCalled(t, "SendMsg")
282 writerMock.AssertExpectations(t)
285 func TestSetupExistingRanWithoutAssocE2TInstanceSelectNoInstanceErrorUpdateFailure(t *testing.T) {
286 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
287 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
288 readerMock.On("GetNodeb", RanName).Return(nb, nil)
289 e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewE2TInstanceAbsenceError())
291 updatedNb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
292 writerMock.On("UpdateNodebInfo", &updatedNb).Return(common.NewInternalError(fmt.Errorf("")))
293 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
294 _, err := handler.Handle(setupRequest)
295 assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err)
296 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
299 func TestSetupExistingRanWithoutAssocE2TInstanceSelectErrorAlreadyDisconnected(t *testing.T) {
300 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
301 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: "", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
302 readerMock.On("GetNodeb", RanName).Return(nb, nil)
303 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, e2managererrors.NewE2TInstanceAbsenceError())
304 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
305 _, err := handler.Handle(setupRequest)
306 assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err)
307 writerMock.AssertNotCalled(t, "UpdateNodebInfo")
308 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
311 func TestSetupExistingRanWithoutAssocE2TInstanceAssociateRanFailure(t *testing.T) {
312 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
313 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
314 readerMock.On("GetNodeb", RanName).Return(nb, nil)
315 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
316 e2tInstancesManagerMock.On("AddRanToInstance", RanName, E2TAddress).Return(e2managererrors.NewRnibDbError())
317 writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
318 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
319 assert.IsType(t, &e2managererrors.RnibDbError{}, err)
320 writerMock.AssertNotCalled(t, "UpdateNodebInfo")
321 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
324 func TestSetupExistingRanWithoutAssocE2TInstanceAssociateRanSucceedsUpdateNodebFails(t *testing.T) {
325 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
326 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
327 readerMock.On("GetNodeb", RanName).Return(nb, nil)
328 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
329 e2tInstancesManagerMock.On("AddRanToInstance", RanName, E2TAddress).Return(nil)
331 updatedNb.AssociatedE2TInstanceAddress = E2TAddress
332 updatedNb.ConnectionAttempts = 0
333 writerMock.On("UpdateNodebInfo", &updatedNb).Return(common.NewInternalError(fmt.Errorf("")))
334 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
335 assert.IsType(t, /* &e2managererrors.RnibDbError{} */&common.InternalError{}, err)
336 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
339 func TestSetupExistingRanWithoutAssocE2TInstanceExecuteSetupFailure(t *testing.T) {
340 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
341 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
342 readerMock.On("GetNodeb", RanName).Return(nb, nil)
343 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
344 e2tInstancesManagerMock.On("AddRanToInstance", RanName, E2TAddress).Return(nil)
346 updatedNb.AssociatedE2TInstanceAddress = E2TAddress
347 updatedNb.ConnectionAttempts = 0
348 writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
349 ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTING).Return(e2managererrors.NewRnibDbError())
350 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
351 assert.IsType(t, &e2managererrors.RnibDbError{}, err)
354 func TestSetupExistingRanWithoutAssocE2TInstanceSuccess(t *testing.T) {
355 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
356 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
357 readerMock.On("GetNodeb", RanName).Return(nb, nil)
358 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
359 e2tInstancesManagerMock.On("AddRanToInstance", RanName, E2TAddress).Return(nil)
361 updatedNb.AssociatedE2TInstanceAddress = E2TAddress
362 updatedNb.ConnectionAttempts = 0
363 writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
364 ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTING).Return(nil)
365 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
369 func TestSetupExistingRanWithAssocE2TInstanceUpdateNodebFailure(t *testing.T) {
370 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
371 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: E2TAddress}
372 readerMock.On("GetNodeb", RanName).Return(nb, nil)
374 updatedNb.ConnectionAttempts = 0
375 writerMock.On("UpdateNodebInfo", &updatedNb).Return(common.NewInternalError(fmt.Errorf("")))
376 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
377 assert.IsType(t, &e2managererrors.RnibDbError{}, err)
378 e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance")
379 e2tInstancesManagerMock.AssertNotCalled(t, "AddRanToInstance")
380 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
383 func TestSetupExistingRanWithAssocE2TInstanceExecuteSetupRmrError(t *testing.T) {
384 readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTestBasicMocks(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
385 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: E2TAddress, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
386 readerMock.On("GetNodeb", RanName).Return(nb, nil)
388 updatedNb.ConnectionAttempts = 0
389 updatedNb2 := updatedNb
390 updatedNb2.ConnectionAttempts++
391 updatedNb3 := updatedNb2
392 updatedNb3.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
393 updatedNb3.ConnectionAttempts--
394 writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
395 writerMock.On("UpdateNodebInfo", &updatedNb2).Return(nil)
396 payload := e2pdus.PackedX2setupRequest
397 xaction := []byte(RanName)
398 msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), RanName, &payload, &xaction)
399 rmrMessengerMock.On("SendMsg",mock.Anything, true).Return(msg, e2managererrors.NewRmrError())
400 writerMock.On("UpdateNodebInfo", &updatedNb3).Return(nil)
401 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
402 assert.IsType(t, &e2managererrors.RmrError{}, err)
403 writerMock.AssertExpectations(t)
406 func TestSetupExistingRanWithAssocE2TInstanceConnectedSuccess(t *testing.T) {
407 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
408 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: E2TAddress, ConnectionStatus: entities.ConnectionStatus_CONNECTED}
409 readerMock.On("GetNodeb", RanName).Return(nb, nil)
411 updatedNb.ConnectionAttempts = 0
412 writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
413 ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTED).Return(nil)
414 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
416 e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance")
417 e2tInstancesManagerMock.AssertNotCalled(t, "AddRanToInstance")