c96fbb8728897b2664be7acba0f7372264421b94
[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         handler := NewE2ResetRequestNotificationHandler(logger, rnibDataService, config, rmrSender, ranResetManager)\r
59         return handler, readerMock, writerMock, rmrMessengerMock, ranAlarmService\r
60 }\r
61 \r
62 func TestE2ResettNotificationHandler(t *testing.T) {\r
63         e2ResetXml := utils.ReadXmlFile(t, E2ResetXmlPath)\r
64         handler, readerMock, writerMock, rmrMessengerMock, ranAlarmServiceMock := initE2ResetMocks(t)\r
65         var nodebInfo = &entities.NodebInfo{\r
66                 RanName:                      gnbNodebRanName,\r
67                 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,\r
68                 ConnectionStatus:             entities.ConnectionStatus_DISCONNECTED,\r
69                 NodeType:                     entities.Node_GNB,\r
70                 Configuration: &entities.NodebInfo_Gnb{\r
71                         Gnb: &entities.Gnb{},\r
72                 },\r
73         }\r
74         readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)\r
75         writerMock.On("UpdateNodebInfoAndPublish", mock.Anything).Return(nil)\r
76         var rnibErr error\r
77         writerMock.On("UpdateNodebInfo", mock.Anything).Return(rnibErr)\r
78         var errEmpty error\r
79         rmrMessage := &rmrCgo.MBuf{}\r
80         rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)\r
81         writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", mock.Anything, mock.Anything).Return(nil)\r
82         ranAlarmServiceMock.On("SetConnectivityChangeAlarm", mock.Anything).Return(nil)\r
83         notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(""), e2ResetXml...)}\r
84         handler.Handle(notificationRequest)\r
85         readerMock.AssertExpectations(t)\r
86         writerMock.AssertExpectations(t)\r
87         rmrMessengerMock.AssertCalled(t, "SendMsg", mock.Anything, true)\r
88 \r
89 }\r
90 \r
91 func TestE2ResettNotificationHandler_UpdateStatus_Connected(t *testing.T) {\r
92         e2ResetXml := utils.ReadXmlFile(t, E2ResetXmlPath)\r
93         handler, readerMock, writerMock, rmrMessengerMock, ranAlarmServiceMock := initE2ResetMocks(t)\r
94         var nodebInfo = &entities.NodebInfo{\r
95                 RanName:                      gnbNodebRanName,\r
96                 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,\r
97                 ConnectionStatus:             entities.ConnectionStatus_DISCONNECTED,\r
98                 NodeType:                     entities.Node_GNB,\r
99                 Configuration: &entities.NodebInfo_Gnb{\r
100                         Gnb: &entities.Gnb{},\r
101                 },\r
102         }\r
103         readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)\r
104         writerMock.On("UpdateNodebInfoAndPublish", mock.Anything).Return(nil)\r
105         var rnibErr error\r
106         writerMock.On("UpdateNodebInfo", mock.Anything).Return(rnibErr)\r
107         nodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED\r
108         readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)\r
109 \r
110         var errEmpty error\r
111         rmrMessage := &rmrCgo.MBuf{}\r
112         rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)\r
113         writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", mock.Anything, mock.Anything).Return(nil)\r
114         ranAlarmServiceMock.On("SetConnectivityChangeAlarm", mock.Anything).Return(nil)\r
115         notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(""), e2ResetXml...)}\r
116         handler.Handle(notificationRequest)\r
117         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)\r
118         writerMock.AssertCalled(t, "UpdateNodebInfoAndPublish", mock.Anything)\r
119         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)\r
120 }\r
121 \r
122 func TestE2ResettNotificationHandler_Successful_Reset_Response(t *testing.T) {\r
123         e2ResetXml := utils.ReadXmlFile(t, E2ResetXmlPath)\r
124         handler, readerMock, writerMock, rmrMessengerMock, ranAlarmServiceMock := initE2ResetMocks(t)\r
125         var nodebInfo = &entities.NodebInfo{\r
126                 RanName:                      gnbNodebRanName,\r
127                 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,\r
128                 ConnectionStatus:             entities.ConnectionStatus_DISCONNECTED,\r
129                 NodeType:                     entities.Node_GNB,\r
130                 Configuration: &entities.NodebInfo_Gnb{\r
131                         Gnb: &entities.Gnb{},\r
132                 },\r
133         }\r
134         readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)\r
135         writerMock.On("UpdateNodebInfoAndPublish", mock.Anything).Return(nil)\r
136         var rnibErr error\r
137         writerMock.On("UpdateNodebInfo", mock.Anything).Return(rnibErr)\r
138         nodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED\r
139         readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)\r
140 \r
141         var errEmpty error\r
142         rmrMessage := &rmrCgo.MBuf{}\r
143         rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)\r
144         writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", mock.Anything, mock.Anything).Return(nil)\r
145         ranAlarmServiceMock.On("SetConnectivityChangeAlarm", mock.Anything).Return(nil)\r
146         notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(""), e2ResetXml...)}\r
147         handler.Handle(notificationRequest)\r
148         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)\r
149         writerMock.AssertCalled(t, "UpdateNodebInfoAndPublish", mock.Anything)\r
150         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)\r
151         rmrMessengerMock.AssertNotCalled(t, "SendMsg")\r
152 }\r