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.
21 "e2mgr/e2managererrors"
28 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
29 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
30 "github.com/stretchr/testify/assert"
31 "github.com/stretchr/testify/mock"
35 func TestExecuteSetupConnectingX2Setup(t *testing.T) {
40 writerMock := &mocks.RnibWriterMock{}
41 writerProvider := func() rNibWriter.RNibWriter {
45 var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
46 var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
47 var rnibErr common.IRNibError
48 writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
50 payload := e2pdus.PackedX2setupRequest
51 xaction := []byte(ranName)
52 msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
53 rmrMessengerMock := &mocks.RmrMessengerMock{}
54 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
55 rmrService := getRmrService(rmrMessengerMock, log)
57 mgr := NewRanSetupManager(log, rmrService, writerProvider)
58 if err := mgr.ExecuteSetup(initialNodeb); err != nil {
59 t.Errorf("want: success, got: error: %s", err)
62 writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
63 rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
66 func TestExecuteSetupConnectingEndcX2Setup(t *testing.T) {
71 writerMock := &mocks.RnibWriterMock{}
72 writerProvider := func() rNibWriter.RNibWriter {
76 var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
77 var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1}
78 var rnibErr common.IRNibError
79 writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
81 payload := e2pdus.PackedEndcX2setupRequest
82 xaction := []byte(ranName)
83 msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
84 rmrMessengerMock := &mocks.RmrMessengerMock{}
85 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
86 rmrService := getRmrService(rmrMessengerMock, log)
88 mgr := NewRanSetupManager(log, rmrService, writerProvider)
89 if err := mgr.ExecuteSetup(initialNodeb); err != nil {
90 t.Errorf("want: success, got: error: %s", err)
93 writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
94 rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
97 func TestExecuteSetupDisconnected(t *testing.T) {
102 writerMock := &mocks.RnibWriterMock{}
103 writerProvider := func() rNibWriter.RNibWriter {
107 var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
108 var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
109 var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0}
110 var rnibErr common.IRNibError
111 writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
112 writerMock.On("UpdateNodebInfo", argNodebDisconnected).Return(rnibErr)
115 xaction := []byte(ranName)
116 msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
117 rmrMessengerMock := &mocks.RmrMessengerMock{}
118 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, fmt.Errorf("send failure"))
119 rmrService := getRmrService(rmrMessengerMock, log)
121 mgr := NewRanSetupManager(log, rmrService, writerProvider)
122 if err := mgr.ExecuteSetup(initialNodeb); err == nil {
123 t.Errorf("want: failure, got: success")
126 writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
127 rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
130 func TestExecuteSetupConnectingRnibError(t *testing.T) {
135 writerMock := &mocks.RnibWriterMock{}
136 writerProvider := func() rNibWriter.RNibWriter {
140 var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
141 var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
142 var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0}
143 var rnibErr = common.NewInternalError(fmt.Errorf("DB error"))
144 writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
145 writerMock.On("UpdateNodebInfo", argNodebDisconnected).Return(rnibErr)
148 xaction := []byte(ranName)
149 msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
150 rmrMessengerMock := &mocks.RmrMessengerMock{}
151 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, fmt.Errorf("send failure"))
152 rmrService := getRmrService(rmrMessengerMock, log)
154 mgr := NewRanSetupManager(log, rmrService, writerProvider)
155 if err := mgr.ExecuteSetup(initialNodeb); err == nil {
156 t.Errorf("want: failure, got: success")
158 assert.IsType(t, e2managererrors.NewRnibDbError(), err)
161 writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
162 rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
165 func TestExecuteSetupDisconnectedRnibError(t *testing.T) {
170 writerMock := &mocks.RnibWriterMock{}
171 writerProvider := func() rNibWriter.RNibWriter {
175 var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
176 var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
177 var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0}
178 var rnibErr common.IRNibError
179 writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
180 writerMock.On("UpdateNodebInfo", argNodebDisconnected).Return(common.NewInternalError(fmt.Errorf("DB error")))
183 xaction := []byte(ranName)
184 msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
185 rmrMessengerMock := &mocks.RmrMessengerMock{}
186 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, fmt.Errorf("send failure"))
187 rmrService := getRmrService(rmrMessengerMock, log)
189 mgr := NewRanSetupManager(log, rmrService, writerProvider)
190 if err := mgr.ExecuteSetup(initialNodeb); err == nil {
191 t.Errorf("want: failure, got: success")
193 assert.IsType(t, e2managererrors.NewRnibDbError(), err)
196 writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
197 rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
200 func TestExecuteSetupUnsupportedProtocol(t *testing.T) {
205 writerMock := &mocks.RnibWriterMock{}
206 writerProvider := func() rNibWriter.RNibWriter {
210 var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_UNKNOWN_E2_APPLICATION_PROTOCOL}
211 var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_UNKNOWN_E2_APPLICATION_PROTOCOL, ConnectionAttempts: 1}
212 var rnibErr common.IRNibError
213 writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
215 payload := e2pdus.PackedX2setupRequest
216 xaction := []byte(ranName)
217 msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
218 rmrMessengerMock := &mocks.RmrMessengerMock{}
219 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
220 rmrService := getRmrService(rmrMessengerMock, log)
222 mgr := NewRanSetupManager(log, rmrService, writerProvider)
223 if err := mgr.ExecuteSetup(initialNodeb); err == nil {
224 t.Errorf("want: error, got: success")
227 writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
228 rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
231 func initLog(t *testing.T) *logger.Logger {
232 log, err := logger.InitLogger(logger.InfoLevel)
234 t.Errorf("#initLog test - failed to initialize logger, error: %s", err)