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