2 ==================================================================================
3 Copyright (c) 2019 AT&T Intellectual Property.
4 Copyright (c) 2019 Nokia
6 Licensed under the Apache License, Version 2.0 (the "License");
7 you may not use this file except in compliance with the License.
8 You may obtain a copy of the License at
10 http://www.apache.org/licenses/LICENSE-2.0
12 Unless required by applicable law or agreed to in writing, software
13 distributed under the License is distributed on an "AS IS" BASIS,
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 See the License for the specific language governing permissions and
16 limitations under the License.
19 This source code is part of the near-RT RIC (RAN Intelligent Controller)
20 platform project (RICP).
22 ==================================================================================
25 Mnemonic: httprestful_test.go
26 Abstract: HTTPRestful unit tests
40 "routing-manager/pkg/models"
41 "routing-manager/pkg/rpe"
42 "routing-manager/pkg/rtmgr"
43 "routing-manager/pkg/sdl"
44 "routing-manager/pkg/stub"
49 "github.com/go-openapi/swag"
52 var BasicXAppLists = []byte(`[
54 "name":"xapp-01","status":"unknown","version":"1.2.3",
56 {"name":"xapp-01-instance-01","status":"pending","ip":"172.16.1.103","port":4555,
57 "txMessages":["ControlIndication"],
58 "rxMessages":["LoadIndication","Reset"]
60 {"name":"xapp-01-instance-02","status":"pending","ip":"10.244.1.12","port":4561,
61 "txMessages":["ControlIndication","SNStatusTransfer"],
62 "rxMessages":["LoadIndication","HandoverPreparation"]
68 var SubscriptionResp = []byte(`{"ID":"deadbeef1234567890", "Version":0, "EventType":"all"}`)
70 var InvalidSubResp = []byte(`{"Version":0, "EventType":all}`)
72 func TestValidateXappCallbackData_1(t *testing.T) {
73 data := models.XappCallbackData{
74 XApps: *swag.String("[]"),
75 Version: *swag.Int64(1),
76 Event: *swag.String("someevent"),
77 ID: *swag.String("123456")}
79 err := validateXappCallbackData(&data)
81 t.Error("Invalid XApp callback data: " + err.Error())
85 func TestValidateXappSubscriptionsData(t *testing.T) {
87 ep := make(map[string]*rtmgr.Endpoint)
88 ep["dummy"] = &rtmgr.Endpoint{Uuid: "10.0.0.1:0", Name: "E2TERM", XAppType: "app1", Ip: "", Port: 0, TxMessages: []string{"", ""}, RxMessages: []string{"", ""}, Socket: nil, IsReady: true, Keepalive: true}
90 data := models.XappSubscriptionData{
91 Address: swag.String("10.1.1.1"),
93 SubscriptionID: swag.Int32(123456)}
96 err = validateXappSubscriptionData(&data)
101 data1 := models.XappSubscriptionData{
102 Address: swag.String(""),
104 SubscriptionID: swag.Int32(123456)}
105 err = validateXappSubscriptionData(&data1)
109 data2 := models.E2tData{
110 E2TAddress: swag.String(""),
112 err = validateE2tData(&data2)
114 e2tchannel := make(chan *models.E2tData, 10)
115 _ = createNewE2tHandleHandlerImpl(e2tchannel, &data2)
116 defer close(e2tchannel)
118 //test case for provideXappSubscriptionHandleImp
119 datachannel := make(chan *models.XappSubscriptionData, 10)
120 _ = provideXappSubscriptionHandleImpl(datachannel, &data1)
121 defer close(datachannel)
123 //test case for deleteXappSubscriptionHandleImpl
124 _ = deleteXappSubscriptionHandleImpl(datachannel, &data1)
127 func TestvalidateE2tData(t *testing.T) {
128 data := models.E2tData{
129 E2TAddress: swag.String(""),
131 err := validateE2tData(&data)
135 func TestSubscriptionExists(t *testing.T) {
137 data := models.XappSubscriptionData{
138 Address: swag.String("10.0.0.0"),
140 SubscriptionID: swag.Int32(1234)}
142 rtmgr.Subs = *stub.ValidSubscriptions
144 yes_no := subscriptionExists(&data)
145 yes_no = addSubscription(&rtmgr.Subs, &data)
146 yes_no = addSubscription(&rtmgr.Subs, &data)
147 yes_no = delSubscription(&rtmgr.Subs, &data)
148 yes_no = delSubscription(&rtmgr.Subs, &data)
152 func TestaddSubscriptions(t *testing.T) {
154 subdata := models.XappSubscriptionData{
155 Address: swag.String("10.0.0.0"),
157 SubscriptionID: swag.Int32(1234)}
159 rtmgr.Subs = *stub.ValidSubscriptions
160 yes_no := addSubscription(&rtmgr.Subs, &subdata)
164 func TestHttpInstance(t *testing.T) {
165 sdlEngine, _ := sdl.GetSdl("file")
166 rpeEngine, _ := rpe.GetRpe("rmrpush")
167 httpinstance := NewHttpRestful()
168 err := httpinstance.Terminate()
171 triggerSBI := make(chan bool)
172 createMockPlatformComponents()
173 //ts := createMockAppmgrWithData("127.0.0.1:3000", BasicXAppLists, nil)
177 err = httpinstance.Initialize(XMURL, "httpgetter", "rt.json", "config.json", sdlEngine, rpeEngine, triggerSBI, &m)
180 func TestXappCallbackDataChannelwithdata(t *testing.T) {
181 data := models.XappCallbackData{
182 XApps: *swag.String("[]"),
183 Version: *swag.Int64(1),
184 Event: *swag.String("someevent"),
185 ID: *swag.String("123456")}
186 datach := make(chan *models.XappCallbackData, 1)
187 go func() { _, _ = recvXappCallbackData(datach) }()
191 func TestXappCallbackDataChannelNodata(t *testing.T) {
192 datach := make(chan *models.XappCallbackData, 1)
193 go func() { _, _ = recvXappCallbackData(datach) }()
197 func TestE2TChannelwithData(t *testing.T) {
198 data2 := models.E2tData{
199 E2TAddress: swag.String(""),
201 dataChannel := make(chan *models.E2tData, 10)
202 go func() { _, _ = recvNewE2Tdata(dataChannel) }()
203 defer close(dataChannel)
204 dataChannel <- &data2
207 func TestE2TChannelwithNoData(t *testing.T) {
208 dataChannel := make(chan *models.E2tData, 10)
209 go func() { _, _ = recvNewE2Tdata(dataChannel) }()
210 defer close(dataChannel)
213 func TestprovideXappSubscriptionHandleImpl(t *testing.T) {
215 data := models.XappSubscriptionData{
216 Address: swag.String("10.0.0.0"),
218 SubscriptionID: swag.Int32(1234)}
219 datachannel := make(chan *models.XappSubscriptionData, 10)
220 go func() { _ = provideXappSubscriptionHandleImpl(datachannel, &data) }()
221 defer close(datachannel)
227 func TestdeleteXappSubscriptionHandleImpl(t *testing.T) {
229 subdeldata := models.XappSubscriptionData{
230 Address: swag.String("10.0.0.0"),
232 SubscriptionID: swag.Int32(1234)}
233 subdelchannel := make(chan *models.XappSubscriptionData, 10)
234 go func() { _ = deleteXappSubscriptionHandleImpl(subdelchannel, &subdeldata) }()
235 defer close(subdelchannel)
236 subdelchannel <- &subdeldata
239 func createMockAppmgrWithData(url string, g []byte, p []byte) *httptest.Server {
240 l, err := net.Listen("tcp", url)
242 fmt.Println("Failed to create listener: " + err.Error())
244 ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
245 if r.Method == "GET" && r.URL.String() == "/ric/v1/xapps" {
246 w.Header().Add("Content-Type", "application/json")
247 w.WriteHeader(http.StatusOK)
250 if r.Method == "POST" && r.URL.String() == "/ric/v1/subscriptions" {
251 w.Header().Add("Content-Type", "application/json")
252 w.WriteHeader(http.StatusCreated)
262 func createMockPlatformComponents() {
263 var filename = "config.json"
264 file, _ := json.MarshalIndent(stub.ValidPlatformComponents, "", "")
265 filestr := string(file)
266 filestr = "{\"PlatformComponents\":" + filestr + "}"
267 file = []byte(filestr)
268 _ = ioutil.WriteFile(filename, file, 644)
271 func TestRecvXappCallbackData(t *testing.T) {
272 data := models.XappCallbackData{
273 XApps: *swag.String("[]"),
274 Version: *swag.Int64(1),
275 Event: *swag.String("any"),
276 ID: *swag.String("123456"),
279 ch := make(chan *models.XappCallbackData)
281 httpRestful := NewHttpRestful()
282 go func() { ch <- &data }()
283 time.Sleep(1 * time.Second)
284 t.Log(string(len(ch)))
285 xappList, err := httpRestful.RecvXappCallbackData(ch)
287 t.Error("Receive failed: " + err.Error())
290 t.Error("Expected an XApp notification list")
297 func TestProvideXappHandleHandlerImpl(t *testing.T) {
298 datach := make(chan *models.XappCallbackData, 10)
300 data := models.XappCallbackData{
301 XApps: *swag.String("[]"),
302 Version: *swag.Int64(1),
303 Event: *swag.String("someevent"),
304 ID: *swag.String("123456")}
305 var httpRestful, _ = GetNbi("httpRESTful")
306 err := httpRestful.(*HttpRestful).ProvideXappHandleHandlerImpl(datach, &data)
308 t.Error("Error occured: " + err.Error())
312 t.Error("Something gone wrong: " + err.Error())
315 t.Error("Malformed data on channel")
321 func TestValidateXappCallbackData(t *testing.T) {
322 data := models.XappCallbackData{
323 XApps: *swag.String("[]"),
324 Version: *swag.Int64(1),
325 Event: *swag.String("someevent"),
326 ID: *swag.String("123456")}
328 err := validateXappCallbackData(&data)
330 t.Error("Invalid XApp callback data: " + err.Error())
334 func TestValidateXappCallbackDataWithInvalidData(t *testing.T) {
335 data := models.XappCallbackData{
336 XApps: *swag.String("{}"),
337 Version: *swag.Int64(1),
338 Event: *swag.String("someevent"),
339 ID: *swag.String("123456")}
341 err := validateXappCallbackData(&data)
343 t.Error("Invalid XApp callback data: " + err.Error())
347 func TestHttpGetXAppsInvalidData(t *testing.T) {
348 _, err := httpGetXApps(XMURL)
350 t.Error("No XApp data received: " + err.Error())
354 func TestHttpGetXAppsWithValidData(t *testing.T) {
356 ts := createMockAppmgrWithData("127.0.0.1:3000", BasicXAppLists, nil)
360 xapplist, err := httpGetXApps(XMURL)
362 t.Error("Error occured: " + err.Error())
364 if len(*xapplist) != expected {
365 t.Error("Invalid XApp data: got " + string(len(*xapplist)) + ", expected " + string(expected))
369 func TestRetrieveStartupDataTimeout(t *testing.T) {
370 sdlEngine, _ := sdl.GetSdl("file")
371 createMockPlatformComponents()
372 err := retrieveStartupData(XMURL, "httpgetter", "rt.json", "config.json", sdlEngine)
374 t.Error("Cannot retrieve startup data: " + err.Error())
377 os.Remove("config.json")
380 func TestRetrieveStartupData(t *testing.T) {
381 ts := createMockAppmgrWithData("127.0.0.1:3000", BasicXAppLists, SubscriptionResp)
384 sdlEngine, _ := sdl.GetSdl("file")
385 var httpRestful, _ = GetNbi("httpRESTful")
386 createMockPlatformComponents()
387 err := httpRestful.(*HttpRestful).RetrieveStartupData(XMURL, "httpgetter", "rt.json", "config.json", sdlEngine)
388 //err := retrieveStartupData(XMURL, "httpgetter", "rt.json", "config.json", sdlEngine)
390 t.Error("Cannot retrieve startup data: " + err.Error())
393 os.Remove("config.json")
396 func TestRetrieveStartupDataWithInvalidSubResp(t *testing.T) {
397 ts := createMockAppmgrWithData("127.0.0.1:3000", BasicXAppLists, InvalidSubResp)
400 sdlEngine, _ := sdl.GetSdl("file")
401 var httpRestful, _ = GetNbi("httpRESTful")
402 createMockPlatformComponents()
403 err := httpRestful.(*HttpRestful).RetrieveStartupData(XMURL, "httpgetter", "rt.json", "config.json", sdlEngine)
405 t.Error("Cannot retrieve startup data: " + err.Error())
408 os.Remove("config.json")
411 func TestrecvXappCallbackData(t *testing.T) {
412 data := models.E2tData{
413 E2TAddress: swag.String("123456")}
417 e2tch := make(chan *models.E2tData)
418 go func() { e2tch <- &data }()
419 time.Sleep(1 * time.Second)
420 t.Log(string(len(e2tch)))
423 var httpRestful, _ = GetNbi("httpRESTful")
424 _, err = httpRestful.(*HttpRestful).RecvNewE2Tdata(e2tch)