2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
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
9 // http://www.apache.org/licenses/LICENSE-2.0
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.
17 // This source code is part of the near-RT RIC (RAN Intelligent Controller)
18 // platform project (RICP).
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"
34 const EventChannelForTest = "RAN_CONNECTION_STATUS_CHANGE"
36 func initRanConnectStatusChangeManagerTest(t *testing.T) (*mocks.RnibWriterMock, *mocks.RanListManagerMock, *mocks.RanAlarmServiceMock, *RanConnectStatusChangeManager) {
37 log, err := logger.InitLogger(logger.DebugLevel)
39 t.Errorf("#... - failed to initialize log, error: %s", err)
41 config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3, StateChangeMessageChannel: EventChannelForTest}
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
52 func TestChangeStatusSuccessNewRan(t *testing.T) {
53 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
63 writerMock.AssertExpectations(t)
64 ranListManagerMock.AssertExpectations(t)
65 ranAlarmServiceMock.AssertExpectations(t)
68 func TestChangeStatusSuccessEventNone1(t *testing.T) {
69 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
78 writerMock.AssertExpectations(t)
79 ranListManagerMock.AssertExpectations(t)
80 ranAlarmServiceMock.AssertExpectations(t)
83 func TestChangeStatusSuccessEventNone2(t *testing.T) {
84 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
93 writerMock.AssertExpectations(t)
94 ranListManagerMock.AssertExpectations(t)
95 ranAlarmServiceMock.AssertExpectations(t)
98 func TestChangeStatusSuccessEventConnected(t *testing.T) {
99 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
109 writerMock.AssertExpectations(t)
110 ranListManagerMock.AssertExpectations(t)
111 ranAlarmServiceMock.AssertExpectations(t)
114 func TestChangeStatusSuccessEventDisconnected(t *testing.T) {
115 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
125 writerMock.AssertExpectations(t)
126 ranListManagerMock.AssertExpectations(t)
127 ranAlarmServiceMock.AssertExpectations(t)
130 func TestChangeStatusRnibErrorEventNone(t *testing.T) {
131 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
144 func TestChangeStatusRnibErrorEventConnected(t *testing.T) {
145 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
158 func TestChangeStatusRanListManagerError(t *testing.T) {
159 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
168 writerMock.AssertExpectations(t)
169 ranListManagerMock.AssertExpectations(t)
170 ranAlarmServiceMock.AssertExpectations(t)
173 func TestChangeStatusRanAlarmServiceErrorEventConnected(t *testing.T) {
174 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
184 writerMock.AssertExpectations(t)
185 ranListManagerMock.AssertExpectations(t)
186 ranAlarmServiceMock.AssertExpectations(t)