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