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
24 "e2mgr/e2managererrors"
32 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
33 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
34 "github.com/stretchr/testify/assert"
35 "github.com/stretchr/testify/mock"
39 const E2TAddress = "10.0.2.15:8989"
40 const RanName = "test"
42 func initSetupRequestTest(t *testing.T, protocol entities.E2ApplicationProtocol) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, *SetupRequestHandler, *mocks.E2TInstancesManagerMock, *mocks.RanSetupManagerMock) {
44 config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
46 readerMock := &mocks.RnibReaderMock{}
47 writerMock := &mocks.RnibWriterMock{}
49 rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
51 ranSetupManagerMock := &mocks.RanSetupManagerMock{}
52 e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
53 handler := NewSetupRequestHandler(log, rnibDataService, ranSetupManagerMock, protocol, e2tInstancesManagerMock)
55 return readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock
58 func initSetupRequestTestBasicMocks(t *testing.T, protocol entities.E2ApplicationProtocol) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, *SetupRequestHandler, *mocks.RmrMessengerMock) {
60 config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
62 readerMock := &mocks.RnibReaderMock{}
63 writerMock := &mocks.RnibWriterMock{}
65 rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
67 rmrMessengerMock := &mocks.RmrMessengerMock{}
68 rmrSender := getRmrSender(rmrMessengerMock, log)
69 ranSetupManager := managers.NewRanSetupManager(log, rmrSender, rnibDataService)
70 e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, log)
71 handler := NewSetupRequestHandler(log, rnibDataService, ranSetupManager, protocol, e2tInstancesManager)
73 return readerMock, writerMock, handler, rmrMessengerMock
76 func TestX2SetupHandleNoPortError(t *testing.T) {
77 readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
79 sr := models.SetupRequest{"127.0.0.1", 0, RanName,}
80 _, err := handler.Handle(sr)
81 assert.IsType(t, &e2managererrors.RequestValidationError{}, err)
82 readerMock.AssertNotCalled(t, "GetNodeb")
85 func TestX2SetupHandleNoRanNameError(t *testing.T) {
86 readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
88 sr := models.SetupRequest{RanPort: 8080, RanIp: "127.0.0.1"}
89 _, err := handler.Handle(sr)
90 assert.IsType(t, &e2managererrors.RequestValidationError{}, err)
91 readerMock.AssertNotCalled(t, "GetNodeb")
94 func TestX2SetupHandleNoIpError(t *testing.T) {
95 readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
97 sr := models.SetupRequest{RanPort: 8080, RanName: RanName}
98 _, err := handler.Handle(sr)
99 assert.IsType(t, &e2managererrors.RequestValidationError{}, err)
100 readerMock.AssertNotCalled(t, "GetNodeb")
103 func TestX2SetupHandleInvalidIpError(t *testing.T) {
104 readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
106 sr := models.SetupRequest{RanPort: 8080, RanName: RanName, RanIp: "invalid ip"}
107 _, err := handler.Handle(sr)
108 assert.IsType(t, &e2managererrors.RequestValidationError{}, err)
109 readerMock.AssertNotCalled(t, "GetNodeb")
112 func TestSetupGetNodebFailure(t *testing.T) {
113 readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
115 rnibErr := &common.ValidationError{}
116 nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,}
117 readerMock.On("GetNodeb", RanName).Return(nb, rnibErr)
119 sr := models.SetupRequest{"127.0.0.1", 8080, RanName,}
120 _, err := handler.Handle(sr)
121 assert.IsType(t, &e2managererrors.RnibDbError{}, err)
124 func TestSetupNewRanSelectE2TInstancesDbError(t *testing.T) {
125 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
126 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
127 e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewRnibDbError())
128 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
129 assert.IsType(t, &e2managererrors.RnibDbError{}, err)
130 e2tInstancesManagerMock.AssertNotCalled(t, "AssociateRan")
131 writerMock.AssertNotCalled(t, "SaveNodeb")
132 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
135 func TestSetupNewRanSelectE2TInstancesNoInstances(t *testing.T) {
136 readerMock, writerMock, handler, rmrMessengerMock := initSetupRequestTestBasicMocks(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
137 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
138 readerMock.On("GetE2TAddresses").Return([]string{}, nil)
139 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
140 assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err)
141 writerMock.AssertNotCalled(t, "SaveNodeb")
142 rmrMessengerMock.AssertNotCalled(t, "SendMsg")
145 func TestSetupNewRanAssociateRanFailure(t *testing.T) {
146 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
147 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
148 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
149 e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(e2managererrors.NewRnibDbError())
150 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
151 assert.IsType(t, &e2managererrors.RnibDbError{}, err)
152 writerMock.AssertNotCalled(t, "SaveNodeb")
153 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
156 func TestSetupNewRanSaveNodebFailure(t *testing.T) {
157 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
158 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
159 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
160 e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil)
161 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
162 nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST, E2TAddress)
163 writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(common.NewInternalError(fmt.Errorf("")))
164 _, err := handler.Handle(setupRequest)
165 assert.IsType(t, &e2managererrors.RnibDbError{}, err)
166 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
169 func TestSetupNewRanSetupDbError(t *testing.T) {
170 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
171 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
172 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
173 e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil)
174 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
175 nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST, E2TAddress)
176 writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil)
177 ranSetupManagerMock.On("ExecuteSetup", nodebInfo, entities.ConnectionStatus_CONNECTING).Return(e2managererrors.NewRnibDbError())
178 _, err := handler.Handle(setupRequest)
179 assert.IsType(t, &e2managererrors.RnibDbError{}, err)
182 func TestSetupNewRanSetupRmrError(t *testing.T) {
183 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
184 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
185 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
186 e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil)
187 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
188 nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST, E2TAddress)
189 writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil)
190 ranSetupManagerMock.On("ExecuteSetup", nodebInfo, entities.ConnectionStatus_CONNECTING).Return(e2managererrors.NewRmrError())
191 _, err := handler.Handle(setupRequest)
192 assert.IsType(t, &e2managererrors.RmrError{}, err)
195 func TestSetupNewRanSetupSuccess(t *testing.T) {
196 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
197 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
198 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
199 e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil)
200 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
201 nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST, E2TAddress)
202 writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil)
203 ranSetupManagerMock.On("ExecuteSetup", nodebInfo, entities.ConnectionStatus_CONNECTING).Return(nil)
204 _, err := handler.Handle(setupRequest)
208 func TestX2SetupExistingRanShuttingDown(t *testing.T) {
209 readerMock, _, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
210 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}, nil)
211 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
212 _, err := handler.Handle(setupRequest)
213 assert.IsType(t, &e2managererrors.WrongStateError{}, err)
214 e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance")
215 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
218 func TestEndcSetupExistingRanShuttingDown(t *testing.T) {
219 readerMock, _, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST)
220 readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}, nil)
221 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
222 _, err := handler.Handle(setupRequest)
223 assert.IsType(t, &e2managererrors.WrongStateError{}, err)
224 e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance")
225 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
228 func TestSetupExistingRanWithoutAssocE2TInstanceSelectDbError(t *testing.T) {
229 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
230 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
231 readerMock.On("GetNodeb", RanName).Return(nb, nil)
232 e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewRnibDbError())
234 updatedNb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
235 writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
236 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
237 _, err := handler.Handle(setupRequest)
238 assert.IsType(t, &e2managererrors.RnibDbError{}, err)
239 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
242 func TestSetupExistingRanWithoutAssocE2TInstanceSelectNoInstanceError(t *testing.T) {
243 readerMock, writerMock, handler, rmrMessengerMock := initSetupRequestTestBasicMocks(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
244 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
245 readerMock.On("GetNodeb", RanName).Return(nb, nil)
246 readerMock.On("GetE2TAddresses").Return([]string{}, nil)
248 updatedNb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
249 writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
250 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
251 _, err := handler.Handle(setupRequest)
252 assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err)
253 rmrMessengerMock.AssertNotCalled(t, "SendMsg")
254 writerMock.AssertExpectations(t)
257 func TestSetupExistingRanWithoutAssocE2TInstanceSelectNoInstanceErrorUpdateFailure(t *testing.T) {
258 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
259 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
260 readerMock.On("GetNodeb", RanName).Return(nb, nil)
261 e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewE2TInstanceAbsenceError())
263 updatedNb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
264 writerMock.On("UpdateNodebInfo", &updatedNb).Return(common.NewInternalError(fmt.Errorf("")))
265 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
266 _, err := handler.Handle(setupRequest)
267 assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err)
268 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
271 func TestSetupExistingRanWithoutAssocE2TInstanceSelectErrorAlreadyDisconnected(t *testing.T) {
272 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
273 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: "", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
274 readerMock.On("GetNodeb", RanName).Return(nb, nil)
275 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, e2managererrors.NewE2TInstanceAbsenceError())
276 setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
277 _, err := handler.Handle(setupRequest)
278 assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err)
279 writerMock.AssertNotCalled(t, "UpdateNodebInfo")
280 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
283 func TestSetupExistingRanWithoutAssocE2TInstanceAssociateRanFailure(t *testing.T) {
284 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
285 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
286 readerMock.On("GetNodeb", RanName).Return(nb, nil)
287 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
288 e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(e2managererrors.NewRnibDbError())
289 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
290 assert.IsType(t, &e2managererrors.RnibDbError{}, err)
291 writerMock.AssertNotCalled(t, "UpdateNodebInfo")
292 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
295 func TestSetupExistingRanWithoutAssocE2TInstanceAssociateRanSucceedsUpdateNodebFails(t *testing.T) {
296 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
297 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
298 readerMock.On("GetNodeb", RanName).Return(nb, nil)
299 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
300 e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil)
302 updatedNb.AssociatedE2TInstanceAddress = E2TAddress
303 updatedNb.ConnectionAttempts = 0
304 writerMock.On("UpdateNodebInfo", &updatedNb).Return(common.NewInternalError(fmt.Errorf("")))
305 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
306 assert.IsType(t, &e2managererrors.RnibDbError{}, err)
307 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
310 func TestSetupExistingRanWithoutAssocE2TInstanceExecuteSetupFailure(t *testing.T) {
311 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
312 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
313 readerMock.On("GetNodeb", RanName).Return(nb, nil)
314 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
315 e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil)
317 updatedNb.AssociatedE2TInstanceAddress = E2TAddress
318 updatedNb.ConnectionAttempts = 0
319 writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
320 ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTING).Return(e2managererrors.NewRnibDbError())
321 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
322 assert.IsType(t, &e2managererrors.RnibDbError{}, err)
325 func TestSetupExistingRanWithoutAssocE2TInstanceSuccess(t *testing.T) {
326 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
327 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
328 readerMock.On("GetNodeb", RanName).Return(nb, nil)
329 e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
330 e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil)
332 updatedNb.AssociatedE2TInstanceAddress = E2TAddress
333 updatedNb.ConnectionAttempts = 0
334 writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
335 ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTING).Return(nil)
336 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
340 func TestSetupExistingRanWithAssocE2TInstanceUpdateNodebFailure(t *testing.T) {
341 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
342 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: E2TAddress}
343 readerMock.On("GetNodeb", RanName).Return(nb, nil)
345 updatedNb.ConnectionAttempts = 0
346 writerMock.On("UpdateNodebInfo", &updatedNb).Return(common.NewInternalError(fmt.Errorf("")))
347 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
348 assert.IsType(t, &e2managererrors.RnibDbError{}, err)
349 e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance")
350 e2tInstancesManagerMock.AssertNotCalled(t, "AssociateRan")
351 ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
354 func TestSetupExistingRanWithAssocE2TInstanceExecuteSetupRmrError(t *testing.T) {
355 readerMock, writerMock, handler, rmrMessengerMock := initSetupRequestTestBasicMocks(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
356 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: E2TAddress, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
357 readerMock.On("GetNodeb", RanName).Return(nb, nil)
359 updatedNb.ConnectionAttempts = 0
360 updatedNb2 := updatedNb
361 updatedNb2.ConnectionAttempts++
362 updatedNb3 := updatedNb2
363 updatedNb3.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
364 updatedNb3.ConnectionAttempts--
365 writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
366 writerMock.On("UpdateNodebInfo", &updatedNb2).Return(nil)
367 payload := e2pdus.PackedX2setupRequest
368 xaction := []byte(RanName)
369 msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), RanName, &payload, &xaction)
370 rmrMessengerMock.On("SendMsg",mock.Anything, true).Return(msg, e2managererrors.NewRmrError())
371 writerMock.On("UpdateNodebInfo", &updatedNb3).Return(nil)
372 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
373 assert.IsType(t, &e2managererrors.RmrError{}, err)
374 writerMock.AssertExpectations(t)
377 func TestSetupExistingRanWithAssocE2TInstanceConnectedSuccess(t *testing.T) {
378 readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
379 nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: E2TAddress, ConnectionStatus: entities.ConnectionStatus_CONNECTED}
380 readerMock.On("GetNodeb", RanName).Return(nb, nil)
382 updatedNb.ConnectionAttempts = 0
383 writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
384 ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTED).Return(nil)
385 _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
387 e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance")
388 e2tInstancesManagerMock.AssertNotCalled(t, "AssociateRan")