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).
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"
36 const EventChannelForTest = "RAN_CONNECTION_STATUS_CHANGE"
38 func initRanConnectStatusChangeManagerTest(t *testing.T) (*mocks.RnibWriterMock, *mocks.RanListManagerMock, *mocks.RanAlarmServiceMock, *RanConnectStatusChangeManager) {
40 log, err := logger.InitLogger(Debug)
42 t.Errorf("#... - failed to initialize log, error: %s", err)
44 config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3,
45 RnibWriter: configuration.RnibWriterConfig{
46 StateChangeMessageChannel: EventChannelForTest,
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
59 func TestChangeStatusSuccessNewRan(t *testing.T) {
60 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
70 writerMock.AssertExpectations(t)
71 ranListManagerMock.AssertExpectations(t)
72 ranAlarmServiceMock.AssertExpectations(t)
75 func TestChangeStatusSuccessEventNone1(t *testing.T) {
76 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
85 writerMock.AssertExpectations(t)
86 ranListManagerMock.AssertExpectations(t)
87 ranAlarmServiceMock.AssertExpectations(t)
90 func TestChangeStatusSuccessEventNone2(t *testing.T) {
91 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
100 writerMock.AssertExpectations(t)
101 ranListManagerMock.AssertExpectations(t)
102 ranAlarmServiceMock.AssertExpectations(t)
105 func TestChangeStatusSuccessEventConnected(t *testing.T) {
106 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
116 writerMock.AssertExpectations(t)
117 ranListManagerMock.AssertExpectations(t)
118 ranAlarmServiceMock.AssertExpectations(t)
121 func TestChangeStatusSuccessEventDisconnected(t *testing.T) {
122 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
132 writerMock.AssertExpectations(t)
133 ranListManagerMock.AssertExpectations(t)
134 ranAlarmServiceMock.AssertExpectations(t)
137 func TestChangeStatusRnibErrorEventNone(t *testing.T) {
138 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
151 func TestChangeStatusRnibErrorEventConnected(t *testing.T) {
152 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
165 func TestChangeStatusRanListManagerError(t *testing.T) {
166 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
175 writerMock.AssertExpectations(t)
176 ranListManagerMock.AssertExpectations(t)
177 ranAlarmServiceMock.AssertExpectations(t)
180 func TestChangeStatusRanAlarmServiceErrorEventConnected(t *testing.T) {
181 writerMock, ranListManagerMock, ranAlarmServiceMock, ranConnectStatusChangeManager := initRanConnectStatusChangeManagerTest(t)
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)
191 writerMock.AssertExpectations(t)
192 ranListManagerMock.AssertExpectations(t)
193 ranAlarmServiceMock.AssertExpectations(t)