2 ==================================================================================
4 Copyright (c) 2019-2020 AT&T Intellectual Property.
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.
17 ==================================================================================
22 * Created on: Oct 23, 2020
23 * Author: Shraboni Jana
26 #ifndef TEST_TEST_E2AP_H_
27 #define TEST_TEST_E2AP_H_
29 #include<gtest/gtest.h>
31 #include "e2ap_control_failure.hpp"
32 #include "e2ap_control_ack.hpp"
33 #include "e2ap_subsdel_request.hpp"
34 #include "e2ap_subsdel_response.hpp"
35 #include "e2ap_subsdel_failure.hpp"
36 #include "e2ap_criticality_diagnostics.hpp"
37 #include "e2ap_subscription_response.hpp"
38 #include "e2ap_subscription_failure.hpp"
41 TEST(E2AP, ControlAcknowledgementEncode)
44 unsigned char buff[1024];
45 size_t buf_len = 1024;
47 E2APControlAcknowledge::ControlAcknowledgeIEs infoObj;
48 infoObj.set_ranFunctionID(1);
49 infoObj.set_ricRequestorID(1);
50 infoObj.set_ricInstanceID(1);
51 infoObj.set_ricControlStatus(1);
52 infoObj.set_ricCallProcessID("CallProcessID");
53 infoObj.set_ricControlOutcome("ControlOutcome");
56 E2APControlAcknowledge cntrlObj(infoObj);
58 bool res = cntrlObj.encode(buff, &buf_len);
61 std::cout << cntrlObj.get_error() << std::endl;
65 pFile = fopen ("controlack1.per","w");
68 fwrite (buff , sizeof(char), buf_len, pFile);
74 TEST(E2AP, ControlAcknowledgementDecode)
76 unsigned char e2ap_buff[4096];
77 char filename[100] = "controlack1.per";
79 fp = fopen(filename,"rb");
84 size_t e2ap_buff_size = fread(e2ap_buff, 1, 4096, fp);
87 fprintf(stderr, "%s: Empty or broken\n", filename);
90 fprintf(stderr, "e2ap buffer size: %ld \n", e2ap_buff_size);
93 bool decode_status = true;
95 E2APControlAcknowledge e2obj(&e2ap_buff[0],&e2ap_buff_size);
98 } catch(const char* e){
99 decode_status = false;
100 std::cout << "Error Message: " << e << std::endl;
104 ASSERT_TRUE(decode_status);
107 TEST(E2AP, ControlFailureEncode)
110 unsigned char buff[1024];
111 size_t buf_len = 1024;
113 E2APControlFailure::ControlFailureIEs infoObj;
114 infoObj.set_ranFunctionID(1);
115 infoObj.set_ricRequestorID(1);
116 infoObj.set_ricInstanceID(1);
117 infoObj.set_ricCause(1);
118 infoObj.set_ricSubCause(1);
119 infoObj.set_ricCallProcessID("CallProcessID");
120 infoObj.set_ricControlOutcome("ControlOutcome");
123 E2APControlFailure cntrlObj(infoObj);
125 bool res = cntrlObj.encode(buff, &buf_len);
128 std::cout << cntrlObj.get_error() << std::endl;
132 pFile = fopen ("controlfail1.per","w");
135 fwrite (buff , sizeof(char), buf_len, pFile);
141 TEST(E2AP, ControlFailureDecode)
143 unsigned char e2ap_buff[1024];
144 char filename[100] = "controlfail1.per";
146 fp = fopen(filename,"rb");
151 size_t e2ap_buff_size = fread(e2ap_buff, 1, 1024, fp);
154 fprintf(stderr, "%s: Empty or broken\n", filename);
157 fprintf(stderr, "e2ap buffer size: %ld \n", e2ap_buff_size);
160 bool decode_status = true;
162 E2APControlFailure e2obj(&e2ap_buff[0],&e2ap_buff_size);
165 } catch(const char* e){
166 decode_status = false;
167 std::cout << "Error Message: " << e << std::endl;
171 ASSERT_TRUE(decode_status);
175 TEST(E2AP, SubscriptionDeleteRequest){
177 unsigned char buff[1024];
178 size_t buff_size = 1024;
181 E2APSubscriptionDeleteRequest::SubscriptionDeleteRequestIEs dataObj;
183 dataObj.set_ranFunctionID(1);
184 dataObj.set_ricInstanceID(1);
185 dataObj.set_ricRequestorID(3);
187 E2APSubscriptionDeleteRequest requestObj(dataObj);
188 bool res = requestObj.encode(buff, &buff_size);
191 std::cout << requestObj.get_error() << std::endl;
198 TEST(E2AP, SubDelResponseEncode)
201 unsigned char buff[1024];
202 size_t buf_len = 1024;
204 E2APSubscriptionDeleteResponse::SubscriptionDeleteResponseIEs infoObj;
205 infoObj.set_ranFunctionID(1);
206 infoObj.set_ricRequestorID(1);
207 infoObj.set_ricInstanceID(1);
210 E2APSubscriptionDeleteResponse subdelObj(infoObj);
212 bool res = subdelObj.encode(buff, &buf_len);
215 std::cout << subdelObj.get_error() << std::endl;
219 pFile = fopen ("subdelresponse1.per","w");
222 fwrite (buff , sizeof(char), buf_len, pFile);
228 TEST(E2AP, SubDelResponseDecode)
231 unsigned char e2ap_buff[1024];
232 char filename[100] = "subdelresponse1.per";
234 fp = fopen(filename,"rb");
239 size_t e2ap_buff_size = fread(e2ap_buff, 1, 1024, fp);
242 fprintf(stderr, "%s: Empty or broken\n", filename);
245 fprintf(stderr, "e2ap buffer size: %ld \n", e2ap_buff_size);
248 bool decode_status = true;
250 E2APSubscriptionDeleteResponse e2obj(&e2ap_buff[0],&e2ap_buff_size);
253 } catch(const char* e){
254 decode_status = false;
255 std::cout << "Error Message: " << e << std::endl;
259 ASSERT_TRUE(decode_status);
263 TEST(E2AP, SubDelFailureEncode){
264 unsigned char buff[1024];
265 size_t buf_len = 1024;
267 CriticalityDiagnosticsIEs crIEs1;
269 crIEs1.set_typeOferror(1);
270 crIEs1.set_iEcriticality(2);
272 CriticalityDiagnosticsIEs crIEs2;
274 crIEs2.set_typeOferror(1);
275 crIEs2.set_iEcriticality(1);
279 E2APCriticalityDiagnostics critObj;
280 critObj.set_procedureCode(10);
281 critObj.set_procedureCriticality(1);
282 critObj.set_ricInstanceID(101);
283 critObj.set_ricRequestorID(102);
284 critObj.set_triggeringMessage(1);
288 E2APSubscriptionDeleteFailure::SubscriptionDeleteFailureIEs infoObj;
289 infoObj.set_ranFunctionID(1);
290 infoObj.set_ricRequestorID(1);
291 infoObj.set_ricInstanceID(1);
292 infoObj.set_ricCause(1);
293 infoObj.set_ricSubCause(2);
294 infoObj.set_critical_diagnostic(critObj);
297 E2APSubscriptionDeleteFailure subdelObj(infoObj);
299 bool res = subdelObj.encode(buff, &buf_len);
302 std::cout << "Subscribtion Delete Failure Error Message" << subdelObj.get_error() << std::endl;
306 pFile = fopen ("subdelfailure2.per","w");
309 fwrite (buff , sizeof(char), buf_len, pFile);
316 TEST(E2AP, SubDelFailureDecode)
319 unsigned char e2ap_buff[1024];
320 char filename[100] = "subdelfailure2.per";
322 fp = fopen(filename,"rb");
327 size_t e2ap_buff_size = fread(e2ap_buff, 1, 1024, fp);
330 fprintf(stderr, "%s: Empty or broken\n", filename);
333 fprintf(stderr, "e2ap buffer size: %ld \n", e2ap_buff_size);
336 bool decode_status = true;
338 E2APSubscriptionDeleteFailure e2obj(&e2ap_buff[0],&e2ap_buff_size);
340 std::cout << "Procedure Code: " << e2obj.getIEs().get_critical_diagnostic()->get_procedureCode() << std::endl;
341 std::cout << "Procedure Criticality: " << e2obj.getIEs().get_critical_diagnostic()->get_procedureCriticality() << std::endl;
342 std::cout << "Size OF LIST :" << e2obj.getIEs().get_critical_diagnostic()->get_list_count() << std::endl;
344 int count = e2obj.getIEs().get_critical_diagnostic()->get_list_count() ;
345 std::vector<CriticalityDiagnosticsIEs> *lst = e2obj.getIEs().get_critical_diagnostic()->get_list();
346 for(int i=0; i< count; i++){
347 std::cout<< "Typ Error:::" << (*lst)[i].get_typeOferror() << std::endl;
348 std::cout<< "iEcriticality:::" << (*lst)[i].get_iEcriticality() << std::endl;
349 std::cout<< "ieID:::" << (*lst)[i].get_ieID() << std::endl;
352 } catch(const char* e){
353 decode_status = false;
354 std::cout << "Error Message: " << e << std::endl;
358 ASSERT_TRUE(decode_status);
362 TEST(E2AP, SubResponseEncode){
363 unsigned char buff[512];
364 size_t buf_len = 512;
366 RICactionAdmittedList::RICactionAdmittedItemIEs tmp1;
367 tmp1.set_ricActionID(1);
369 RICactionAdmittedList admitlst;
371 admitlst.add(RICactionAdmittedList::RICactionAdmittedItemIEs().set_ricActionID(2));
373 RICactionNotAdmittedList::RICactionNotAdmittedItemIEs tmp2;
374 tmp2.set_ricActionID(2);
375 tmp2.set_ricCause(1);
376 tmp2.set_ricSubCause(3);
377 RICactionNotAdmittedList notadmitlst;
378 notadmitlst.add(tmp2);
379 notadmitlst.add(RICactionNotAdmittedList::RICactionNotAdmittedItemIEs().set_ricActionID(2).set_ricCause(1).set_ricSubCause(1));
381 E2APSubscriptionResponse::SubscriptionResponseIEs infoObj;
382 infoObj.set_ranFunctionID(1);
383 infoObj.set_ricRequestorID(1);
384 infoObj.set_ricInstanceID(1);
385 infoObj.set_actionsNotAdmitted_list(notadmitlst);
386 infoObj.set_actionsAdmitted_list(admitlst);
388 E2APSubscriptionResponse subObj(infoObj);
390 bool res = subObj.encode(buff, &buf_len);
393 std::cout << "Subscription Response Error Message" << subObj.get_error() << std::endl;
397 pFile = fopen ("subresponse1.per","w");
400 fwrite (buff , sizeof(char), buf_len, pFile);
405 TEST(E2AP, SubResponseDecode)
408 unsigned char e2ap_buff[1024];
409 char filename[100] = "subresponse2.per";
411 fp = fopen(filename,"rb");
416 size_t e2ap_buff_size = fread(e2ap_buff, 1, 1024, fp);
419 fprintf(stderr, "%s: Empty or broken\n", filename);
422 fprintf(stderr, "e2ap buffer size: %ld \n", e2ap_buff_size);
425 bool decode_status = true;
427 E2APSubscriptionResponse e2obj(&e2ap_buff[0],&e2ap_buff_size);
429 std::cout << "RAN Function ID: " << e2obj.getIEs().get_ranFunctionID() << std::endl;
430 std::cout << "Requestor ID: " << e2obj.getIEs().get_ricRequestorID() << std::endl;
431 std::cout << "Instance ID :" << e2obj.getIEs().get_ricInstanceID() << std::endl;
433 int count = e2obj.getIEs().get_actionsAdmitted_list().get_list_count() ;
434 std::vector<RICactionAdmittedList::RICactionAdmittedItemIEs> *lst = e2obj.getIEs().get_actionsAdmitted_list().get_list();
435 for(int i=0; i< count; i++){
436 std::cout<< "Action ID:::" << (*lst)[i].get_ricActionID() << std::endl;
439 int count2 = e2obj.getIEs().get_actionsNotAdmitted_list().get_list_count() ;
440 std::vector<RICactionNotAdmittedList::RICactionNotAdmittedItemIEs> *lst2 = e2obj.getIEs().get_actionsNotAdmitted_list().get_list();
441 for(int i=0; i< count2; i++){
442 std::cout<< "Action ID:::" << (*lst2)[i].get_ricActionID() << std::endl;
443 std::cout<< "Cause:::" << (*lst2)[i].get_ricCause() << std::endl;
444 std::cout<< "Sub Cause:::" << (*lst2)[i].get_ricSubCause() << std::endl;
447 } catch(const char* e){
448 decode_status = false;
449 std::cout << "Error Message: " << e << std::endl;
453 ASSERT_TRUE(decode_status);
457 TEST(E2AP, SubFailureEncode){
458 unsigned char buff[512];
459 size_t buf_len = 512;
461 CriticalityDiagnosticsIEs crIEs1;
463 crIEs1.set_typeOferror(1);
464 crIEs1.set_iEcriticality(2);
466 CriticalityDiagnosticsIEs crIEs2;
468 crIEs2.set_typeOferror(1);
469 crIEs2.set_iEcriticality(1);
473 E2APCriticalityDiagnostics critObj;
474 critObj.set_procedureCode(10);
475 critObj.set_procedureCriticality(1);
476 critObj.set_ricInstanceID(101);
477 critObj.set_ricRequestorID(102);
478 critObj.set_triggeringMessage(1);
482 RICactionNotAdmittedList::RICactionNotAdmittedItemIEs tmp2;
483 tmp2.set_ricActionID(2);
484 tmp2.set_ricCause(1);
485 tmp2.set_ricSubCause(3);
486 RICactionNotAdmittedList notadmitlst;
487 notadmitlst.add(tmp2);
488 notadmitlst.add(RICactionNotAdmittedList::RICactionNotAdmittedItemIEs().set_ricActionID(2).set_ricCause(1).set_ricSubCause(1));
490 E2APSubscriptionFailure::SubscriptionFailureIEs infoObj;
491 infoObj.set_ranFunctionID(1);
492 infoObj.set_ricRequestorID(1);
493 infoObj.set_ricInstanceID(1);
494 infoObj.set_actionsNotAdmitted_list(notadmitlst);
495 infoObj.set_critical_diagnostic(critObj);
498 E2APSubscriptionFailure subObj(infoObj);
500 bool res = subObj.encode(buff, &buf_len);
503 std::cout << "Subscription Failure Error Message" << subObj.get_error() << std::endl;
507 pFile = fopen ("subfailure1.per","w");
510 fwrite (buff , sizeof(char), buf_len, pFile);
516 TEST(E2AP, SubFailureDecode)
519 unsigned char e2ap_buff[1024];
520 char filename[100] = "subfailure1.per";
522 fp = fopen(filename,"rb");
527 size_t e2ap_buff_size = fread(e2ap_buff, 1, 1024, fp);
530 fprintf(stderr, "%s: Empty or broken\n", filename);
533 fprintf(stderr, "e2ap buffer size: %ld \n", e2ap_buff_size);
536 bool decode_status = true;
538 E2APSubscriptionFailure e2obj(&e2ap_buff[0],&e2ap_buff_size);
540 std::cout << "RAN Function ID: " << e2obj.getIEs().get_ranFunctionID() << std::endl;
541 std::cout << "Requestor ID: " << e2obj.getIEs().get_ricRequestorID() << std::endl;
542 std::cout << "Instance ID :" << e2obj.getIEs().get_ricInstanceID() << std::endl;
543 int count = e2obj.getIEs().get_critical_diagnostic()->get_list_count() ;
544 std::vector<CriticalityDiagnosticsIEs> *lst = e2obj.getIEs().get_critical_diagnostic()->get_list();
545 for(int i=0; i< count; i++){
546 std::cout<< "Typ Error:::" << (*lst)[i].get_typeOferror() << std::endl;
547 std::cout<< "iEcriticality:::" << (*lst)[i].get_iEcriticality() << std::endl;
548 std::cout<< "ieID:::" << (*lst)[i].get_ieID() << std::endl;
551 int count2 = e2obj.getIEs().get_actionsNotAdmitted_list().get_list_count() ;
552 std::vector<RICactionNotAdmittedList::RICactionNotAdmittedItemIEs> *lst2 = e2obj.getIEs().get_actionsNotAdmitted_list().get_list();
553 for(int i=0; i< count2; i++){
554 std::cout<< "Action ID:::" << (*lst2)[i].get_ricActionID() << std::endl;
555 std::cout<< "Cause:::" << (*lst2)[i].get_ricCause() << std::endl;
556 std::cout<< "Sub Cause:::" << (*lst2)[i].get_ricSubCause() << std::endl;
559 } catch(const char* e){
560 decode_status = false;
561 std::cout << "Error Message: " << e << std::endl;
565 ASSERT_TRUE(decode_status);
569 #endif /* TEST_TEST_E2AP_H_ */