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,
42 RnibWriter: configuration.RnibWriterConfig{
43 StateChangeMessageChannel: EventChannelForTest,
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
56 func TestChangeStatusSuccessNewRan(t *testing.T) {
57 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
67 writerMock.AssertExpectations(t)
68 ranListManagerMock.AssertExpectations(t)
69 ranAlarmServiceMock.AssertExpectations(t)
72 func TestChangeStatusSuccessEventNone1(t *testing.T) {
73 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
82 writerMock.AssertExpectations(t)
83 ranListManagerMock.AssertExpectations(t)
84 ranAlarmServiceMock.AssertExpectations(t)
87 func TestChangeStatusSuccessEventNone2(t *testing.T) {
88 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
97 writerMock.AssertExpectations(t)
98 ranListManagerMock.AssertExpectations(t)
99 ranAlarmServiceMock.AssertExpectations(t)
102 func TestChangeStatusSuccessEventConnected(t *testing.T) {
103 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
113 writerMock.AssertExpectations(t)
114 ranListManagerMock.AssertExpectations(t)
115 ranAlarmServiceMock.AssertExpectations(t)
118 func TestChangeStatusSuccessEventDisconnected(t *testing.T) {
119 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
129 writerMock.AssertExpectations(t)
130 ranListManagerMock.AssertExpectations(t)
131 ranAlarmServiceMock.AssertExpectations(t)
134 func TestChangeStatusRnibErrorEventNone(t *testing.T) {
135 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
148 func TestChangeStatusRnibErrorEventConnected(t *testing.T) {
149 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
162 func TestChangeStatusRanListManagerError(t *testing.T) {
163 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
172 writerMock.AssertExpectations(t)
173 ranListManagerMock.AssertExpectations(t)
174 ranAlarmServiceMock.AssertExpectations(t)
177 func TestChangeStatusRanAlarmServiceErrorEventConnected(t *testing.T) {
178 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
188 writerMock.AssertExpectations(t)
189 ranListManagerMock.AssertExpectations(t)
190 ranAlarmServiceMock.AssertExpectations(t)