5057c010c8a129dd67881baf3a9b93f7d9daba69
[ric-plt/e2mgr.git] / E2Manager / handlers / httpmsghandlers / setup_request_handler_test.go
1 //
2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
4 //
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
8 //
9 //      http://www.apache.org/licenses/LICENSE-2.0
10 //
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.
16 //
17 package httpmsghandlers
18
19 import (
20         "e2mgr/configuration"
21         "e2mgr/e2managererrors"
22         "e2mgr/managers"
23         "e2mgr/mocks"
24         "e2mgr/models"
25         "e2mgr/services"
26         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
27         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
28         "reflect"
29         "testing"
30 )
31
32 //func TestSetupHandleNewRanSave_Error(t *testing.T) {
33 //      readerMock, writerMock, handler, rmrMessengerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST)
34 //
35 //      ranName := "RanName"
36 //      rnibErr := &common.ResourceNotFoundError{}
37 //      sr := models.SetupRequest{"127.0.0.1", 8080, ranName,}
38 //
39 //      nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
40 //      readerMock.On("GetNodeb", ranName).Return(nb, rnibErr)
41 //
42 //      vErr := &common.ValidationError{}
43 //      updatedNb, _ := createInitialNodeInfo(&sr, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST)
44 //      writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(vErr)
45 //
46 //      var nbUpdated = &entities.NodebInfo{RanName: ranName, Ip: sr.RanIp, Port: uint32(sr.RanPort), ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1}
47 //      writerMock.On("UpdateNodebInfo", nbUpdated).Return(nil)
48 //
49 //      payload := e2pdus.PackedEndcX2setupRequest
50 //      xaction := []byte(ranName)
51 //      msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
52 //
53 //      rmrMessengerMock.On("SendMsg", mock.Anything).Return(msg, nil)
54 //
55 //      _, actual := handler.Handle(sr)
56 //      expected := &e2managererrors.RnibDbError{}
57 //
58 //      if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
59 //              t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
60 //      }
61 //
62 //      writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1)
63 //      writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
64 //      rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
65 //}
66 //
67 //func TestSetupHandleNewRan_Success(t *testing.T) {
68 //      readerMock, writerMock, handler, rmrMessengerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST)
69 //
70 //      ranName := "RanName"
71 //      rnibErr := &common.ResourceNotFoundError{}
72 //      sr := models.SetupRequest{"127.0.0.1", 8080, ranName,}
73 //
74 //      nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
75 //      readerMock.On("GetNodeb", ranName).Return(nb, rnibErr)
76 //
77 //      updatedNb, _ := createInitialNodeInfo(&sr, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST)
78 //      writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(nil)
79 //
80 //      var nbUpdated = &entities.NodebInfo{RanName: ranName, Ip: sr.RanIp, Port: uint32(sr.RanPort), ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1}
81 //      writerMock.On("UpdateNodebInfo", nbUpdated).Return(nil)
82 //
83 //      payload := e2pdus.PackedEndcX2setupRequest
84 //      xaction := []byte(ranName)
85 //      msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
86 //
87 //      rmrMessengerMock.On("SendMsg", mock.Anything).Return(msg, nil)
88 //
89 //      _, actual := handler.Handle(sr)
90 //
91 //      assert.Nil(t, actual)
92 //
93 //      writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1)
94 //      writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
95 //      rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
96 //}
97
98 //func TestEndcSetupHandleRmr_Error(t *testing.T) {
99 //      readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST)
100 //
101 //      ranName := "RanName"
102 //      nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
103 //      readerMock.On("GetNodeb", ranName).Return(nb, nil)
104 //
105 //      var nbUpdated = &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1}
106 //      writerMock.On("UpdateNodebInfo", nbUpdated).Return(nil)
107 //
108 //      var nbDisconnected = &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 0}
109 //      writerMock.On("UpdateNodebInfo", nbDisconnected).Return(nil)
110 //
111 //      payload := e2pdus.PackedEndcX2setupRequest
112 //      xaction := []byte(ranName)
113 //      msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
114 //
115 //      rmrErr := &e2managererrors.RmrError{}
116 //      rmrMessengerMock.On("SendMsg", mock.Anything).Return(msg, rmrErr)
117 //
118 //      sr := models.SetupRequest{"127.0.0.1", 8080, ranName,}
119 //      _, actual := handler.Handle(sr)
120 //
121 //      if reflect.TypeOf(actual) != reflect.TypeOf(rmrErr) {
122 //              t.Errorf("Error actual = %v, and Expected = %v.", actual, rmrErr)
123 //      }
124 //
125 //      writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
126 //      rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
127 //}
128
129 //func TestEndcSetupHandleExistingDisconnectedRan_Success(t *testing.T) {
130 //      readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST)
131 //
132 //      ranName := "RanName"
133 //      nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
134 //      readerMock.On("GetNodeb", ranName).Return(nb, nil)
135 //
136 //      var nbUpdated = &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1}
137 //      writerMock.On("UpdateNodebInfo", nbUpdated).Return(nil)
138 //
139 //      payload := e2pdus.PackedEndcX2setupRequest
140 //      xaction := []byte(ranName)
141 //      msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
142 //
143 //      rmrMessengerMock.On("SendMsg", mock.Anything).Return(msg, nil)
144 //
145 //      sr := models.SetupRequest{"127.0.0.1", 8080, ranName,}
146 //      _, actual := handler.Handle(sr)
147 //
148 //      assert.Nil(t, actual)
149 //
150 //      writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
151 //      rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
152 //}
153
154 //func TestX2SetupHandleExistingConnectedRan_Success(t *testing.T) {
155 //      readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
156 //
157 //      ranName := "RanName"
158 //      nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
159 //      readerMock.On("GetNodeb", ranName).Return(nb, nil)
160 //
161 //      var nbUpdated = &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
162 //      writerMock.On("UpdateNodebInfo", nbUpdated).Return(nil)
163 //
164 //      payload := e2pdus.PackedX2setupRequest
165 //      xaction := []byte(ranName)
166 //      msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
167 //
168 //      rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
169 //
170 //      sr := models.SetupRequest{"127.0.0.1", 8080, ranName,}
171 //      _, actual := handler.Handle(sr)
172 //
173 //      assert.Nil(t, actual)
174 //
175 //      writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
176 //      rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
177 //}
178
179 func TestX2SetupHandleRnibGet_Error(t *testing.T) {
180         readerMock, _, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
181
182         rnibErr := &common.ValidationError{}
183         nb := &entities.NodebInfo{RanName: "RanName", ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,}
184         readerMock.On("GetNodeb", "RanName").Return(nb, rnibErr)
185
186         sr := models.SetupRequest{"127.0.0.1", 8080, "RanName",}
187         _, actual := handler.Handle(sr)
188
189         expected := &e2managererrors.RnibDbError{}
190         if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
191                 t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
192         }
193         rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
194 }
195
196 //func TestEndcSetupHandleShuttingDownRan_Error(t *testing.T) {
197 //      readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST)
198 //
199 //      nb := &entities.NodebInfo{RanName: "RanName", ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,}
200 //      readerMock.On("GetNodeb", "RanName").Return(nb, nil)
201 //
202 //      sr := models.SetupRequest{"127.0.0.1", 8080, "RanName",}
203 //      _, actual := handler.Handle(sr)
204 //
205 //      expected := &e2managererrors.WrongStateError{}
206 //      if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
207 //              t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
208 //      }
209 //      writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
210 //      rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
211 //}
212
213 //func TestX2SetupHandleShuttingDownRan_Error(t *testing.T) {
214 //      readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
215 //
216 //      nb := &entities.NodebInfo{RanName: "RanName", ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,}
217 //      readerMock.On("GetNodeb", "RanName").Return(nb, nil)
218 //
219 //      sr := models.SetupRequest{"127.0.0.1", 8080, "RanName",}
220 //      _, actual := handler.Handle(sr)
221 //
222 //      expected := &e2managererrors.WrongStateError{}
223 //      if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
224 //              t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
225 //      }
226 //      writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
227 //      rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
228 //}
229
230 func TestX2SetupHandleNoPort_Error(t *testing.T) {
231         _, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
232
233         sr := models.SetupRequest{"127.0.0.1", 0, "RanName",}
234         _, actual := handler.Handle(sr)
235
236         expected := &e2managererrors.RequestValidationError{}
237         if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
238                 t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
239         }
240         writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
241         rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
242 }
243
244 func TestX2SetupHandleNoRanName_Error(t *testing.T) {
245         _, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
246
247         sr := models.SetupRequest{}
248         sr.RanPort = 8080
249         sr.RanIp = "127.0.0.1"
250
251         _, actual := handler.Handle(sr)
252
253         expected := &e2managererrors.RequestValidationError{}
254         if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
255                 t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
256         }
257         writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
258         rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
259 }
260
261 func TestX2SetupHandleNoIP_Error(t *testing.T) {
262         _, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
263
264         sr := models.SetupRequest{}
265         sr.RanPort = 8080
266         sr.RanName = "RanName"
267
268         _, actual := handler.Handle(sr)
269
270         expected := &e2managererrors.RequestValidationError{}
271         if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
272                 t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
273         }
274         writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
275         rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
276 }
277
278 func TestX2SetupHandleInvalidIp_Error(t *testing.T) {
279         _, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
280
281         sr := models.SetupRequest{}
282         sr.RanPort = 8080
283         sr.RanName = "RanName"
284         sr.RanIp = "invalid ip"
285
286         _, actual := handler.Handle(sr)
287
288         expected := &e2managererrors.RequestValidationError{}
289         if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
290                 t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
291         }
292         writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
293         rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
294 }
295
296 func initSetupRequestTest(t *testing.T, protocol entities.E2ApplicationProtocol) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, *SetupRequestHandler, *mocks.RmrMessengerMock, *mocks.E2TInstancesManagerMock) {
297         log := initLog(t)
298         config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
299
300         readerMock := &mocks.RnibReaderMock{}
301         writerMock := &mocks.RnibWriterMock{}
302
303         rmrMessengerMock := &mocks.RmrMessengerMock{}
304         rmrSender := getRmrSender(rmrMessengerMock, log)
305
306         rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
307
308         ranSetupManager := managers.NewRanSetupManager(log, rmrSender, rnibDataService)
309         e2tInstancesManager := &mocks.E2TInstancesManagerMock{}
310         handler := NewSetupRequestHandler(log, rnibDataService, ranSetupManager, protocol, e2tInstancesManager)
311
312         return readerMock, writerMock, handler, rmrMessengerMock, e2tInstancesManager
313 }