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 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
32 "github.com/stretchr/testify/assert"
38 func setupRnibDataServiceTest(t *testing.T) (*rNibDataService, *mocks.RnibReaderMock, *mocks.RnibWriterMock) {
39 return setupRnibDataServiceTestWithMaxAttempts(t, 3)
42 func setupRnibDataServiceTestWithMaxAttempts(t *testing.T, maxAttempts int) (*rNibDataService, *mocks.RnibReaderMock, *mocks.RnibWriterMock) {
43 logger, err := logger.InitLogger(logger.DebugLevel)
45 t.Errorf("#... - failed to initialize logger, error: %s", err)
48 config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: maxAttempts}
50 readerMock := &mocks.RnibReaderMock{}
51 rnibReaderProvider := func() reader.RNibReader {
55 writerMock := &mocks.RnibWriterMock{}
56 rnibWriterProvider := func() rNibWriter.RNibWriter {
60 rnibDataService := NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
61 assert.NotNil(t, rnibDataService)
63 return rnibDataService, readerMock, writerMock
66 func TestSuccessfulSaveNodeb(t *testing.T) {
67 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
69 nodebInfo := &entities.NodebInfo{}
70 nbIdentity := &entities.NbIdentity{}
71 writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil)
73 rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
74 writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1)
77 func TestConnFailureSaveNodeb(t *testing.T) {
78 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
80 nodebInfo := &entities.NodebInfo{}
81 nbIdentity := &entities.NbIdentity{}
82 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
83 writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(mockErr)
85 rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
86 writerMock.AssertNumberOfCalls(t, "SaveNodeb", 3)
89 func TestNonConnFailureSaveNodeb(t *testing.T) {
90 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
92 nodebInfo := &entities.NodebInfo{}
93 nbIdentity := &entities.NbIdentity{}
94 mockErr := &common.InternalError{Err: fmt.Errorf("non connection failure")}
95 writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(mockErr)
97 rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
98 writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1)
101 func TestSuccessfulUpdateNodebInfo(t *testing.T) {
102 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
104 nodebInfo := &entities.NodebInfo{}
105 writerMock.On("UpdateNodebInfo", nodebInfo).Return(nil)
107 rnibDataService.UpdateNodebInfo(nodebInfo)
108 writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
111 func TestConnFailureUpdateNodebInfo(t *testing.T) {
112 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
114 nodebInfo := &entities.NodebInfo{}
115 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
116 writerMock.On("UpdateNodebInfo", nodebInfo).Return(mockErr)
118 rnibDataService.UpdateNodebInfo(nodebInfo)
119 writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 3)
122 func TestSuccessfulSaveRanLoadInformation(t *testing.T) {
123 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
125 var ranName string = "abcd"
126 ranLoadInformation := &entities.RanLoadInformation{}
127 writerMock.On("SaveRanLoadInformation", ranName, ranLoadInformation).Return(nil)
129 rnibDataService.SaveRanLoadInformation(ranName, ranLoadInformation)
130 writerMock.AssertNumberOfCalls(t, "SaveRanLoadInformation", 1)
133 func TestConnFailureSaveRanLoadInformation(t *testing.T) {
134 rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
136 var ranName string = "abcd"
137 ranLoadInformation := &entities.RanLoadInformation{}
138 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
139 writerMock.On("SaveRanLoadInformation", ranName, ranLoadInformation).Return(mockErr)
141 rnibDataService.SaveRanLoadInformation(ranName, ranLoadInformation)
142 writerMock.AssertNumberOfCalls(t, "SaveRanLoadInformation", 3)
145 func TestSuccessfulGetNodeb(t *testing.T) {
146 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
149 nodebInfo := &entities.NodebInfo{}
150 readerMock.On("GetNodeb", invName).Return(nodebInfo, nil)
152 res, err := rnibDataService.GetNodeb(invName)
153 readerMock.AssertNumberOfCalls(t, "GetNodeb", 1)
154 assert.Equal(t, nodebInfo, res)
158 func TestConnFailureGetNodeb(t *testing.T) {
159 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
162 var nodeb *entities.NodebInfo = nil
163 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
164 readerMock.On("GetNodeb", invName).Return(nodeb, mockErr)
166 res, err := rnibDataService.GetNodeb(invName)
167 readerMock.AssertNumberOfCalls(t, "GetNodeb", 3)
168 assert.True(t, strings.Contains(err.Error(), "connection error", ))
169 assert.Equal(t, nodeb, res)
172 func TestSuccessfulGetNodebIdList(t *testing.T) {
173 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
175 nodeIds := []*entities.NbIdentity{}
176 readerMock.On("GetListNodebIds").Return(nodeIds, nil)
178 res, err := rnibDataService.GetListNodebIds()
179 readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 1)
180 assert.Equal(t, nodeIds, res)
184 func TestConnFailureGetNodebIdList(t *testing.T) {
185 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
187 var nodeIds []*entities.NbIdentity = nil
188 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
189 readerMock.On("GetListNodebIds").Return(nodeIds, mockErr)
191 res, err := rnibDataService.GetListNodebIds()
192 readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 3)
193 assert.True(t, strings.Contains(err.Error(), "connection error", ))
194 assert.Equal(t, nodeIds, res)
197 func TestConnFailureTwiceGetNodebIdList(t *testing.T) {
198 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
201 var nodeb *entities.NodebInfo = nil
202 var nodeIds []*entities.NbIdentity = nil
203 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
204 readerMock.On("GetNodeb", invName).Return(nodeb, mockErr)
205 readerMock.On("GetListNodebIds").Return(nodeIds, mockErr)
207 res, err := rnibDataService.GetListNodebIds()
208 readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 3)
209 assert.True(t, strings.Contains(err.Error(), "connection error", ))
210 assert.Equal(t, nodeIds, res)
212 res2, err := rnibDataService.GetNodeb(invName)
213 readerMock.AssertNumberOfCalls(t, "GetNodeb", 3)
214 assert.True(t, strings.Contains(err.Error(), "connection error", ))
215 assert.Equal(t, nodeb, res2)
218 func TestConnFailureWithAnotherConfig(t *testing.T) {
219 rnibDataService, readerMock, _ := setupRnibDataServiceTestWithMaxAttempts(t, 5)
221 var nodeIds []*entities.NbIdentity = nil
222 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
223 readerMock.On("GetListNodebIds").Return(nodeIds, mockErr)
225 res, err := rnibDataService.GetListNodebIds()
226 readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 5)
227 assert.True(t, strings.Contains(err.Error(), "connection error", ))
228 assert.Equal(t, nodeIds, res)
231 func TestPingRnibConnFailure(t *testing.T) {
232 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
234 var nodeIds []*entities.NbIdentity = nil
235 mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
236 readerMock.On("GetListNodebIds").Return(nodeIds, mockErr)
238 res := rnibDataService.PingRnib()
239 readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 3)
243 func TestPingRnibOkNoError(t *testing.T) {
244 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
246 var nodeIds []*entities.NbIdentity = nil
247 readerMock.On("GetListNodebIds").Return(nodeIds, nil)
249 res := rnibDataService.PingRnib()
250 readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 1)
254 func TestPingRnibOkOtherError(t *testing.T) {
255 rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
257 var nodeIds []*entities.NbIdentity = nil
258 mockErr := &common.InternalError{Err: fmt.Errorf("non connection error")}
259 readerMock.On("GetListNodebIds").Return(nodeIds, mockErr)
261 res := rnibDataService.PingRnib()
262 readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 1)
266 //func TestConnFailureThenSuccessGetNodebIdList(t *testing.T) {
267 // rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
269 // var nilNodeIds []*entities.NbIdentity = nil
270 // nodeIds := []*entities.NbIdentity{}
271 // mockErr := &common.InternalError{Err: &net.OpError{Err:fmt.Errorf("connection error")}}
272 // //readerMock.On("GetListNodebIds").Return(nilNodeIds, mockErr)
273 // //readerMock.On("GetListNodebIds").Return(nodeIds, nil)
275 // res, err := rnibDataService.GetListNodebIds()
276 // readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 2)
277 // assert.True(t, strings.Contains(err.Error(),"connection failure", ))
278 // assert.Equal(t, nodeIds, res)