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/stretchr/testify/assert"
35 func setupRnibDataServiceTest(t *testing.T) (*rNibDataService, *mocks.RnibReaderMock, *mocks.RnibWriterMock) {
36 return setupRnibDataServiceTestWithMaxAttempts(t, 3)
39 func setupRnibDataServiceTestWithMaxAttempts(t *testing.T, maxAttempts int) (*rNibDataService, *mocks.RnibReaderMock, *mocks.RnibWriterMock) {
40 logger, err := logger.InitLogger(logger.DebugLevel)
42 t.Errorf("#... - failed to initialize logger, error: %s", err)
45 config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: maxAttempts, RnibWriter: configuration.RnibWriterConfig{RanManipulationMessageChannel: "RAN_MANIPULATION", StateChangeMessageChannel: "RAN_CONNECTION_STATUS_CHANGE"}}
47 readerMock := &mocks.RnibReaderMock{}
49 writerMock := &mocks.RnibWriterMock{}
51 rnibDataService := NewRnibDataService(logger, config, readerMock, writerMock)
52 assert.NotNil(t, rnibDataService)
54 return rnibDataService, readerMock, writerMock
57 func TestSuccessfulSaveNodeb(t *testing.T) {
58 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
60 nodebInfo := &entities.NodebInfo{}
61 writerMock.On("SaveNodeb", nodebInfo).Return(nil)
63 rnibDataService.SaveNodeb(nodebInfo)
64 writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1)
67 func TestConnFailureSaveNodeb(t *testing.T) {
68 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
70 nodebInfo := &entities.NodebInfo{}
71 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
72 writerMock.On("SaveNodeb", nodebInfo).Return(mockErr)
74 rnibDataService.SaveNodeb(nodebInfo)
75 writerMock.AssertNumberOfCalls(t, "SaveNodeb", 3)
78 func TestNonConnFailureSaveNodeb(t *testing.T) {
79 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
81 nodebInfo := &entities.NodebInfo{}
82 mockErr := &common.InternalError{Err: fmt.Errorf("non connection failure")}
83 writerMock.On("SaveNodeb", nodebInfo).Return(mockErr)
85 rnibDataService.SaveNodeb(nodebInfo)
86 writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1)
89 func TestSuccessfulUpdateNodebInfo(t *testing.T) {
90 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
92 nodebInfo := &entities.NodebInfo{}
93 writerMock.On("UpdateNodebInfo", nodebInfo).Return(nil)
95 rnibDataService.UpdateNodebInfo(nodebInfo)
96 writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
99 func TestConnFailureUpdateNodebInfo(t *testing.T) {
100 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
102 nodebInfo := &entities.NodebInfo{}
103 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
104 writerMock.On("UpdateNodebInfo", nodebInfo).Return(mockErr)
106 rnibDataService.UpdateNodebInfo(nodebInfo)
107 writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 3)
110 func TestSuccessfulSaveRanLoadInformation(t *testing.T) {
111 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
113 var ranName string = "abcd"
114 ranLoadInformation := &entities.RanLoadInformation{}
115 writerMock.On("SaveRanLoadInformation", ranName, ranLoadInformation).Return(nil)
117 rnibDataService.SaveRanLoadInformation(ranName, ranLoadInformation)
118 writerMock.AssertNumberOfCalls(t, "SaveRanLoadInformation", 1)
121 func TestConnFailureSaveRanLoadInformation(t *testing.T) {
122 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
124 var ranName string = "abcd"
125 ranLoadInformation := &entities.RanLoadInformation{}
126 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
127 writerMock.On("SaveRanLoadInformation", ranName, ranLoadInformation).Return(mockErr)
129 rnibDataService.SaveRanLoadInformation(ranName, ranLoadInformation)
130 writerMock.AssertNumberOfCalls(t, "SaveRanLoadInformation", 3)
133 func TestSuccessfulGetNodeb(t *testing.T) {
134 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
137 nodebInfo := &entities.NodebInfo{}
138 readerMock.On("GetNodeb", invName).Return(nodebInfo, nil)
140 res, err := rnibDataService.GetNodeb(invName)
141 readerMock.AssertNumberOfCalls(t, "GetNodeb", 1)
142 assert.Equal(t, nodebInfo, res)
146 func TestConnFailureGetNodeb(t *testing.T) {
147 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
150 var nodeb *entities.NodebInfo = nil
151 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
152 readerMock.On("GetNodeb", invName).Return(nodeb, mockErr)
154 res, err := rnibDataService.GetNodeb(invName)
155 readerMock.AssertNumberOfCalls(t, "GetNodeb", 3)
156 assert.True(t, strings.Contains(err.Error(), "connection error"))
157 assert.Equal(t, nodeb, res)
160 func TestSuccessfulGetNodebIdList(t *testing.T) {
161 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
163 nodeIds := []*entities.NbIdentity{}
164 readerMock.On("GetListNodebIds").Return(nodeIds, nil)
166 res, err := rnibDataService.GetListNodebIds()
167 readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 1)
168 assert.Equal(t, nodeIds, res)
172 func TestConnFailureGetNodebIdList(t *testing.T) {
173 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
175 var nodeIds []*entities.NbIdentity = nil
176 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
177 readerMock.On("GetListNodebIds").Return(nodeIds, mockErr)
179 res, err := rnibDataService.GetListNodebIds()
180 readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 3)
181 assert.True(t, strings.Contains(err.Error(), "connection error"))
182 assert.Equal(t, nodeIds, res)
185 func TestConnFailureTwiceGetNodebIdList(t *testing.T) {
186 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
189 var nodeb *entities.NodebInfo = nil
190 var nodeIds []*entities.NbIdentity = nil
191 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
192 readerMock.On("GetNodeb", invName).Return(nodeb, mockErr)
193 readerMock.On("GetListNodebIds").Return(nodeIds, mockErr)
195 res, err := rnibDataService.GetListNodebIds()
196 readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 3)
197 assert.True(t, strings.Contains(err.Error(), "connection error"))
198 assert.Equal(t, nodeIds, res)
200 res2, err := rnibDataService.GetNodeb(invName)
201 readerMock.AssertNumberOfCalls(t, "GetNodeb", 3)
202 assert.True(t, strings.Contains(err.Error(), "connection error"))
203 assert.Equal(t, nodeb, res2)
206 func TestConnFailureWithAnotherConfig(t *testing.T) {
207 rnibDataService, readerMock, _ := setupRnibDataServiceTestWithMaxAttempts(t, 5)
209 var nodeIds []*entities.NbIdentity = nil
210 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
211 readerMock.On("GetListNodebIds").Return(nodeIds, mockErr)
213 res, err := rnibDataService.GetListNodebIds()
214 readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 5)
215 assert.True(t, strings.Contains(err.Error(), "connection error"))
216 assert.Equal(t, nodeIds, res)
219 func TestPingRnibConnFailure(t *testing.T) {
220 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
222 var nodeIds []*entities.NbIdentity = nil
223 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
224 readerMock.On("GetListNodebIds").Return(nodeIds, mockErr)
226 res := rnibDataService.PingRnib()
227 readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 3)
231 func TestPingRnibOkNoError(t *testing.T) {
232 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
234 var nodeIds []*entities.NbIdentity = nil
235 readerMock.On("GetListNodebIds").Return(nodeIds, nil)
237 res := rnibDataService.PingRnib()
238 readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 1)
242 func TestPingRnibOkOtherError(t *testing.T) {
243 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
245 var nodeIds []*entities.NbIdentity = nil
246 mockErr := &common.InternalError{Err: fmt.Errorf("non connection error")}
247 readerMock.On("GetListNodebIds").Return(nodeIds, mockErr)
249 res := rnibDataService.PingRnib()
250 readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 1)
254 func TestSuccessfulUpdateNodebInfoOnConnectionStatusInversion(t *testing.T) {
255 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
258 nodebInfo := &entities.NodebInfo{}
259 writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", nodebInfo, event).Return(nil)
261 rnibDataService.UpdateNodebInfoOnConnectionStatusInversion(nodebInfo, event)
262 writerMock.AssertNumberOfCalls(t, "UpdateNodebInfoOnConnectionStatusInversion", 1)
265 func TestConnFailureUpdateNodebInfoOnConnectionStatusInversion(t *testing.T) {
266 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
269 nodebInfo := &entities.NodebInfo{}
270 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
271 writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", nodebInfo, event).Return(mockErr)
273 rnibDataService.UpdateNodebInfoOnConnectionStatusInversion(nodebInfo, event)
274 writerMock.AssertNumberOfCalls(t, "UpdateNodebInfoOnConnectionStatusInversion", 3)
277 func TestGetE2TInstanceConnFailure(t *testing.T) {
278 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
280 address := "10.10.5.20:3200"
281 var e2tInstance *entities.E2TInstance = nil
282 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
283 readerMock.On("GetE2TInstance", address).Return(e2tInstance, mockErr)
285 res, err := rnibDataService.GetE2TInstance(address)
286 readerMock.AssertNumberOfCalls(t, "GetE2TInstance", 3)
288 assert.NotNil(t, err)
291 func TestGetE2TInstanceOkNoError(t *testing.T) {
292 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
294 address := "10.10.5.20:3200"
295 e2tInstance := &entities.E2TInstance{}
296 readerMock.On("GetE2TInstance", address).Return(e2tInstance, nil)
298 res, err := rnibDataService.GetE2TInstance(address)
299 readerMock.AssertNumberOfCalls(t, "GetE2TInstance", 1)
301 assert.Equal(t, e2tInstance, res)
304 func TestGetE2TInstanceOkOtherError(t *testing.T) {
305 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
307 address := "10.10.5.20:3200"
308 var e2tInstance *entities.E2TInstance = nil
309 mockErr := &common.InternalError{Err: fmt.Errorf("non connection error")}
310 readerMock.On("GetE2TInstance", address).Return(e2tInstance, mockErr)
312 res, err := rnibDataService.GetE2TInstance(address)
313 readerMock.AssertNumberOfCalls(t, "GetE2TInstance", 1)
315 assert.NotNil(t, err)
318 func TestRemoveEnbConnFailure(t *testing.T) {
319 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
321 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
322 nodebInfo := &entities.NodebInfo{}
323 writerMock.On("RemoveEnb", nodebInfo).Return(mockErr)
325 err := rnibDataService.RemoveEnb(nodebInfo)
326 writerMock.AssertNumberOfCalls(t, "RemoveEnb", 3)
327 assert.NotNil(t, err)
330 func TestRemoveEnbOkNoError(t *testing.T) {
331 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
333 nodebInfo := &entities.NodebInfo{}
334 writerMock.On("RemoveEnb", nodebInfo).Return(nil)
336 err := rnibDataService.RemoveEnb(nodebInfo)
337 writerMock.AssertNumberOfCalls(t, "RemoveEnb", 1)
341 func TestRemoveEnbOtherError(t *testing.T) {
342 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
344 mockErr := &common.InternalError{Err: fmt.Errorf("non connection error")}
345 nodebInfo := &entities.NodebInfo{}
346 writerMock.On("RemoveEnb", nodebInfo).Return(mockErr)
348 err := rnibDataService.RemoveEnb(nodebInfo)
349 writerMock.AssertNumberOfCalls(t, "RemoveEnb", 1)
350 assert.NotNil(t, err)