Add R5 content to master
[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         "bytes"
24         "e2mgr/clients"
25         "e2mgr/configuration"
26         "e2mgr/e2managererrors"
27         "e2mgr/e2pdus"
28         "e2mgr/managers"
29         "e2mgr/mocks"
30         "e2mgr/models"
31         "e2mgr/rmrCgo"
32         "e2mgr/services"
33         "encoding/json"
34         "fmt"
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"
39         "io/ioutil"
40         "net/http"
41         "testing"
42 )
43
44 const E2TAddress = "10.0.2.15:8989"
45 const RanName = "test"
46 const BaseRMUrl = "http://10.10.2.15:12020/routingmanager"
47
48 func initSetupRequestTest(t *testing.T, protocol entities.E2ApplicationProtocol) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, *SetupRequestHandler, *mocks.E2TInstancesManagerMock, *mocks.RanSetupManagerMock, *mocks.HttpClientMock) {
49         log := initLog(t)
50         config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
51         config.RoutingManager.BaseUrl = BaseRMUrl
52
53         readerMock := &mocks.RnibReaderMock{}
54         writerMock := &mocks.RnibWriterMock{}
55
56         rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
57
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)
65
66         return readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, httpClientMock
67 }
68
69 func initSetupRequestTestBasicMocks(t *testing.T, protocol entities.E2ApplicationProtocol) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, *SetupRequestHandler, *mocks.RmrMessengerMock, *mocks.HttpClientMock, *mocks.E2TInstancesManagerMock) {
70         log := initLog(t)
71         config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
72         config.RoutingManager.BaseUrl = BaseRMUrl
73         readerMock := &mocks.RnibReaderMock{}
74         writerMock := &mocks.RnibWriterMock{}
75
76         rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
77
78         rmrMessengerMock := &mocks.RmrMessengerMock{}
79         rmrSender := getRmrSender(rmrMessengerMock, log)
80         ranSetupManager := managers.NewRanSetupManager(log, rmrSender, rnibDataService)
81         e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
82         httpClientMock := &mocks.HttpClientMock{}
83         rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock)
84         e2tAssociationManager := managers.NewE2TAssociationManager(log, rnibDataService, e2tInstancesManagerMock, rmClient)
85         handler := NewSetupRequestHandler(log, rnibDataService, ranSetupManager, protocol, e2tInstancesManagerMock, e2tAssociationManager)
86
87         return readerMock, writerMock, handler, rmrMessengerMock, httpClientMock, e2tInstancesManagerMock
88 }
89
90 func mockHttpClientAssociateRan(httpClientMock *mocks.HttpClientMock) {
91         data := models.RoutingManagerE2TDataList{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)
97 }
98
99 func TestX2SetupHandleNoPortError(t *testing.T) {
100         readerMock, _, handler, _, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
101
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")
106 }
107
108 func TestX2SetupHandleNoRanNameError(t *testing.T) {
109         readerMock, _, handler, _, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
110
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")
115 }
116
117 func TestX2SetupHandleNoIpError(t *testing.T) {
118         readerMock, _, handler, _, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
119
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")
124 }
125
126 func TestX2SetupHandleInvalidIpError(t *testing.T) {
127         readerMock, _, handler, _, _, _:= initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
128
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")
133 }
134
135 func TestSetupGetNodebFailure(t *testing.T) {
136         readerMock, _, handler, _, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
137
138         rnibErr := &common.ValidationError{}
139         nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,}
140         readerMock.On("GetNodeb", RanName).Return(nb, rnibErr)
141
142         sr := models.SetupRequest{"127.0.0.1", 8080, RanName,}
143         _, err := handler.Handle(sr)
144         assert.IsType(t, &e2managererrors.RnibDbError{}, err)
145 }
146
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, "AddRansToInstance")
154         writerMock.AssertNotCalled(t, "SaveNodeb")
155         ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
156 }
157
158 func TestSetupNewRanSelectE2TInstancesNoInstances(t *testing.T) {
159         readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
160         readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
161         e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
162         e2tInstancesManagerMock.On("AddRansToInstance", E2TAddress, []string{RanName}).Return(nil)
163         setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
164         nodebInfo, _ := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
165         writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
166         updatedNb := *nodebInfo
167         updatedNb.AssociatedE2TInstanceAddress = E2TAddress
168         updatedNb.ConnectionStatus = entities.ConnectionStatus_CONNECTED
169         writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
170         ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTING).Return(nil)
171         _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
172         assert.Nil(t, err)
173         readerMock.AssertExpectations(t)
174         writerMock.AssertExpectations(t)
175         e2tInstancesManagerMock.AssertExpectations(t)
176         ranSetupManagerMock.AssertExpectations(t)
177 }
178
179 func TestSetupNewRanAssociateRanFailure(t *testing.T) {
180         readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, httpClientMock := 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("AddRansToInstance", E2TAddress, []string{RanName}).Return(e2managererrors.NewRnibDbError())
184         setupRequest := &models.SetupRequest{"127.0.0.1", 8080, RanName,}
185         nb, nbIdentity := createInitialNodeInfo(setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
186         nb.ConnectionStatus = entities.ConnectionStatus_CONNECTED
187         writerMock.On("SaveNodeb", nbIdentity, mock.Anything).Return(nil)
188         writerMock.On("UpdateNodebInfo", nb).Return(nil)
189         nb.AssociatedE2TInstanceAddress = E2TAddress
190         mockHttpClientAssociateRan(httpClientMock)
191         updatedNb := *nb
192         updatedNb.AssociatedE2TInstanceAddress = E2TAddress
193
194         _, err := handler.Handle(*setupRequest)
195         assert.NotNil(t, err)
196         assert.IsType(t, &e2managererrors.RnibDbError{}, err)
197         readerMock.AssertExpectations(t)
198         writerMock.AssertExpectations(t)
199         e2tInstancesManagerMock.AssertExpectations(t)
200         ranSetupManagerMock.AssertExpectations(t)
201         httpClientMock.AssertExpectations(t)
202 }
203
204 func TestSetupNewRanSaveNodebFailure(t *testing.T) {
205         readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
206         readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
207         e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
208         e2tInstancesManagerMock.On("AddRansToInstance", E2TAddress, []string{RanName}).Return(nil)
209         setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
210         nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
211         writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(common.NewInternalError(fmt.Errorf("")))
212         _, err := handler.Handle(setupRequest)
213         assert.IsType(t, &e2managererrors.RnibDbError{}, err)
214         ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
215 }
216
217 func TestSetupNewRanSetupDbError(t *testing.T) {
218         readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
219         readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
220         e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
221         e2tInstancesManagerMock.On("AddRansToInstance", E2TAddress, []string{RanName}).Return(e2managererrors.NewRnibDbError())
222         setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
223         nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
224         writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil)
225         updatedNb := *nodebInfo
226         updatedNb.AssociatedE2TInstanceAddress = E2TAddress
227         updatedNb.ConnectionStatus = entities.ConnectionStatus_CONNECTED
228         writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
229         _, err := handler.Handle(setupRequest)
230         assert.NotNil(t, err)
231         assert.IsType(t, &e2managererrors.RnibDbError{}, err)
232         readerMock.AssertExpectations(t)
233         writerMock.AssertExpectations(t)
234         ranSetupManagerMock.AssertExpectations(t)
235 }
236
237 func TestSetupNewRanSetupRmrError(t *testing.T) {
238         readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
239         readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
240         e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
241         e2tInstancesManagerMock.On("AddRansToInstance", E2TAddress, []string{RanName}).Return(nil)
242         setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
243         nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
244         writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil)
245         updatedNb := *nodebInfo
246         updatedNb.AssociatedE2TInstanceAddress = E2TAddress
247         updatedNb.ConnectionStatus = entities.ConnectionStatus_CONNECTED
248         writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
249         ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTING).Return(e2managererrors.NewRmrError())
250         _, err := handler.Handle(setupRequest)
251         assert.IsType(t, &e2managererrors.RmrError{}, err)
252 }
253
254 func TestSetupNewRanSetupSuccess(t *testing.T) {
255         readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
256         readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
257         e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
258         e2tInstancesManagerMock.On("AddRansToInstance", E2TAddress, []string{RanName}).Return(nil)
259         setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
260         nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
261         writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil)
262         updatedNb := *nodebInfo
263         updatedNb.AssociatedE2TInstanceAddress = E2TAddress
264         updatedNb.ConnectionStatus = entities.ConnectionStatus_CONNECTED
265         writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
266         ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTING).Return(nil)
267         _, err := handler.Handle(setupRequest)
268         assert.Nil(t, err)
269 }
270
271 func TestX2SetupExistingRanShuttingDown(t *testing.T) {
272         readerMock, _, handler, e2tInstancesManagerMock, ranSetupManagerMock , _:= initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
273         readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}, nil)
274         setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
275         _, err := handler.Handle(setupRequest)
276         assert.IsType(t, &e2managererrors.WrongStateError{}, err)
277         e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance")
278         ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
279 }
280
281 func TestEndcSetupExistingRanShuttingDown(t *testing.T) {
282         readerMock, _, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST)
283         readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}, nil)
284         setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
285         _, err := handler.Handle(setupRequest)
286         assert.IsType(t, &e2managererrors.WrongStateError{}, err)
287         e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance")
288         ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
289 }
290
291 func TestSetupExistingRanWithoutAssocE2TInstanceSelectDbError(t *testing.T) {
292         readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
293         nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
294         readerMock.On("GetNodeb", RanName).Return(nb, nil)
295         e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewRnibDbError())
296         updatedNb := *nb
297         updatedNb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
298         writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
299         setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
300         _, err := handler.Handle(setupRequest)
301         assert.IsType(t, &e2managererrors.RnibDbError{}, err)
302         ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
303 }
304
305 func TestSetupExistingRanWithoutAssocE2TInstanceSelectNoInstanceError(t *testing.T) {
306         readerMock, writerMock, handler, rmrMessengerMock, httpClientMock,e2tInstancesManagerMock:= initSetupRequestTestBasicMocks(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
307         nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
308         readerMock.On("GetNodeb", RanName).Return(nb, nil)
309         readerMock.On("GetE2TAddresses").Return([]string{}, nil)
310         writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
311         setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
312         e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
313         e2tInstancesManagerMock.On("AddRansToInstance", "10.0.2.15:8989", []string{"test"}).Return(nil)
314         mockHttpClientAssociateRan(httpClientMock)
315         _, err := handler.Handle(setupRequest)
316         assert.IsType(t, &e2managererrors.InternalError{}, err)
317         rmrMessengerMock.AssertNotCalled(t, "SendMsg")
318         writerMock.AssertExpectations(t)
319 }
320
321 func TestSetupExistingRanWithoutAssocE2TInstanceSelectNoInstanceErrorUpdateFailure(t *testing.T) {
322         readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
323         nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
324         readerMock.On("GetNodeb", RanName).Return(nb, nil)
325         e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewE2TInstanceAbsenceError())
326         updatedNb := *nb
327         updatedNb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
328         writerMock.On("UpdateNodebInfo", &updatedNb).Return(common.NewInternalError(fmt.Errorf("")))
329         setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
330         _, err := handler.Handle(setupRequest)
331         assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err)
332         ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
333 }
334
335 func TestSetupExistingRanWithoutAssocE2TInstanceSelectErrorAlreadyDisconnected(t *testing.T) {
336         readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
337         nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: "", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
338         readerMock.On("GetNodeb", RanName).Return(nb, nil)
339         e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, e2managererrors.NewE2TInstanceAbsenceError())
340         setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
341         _, err := handler.Handle(setupRequest)
342         assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err)
343         writerMock.AssertNotCalled(t, "UpdateNodebInfo")
344         ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
345 }
346
347 //func TestSetupExistingRanWithoutAssocE2TInstanceAssociateRanFailure(t *testing.T) {
348 //      readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
349 //      nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
350 //      readerMock.On("GetNodeb", RanName).Return(nb, nil)
351 //      e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
352 //      e2tInstancesManagerMock.On("AddRansToInstance", E2TAddress, []string{RanName}).Return(e2managererrors.NewRnibDbError())
353 //      writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
354 //      _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
355 //      assert.IsType(t, &e2managererrors.RnibDbError{}, err)
356 //      writerMock.AssertNotCalled(t, "UpdateNodebInfo")
357 //      ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
358 //}
359
360 //func TestSetupExistingRanWithoutAssocE2TInstanceAssociateRanSucceedsUpdateNodebFails(t *testing.T) {
361 //      readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
362 //      nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
363 //      readerMock.On("GetNodeb", RanName).Return(nb, nil)
364 //      e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
365 //      e2tInstancesManagerMock.On("AddRansToInstance", E2TAddress, []string{RanName}).Return(nil)
366 //      updatedNb := *nb
367 //      updatedNb.AssociatedE2TInstanceAddress = E2TAddress
368 //      writerMock.On("UpdateNodebInfo", &updatedNb).Return(common.NewInternalError(fmt.Errorf("")))
369 //      _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
370 //      assert.IsType(t, /* &e2managererrors.RnibDbError{} */&common.InternalError{}, err)
371 //      ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
372 //}
373
374 //func TestSetupExistingRanWithoutAssocE2TInstanceExecuteSetupFailure(t *testing.T) {
375 //      readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
376 //      nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
377 //      readerMock.On("GetNodeb", RanName).Return(nb, nil)
378 //      e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
379 //      e2tInstancesManagerMock.On("AddRansToInstance", E2TAddress, []string{RanName}).Return(nil)
380 //      updatedNb := *nb
381 //      updatedNb.AssociatedE2TInstanceAddress = E2TAddress
382 //      writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
383 //      ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTING).Return(e2managererrors.NewRnibDbError())
384 //      _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
385 //      assert.IsType(t, &e2managererrors.RnibDbError{}, err)
386 //}
387 //
388 //func TestSetupExistingRanWithoutAssocE2TInstanceSuccess(t *testing.T) {
389 //      readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
390 //      nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
391 //      readerMock.On("GetNodeb", RanName).Return(nb, nil)
392 //      e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
393 //      e2tInstancesManagerMock.On("AddRansToInstance", E2TAddress, []string{RanName}).Return(nil)
394 //      updatedNb := *nb
395 //      updatedNb.AssociatedE2TInstanceAddress = E2TAddress
396 //      writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
397 //      ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTING).Return(nil)
398 //      _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
399 //      assert.Nil(t, err)
400 //}
401
402 func TestSetupExistingRanWithAssocE2TInstanceUpdateNodebFailure(t *testing.T) {
403         readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
404         nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: E2TAddress}
405         readerMock.On("GetNodeb", RanName).Return(nb, nil)
406         updatedNb := *nb
407         writerMock.On("UpdateNodebInfo", &updatedNb).Return(common.NewInternalError(fmt.Errorf("")))
408         _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
409         assert.IsType(t, &e2managererrors.RnibDbError{}, err)
410         e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance")
411         e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance")
412         ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
413 }
414
415 func TestSetupExistingRanWithAssocE2TInstanceExecuteSetupRmrError(t *testing.T) {
416         readerMock, writerMock, handler, rmrMessengerMock, _, _ := initSetupRequestTestBasicMocks(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
417         nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: E2TAddress, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
418         readerMock.On("GetNodeb", RanName).Return(nb, nil)
419         updatedNb := *nb
420         updatedNb3 := updatedNb
421         updatedNb3.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
422         writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
423         payload := e2pdus.PackedX2setupRequest
424         xaction := []byte(RanName)
425         msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), RanName, &payload, &xaction, nil)
426         rmrMessengerMock.On("SendMsg",mock.Anything, true).Return(msg, e2managererrors.NewRmrError())
427         writerMock.On("UpdateNodebInfo", &updatedNb3).Return(nil)
428         _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
429         assert.IsType(t, &e2managererrors.RmrError{}, err)
430         writerMock.AssertExpectations(t)
431 }
432
433 func TestSetupExistingRanWithAssocE2TInstanceConnectedSuccess(t *testing.T) {
434         readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
435         nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: E2TAddress, ConnectionStatus: entities.ConnectionStatus_CONNECTED}
436         readerMock.On("GetNodeb", RanName).Return(nb, nil)
437         updatedNb := *nb
438         writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
439         ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTED).Return(nil)
440         _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
441         assert.Nil(t, err)
442         e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance")
443         e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance")
444 }
445
446 func TestSetupExistingRanWithoutAssocE2TInstanceExecuteRoutingManagerError(t *testing.T) {
447         readerMock, writerMock, handler, rmrMessengerMock, httpClientMock, e2tInstancesManagerMock := initSetupRequestTestBasicMocks(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
448         nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: "", ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
449         readerMock.On("GetNodeb", RanName).Return(nb, nil)
450         writerMock.On("UpdateNodebInfo", nb).Return(nil)
451         e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
452         mockHttpClientAssociateRan(httpClientMock)
453         e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
454         msg := &rmrCgo.MBuf{}
455         var errNIl error
456         rmrMessengerMock.On("SendMsg",mock.Anything, true).Return(msg, errNIl)
457         _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
458         assert.Nil(t, err)
459         writerMock.AssertExpectations(t)
460         readerMock.AssertExpectations(t)
461         httpClientMock.AssertExpectations(t)
462 }