Merge "go version update"
[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) {\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\r
60 }\r
61 \r
62 func TestE2ResettNotificationHandler(t *testing.T) {\r
63         e2ResetXml := utils.ReadXmlFile(t, E2ResetXmlPath)\r
64         handler, readerMock, writerMock, rmrMessengerMock := 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         notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(""), e2ResetXml...)}\r
82         handler.Handle(notificationRequest)\r
83         readerMock.AssertExpectations(t)\r
84         writerMock.AssertExpectations(t)\r
85         rmrMessengerMock.AssertCalled(t, "SendMsg", mock.Anything, true)\r
86 \r
87 }\r
88 \r
89 func TestE2ResettNotificationHandler_UpdateStatus_Connected(t *testing.T) {\r
90         e2ResetXml := utils.ReadXmlFile(t, E2ResetXmlPath)\r
91         handler, readerMock, writerMock, rmrMessengerMock := initE2ResetMocks(t)\r
92         var nodebInfo = &entities.NodebInfo{\r
93                 RanName:                      gnbNodebRanName,\r
94                 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,\r
95                 ConnectionStatus:             entities.ConnectionStatus_DISCONNECTED,\r
96                 NodeType:                     entities.Node_GNB,\r
97                 Configuration: &entities.NodebInfo_Gnb{\r
98                         Gnb: &entities.Gnb{},\r
99                 },\r
100         }\r
101         readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)\r
102         writerMock.On("UpdateNodebInfoAndPublish", mock.Anything).Return(nil)\r
103         var rnibErr error\r
104         writerMock.On("UpdateNodebInfo", mock.Anything).Return(rnibErr)\r
105         nodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED\r
106         readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)\r
107 \r
108         var errEmpty error\r
109         rmrMessage := &rmrCgo.MBuf{}\r
110         rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)\r
111         notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(""), e2ResetXml...)}\r
112         handler.Handle(notificationRequest)\r
113         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)\r
114         writerMock.AssertCalled(t, "UpdateNodebInfoAndPublish", mock.Anything)\r
115         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)\r
116 }\r
117 \r
118 func TestE2ResettNotificationHandler_Successful_Reset_Response(t *testing.T) {\r
119         e2ResetXml := utils.ReadXmlFile(t, E2ResetXmlPath)\r
120         handler, readerMock, writerMock, rmrMessengerMock := initE2ResetMocks(t)\r
121         var nodebInfo = &entities.NodebInfo{\r
122                 RanName:                      gnbNodebRanName,\r
123                 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,\r
124                 ConnectionStatus:             entities.ConnectionStatus_DISCONNECTED,\r
125                 NodeType:                     entities.Node_GNB,\r
126                 Configuration: &entities.NodebInfo_Gnb{\r
127                         Gnb: &entities.Gnb{},\r
128                 },\r
129         }\r
130         readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)\r
131         writerMock.On("UpdateNodebInfoAndPublish", mock.Anything).Return(nil)\r
132         var rnibErr error\r
133         writerMock.On("UpdateNodebInfo", mock.Anything).Return(rnibErr)\r
134         nodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED\r
135         readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)\r
136 \r
137         var errEmpty error\r
138         rmrMessage := &rmrCgo.MBuf{}\r
139         rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)\r
140         notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(""), e2ResetXml...)}\r
141         handler.Handle(notificationRequest)\r
142         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)\r
143         writerMock.AssertCalled(t, "UpdateNodebInfoAndPublish", mock.Anything)\r
144         readerMock.AssertCalled(t, "GetNodeb", mock.Anything)\r
145         rmrMessengerMock.AssertNotCalled(t, "SendMsg")\r
146 }\r