Add R5 content to master
[ric-plt/e2mgr.git] / E2Manager / managers / ran_connect_status_change_manager_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 managers
21
22 import (
23         "e2mgr/configuration"
24         "e2mgr/logger"
25         "e2mgr/mocks"
26         "e2mgr/services"
27         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
28         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
29         "github.com/pkg/errors"
30         "github.com/stretchr/testify/assert"
31         "testing"
32 )
33
34 const EventChannelForTest = "RAN_CONNECTION_STATUS_CHANGE"
35
36 func initRanConnectStatusChangeManagerTest(t *testing.T) (*mocks.RnibWriterMock, *mocks.RanListManagerMock, *mocks.RanAlarmServiceMock, *RanConnectStatusChangeManager) {
37         log, err := logger.InitLogger(logger.DebugLevel)
38         if err != nil {
39                 t.Errorf("#... - failed to initialize log, error: %s", err)
40         }
41         config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3, StateChangeMessageChannel: EventChannelForTest}
42
43         readerMock := &mocks.RnibReaderMock{}
44         writerMock := &mocks.RnibWriterMock{}
45         rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
46         ranListManagerMock := &mocks.RanListManagerMock{}
47         ranAlarmServiceMock := &mocks.RanAlarmServiceMock{}
48         ranConnectStatusChangeManager := NewRanConnectStatusChangeManager(log, rnibDataService, ranListManagerMock, ranAlarmServiceMock)
49         return writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager
50 }
51
52 func TestChangeStatusSuccessNewRan(t *testing.T) {
53         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
54
55         origNodebInfo := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_UNKNOWN_CONNECTION_STATUS}
56         updatedNodebInfo := *origNodebInfo
57         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED
58         writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, EventChannelForTest, RanName + "_" + CONNECTED_RAW_EVENT).Return(nil)
59         ranListManagerMock.On("UpdateRanState", &updatedNodebInfo).Return(nil)
60         ranAlarmServiceMock.On("SetConnectivityChangeAlarm", &updatedNodebInfo).Return(nil)
61         err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_CONNECTED)
62         assert.Nil(t, err)
63         writerMock.AssertExpectations(t)
64         ranListManagerMock.AssertExpectations(t)
65         ranAlarmServiceMock.AssertExpectations(t)
66 }
67
68 func TestChangeStatusSuccessEventNone1(t *testing.T) {
69         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
70
71         origNodebInfo := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}
72         updatedNodebInfo := *origNodebInfo
73         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_SHUT_DOWN
74         writerMock.On("UpdateNodebInfo", &updatedNodebInfo).Return(nil)
75         ranListManagerMock.On("UpdateRanState", &updatedNodebInfo).Return(nil)
76         err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_SHUT_DOWN)
77         assert.Nil(t, err)
78         writerMock.AssertExpectations(t)
79         ranListManagerMock.AssertExpectations(t)
80         ranAlarmServiceMock.AssertExpectations(t)
81 }
82
83 func TestChangeStatusSuccessEventNone2(t *testing.T) {
84         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
85
86         origNodebInfo := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
87         updatedNodebInfo := *origNodebInfo
88         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_SHUT_DOWN
89         writerMock.On("UpdateNodebInfo", &updatedNodebInfo).Return(nil)
90         ranListManagerMock.On("UpdateRanState", &updatedNodebInfo).Return(nil)
91         err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_SHUT_DOWN)
92         assert.Nil(t, err)
93         writerMock.AssertExpectations(t)
94         ranListManagerMock.AssertExpectations(t)
95         ranAlarmServiceMock.AssertExpectations(t)
96 }
97
98 func TestChangeStatusSuccessEventConnected(t *testing.T) {
99         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
100
101         origNodebInfo := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
102         updatedNodebInfo := *origNodebInfo
103         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED
104         writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, EventChannelForTest, RanName + "_" + CONNECTED_RAW_EVENT).Return(nil)
105         ranListManagerMock.On("UpdateRanState", &updatedNodebInfo).Return(nil)
106         ranAlarmServiceMock.On("SetConnectivityChangeAlarm", &updatedNodebInfo).Return(nil)
107         err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_CONNECTED)
108         assert.Nil(t, err)
109         writerMock.AssertExpectations(t)
110         ranListManagerMock.AssertExpectations(t)
111         ranAlarmServiceMock.AssertExpectations(t)
112 }
113
114 func TestChangeStatusSuccessEventDisconnected(t *testing.T) {
115         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
116
117         origNodebInfo := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED}
118         updatedNodebInfo := *origNodebInfo
119         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
120         writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, EventChannelForTest, RanName + "_" + DISCONNECTED_RAW_EVENT).Return(nil)
121         ranListManagerMock.On("UpdateRanState", &updatedNodebInfo).Return(nil)
122         ranAlarmServiceMock.On("SetConnectivityChangeAlarm", &updatedNodebInfo).Return(nil)
123         err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_DISCONNECTED)
124         assert.Nil(t, err)
125         writerMock.AssertExpectations(t)
126         ranListManagerMock.AssertExpectations(t)
127         ranAlarmServiceMock.AssertExpectations(t)
128 }
129
130 func TestChangeStatusRnibErrorEventNone(t *testing.T) {
131         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
132
133         origNodebInfo := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}
134         updatedNodebInfo := *origNodebInfo
135         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_SHUT_DOWN
136         writerMock.On("UpdateNodebInfo", &updatedNodebInfo).Return(common.NewInternalError(errors.New("Error")))
137         err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_SHUT_DOWN)
138         assert.NotNil(t, err)
139         writerMock.AssertExpectations(t)
140         ranListManagerMock.AssertExpectations(t)
141         ranAlarmServiceMock.AssertExpectations(t)
142 }
143
144 func TestChangeStatusRnibErrorEventConnected(t *testing.T) {
145         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
146
147         origNodebInfo := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
148         updatedNodebInfo := *origNodebInfo
149         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED
150         writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, EventChannelForTest, RanName + "_" + CONNECTED_RAW_EVENT).Return(common.NewInternalError(errors.New("Error")))
151         err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_CONNECTED)
152         assert.NotNil(t, err)
153         writerMock.AssertExpectations(t)
154         ranListManagerMock.AssertExpectations(t)
155         ranAlarmServiceMock.AssertExpectations(t)
156 }
157
158 func TestChangeStatusRanListManagerError(t *testing.T) {
159         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
160
161         origNodebInfo := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}
162         updatedNodebInfo := *origNodebInfo
163         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_SHUT_DOWN
164         writerMock.On("UpdateNodebInfo", &updatedNodebInfo).Return(nil)
165         ranListManagerMock.On("UpdateRanState", &updatedNodebInfo).Return(common.NewInternalError(errors.New("Error")))
166         err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_SHUT_DOWN)
167         assert.Nil(t, err)
168         writerMock.AssertExpectations(t)
169         ranListManagerMock.AssertExpectations(t)
170         ranAlarmServiceMock.AssertExpectations(t)
171 }
172
173 func TestChangeStatusRanAlarmServiceErrorEventConnected(t *testing.T) {
174         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
175
176         origNodebInfo := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
177         updatedNodebInfo := *origNodebInfo
178         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED
179         writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, EventChannelForTest, RanName + "_" + CONNECTED_RAW_EVENT).Return(nil)
180         ranListManagerMock.On("UpdateRanState", &updatedNodebInfo).Return(nil)
181         ranAlarmServiceMock.On("SetConnectivityChangeAlarm", &updatedNodebInfo).Return(common.NewInternalError(errors.New("Error")))
182         err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_CONNECTED)
183         assert.Nil(t, err)
184         writerMock.AssertExpectations(t)
185         ranListManagerMock.AssertExpectations(t)
186         ranAlarmServiceMock.AssertExpectations(t)
187 }