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