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"
48 "github.com/go-openapi/swag"
51 var BasicXAppLists = []byte(`[
53 "name":"xapp-01","status":"unknown","version":"1.2.3",
55 {"name":"xapp-01-instance-01","status":"pending","ip":"172.16.1.103","port":4555,
56 "txMessages":["ControlIndication"],
57 "rxMessages":["LoadIndication","Reset"]
59 {"name":"xapp-01-instance-02","status":"pending","ip":"10.244.1.12","port":4561,
60 "txMessages":["ControlIndication","SNStatusTransfer"],
61 "rxMessages":["LoadIndication","HandoverPreparation"]
67 var SubscriptionResp = []byte(`{"ID":"deadbeef1234567890", "Version":0, "EventType":"all"}`)
69 var InvalidSubResp = []byte(`{"Version":0, "EventType":all}`)
71 func TestValidateXappCallbackData_1(t *testing.T) {
72 data := models.XappCallbackData{
73 XApps: *swag.String("[]"),
74 Version: *swag.Int64(1),
75 Event: *swag.String("someevent"),
76 ID: *swag.String("123456")}
78 err := validateXappCallbackData(&data)
80 t.Error("Invalid XApp callback data: " + err.Error())
84 func TestValidateXappSubscriptionsData(t *testing.T) {
86 ep := make(map[string]*rtmgr.Endpoint)
87 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}
89 data := models.XappSubscriptionData{
90 Address: swag.String("10.1.1.1"),
92 SubscriptionID: swag.Int32(123456)}
95 err = validateXappSubscriptionData(&data)
100 data1 := models.XappSubscriptionData{
101 Address: swag.String(""),
103 SubscriptionID: swag.Int32(123456)}
104 err = validateXappSubscriptionData(&data1)
108 data2 := models.E2tData{
109 E2TAddress: swag.String(""),
111 err = validateE2tData(&data2)
113 e2tchannel := make(chan *models.E2tData, 10)
114 _ = createNewE2tHandleHandlerImpl(e2tchannel, &data2)
115 defer close(e2tchannel)
117 //test case for provideXappSubscriptionHandleImp
118 datachannel := make(chan *models.XappSubscriptionData, 10)
119 _ = provideXappSubscriptionHandleImpl(datachannel, &data1)
120 defer close(datachannel)
122 //test case for deleteXappSubscriptionHandleImpl
123 _ = deleteXappSubscriptionHandleImpl(datachannel, &data1)
126 func TestvalidateE2tData(t *testing.T) {
127 data := models.E2tData{
128 E2TAddress: swag.String(""),
130 err := validateE2tData(&data)
134 func TestSubscriptionExists(t *testing.T) {
136 data := models.XappSubscriptionData{
137 Address: swag.String("10.0.0.0"),
139 SubscriptionID: swag.Int32(1234)}
141 rtmgr.Subs = *stub.ValidSubscriptions
143 yes_no := subscriptionExists(&data)
144 yes_no = addSubscription(&rtmgr.Subs, &data)
145 yes_no = addSubscription(&rtmgr.Subs, &data)
146 yes_no = delSubscription(&rtmgr.Subs, &data)
147 yes_no = delSubscription(&rtmgr.Subs, &data)
151 func TestaddSubscriptions(t *testing.T) {
153 subdata := models.XappSubscriptionData{
154 Address: swag.String("10.0.0.0"),
156 SubscriptionID: swag.Int32(1234)}
158 rtmgr.Subs = *stub.ValidSubscriptions
159 yes_no := addSubscription(&rtmgr.Subs, &subdata)
163 func TestHttpInstance(t *testing.T) {
164 sdlEngine, _ := sdl.GetSdl("file")
165 rpeEngine, _ := rpe.GetRpe("rmrpush")
166 httpinstance := NewHttpRestful()
167 err := httpinstance.Terminate()
170 triggerSBI := make(chan bool)
171 createMockPlatformComponents()
172 //ts := createMockAppmgrWithData("127.0.0.1:3000", BasicXAppLists, nil)
175 err = httpinstance.Initialize(XMURL, "httpgetter", "rt.json", "config.json", sdlEngine, rpeEngine, triggerSBI)
178 func TestXappCallbackDataChannelwithdata(t *testing.T) {
179 data := models.XappCallbackData{
180 XApps: *swag.String("[]"),
181 Version: *swag.Int64(1),
182 Event: *swag.String("someevent"),
183 ID: *swag.String("123456")}
184 datach := make(chan *models.XappCallbackData, 1)
185 go func() { _, _ = recvXappCallbackData(datach) }()
189 func TestXappCallbackDataChannelNodata(t *testing.T) {
190 datach := make(chan *models.XappCallbackData, 1)
191 go func() { _, _ = recvXappCallbackData(datach) }()
195 func TestE2TChannelwithData(t *testing.T) {
196 data2 := models.E2tData{
197 E2TAddress: swag.String(""),
199 dataChannel := make(chan *models.E2tData, 10)
200 go func() { _, _ = recvNewE2Tdata(dataChannel) }()
201 defer close(dataChannel)
202 dataChannel <- &data2
205 func TestE2TChannelwithNoData(t *testing.T) {
206 dataChannel := make(chan *models.E2tData, 10)
207 go func() { _, _ = recvNewE2Tdata(dataChannel) }()
208 defer close(dataChannel)
211 func TestprovideXappSubscriptionHandleImpl(t *testing.T) {
213 data := models.XappSubscriptionData{
214 Address: swag.String("10.0.0.0"),
216 SubscriptionID: swag.Int32(1234)}
217 datachannel := make(chan *models.XappSubscriptionData, 10)
218 go func() { _ = provideXappSubscriptionHandleImpl(datachannel, &data) }()
219 defer close(datachannel)
225 func TestdeleteXappSubscriptionHandleImpl(t *testing.T) {
227 subdeldata := models.XappSubscriptionData{
228 Address: swag.String("10.0.0.0"),
230 SubscriptionID: swag.Int32(1234)}
231 subdelchannel := make(chan *models.XappSubscriptionData, 10)
232 go func() { _ = deleteXappSubscriptionHandleImpl(subdelchannel, &subdeldata) }()
233 defer close(subdelchannel)
234 subdelchannel <- &subdeldata
237 func createMockAppmgrWithData(url string, g []byte, p []byte) *httptest.Server {
238 l, err := net.Listen("tcp", url)
240 fmt.Println("Failed to create listener: " + err.Error())
242 ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
243 if r.Method == "GET" && r.URL.String() == "/ric/v1/xapps" {
244 w.Header().Add("Content-Type", "application/json")
245 w.WriteHeader(http.StatusOK)
248 if r.Method == "POST" && r.URL.String() == "/ric/v1/subscriptions" {
249 w.Header().Add("Content-Type", "application/json")
250 w.WriteHeader(http.StatusCreated)
260 func createMockPlatformComponents() {
261 var filename = "config.json"
262 file, _ := json.MarshalIndent(stub.ValidPlatformComponents, "", "")
263 filestr := string(file)
264 filestr = "{\"PlatformComponents\":" + filestr + "}"
265 file = []byte(filestr)
266 _ = ioutil.WriteFile(filename, file, 644)
269 func TestRecvXappCallbackData(t *testing.T) {
270 data := models.XappCallbackData{
271 XApps: *swag.String("[]"),
272 Version: *swag.Int64(1),
273 Event: *swag.String("any"),
274 ID: *swag.String("123456"),
277 ch := make(chan *models.XappCallbackData)
279 httpRestful := NewHttpRestful()
280 go func() { ch <- &data }()
281 time.Sleep(1 * time.Second)
282 t.Log(string(len(ch)))
283 xappList, err := httpRestful.RecvXappCallbackData(ch)
285 t.Error("Receive failed: " + err.Error())
288 t.Error("Expected an XApp notification list")
295 func TestProvideXappHandleHandlerImpl(t *testing.T) {
296 datach := make(chan *models.XappCallbackData, 10)
298 data := models.XappCallbackData{
299 XApps: *swag.String("[]"),
300 Version: *swag.Int64(1),
301 Event: *swag.String("someevent"),
302 ID: *swag.String("123456")}
303 var httpRestful, _ = GetNbi("httpRESTful")
304 err := httpRestful.(*HttpRestful).ProvideXappHandleHandlerImpl(datach, &data)
306 t.Error("Error occured: " + err.Error())
310 t.Error("Something gone wrong: " + err.Error())
313 t.Error("Malformed data on channel")
319 func TestValidateXappCallbackData(t *testing.T) {
320 data := models.XappCallbackData{
321 XApps: *swag.String("[]"),
322 Version: *swag.Int64(1),
323 Event: *swag.String("someevent"),
324 ID: *swag.String("123456")}
326 err := validateXappCallbackData(&data)
328 t.Error("Invalid XApp callback data: " + err.Error())
332 func TestValidateXappCallbackDataWithInvalidData(t *testing.T) {
333 data := models.XappCallbackData{
334 XApps: *swag.String("{}"),
335 Version: *swag.Int64(1),
336 Event: *swag.String("someevent"),
337 ID: *swag.String("123456")}
339 err := validateXappCallbackData(&data)
341 t.Error("Invalid XApp callback data: " + err.Error())
345 func TestHttpGetXAppsInvalidData(t *testing.T) {
346 _, err := httpGetXApps(XMURL)
348 t.Error("No XApp data received: " + err.Error())
352 func TestHttpGetXAppsWithValidData(t *testing.T) {
354 ts := createMockAppmgrWithData("127.0.0.1:3000", BasicXAppLists, nil)
358 xapplist, err := httpGetXApps(XMURL)
360 t.Error("Error occured: " + err.Error())
362 if len(*xapplist) != expected {
363 t.Error("Invalid XApp data: got " + string(len(*xapplist)) + ", expected " + string(expected))
367 func TestRetrieveStartupDataTimeout(t *testing.T) {
368 sdlEngine, _ := sdl.GetSdl("file")
369 createMockPlatformComponents()
370 err := retrieveStartupData(XMURL, "httpgetter", "rt.json", "config.json", sdlEngine)
372 t.Error("Cannot retrieve startup data: " + err.Error())
375 os.Remove("config.json")
378 func TestRetrieveStartupData(t *testing.T) {
379 ts := createMockAppmgrWithData("127.0.0.1:3000", BasicXAppLists, SubscriptionResp)
382 sdlEngine, _ := sdl.GetSdl("file")
383 var httpRestful, _ = GetNbi("httpRESTful")
384 createMockPlatformComponents()
385 err := httpRestful.(*HttpRestful).RetrieveStartupData(XMURL, "httpgetter", "rt.json", "config.json", sdlEngine)
386 //err := retrieveStartupData(XMURL, "httpgetter", "rt.json", "config.json", sdlEngine)
388 t.Error("Cannot retrieve startup data: " + err.Error())
391 os.Remove("config.json")
394 func TestRetrieveStartupDataWithInvalidSubResp(t *testing.T) {
395 ts := createMockAppmgrWithData("127.0.0.1:3000", BasicXAppLists, InvalidSubResp)
398 sdlEngine, _ := sdl.GetSdl("file")
399 var httpRestful, _ = GetNbi("httpRESTful")
400 createMockPlatformComponents()
401 err := httpRestful.(*HttpRestful).RetrieveStartupData(XMURL, "httpgetter", "rt.json", "config.json", sdlEngine)
403 t.Error("Cannot retrieve startup data: " + err.Error())
406 os.Remove("config.json")
409 func TestrecvXappCallbackData(t *testing.T) {
410 data := models.E2tData{
411 E2TAddress: swag.String("123456")}
415 e2tch := make(chan *models.E2tData)
416 go func() { e2tch <- &data }()
417 time.Sleep(1 * time.Second)
418 t.Log(string(len(e2tch)))
421 var httpRestful, _ = GetNbi("httpRESTful")
422 _, err = httpRestful.(*HttpRestful).RecvNewE2Tdata(e2tch)