[RIC-587] Update E2 Setup existing nodeb behavior
[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,
42                 RnibWriter: configuration.RnibWriterConfig{
43                         StateChangeMessageChannel: EventChannelForTest,
44                 },
45         }
46
47         readerMock := &mocks.RnibReaderMock{}
48         writerMock := &mocks.RnibWriterMock{}
49         rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
50         ranListManagerMock := &mocks.RanListManagerMock{}
51         ranAlarmServiceMock := &mocks.RanAlarmServiceMock{}
52         ranConnectStatusChangeManager := NewRanConnectStatusChangeManager(log, rnibDataService, ranListManagerMock, ranAlarmServiceMock)
53         return writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager
54 }
55
56 func TestChangeStatusSuccessNewRan(t *testing.T) {
57         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
58
59         origNodebInfo := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_UNKNOWN_CONNECTION_STATUS}
60         updatedNodebInfo := *origNodebInfo
61         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED
62         writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, RanName+"_"+CONNECTED_RAW_EVENT).Return(nil)
63         ranListManagerMock.On("UpdateRanState", &updatedNodebInfo).Return(nil)
64         ranAlarmServiceMock.On("SetConnectivityChangeAlarm", &updatedNodebInfo).Return(nil)
65         _, err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_CONNECTED)
66         assert.Nil(t, err)
67         writerMock.AssertExpectations(t)
68         ranListManagerMock.AssertExpectations(t)
69         ranAlarmServiceMock.AssertExpectations(t)
70 }
71
72 func TestChangeStatusSuccessEventNone1(t *testing.T) {
73         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
74
75         origNodebInfo := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}
76         updatedNodebInfo := *origNodebInfo
77         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_SHUT_DOWN
78         writerMock.On("UpdateNodebInfo", &updatedNodebInfo).Return(nil)
79         ranListManagerMock.On("UpdateRanState", &updatedNodebInfo).Return(nil)
80         _, err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_SHUT_DOWN)
81         assert.Nil(t, err)
82         writerMock.AssertExpectations(t)
83         ranListManagerMock.AssertExpectations(t)
84         ranAlarmServiceMock.AssertExpectations(t)
85 }
86
87 func TestChangeStatusSuccessEventNone2(t *testing.T) {
88         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
89
90         origNodebInfo := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
91         updatedNodebInfo := *origNodebInfo
92         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_SHUT_DOWN
93         writerMock.On("UpdateNodebInfo", &updatedNodebInfo).Return(nil)
94         ranListManagerMock.On("UpdateRanState", &updatedNodebInfo).Return(nil)
95         _, err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_SHUT_DOWN)
96         assert.Nil(t, err)
97         writerMock.AssertExpectations(t)
98         ranListManagerMock.AssertExpectations(t)
99         ranAlarmServiceMock.AssertExpectations(t)
100 }
101
102 func TestChangeStatusSuccessEventConnected(t *testing.T) {
103         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
104
105         origNodebInfo := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
106         updatedNodebInfo := *origNodebInfo
107         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED
108         writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, RanName+"_"+CONNECTED_RAW_EVENT).Return(nil)
109         ranListManagerMock.On("UpdateRanState", &updatedNodebInfo).Return(nil)
110         ranAlarmServiceMock.On("SetConnectivityChangeAlarm", &updatedNodebInfo).Return(nil)
111         _, err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_CONNECTED)
112         assert.Nil(t, err)
113         writerMock.AssertExpectations(t)
114         ranListManagerMock.AssertExpectations(t)
115         ranAlarmServiceMock.AssertExpectations(t)
116 }
117
118 func TestChangeStatusSuccessEventDisconnected(t *testing.T) {
119         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
120
121         origNodebInfo := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED}
122         updatedNodebInfo := *origNodebInfo
123         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
124         writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, RanName+"_"+DISCONNECTED_RAW_EVENT).Return(nil)
125         ranListManagerMock.On("UpdateRanState", &updatedNodebInfo).Return(nil)
126         ranAlarmServiceMock.On("SetConnectivityChangeAlarm", &updatedNodebInfo).Return(nil)
127         _, err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_DISCONNECTED)
128         assert.Nil(t, err)
129         writerMock.AssertExpectations(t)
130         ranListManagerMock.AssertExpectations(t)
131         ranAlarmServiceMock.AssertExpectations(t)
132 }
133
134 func TestChangeStatusRnibErrorEventNone(t *testing.T) {
135         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
136
137         origNodebInfo := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}
138         updatedNodebInfo := *origNodebInfo
139         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_SHUT_DOWN
140         writerMock.On("UpdateNodebInfo", &updatedNodebInfo).Return(common.NewInternalError(errors.New("Error")))
141         _, err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_SHUT_DOWN)
142         assert.NotNil(t, err)
143         writerMock.AssertExpectations(t)
144         ranListManagerMock.AssertExpectations(t)
145         ranAlarmServiceMock.AssertExpectations(t)
146 }
147
148 func TestChangeStatusRnibErrorEventConnected(t *testing.T) {
149         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
150
151         origNodebInfo := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
152         updatedNodebInfo := *origNodebInfo
153         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED
154         writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, RanName+"_"+CONNECTED_RAW_EVENT).Return(common.NewInternalError(errors.New("Error")))
155         _, err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_CONNECTED)
156         assert.NotNil(t, err)
157         writerMock.AssertExpectations(t)
158         ranListManagerMock.AssertExpectations(t)
159         ranAlarmServiceMock.AssertExpectations(t)
160 }
161
162 func TestChangeStatusRanListManagerError(t *testing.T) {
163         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
164
165         origNodebInfo := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}
166         updatedNodebInfo := *origNodebInfo
167         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_SHUT_DOWN
168         writerMock.On("UpdateNodebInfo", &updatedNodebInfo).Return(nil)
169         ranListManagerMock.On("UpdateRanState", &updatedNodebInfo).Return(common.NewInternalError(errors.New("Error")))
170         _, err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_SHUT_DOWN)
171         assert.Nil(t, err)
172         writerMock.AssertExpectations(t)
173         ranListManagerMock.AssertExpectations(t)
174         ranAlarmServiceMock.AssertExpectations(t)
175 }
176
177 func TestChangeStatusRanAlarmServiceErrorEventConnected(t *testing.T) {
178         writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
179
180         origNodebInfo := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
181         updatedNodebInfo := *origNodebInfo
182         updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED
183         writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, RanName+"_"+CONNECTED_RAW_EVENT).Return(nil)
184         ranListManagerMock.On("UpdateRanState", &updatedNodebInfo).Return(nil)
185         ranAlarmServiceMock.On("SetConnectivityChangeAlarm", &updatedNodebInfo).Return(common.NewInternalError(errors.New("Error")))
186         _, err := ranConnectStatusChangeManager.ChangeStatus(origNodebInfo, entities.ConnectionStatus_CONNECTED)
187         assert.Nil(t, err)
188         writerMock.AssertExpectations(t)
189         ranListManagerMock.AssertExpectations(t)
190         ranAlarmServiceMock.AssertExpectations(t)
191 }