Copy latest code
[ric-plt/e2mgr.git] / E2Manager / handlers / httpmsghandlers / setup_request_handler_test.go
1 //
2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
4 //
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
8 //
9 //      http://www.apache.org/licenses/LICENSE-2.0
10 //
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.
16
17 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
18 //  platform project (RICP).
19
20 package httpmsghandlers
21
22 import (
23         "e2mgr/configuration"
24         "e2mgr/e2managererrors"
25         "e2mgr/e2pdus"
26         "e2mgr/managers"
27         "e2mgr/mocks"
28         "e2mgr/models"
29         "e2mgr/rmrCgo"
30         "e2mgr/services"
31         "fmt"
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"
36         "testing"
37 )
38
39 const E2TAddress = "10.0.2.15:8989"
40 const RanName = "test"
41
42 func initSetupRequestTest(t *testing.T, protocol entities.E2ApplicationProtocol) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, *SetupRequestHandler, *mocks.E2TInstancesManagerMock, *mocks.RanSetupManagerMock) {
43         log := initLog(t)
44         config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
45
46         readerMock := &mocks.RnibReaderMock{}
47         writerMock := &mocks.RnibWriterMock{}
48
49         rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
50
51         ranSetupManagerMock := &mocks.RanSetupManagerMock{}
52         e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
53         handler := NewSetupRequestHandler(log, rnibDataService, ranSetupManagerMock, protocol, e2tInstancesManagerMock)
54
55         return readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock
56 }
57
58 func initSetupRequestTestBasicMocks(t *testing.T, protocol entities.E2ApplicationProtocol) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, *SetupRequestHandler, *mocks.RmrMessengerMock) {
59         log := initLog(t)
60         config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
61
62         readerMock := &mocks.RnibReaderMock{}
63         writerMock := &mocks.RnibWriterMock{}
64
65         rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
66
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)
72
73         return readerMock, writerMock, handler, rmrMessengerMock
74 }
75
76 func TestX2SetupHandleNoPortError(t *testing.T) {
77         readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
78
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")
83 }
84
85 func TestX2SetupHandleNoRanNameError(t *testing.T) {
86         readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
87
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")
92 }
93
94 func TestX2SetupHandleNoIpError(t *testing.T) {
95         readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
96
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")
101 }
102
103 func TestX2SetupHandleInvalidIpError(t *testing.T) {
104         readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
105
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")
110 }
111
112 func TestSetupGetNodebFailure(t *testing.T) {
113         readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
114
115         rnibErr := &common.ValidationError{}
116         nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,}
117         readerMock.On("GetNodeb", RanName).Return(nb, rnibErr)
118
119         sr := models.SetupRequest{"127.0.0.1", 8080, RanName,}
120         _, err := handler.Handle(sr)
121         assert.IsType(t, &e2managererrors.RnibDbError{}, err)
122 }
123
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")
133 }
134
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")
143 }
144
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")
154 }
155
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")
167 }
168
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)
180 }
181
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)
193 }
194
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)
205         assert.Nil(t, err)
206 }
207
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")
216 }
217
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")
226 }
227
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())
233         updatedNb := *nb
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")
240 }
241
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)
247         updatedNb := *nb
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)
255 }
256
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())
262         updatedNb := *nb
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")
269 }
270
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")
281 }
282
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")
293 }
294
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)
301         updatedNb := *nb
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")
308 }
309
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)
316         updatedNb := *nb
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)
323 }
324
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)
331         updatedNb := *nb
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,})
337         assert.Nil(t, err)
338 }
339
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)
344         updatedNb := *nb
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")
352 }
353
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)
358         updatedNb := *nb
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)
375 }
376
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)
381         updatedNb := *nb
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,})
386         assert.Nil(t, err)
387         e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance")
388         e2tInstancesManagerMock.AssertNotCalled(t, "AssociateRan")
389 }