28dfe76ab1cc5f8a8874892ee7577062f8d13f27
[ric-plt/e2mgr.git] / E2Manager / handlers / rmrmsghandlers / e2_setup_request_notification_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 rmrmsghandlers
21
22 import (
23         "e2mgr/configuration"
24         "e2mgr/managers"
25         "e2mgr/mocks"
26         "e2mgr/models"
27         "e2mgr/rmrCgo"
28         "e2mgr/services"
29         "e2mgr/tests"
30         "errors"
31         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
32         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
33         "github.com/stretchr/testify/assert"
34         "github.com/stretchr/testify/mock"
35         "io/ioutil"
36         "path/filepath"
37         "testing"
38 )
39
40 const (
41         prefix                   = "10.0.2.15:9999|"
42         e2tInstanceFullAddress   = "10.0.2.15:9999"
43         nodebRanName             = "gnb:310-410-b5c67788"
44         GnbSetupRequestXmlPath   = "../../tests/resources/setupRequest_gnb.xml"
45         GnbWithoutFunctionsSetupRequestXmlPath   = "../../tests/resources/setupRequest_gnb_without_functions.xml"
46         EnGnbSetupRequestXmlPath = "../../tests/resources/setupRequest_en-gNB.xml"
47         NgEnbSetupRequestXmlPath = "../../tests/resources/setupRequest_ng-eNB.xml"
48         EnbSetupRequestXmlPath   = "../../tests/resources/setupRequest_enb.xml"
49 )
50
51 func readXmlFile(t *testing.T, xmlPath string) []byte {
52         path, err := filepath.Abs(xmlPath)
53         if err != nil {
54                 t.Fatal(err)
55         }
56         xmlAsBytes, err := ioutil.ReadFile(path)
57         if err != nil {
58                 t.Fatal(err)
59         }
60
61         return xmlAsBytes
62 }
63
64 func TestParseGnbSetupRequest_Success(t *testing.T) {
65         xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
66         handler, _, _, _, _, _ := initMocks(t)
67         prefBytes := []byte(prefix)
68         request, _, err := handler.parseSetupRequest(append(prefBytes, xmlGnb...))
69         assert.Equal(t, "131014", request.GetPlmnId())
70         assert.Equal(t, "10011001101010101011", request.GetNbId())
71         assert.Nil(t, err)
72 }
73
74 func TestParseEnGnbSetupRequest_Success(t *testing.T) {
75         enGnbXml := readXmlFile(t, EnGnbSetupRequestXmlPath)
76         handler, _, _, _, _, _ := initMocks(t)
77         prefBytes := []byte(prefix)
78         request, _, err := handler.parseSetupRequest(append(prefBytes, enGnbXml...))
79         assert.Equal(t, "131014", request.GetPlmnId())
80         assert.Equal(t, "11000101110001101100011111111000", request.GetNbId())
81         assert.Nil(t, err)
82 }
83
84 func TestParseNgEnbSetupRequest_Success(t *testing.T) {
85         ngEnbXml := readXmlFile(t, NgEnbSetupRequestXmlPath)
86         handler, _, _, _, _, _ := initMocks(t)
87         prefBytes := []byte(prefix)
88         request, _, err := handler.parseSetupRequest(append(prefBytes, ngEnbXml...))
89         assert.Equal(t, "131014", request.GetPlmnId())
90         assert.Equal(t, "101010101010101010", request.GetNbId())
91         assert.Nil(t, err)
92 }
93
94 func TestParseEnbSetupRequest_Success(t *testing.T) {
95         enbXml := readXmlFile(t, EnbSetupRequestXmlPath)
96         handler, _, _, _, _, _ := initMocks(t)
97         prefBytes := []byte(prefix)
98         request, _, err := handler.parseSetupRequest(append(prefBytes, enbXml...))
99         assert.Equal(t, "6359AB", request.GetPlmnId())
100         assert.Equal(t, "101010101010101010", request.GetNbId())
101         assert.Nil(t, err)
102 }
103
104 func TestParseSetupRequest_PipFailure(t *testing.T) {
105         xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
106         handler, _, _, _, _, _ := initMocks(t)
107         prefBytes := []byte("10.0.2.15:9999")
108         request, _, err := handler.parseSetupRequest(append(prefBytes, xmlGnb...))
109         assert.Nil(t, request)
110         assert.NotNil(t, err)
111         assert.EqualError(t, err, "#E2SetupRequestNotificationHandler.parseSetupRequest - Error parsing E2 Setup Request failed extract Payload: no | separator found")
112 }
113
114 func TestParseSetupRequest_UnmarshalFailure(t *testing.T) {
115         handler, _, _, _, _, _ := initMocks(t)
116         prefBytes := []byte(prefix)
117         request, _, err := handler.parseSetupRequest(append(prefBytes, 1, 2, 3))
118         assert.Nil(t, request)
119         assert.NotNil(t, err)
120         assert.EqualError(t, err, "#E2SetupRequestNotificationHandler.parseSetupRequest - Error unmarshalling E2 Setup Request payload: 31302e302e322e31353a393939397c010203")
121 }
122
123 func TestE2SetupRequestNotificationHandler_HandleNewGnbSuccess(t *testing.T) {
124         xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
125         handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
126         var e2tInstance = &entities.E2TInstance{}
127         e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
128         var gnb *entities.NodebInfo
129         readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
130         writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
131         routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
132         writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
133         e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
134         var errEmpty error
135         rmrMessage := &rmrCgo.MBuf{}
136         rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
137         prefBytes := []byte(prefix)
138         notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
139         handler.Handle(notificationRequest)
140         assertNewNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock)
141 }
142
143 func TestE2SetupRequestNotificationHandler_HandleNewGnbWithoutFunctionsSuccess(t *testing.T) {
144         xmlGnb := readXmlFile(t, GnbWithoutFunctionsSetupRequestXmlPath)
145         handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
146         var e2tInstance = &entities.E2TInstance{}
147         e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
148         var gnb *entities.NodebInfo
149         readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
150         writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
151         routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
152         writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
153         e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
154         var errEmpty error
155         rmrMessage := &rmrCgo.MBuf{}
156         rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
157         prefBytes := []byte(prefix)
158         notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
159         handler.Handle(notificationRequest)
160         assertNewNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock)
161 }
162
163 func TestE2SetupRequestNotificationHandler_HandleNewEnGnbSuccess(t *testing.T) {
164         xmlEnGnb := readXmlFile(t, EnGnbSetupRequestXmlPath)
165         handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
166         var e2tInstance = &entities.E2TInstance{}
167         e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
168         var gnb *entities.NodebInfo
169         readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
170         writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
171         routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
172         writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
173         e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
174         var errEmpty error
175         rmrMessage := &rmrCgo.MBuf{}
176         rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
177         prefBytes := []byte(prefix)
178         notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlEnGnb...)}
179         handler.Handle(notificationRequest)
180         assertNewNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock)
181 }
182
183 func TestE2SetupRequestNotificationHandler_HandleNewNgEnbSuccess(t *testing.T) {
184         xmlNgEnb := readXmlFile(t, NgEnbSetupRequestXmlPath)
185         handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
186         var e2tInstance = &entities.E2TInstance{}
187         e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
188         var gnb *entities.NodebInfo
189         readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
190         writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
191         routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
192         writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
193         e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
194         var errEmpty error
195         rmrMessage := &rmrCgo.MBuf{}
196         rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
197         prefBytes := []byte(prefix)
198         notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlNgEnb...)}
199         handler.Handle(notificationRequest)
200         assertNewNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock)
201 }
202
203 func TestE2SetupRequestNotificationHandler_HandleExistingGnbSuccess(t *testing.T) {
204         xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
205
206         handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
207         var e2tInstance = &entities.E2TInstance{}
208         e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
209         var gnb = &entities.NodebInfo{
210                 RanName:                      nodebRanName,
211                 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
212                 ConnectionStatus:             entities.ConnectionStatus_CONNECTED,
213                 NodeType:                     entities.Node_GNB,
214                 Configuration:                &entities.NodebInfo_Gnb{Gnb: &entities.Gnb{}},
215         }
216         readerMock.On("GetNodeb", mock.Anything).Return(gnb, nil)
217         routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
218         writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
219         e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
220         var errEmpty error
221         rmrMessage := &rmrCgo.MBuf{}
222         rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
223         prefBytes := []byte(prefix)
224         notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
225         handler.Handle(notificationRequest)
226         assertExistingNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock)
227 }
228
229 func TestE2SetupRequestNotificationHandler_HandleParseError(t *testing.T) {
230         xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
231
232         handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
233         prefBytes := []byte("invalid_prefix")
234         notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
235         handler.Handle(notificationRequest)
236         readerMock.AssertNotCalled(t, "GetNodeb", mock.Anything)
237         writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
238         routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
239         writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
240         e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
241         rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
242 }
243
244 func TestE2SetupRequestNotificationHandler_HandleUnmarshalError(t *testing.T) {
245         handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
246         prefBytes := []byte(prefix)
247         notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, "xmlGnb"...)}
248         handler.Handle(notificationRequest)
249         readerMock.AssertNotCalled(t, "GetNodeb", mock.Anything)
250         writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
251         routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
252         writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
253         e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
254         rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
255 }
256
257 func TestE2SetupRequestNotificationHandler_HandleGetE2TInstanceError(t *testing.T) {
258         xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
259         handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
260         var e2tInstance *entities.E2TInstance
261         e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, common.NewResourceNotFoundError("Not found"))
262         prefBytes := []byte(prefix)
263         notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
264         handler.Handle(notificationRequest)
265         e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
266         readerMock.AssertNotCalled(t, "GetNodeb", mock.Anything)
267         writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
268         routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
269         writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
270         e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
271         rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
272 }
273
274 func TestE2SetupRequestNotificationHandler_HandleGetNodebError(t *testing.T) {
275         xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
276
277         handler, readerMock, writerMock, routingManagerClientMock, e2tInstancesManagerMock, rmrMessengerMock := initMocks(t)
278         var e2tInstance = &entities.E2TInstance{}
279         e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
280         var gnb *entities.NodebInfo
281         readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewInternalError(errors.New("some error")))
282         prefBytes := []byte(prefix)
283         notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
284         handler.Handle(notificationRequest)
285         e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
286         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)
287         writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
288         routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
289         writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
290         e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
291         rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
292 }
293
294 func TestE2SetupRequestNotificationHandler_HandleAssociationError(t *testing.T) {
295         xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
296
297         handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
298         var e2tInstance = &entities.E2TInstance{}
299         e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
300         var gnb *entities.NodebInfo
301         readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
302         writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
303         writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
304         e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
305         routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(errors.New("association error"))
306         var errEmpty error
307         rmrMessage := &rmrCgo.MBuf{}
308         rmrMessengerMock.On("WhSendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
309
310         prefBytes := []byte(prefix)
311         notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
312         handler.Handle(notificationRequest)
313         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)
314         e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
315         writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
316         routingManagerClientMock.AssertCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
317         writerMock.AssertCalled(t, "UpdateNodebInfo", mock.Anything)
318         e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
319         rmrMessengerMock.AssertCalled(t, "WhSendMsg", mock.Anything, mock.Anything)
320 }
321
322 func TestE2SetupRequestNotificationHandler_ConvertTo20BitStringError(t *testing.T) {
323         xmlEnGnb := readXmlFile(t, EnGnbSetupRequestXmlPath)
324         logger := tests.InitLog(t)
325         config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3, GlobalRicId: struct {
326                 PlmnId      string
327                 RicNearRtId string
328         }{PlmnId: "131014", RicNearRtId: "10011001101010101011"}}
329         rmrMessengerMock := &mocks.RmrMessengerMock{}
330         rmrSender := tests.InitRmrSender(rmrMessengerMock, logger)
331         readerMock := &mocks.RnibReaderMock{}
332         writerMock := &mocks.RnibWriterMock{}
333         routingManagerClientMock := &mocks.RoutingManagerClientMock{}
334         rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
335         e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
336         e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManagerMock, routingManagerClientMock)
337         handler := NewE2SetupRequestNotificationHandler(logger, config, e2tInstancesManagerMock, rmrSender, rnibDataService, e2tAssociationManager)
338
339         var e2tInstance = &entities.E2TInstance{}
340         e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
341         var gnb *entities.NodebInfo
342         readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
343         writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
344         routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
345         writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
346         e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
347         var errEmpty error
348         rmrMessage := &rmrCgo.MBuf{}
349         rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
350         prefBytes := []byte(prefix)
351         notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlEnGnb...)}
352         handler.Handle(notificationRequest)
353         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)
354         e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
355         writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
356         routingManagerClientMock.AssertCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
357         writerMock.AssertCalled(t, "UpdateNodebInfo", mock.Anything)
358         e2tInstancesManagerMock.AssertCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
359         rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
360 }
361
362 func TestE2SetupRequestNotificationHandler_HandleExistingGnbInvalidStatusError(t *testing.T) {
363         xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
364         handler, readerMock, writerMock, routingManagerClientMock, e2tInstancesManagerMock, rmrMessengerMock := initMocks(t)
365         var gnb = &entities.NodebInfo{RanName: nodebRanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}
366         readerMock.On("GetNodeb", mock.Anything).Return(gnb, nil)
367         var e2tInstance = &entities.E2TInstance{}
368         e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
369         prefBytes := []byte(prefix)
370         notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
371         handler.Handle(notificationRequest)
372         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)
373         e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
374         writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
375         routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
376         writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
377         e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
378         rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
379 }
380
381 func initMocks(t *testing.T) (E2SetupRequestNotificationHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *mocks.E2TInstancesManagerMock, *mocks.RoutingManagerClientMock) {
382         logger := tests.InitLog(t)
383         config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3, GlobalRicId: struct {
384                 PlmnId      string
385                 RicNearRtId string
386         }{PlmnId: "131014", RicNearRtId: "556670"}}
387         rmrMessengerMock := &mocks.RmrMessengerMock{}
388         rmrSender := tests.InitRmrSender(rmrMessengerMock, logger)
389         readerMock := &mocks.RnibReaderMock{}
390         writerMock := &mocks.RnibWriterMock{}
391         routingManagerClientMock := &mocks.RoutingManagerClientMock{}
392         rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
393         e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
394         e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManagerMock, routingManagerClientMock)
395         handler := NewE2SetupRequestNotificationHandler(logger, config, e2tInstancesManagerMock, rmrSender, rnibDataService, e2tAssociationManager)
396         return handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock
397 }
398
399 func assertNewNodebSuccessCalls(readerMock *mocks.RnibReaderMock, t *testing.T, e2tInstancesManagerMock *mocks.E2TInstancesManagerMock, writerMock *mocks.RnibWriterMock, routingManagerClientMock *mocks.RoutingManagerClientMock, rmrMessengerMock *mocks.RmrMessengerMock) {
400         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)
401         writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
402         e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
403         routingManagerClientMock.AssertCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
404         writerMock.AssertCalled(t, "UpdateNodebInfo", mock.Anything)
405         e2tInstancesManagerMock.AssertCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
406         rmrMessengerMock.AssertCalled(t, "SendMsg", mock.Anything, mock.Anything)
407 }
408
409 func assertExistingNodebSuccessCalls(readerMock *mocks.RnibReaderMock, t *testing.T, e2tInstancesManagerMock *mocks.E2TInstancesManagerMock, writerMock *mocks.RnibWriterMock, routingManagerClientMock *mocks.RoutingManagerClientMock, rmrMessengerMock *mocks.RmrMessengerMock) {
410         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)
411         writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
412         e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
413         routingManagerClientMock.AssertCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
414         writerMock.AssertCalled(t, "UpdateNodebInfo", mock.Anything)
415         e2tInstancesManagerMock.AssertCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
416         rmrMessengerMock.AssertCalled(t, "SendMsg", mock.Anything, mock.Anything)
417 }