Loading TODO.md +18 −2 Original line number Diff line number Diff line Loading @@ -21,6 +21,13 @@ This file provides the list of the TODOs related to the STF 569. ### RNIS Draft ETSI GS MEC 012 2.0.4 https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2 https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2 - TC_MEC_SRV_RNIS_011_OK <font color="color:green">To be tested</font> ### SAQ ### SRVSUB Loading @@ -29,14 +36,23 @@ This file provides the list of the TODOs related to the STF 569. ### TRAF ### TRANS Draft ETSI GS MEC 011 V2.0.9 (2018-10) https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/TRAF/PlatTrafficRules.tplan2 - TC_MEC_SRV_TRANS_001_OK <font color="color:green">To be tested</font> - TC_MEC_SRV_TRAF_001_OK <font color="color:green">To be tested</font> - TC_MEC_SRV_TRAF_002_OK <font color="color:green">To be tested</font> - TC_MEC_SRV_TRAF_003_OK <font color="color:green">To be tested</font> - TC_MEC_SRV_TRAF_001_NF <font color="color:green">To be tested</font> ### TRANS Draft ETSI GS MEC 011 V2.0.9 (2018-10) https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/TRANS/PlatTransport.tplan2 - TC_MEC_SRV_TRANS_001_OK <font color="color:green">To be tested</font> - TP_MEC_SRV_TRAF_001_OK <font color="color:green">To be tested</font> ### UEAREASUB Loading ccsrc/Protocols/Json/json_codec.cc +15 −6 Original line number Diff line number Diff line Loading @@ -58,21 +58,26 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy // ..and create the decoding buffer TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); if (it->second.find("\"userList\"") != std::string::npos) { // Be carefull to the order if (it->second.find("\"userList\"") != std::string::npos) { // Be careful to the order // TODO To be refined, find("\"userList\"") is not optimal LocationAPI__TypesAndValues::UserList user_list; user_list.decode(LocationAPI__TypesAndValues::UserList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.userList() = user_list; } else if (it->second.find("\"accessPointList\"") != std::string::npos) { // Be carefull to the order } else if (it->second.find("\"accessPointList\"") != std::string::npos) { // Be careful to the order // TODO To be refined, find("\"accessPointList\"") is not optimal LocationAPI__TypesAndValues::AccessPointList access_point_list; access_point_list.decode(LocationAPI__TypesAndValues::AccessPointList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.accessPointList() = access_point_list; } else if (it->second.find("\"SubscriptionLinkList\"") != std::string::npos) { // Be carefull to the order } else if (it->second.find("\"SubscriptionLinkList\"") != std::string::npos) { // Be careful to the order // TODO To be refined, find("\"accessPointList\"") is not optimal RnisAPI__TypesAndValues::SubscriptionLinkList subscription_link_list; subscription_link_list.decode(RnisAPI__TypesAndValues::SubscriptionLinkList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.subscriptionLinkList() = subscription_link_list; } else if (it->second.find("\"transportInfoList\"") != std::string::npos) { // Be careful to the order // TODO To be refined, find("\"accessPointList\"") is not optimal AppEnablementAPI__TypesAndValues::TransportInfoList transport_info_list; transport_info_list.decode(AppEnablementAPI__TypesAndValues::TransportInfoList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.transportInfoList() = transport_info_list; } else if (it->second.find("\"userTrackingSubscription\"") != std::string::npos) { LocationAPI__TypesAndValues::UserTrackingSubscription user_tracking_subscription; user_tracking_subscription.decode(LocationAPI__TypesAndValues::UserTrackingSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); Loading @@ -85,6 +90,10 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy UEidentityAPI__TypesAndValues::UeIdentityTagInfo ue_identity_tag_info; ue_identity_tag_info.decode(UEidentityAPI__TypesAndValues::UeIdentityTagInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.ueIdentityTagInfo() = ue_identity_tag_info; } else if (it->second.find("\"trafficRule\"") != std::string::npos) { AppEnablementAPI__TypesAndValues::TrafficRule traffic_rule; traffic_rule.decode(AppEnablementAPI__TypesAndValues::TrafficRule_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.trafficRule() = traffic_rule; } else if (it->second.find("\"bwInfo\"") != std::string::npos) { BwManagementAPI__TypesAndValues::BwInfo bw_info; Loading etc/AtsMec/AtsMec.cfg +19 −7 Original line number Diff line number Diff line Loading @@ -7,21 +7,26 @@ LibCommon_Time.PX_TAC := 30.0 LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0; LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0; LibItsHttp_Pics.PICS_HEADER_HOST := "172.28.4.87" LibItsHttp_Pics.PICS_HEADER_HOST := "192.168.56.1" #LibItsHttp_Pics.PICS_HEADER_HOST := "172.28.4.87" #LibItsHttp_Pics.PICS_HEADER_HOST := "192.168.0.17" LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" LibMec_Pics.PICS_MEC_PLAT := true LibMec_Pics.PICS_SERVICES := true LibMec_Pics.PICS_RNIS := false LibMec_Pics.PICS_RNIS := true LibMec_Pics.PICS_RNIS_ALL_SUBSCRIPTIONS := true LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := false UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := true UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := false BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false AppEnablementAPI_Pics.PICS_ENABLE_APP_API_SUPPORTED := true [LOGGING] # In this section you can specify the name of the log file and the classes of events # you want to log into the file or display on console (standard error). Loading @@ -38,7 +43,7 @@ LogEventTypes:= Yes [TESTPORT_PARAMETERS] # In this section you can specify parameters that are passed to Test Ports. system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.28.4.87,port=8081,use_ssl=0)" system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=192.168.56.1,port=8081,use_ssl=0)" [DEFINE] # In this section you can create macro definitions, Loading Loading @@ -69,7 +74,7 @@ system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.2 #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_NF #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_OK #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_BR AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UELOC_001_OK #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UELOC_001_BR Loading @@ -94,6 +99,13 @@ AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK #AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK #AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK #AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK #AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_NF [GROUPS] # In this section you can specify groups of hosts. These groups can be used inside the # [COMPONENTS] section to restrict the creation of certain PTCs to a given set of hosts. Loading ttcn/AtsMec/AtsMec_AppEnablementAPI_TestCases.ttcn +248 −4 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ module AtsMec_AppEnablementAPI_TestCases { // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_ENABLE_APP_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_API_SUPPORTED required for executing the TC ***"); log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_APP_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } Loading Loading @@ -74,9 +74,8 @@ module AtsMec_AppEnablementAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( mw_body_json_transport_info_list( { *, mw_transport_info, * } ))))) { mw_body_json_transport_info_list )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UeIdentityTag ***"); Loading @@ -94,4 +93,249 @@ module AtsMec_AppEnablementAPI_TestCases { } // End of group transport_info group traffic_rules { /** * @desc Check that the IUT responds with a list of available traffic rules when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/TrafficRules.tplan2 */ testcase TC_MEC_SRV_TRAF_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var HeaderLines v_headers; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_ENABLE_APP_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_APP_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( "/" & PICS_ROOT_API & PX_SVC_MGMT_APP_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules", 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_traffic_rules_list )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UeIdentityTag ***"); 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_SRV_TRAF_001_OK /** * @desc Check that the IUT responds with the information on a specific traffic rule when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/TrafficRules.tplan2 */ testcase TC_MEC_SRV_TRAF_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var HeaderLines v_headers; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_ENABLE_APP_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_APP_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( "/" & PICS_ROOT_API & PX_SVC_MGMT_APP_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_TRAFFIC_RULE_ID, "UTF-8")), 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_traffic_rule( mw_traffic_rule( PX_TRAFFIC_RULE_ID )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UeIdentityTag ***"); 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_SRV_TRAF_002_OK /** * @desc Check that the IUT updates a specific traffic rule when commanded by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/TrafficRules.tplan2 */ testcase TC_MEC_SRV_TRAF_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var HeaderLines v_headers; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_ENABLE_APP_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_APP_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_post( "/" & PICS_ROOT_API & PX_SVC_MGMT_APP_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_TRAFFIC_RULE_ID, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_traffic_rule( m_traffic_rule( PX_TRAFFIC_RULE_ID, -, -, -, DROP ) ) ) ) ) ); 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_traffic_rule( mw_traffic_rule( PX_TRAFFIC_RULE_ID )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UeIdentityTag ***"); 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_SRV_TRAF_003_OK /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/TrafficRules.tplan2 */ testcase TC_MEC_SRV_TRAF_001_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var HeaderLines v_headers; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_ENABLE_APP_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_APP_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( "/" & PICS_ROOT_API & PX_SVC_MGMT_APP_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules", v_headers ) ) ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] httpPort.receive( mw_http_response( mw_http_response_404_not_found( mw_http_message_body_json( mw_body_json_app_enablement_problem_details( mw_problem_details( -, -, 404 )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UeIdentityTag ***"); 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_SRV_TRAF_001_NF } // End of group traffic_rules } // End of module AtsMec_AppEnablementAPI_TestCases ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn +19 −10 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ * 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 003, Draft ETSI GS MEC 013 V2.0.3 (2018-10) * @see ETSI GS MEC 003, Draft ETSI GS MEC 012 V2.0.3 (2018-10) */ module AtsMec_RnisAPI_TestCases { Loading @@ -34,14 +34,23 @@ module AtsMec_RnisAPI_TestCases { import from LibMec_Pics all; import from LibMec_Pixits all; group me_app_role { group rnis { /** * @desc Check that the RNIS service sends all RNIS subscriptions when requested * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/App/Mp1/Rnis/RnisAllSubscriptions_BV.tplan2 * @see * @desc Check that the RNIS service sends the list of links to the relevant RNIS subscriptions when requested. * Acceptable SUBSCRIPTION_TYPE are the following: * - CellChangeSubscription * - RabEstSubscription * - RabModSubscription * - RabRelSubscription * - MeasRepUeSubscription * - MeasTaSubscription * - CaReconfSubscription * - S1BearerSubscription * - NrMeasRepUeSubscription" * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2 */ testcase TC_MEC025_RNIS_SUBSCRIPTION_005() runs on HttpComponent system HttpTestAdapter { testcase TC_MEC_SRV_RNIS_011_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var HeaderLines v_headers; var HttpMessage v_response; Loading @@ -63,7 +72,7 @@ module AtsMec_RnisAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( PX_RNIS_SUBSCRITIONS_URI, "/" & PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & "?subscription_type=" & oct2char(unichar2oct(PX_SUBSCRIPTION_TYPE, "UTF-8")), v_headers ) ) Loading @@ -80,7 +89,7 @@ module AtsMec_RnisAPI_TestCases { mw_body_json_subscriptions_list( mw_subscriptions_list( PX_LINKS_SELF, ? { *, mw_subscription(-, CELL_CHANGE), * } )))))) -> value v_response { tc_ac.stop; Loading @@ -95,9 +104,9 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC025_RNIS_SUBSCRIPTION_005 } // End of testcase TC_MEC_SRV_RNIS_011_OK } // End of group me_app_role } // End of group rnis } // End of module AtsMec_RnisAPI_TestCases Loading
TODO.md +18 −2 Original line number Diff line number Diff line Loading @@ -21,6 +21,13 @@ This file provides the list of the TODOs related to the STF 569. ### RNIS Draft ETSI GS MEC 012 2.0.4 https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2 https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2 - TC_MEC_SRV_RNIS_011_OK <font color="color:green">To be tested</font> ### SAQ ### SRVSUB Loading @@ -29,14 +36,23 @@ This file provides the list of the TODOs related to the STF 569. ### TRAF ### TRANS Draft ETSI GS MEC 011 V2.0.9 (2018-10) https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/TRAF/PlatTrafficRules.tplan2 - TC_MEC_SRV_TRANS_001_OK <font color="color:green">To be tested</font> - TC_MEC_SRV_TRAF_001_OK <font color="color:green">To be tested</font> - TC_MEC_SRV_TRAF_002_OK <font color="color:green">To be tested</font> - TC_MEC_SRV_TRAF_003_OK <font color="color:green">To be tested</font> - TC_MEC_SRV_TRAF_001_NF <font color="color:green">To be tested</font> ### TRANS Draft ETSI GS MEC 011 V2.0.9 (2018-10) https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/TRANS/PlatTransport.tplan2 - TC_MEC_SRV_TRANS_001_OK <font color="color:green">To be tested</font> - TP_MEC_SRV_TRAF_001_OK <font color="color:green">To be tested</font> ### UEAREASUB Loading
ccsrc/Protocols/Json/json_codec.cc +15 −6 Original line number Diff line number Diff line Loading @@ -58,21 +58,26 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy // ..and create the decoding buffer TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); if (it->second.find("\"userList\"") != std::string::npos) { // Be carefull to the order if (it->second.find("\"userList\"") != std::string::npos) { // Be careful to the order // TODO To be refined, find("\"userList\"") is not optimal LocationAPI__TypesAndValues::UserList user_list; user_list.decode(LocationAPI__TypesAndValues::UserList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.userList() = user_list; } else if (it->second.find("\"accessPointList\"") != std::string::npos) { // Be carefull to the order } else if (it->second.find("\"accessPointList\"") != std::string::npos) { // Be careful to the order // TODO To be refined, find("\"accessPointList\"") is not optimal LocationAPI__TypesAndValues::AccessPointList access_point_list; access_point_list.decode(LocationAPI__TypesAndValues::AccessPointList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.accessPointList() = access_point_list; } else if (it->second.find("\"SubscriptionLinkList\"") != std::string::npos) { // Be carefull to the order } else if (it->second.find("\"SubscriptionLinkList\"") != std::string::npos) { // Be careful to the order // TODO To be refined, find("\"accessPointList\"") is not optimal RnisAPI__TypesAndValues::SubscriptionLinkList subscription_link_list; subscription_link_list.decode(RnisAPI__TypesAndValues::SubscriptionLinkList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.subscriptionLinkList() = subscription_link_list; } else if (it->second.find("\"transportInfoList\"") != std::string::npos) { // Be careful to the order // TODO To be refined, find("\"accessPointList\"") is not optimal AppEnablementAPI__TypesAndValues::TransportInfoList transport_info_list; transport_info_list.decode(AppEnablementAPI__TypesAndValues::TransportInfoList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.transportInfoList() = transport_info_list; } else if (it->second.find("\"userTrackingSubscription\"") != std::string::npos) { LocationAPI__TypesAndValues::UserTrackingSubscription user_tracking_subscription; user_tracking_subscription.decode(LocationAPI__TypesAndValues::UserTrackingSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); Loading @@ -85,6 +90,10 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy UEidentityAPI__TypesAndValues::UeIdentityTagInfo ue_identity_tag_info; ue_identity_tag_info.decode(UEidentityAPI__TypesAndValues::UeIdentityTagInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.ueIdentityTagInfo() = ue_identity_tag_info; } else if (it->second.find("\"trafficRule\"") != std::string::npos) { AppEnablementAPI__TypesAndValues::TrafficRule traffic_rule; traffic_rule.decode(AppEnablementAPI__TypesAndValues::TrafficRule_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.trafficRule() = traffic_rule; } else if (it->second.find("\"bwInfo\"") != std::string::npos) { BwManagementAPI__TypesAndValues::BwInfo bw_info; Loading
etc/AtsMec/AtsMec.cfg +19 −7 Original line number Diff line number Diff line Loading @@ -7,21 +7,26 @@ LibCommon_Time.PX_TAC := 30.0 LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0; LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0; LibItsHttp_Pics.PICS_HEADER_HOST := "172.28.4.87" LibItsHttp_Pics.PICS_HEADER_HOST := "192.168.56.1" #LibItsHttp_Pics.PICS_HEADER_HOST := "172.28.4.87" #LibItsHttp_Pics.PICS_HEADER_HOST := "192.168.0.17" LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" LibMec_Pics.PICS_MEC_PLAT := true LibMec_Pics.PICS_SERVICES := true LibMec_Pics.PICS_RNIS := false LibMec_Pics.PICS_RNIS := true LibMec_Pics.PICS_RNIS_ALL_SUBSCRIPTIONS := true LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := false UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := true UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := false BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false AppEnablementAPI_Pics.PICS_ENABLE_APP_API_SUPPORTED := true [LOGGING] # In this section you can specify the name of the log file and the classes of events # you want to log into the file or display on console (standard error). Loading @@ -38,7 +43,7 @@ LogEventTypes:= Yes [TESTPORT_PARAMETERS] # In this section you can specify parameters that are passed to Test Ports. system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.28.4.87,port=8081,use_ssl=0)" system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=192.168.56.1,port=8081,use_ssl=0)" [DEFINE] # In this section you can create macro definitions, Loading Loading @@ -69,7 +74,7 @@ system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.2 #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_NF #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_OK #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_BR AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UELOC_001_OK #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UELOC_001_BR Loading @@ -94,6 +99,13 @@ AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK #AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK #AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK #AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK #AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_NF [GROUPS] # In this section you can specify groups of hosts. These groups can be used inside the # [COMPONENTS] section to restrict the creation of certain PTCs to a given set of hosts. Loading
ttcn/AtsMec/AtsMec_AppEnablementAPI_TestCases.ttcn +248 −4 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ module AtsMec_AppEnablementAPI_TestCases { // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_ENABLE_APP_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_API_SUPPORTED required for executing the TC ***"); log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_APP_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } Loading Loading @@ -74,9 +74,8 @@ module AtsMec_AppEnablementAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( mw_body_json_transport_info_list( { *, mw_transport_info, * } ))))) { mw_body_json_transport_info_list )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UeIdentityTag ***"); Loading @@ -94,4 +93,249 @@ module AtsMec_AppEnablementAPI_TestCases { } // End of group transport_info group traffic_rules { /** * @desc Check that the IUT responds with a list of available traffic rules when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/TrafficRules.tplan2 */ testcase TC_MEC_SRV_TRAF_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var HeaderLines v_headers; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_ENABLE_APP_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_APP_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( "/" & PICS_ROOT_API & PX_SVC_MGMT_APP_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules", 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_traffic_rules_list )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UeIdentityTag ***"); 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_SRV_TRAF_001_OK /** * @desc Check that the IUT responds with the information on a specific traffic rule when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/TrafficRules.tplan2 */ testcase TC_MEC_SRV_TRAF_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var HeaderLines v_headers; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_ENABLE_APP_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_APP_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( "/" & PICS_ROOT_API & PX_SVC_MGMT_APP_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_TRAFFIC_RULE_ID, "UTF-8")), 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_traffic_rule( mw_traffic_rule( PX_TRAFFIC_RULE_ID )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UeIdentityTag ***"); 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_SRV_TRAF_002_OK /** * @desc Check that the IUT updates a specific traffic rule when commanded by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/TrafficRules.tplan2 */ testcase TC_MEC_SRV_TRAF_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var HeaderLines v_headers; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_ENABLE_APP_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_APP_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_post( "/" & PICS_ROOT_API & PX_SVC_MGMT_APP_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_TRAFFIC_RULE_ID, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_traffic_rule( m_traffic_rule( PX_TRAFFIC_RULE_ID, -, -, -, DROP ) ) ) ) ) ); 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_traffic_rule( mw_traffic_rule( PX_TRAFFIC_RULE_ID )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UeIdentityTag ***"); 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_SRV_TRAF_003_OK /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/TrafficRules.tplan2 */ testcase TC_MEC_SRV_TRAF_001_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var HeaderLines v_headers; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_ENABLE_APP_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_APP_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( "/" & PICS_ROOT_API & PX_SVC_MGMT_APP_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules", v_headers ) ) ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] httpPort.receive( mw_http_response( mw_http_response_404_not_found( mw_http_message_body_json( mw_body_json_app_enablement_problem_details( mw_problem_details( -, -, 404 )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UeIdentityTag ***"); 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_SRV_TRAF_001_NF } // End of group traffic_rules } // End of module AtsMec_AppEnablementAPI_TestCases
ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn +19 −10 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ * 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 003, Draft ETSI GS MEC 013 V2.0.3 (2018-10) * @see ETSI GS MEC 003, Draft ETSI GS MEC 012 V2.0.3 (2018-10) */ module AtsMec_RnisAPI_TestCases { Loading @@ -34,14 +34,23 @@ module AtsMec_RnisAPI_TestCases { import from LibMec_Pics all; import from LibMec_Pixits all; group me_app_role { group rnis { /** * @desc Check that the RNIS service sends all RNIS subscriptions when requested * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/App/Mp1/Rnis/RnisAllSubscriptions_BV.tplan2 * @see * @desc Check that the RNIS service sends the list of links to the relevant RNIS subscriptions when requested. * Acceptable SUBSCRIPTION_TYPE are the following: * - CellChangeSubscription * - RabEstSubscription * - RabModSubscription * - RabRelSubscription * - MeasRepUeSubscription * - MeasTaSubscription * - CaReconfSubscription * - S1BearerSubscription * - NrMeasRepUeSubscription" * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2 */ testcase TC_MEC025_RNIS_SUBSCRIPTION_005() runs on HttpComponent system HttpTestAdapter { testcase TC_MEC_SRV_RNIS_011_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var HeaderLines v_headers; var HttpMessage v_response; Loading @@ -63,7 +72,7 @@ module AtsMec_RnisAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( PX_RNIS_SUBSCRITIONS_URI, "/" & PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & "?subscription_type=" & oct2char(unichar2oct(PX_SUBSCRIPTION_TYPE, "UTF-8")), v_headers ) ) Loading @@ -80,7 +89,7 @@ module AtsMec_RnisAPI_TestCases { mw_body_json_subscriptions_list( mw_subscriptions_list( PX_LINKS_SELF, ? { *, mw_subscription(-, CELL_CHANGE), * } )))))) -> value v_response { tc_ac.stop; Loading @@ -95,9 +104,9 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC025_RNIS_SUBSCRIPTION_005 } // End of testcase TC_MEC_SRV_RNIS_011_OK } // End of group me_app_role } // End of group rnis } // End of module AtsMec_RnisAPI_TestCases