Loading ccsrc/Protocols/Json/json_codec.cc +14 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,10 @@ int json_codec::encode (const LibItsHttp__JsonMessageBodyTypes::JsonBody& msg, O const TrafficManagementAPI__TypesAndValues::BwInfo& bw_info = msg.bwInfo(); bw_info.encode(TrafficManagementAPI__TypesAndValues::BwInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_mtsSessionInfo)) { const TrafficManagementAPI__TypesAndValues::MtsSessionInfo& mts_session_info = msg.mtsSessionInfo(); mts_session_info.encode(TrafficManagementAPI__TypesAndValues::MtsSessionInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else { loggers::get_instance().error("json_codec::encode: Not supported"); } Loading Loading @@ -395,6 +399,16 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy bw_info.decode(TrafficManagementAPI__TypesAndValues::BwInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); msg.bwInfo() = bw_info; } } else if ((it->second.find("\"mtsCapabilityInfo\"") != std::string::npos) || (it->second.find("\"mtsAccessInfo\"") != std::string::npos)) { TrafficManagementAPI__TypesAndValues::MtsCapabilityInfo mts_cap_info; TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); mts_cap_info.decode(TrafficManagementAPI__TypesAndValues::MtsCapabilityInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); msg.mtsCapabilityInfo() = mts_cap_info; } else if ((it->second.find("\"mtsSessionInfo\"") != std::string::npos) || (it->second.find("\"mtsMode\"") != std::string::npos)) { TrafficManagementAPI__TypesAndValues::MtsSessionInfo mts_session_info; TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); mts_session_info.decode(TrafficManagementAPI__TypesAndValues::MtsSessionInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); msg.mtsSessionInfo() = mts_session_info; } else if (it->second.find("\"detail\"") != std::string::npos) { LibMec__TypesAndValues::ProblemDetails problem_details; problem_details.decode(LibMec__TypesAndValues::ProblemDetails_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); Loading ttcn/AtsMec/AtsMec_V2XInformationServiceAPI_TestCases.ttcn 0 → 100644 +104 −0 Original line number Diff line number Diff line /** * @author ETSI / TTF T012 * @version $URL:$ * $ID:$ * @desc This module provides the MEC test cases. * @copyright ETSI Copyright Notification * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. * @see ETSI GS MEC 002, Draft ETSI GS MEC 030 V2.1.1 (2020-04) */ module AtsMec_V2XInformationServiceAPI_TestCases { // JSON import from JSON all; // Libcommon import from LibCommon_Time all; import from LibCommon_VerdictControl all; import from LibCommon_Sync all; // LibHttp import from LibItsHttp_TypesAndValues all; import from LibItsHttp_Functions all; import from LibItsHttp_Templates all; import from LibItsHttp_JsonTemplates all; import from LibItsHttp_TestSystem all; // LibMec/V2XInformationServiceAPI import from V2XInformationServiceAPI_TypesAndValues all; import from V2XInformationServiceAPI_Pics all; import from V2XInformationServiceAPI_Pixits all; import from V2XInformationServiceAPI_Templates all; // LibMec import from LibMec_Templates all; import from LibMec_Functions all; import from LibMec_Pics all; import from LibMec_Pixits all; group me_app_role { /** * @desc Check that the IUT responds with a configured provisioning information over Uu unicast when queried by a MEC Application * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ testcase TC_MEC_MEC030_SRV_V2X_001_OK_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; // Test control if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf_01_http_up(); // Test adapter configuration // Preamble f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_get( PX_ME_V2X_QUERIES_URI & "/uu_unicast_provisioning_info?location_info=" & PX_V2X_ECGI, v_headers ) ) ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] httpPort.receive( mw_http_response( mw_http_response_ok( mw_http_message_body_json( mw_body_json_uu_unicast_provisioning_info( mw_uu_unicast_provisioning_info ))))) -> value v_response { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UuUnicastProvisioningInfo ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_001_OK_01 } // End of group me_app_role } // End of module AtsMec_V2XInformationServiceAPI_TestCases ttcn/AtsMec/module.mk +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ sources := \ AtsMec_TestControl.ttcn \ AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ AtsMec_UEidentityAPI_TestCases.ttcn \ AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ # AtsMec_MeoPkgm_TestCases.ttcn \ # AtsMec_MepmPkgm_TestCases.ttcn \ # AtsMec_FixedAccessInfoAPI_TestCases.ttcn \ Loading ttcn/LibMec/V2XInformationService/module.mk +5 −1 Original line number Diff line number Diff line sources := \ ttcn/V2XInformationService_TypesAndValues.ttcn ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn \ ttcn/V2XInformationServiceAPI_Pics.ttcn \ ttcn/V2XInformationServiceAPI_Pixits.ttcn \ ttcn/V2XInformationServiceAPI_Templates.ttcn \ ttcn/LibMec/V2XInformationService/ttcn/V2XInformationServiceAPI_Pics.ttcn 0 → 100644 +8 −0 Original line number Diff line number Diff line module V2XInformationServiceAPI_Pics { /** * @desc Does the IUT support V2XInformationServiceAPI? */ modulepar boolean PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED := true; } // End of module V2XInformationServiceAPI_Pics Loading
ccsrc/Protocols/Json/json_codec.cc +14 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,10 @@ int json_codec::encode (const LibItsHttp__JsonMessageBodyTypes::JsonBody& msg, O const TrafficManagementAPI__TypesAndValues::BwInfo& bw_info = msg.bwInfo(); bw_info.encode(TrafficManagementAPI__TypesAndValues::BwInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_mtsSessionInfo)) { const TrafficManagementAPI__TypesAndValues::MtsSessionInfo& mts_session_info = msg.mtsSessionInfo(); mts_session_info.encode(TrafficManagementAPI__TypesAndValues::MtsSessionInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else { loggers::get_instance().error("json_codec::encode: Not supported"); } Loading Loading @@ -395,6 +399,16 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy bw_info.decode(TrafficManagementAPI__TypesAndValues::BwInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); msg.bwInfo() = bw_info; } } else if ((it->second.find("\"mtsCapabilityInfo\"") != std::string::npos) || (it->second.find("\"mtsAccessInfo\"") != std::string::npos)) { TrafficManagementAPI__TypesAndValues::MtsCapabilityInfo mts_cap_info; TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); mts_cap_info.decode(TrafficManagementAPI__TypesAndValues::MtsCapabilityInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); msg.mtsCapabilityInfo() = mts_cap_info; } else if ((it->second.find("\"mtsSessionInfo\"") != std::string::npos) || (it->second.find("\"mtsMode\"") != std::string::npos)) { TrafficManagementAPI__TypesAndValues::MtsSessionInfo mts_session_info; TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); mts_session_info.decode(TrafficManagementAPI__TypesAndValues::MtsSessionInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); msg.mtsSessionInfo() = mts_session_info; } else if (it->second.find("\"detail\"") != std::string::npos) { LibMec__TypesAndValues::ProblemDetails problem_details; problem_details.decode(LibMec__TypesAndValues::ProblemDetails_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); Loading
ttcn/AtsMec/AtsMec_V2XInformationServiceAPI_TestCases.ttcn 0 → 100644 +104 −0 Original line number Diff line number Diff line /** * @author ETSI / TTF T012 * @version $URL:$ * $ID:$ * @desc This module provides the MEC test cases. * @copyright ETSI Copyright Notification * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. * @see ETSI GS MEC 002, Draft ETSI GS MEC 030 V2.1.1 (2020-04) */ module AtsMec_V2XInformationServiceAPI_TestCases { // JSON import from JSON all; // Libcommon import from LibCommon_Time all; import from LibCommon_VerdictControl all; import from LibCommon_Sync all; // LibHttp import from LibItsHttp_TypesAndValues all; import from LibItsHttp_Functions all; import from LibItsHttp_Templates all; import from LibItsHttp_JsonTemplates all; import from LibItsHttp_TestSystem all; // LibMec/V2XInformationServiceAPI import from V2XInformationServiceAPI_TypesAndValues all; import from V2XInformationServiceAPI_Pics all; import from V2XInformationServiceAPI_Pixits all; import from V2XInformationServiceAPI_Templates all; // LibMec import from LibMec_Templates all; import from LibMec_Functions all; import from LibMec_Pics all; import from LibMec_Pixits all; group me_app_role { /** * @desc Check that the IUT responds with a configured provisioning information over Uu unicast when queried by a MEC Application * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ testcase TC_MEC_MEC030_SRV_V2X_001_OK_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; // Test control if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf_01_http_up(); // Test adapter configuration // Preamble f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_get( PX_ME_V2X_QUERIES_URI & "/uu_unicast_provisioning_info?location_info=" & PX_V2X_ECGI, v_headers ) ) ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] httpPort.receive( mw_http_response( mw_http_response_ok( mw_http_message_body_json( mw_body_json_uu_unicast_provisioning_info( mw_uu_unicast_provisioning_info ))))) -> value v_response { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UuUnicastProvisioningInfo ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_001_OK_01 } // End of group me_app_role } // End of module AtsMec_V2XInformationServiceAPI_TestCases
ttcn/AtsMec/module.mk +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ sources := \ AtsMec_TestControl.ttcn \ AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ AtsMec_UEidentityAPI_TestCases.ttcn \ AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ # AtsMec_MeoPkgm_TestCases.ttcn \ # AtsMec_MepmPkgm_TestCases.ttcn \ # AtsMec_FixedAccessInfoAPI_TestCases.ttcn \ Loading
ttcn/LibMec/V2XInformationService/module.mk +5 −1 Original line number Diff line number Diff line sources := \ ttcn/V2XInformationService_TypesAndValues.ttcn ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn \ ttcn/V2XInformationServiceAPI_Pics.ttcn \ ttcn/V2XInformationServiceAPI_Pixits.ttcn \ ttcn/V2XInformationServiceAPI_Templates.ttcn \
ttcn/LibMec/V2XInformationService/ttcn/V2XInformationServiceAPI_Pics.ttcn 0 → 100644 +8 −0 Original line number Diff line number Diff line module V2XInformationServiceAPI_Pics { /** * @desc Does the IUT support V2XInformationServiceAPI? */ modulepar boolean PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED := true; } // End of module V2XInformationServiceAPI_Pics