25a815015cd8cab3e862d748496d4485dae28736
[ric-plt/e2mgr.git] / E2Manager / handlers / rmrmsghandlers / e2_reset_request_handler_test.go
1 //\r
2 // Copyright (c) 2023 Samsung Electronics Co., Ltd. All Rights Reserved.\r
3 //\r
4 // Licensed under the Apache License, Version 2.0 (the "License");\r
5 // you may not use this file except in compliance with the License.\r
6 // You may obtain a copy of the License at\r
7 //\r
8 //      http://www.apache.org/licenses/LICENSE-2.0\r
9 //\r
10 // Unless required by applicable law or agreed to in writing, software\r
11 // distributed under the License is distributed on an "AS IS" BASIS,\r
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13 // See the License for the specific language governing permissions and\r
14 // limitations under the License.\r
15 \r
16 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)\r
17 //  platform project (RICP).\r
18 \r
19 package rmrmsghandlers\r
20 \r
21 import (\r
22         "e2mgr/configuration"\r
23         "e2mgr/managers"\r
24         "e2mgr/mocks"\r
25         "e2mgr/models"\r
26         "e2mgr/rmrCgo"\r
27         "e2mgr/services"\r
28         "e2mgr/tests"\r
29         "e2mgr/utils"\r
30         "testing"\r
31 \r
32         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"\r
33         "github.com/stretchr/testify/mock"\r
34 )\r
35 \r
36 const (\r
37         E2ResetXmlPath = "../../tests/resources/reset/reset-request.xml"\r
38 )\r
39 \r
40 func initE2ResetMocks(t *testing.T) (*E2ResetRequestNotificationHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *mocks.RanAlarmServiceMock) {\r
41         logger := tests.InitLog(t)\r
42         config := &configuration.Configuration{\r
43                 RnibRetryIntervalMs:       10,\r
44                 MaxRnibConnectionAttempts: 3,\r
45                 E2ResetTimeOutSec:         10,\r
46                 RnibWriter: configuration.RnibWriterConfig{\r
47                         StateChangeMessageChannel: StateChangeMessageChannel,\r
48                 }}\r
49         rmrMessengerMock := &mocks.RmrMessengerMock{}\r
50         rmrSender := tests.InitRmrSender(rmrMessengerMock, logger)\r
51         readerMock := &mocks.RnibReaderMock{}\r
52         writerMock := &mocks.RnibWriterMock{}\r
53         rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)\r
54         ranListManager := managers.NewRanListManager(logger, rnibDataService)\r
55         ranAlarmService := &mocks.RanAlarmServiceMock{}\r
56         ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)\r
57         ranResetManager := managers.NewRanResetManager(logger, rnibDataService, ranConnectStatusChangeManager)\r
58         changeStatusToConnectedRanManager := managers.NewChangeStatusToConnectedRanManager(logger, rnibDataService, ranConnectStatusChangeManager)\r
59         handler := NewE2ResetRequestNotificationHandler(logger, rnibDataService, config, rmrSender, ranResetManager, changeStatusToConnectedRanManager)\r
60         return handler, readerMock, writerMock, rmrMessengerMock, ranAlarmService\r
61 }\r
62 \r
63 func TestE2ResettNotificationHandler(t *testing.T) {\r
64         e2ResetXml := utils.ReadXmlFile(t, E2ResetXmlPath)\r
65         handler, readerMock, writerMock, rmrMessengerMock, ranAlarmServiceMock := initE2ResetMocks(t)\r
66         var nodebInfo = &entities.NodebInfo{\r
67                 RanName:                      gnbNodebRanName,\r
68                 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,\r
69                 ConnectionStatus:             entities.ConnectionStatus_DISCONNECTED,\r
70                 NodeType:                     entities.Node_GNB,\r
71                 Configuration: &entities.NodebInfo_Gnb{\r
72                         Gnb: &entities.Gnb{},\r
73                 },\r
74         }\r
75         readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)\r
76         writerMock.On("UpdateNodebInfoAndPublish", mock.Anything).Return(nil)\r
77         var rnibErr error\r
78         writerMock.On("UpdateNodebInfo", mock.Anything).Return(rnibErr)\r
79         var errEmpty error\r
80         rmrMessage := &rmrCgo.MBuf{}\r
81         rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)\r
82         writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", mock.Anything, mock.Anything).Return(nil)\r
83         ranAlarmServiceMock.On("SetConnectivityChangeAlarm", mock.Anything).Return(nil)\r
84         notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(""), e2ResetXml...)}\r
85         handler.Handle(notificationRequest)\r
86         readerMock.AssertExpectations(t)\r
87         writerMock.AssertExpectations(t)\r
88         rmrMessengerMock.AssertCalled(t, "SendMsg", mock.Anything, true)\r
89 \r
90 }\r
91 \r
92 func TestE2ResettNotificationHandler_UpdateStatus_Connected(t *testing.T) {\r
93         e2ResetXml := utils.ReadXmlFile(t, E2ResetXmlPath)\r
94         handler, readerMock, writerMock, rmrMessengerMock, ranAlarmServiceMock := initE2ResetMocks(t)\r
95         var nodebInfo = &entities.NodebInfo{\r
96                 RanName:                      gnbNodebRanName,\r
97                 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,\r
98                 ConnectionStatus:             entities.ConnectionStatus_DISCONNECTED,\r
99                 NodeType:                     entities.Node_GNB,\r
100                 Configuration: &entities.NodebInfo_Gnb{\r
101                         Gnb: &entities.Gnb{},\r
102                 },\r
103         }\r
104         readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)\r
105         writerMock.On("UpdateNodebInfoAndPublish", mock.Anything).Return(nil)\r
106         var rnibErr error\r
107         writerMock.On("UpdateNodebInfo", mock.Anything).Return(rnibErr)\r
108         nodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED\r
109         readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)\r
110 \r
111         var errEmpty error\r
112         rmrMessage := &rmrCgo.MBuf{}\r
113         rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)\r
114         writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", mock.Anything, mock.Anything).Return(nil)\r
115         ranAlarmServiceMock.On("SetConnectivityChangeAlarm", mock.Anything).Return(nil)\r
116         notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(""), e2ResetXml...)}\r
117         handler.Handle(notificationRequest)\r
118         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)\r
119         writerMock.AssertCalled(t, "UpdateNodebInfoAndPublish", mock.Anything)\r
120         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)\r
121 }\r
122 \r
123 func TestE2ResettNotificationHandler_Successful_Reset_Response(t *testing.T) {\r
124         e2ResetXml := utils.ReadXmlFile(t, E2ResetXmlPath)\r
125         handler, readerMock, writerMock, rmrMessengerMock, ranAlarmServiceMock := initE2ResetMocks(t)\r
126         var nodebInfo = &entities.NodebInfo{\r
127                 RanName:                      gnbNodebRanName,\r
128                 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,\r
129                 ConnectionStatus:             entities.ConnectionStatus_DISCONNECTED,\r
130                 NodeType:                     entities.Node_GNB,\r
131                 Configuration: &entities.NodebInfo_Gnb{\r
132                         Gnb: &entities.Gnb{},\r
133                 },\r
134         }\r
135         readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)\r
136         writerMock.On("UpdateNodebInfoAndPublish", mock.Anything).Return(nil)\r
137         var rnibErr error\r
138         writerMock.On("UpdateNodebInfo", mock.Anything).Return(rnibErr)\r
139         nodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED\r
140         readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)\r
141 \r
142         var errEmpty error\r
143         rmrMessage := &rmrCgo.MBuf{}\r
144         rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)\r
145         writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", mock.Anything, mock.Anything).Return(nil)\r
146         ranAlarmServiceMock.On("SetConnectivityChangeAlarm", mock.Anything).Return(nil)\r
147         notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(""), e2ResetXml...)}\r
148         handler.Handle(notificationRequest)\r
149         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)\r
150         writerMock.AssertCalled(t, "UpdateNodebInfoAndPublish", mock.Anything)\r
151         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)\r
152         rmrMessengerMock.AssertNotCalled(t, "SendMsg")\r
153 }\r