diff --git a/.jenkins.sh b/.jenkins.sh index 1ebaacfb5675eedd53271520e158156afb1cbd32..344abf1b5f044e385cfb14cae69a037b72af4ce2 100755 --- a/.jenkins.sh +++ b/.jenkins.sh @@ -1,19 +1,22 @@ #!/bin/bash -# Copyright ETSI 2018 +# Copyright ETSI 2018-2021 # See: https://forge.etsi.org/etsi-forge-copyright-statement.txt -#set -vx +set -vx #set -e -cd "$(dirname "$0")" +cd $(dirname $0) -cd ./docker -run_dir="$(pwd)" +run_dir=`pwd` -./build.sh +# Docker version 2 +cd ./virtualization/docker +./build.sh #--force-stfubuntu #./run.sh -cd - - -exit 0 +if [ "$1" == "--remove" ] +then + docker rmi --force ttf_t012_mec:latest +fi +cd - diff --git a/README.md b/README.md index 10623022c7381b36f66a2894c98c44ab1c56f321..add809b586b221abe9eb0b7e55d0a905306a1888 100644 --- a/README.md +++ b/README.md @@ -204,10 +204,24 @@ Procedure: - Clone the ETSI MEC Testing Framework project into $HOME/dev folder ```sh -$ git clone +$ git clone --recurse-submodules --branch TTF012_Mec https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git ./TTF012_Mec +$ cd /home/etsi/dev/TTF012_Mec/ttcn/LibIts +$ rm -fr t3q +$ cd ttcn && rm -fr Common ``` -- Update your default environment with the content of the script $HOME/dev/STF569_Mec/scripts/devenv.bash.ubuntu +- Apply patches + +```sh +$ cd /home/etsi/dev/TTF012_Mec +$ cp ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ +$ cp ./ttcn/patch_lib_common_titan/*.ttcn ./ttcn/LibCommon/ +$ cp ./ttcn/patch_lib_http/*.ttcn ./ttcn/LibIts/ttcn/Http/ +$ cp ./ttcn/patch_lib_its/module.mk ./ttcn/LibIts/ +``` + +- Update your default environment with the content of the script $HOME/dev/TTF012_Mec/scripts/devenv.bash.ubuntu + - Switch to the next clause (Usage) @@ -224,16 +238,17 @@ Procedure using Eclipse TITAN: - Start eclipse using a new workspace, (e.g. with the name workspace_titan) - Download and follow the steps to install Eclipse plugins for TITAN, accessible [here]{https://www.eclipse.org/downloads/download.php?file=/titan/Eclipse_installationguide.pdf} - Open the workspace_titan -- Create a new TITAN project (e.g. STF569_Mec) +- Create a new TITAN project (e.g. TTF012_Mec) Procedure in TITAN command line: - Open several SSH session (PuTTY...) -- Change to the directory ~/dev/STF569_Mec/src/AtsMec/objs +- Change to the directory ~/dev/TTF012_Mec/src/AtsMec/objs - Build the test suite AtsMec ```sh -$ ../bin/mec_generate_makefile.bash +$ cd ~/dev/TTF012_Mec/ && export ATS=AtsMec +$ make ... ``` @@ -244,7 +259,8 @@ $ ../bin/mec_generate_makefile.bash - To run the test suite, execute the following command: ```sh -$ ../bin/run-all.bash +$ cd ~/dev/TTF012_Mec/scripts/ +$ ./run-all.bash ... ``` diff --git a/ccsrc/Framework/include/params.hh b/ccsrc/Framework/include/params.hh index e30b97b1e3ee041247d603dba68e42ec2b429e77..046fd725df301eb0db6ae9b4e48bda813b8f6a78 100644 --- a/ccsrc/Framework/include/params.hh +++ b/ccsrc/Framework/include/params.hh @@ -81,6 +81,8 @@ public: //! \publicsection static const std::string& server; //! HTTP server address (e.g. www.etsi.org) static const std::string& port; //! HTTP server port. Default: 80 static const std::string& use_ssl; //! Set to 1 to use SSL to communicate with the HTTP server. Default: false + static const std::string& mutual_auth; //! Set to 1 to use mutual authentication. Default: false + static const std::string& trusted_ca_list; //! List of trusted CA certificates static const std::string& server_mode; //! Does the test sytem acting as a server. Default: 0 static const std::string& local_port; //! Local listener port. Default: 80 diff --git a/ccsrc/Framework/src/params.cc b/ccsrc/Framework/src/params.cc index 8b82e9e9846c5f682b6f29658ab277847cd4174b..d35f551f8194f0716325762543ca930fa01e1f13 100644 --- a/ccsrc/Framework/src/params.cc +++ b/ccsrc/Framework/src/params.cc @@ -73,6 +73,8 @@ const std::string& params::interface_id = std::string("interface_id"); const std::string& params::server = std::string("server"); const std::string& params::port = std::string("port"); const std::string& params::use_ssl = std::string("use_ssl"); +const std::string& params::mutual_auth = std::string("mutual_auth"); +const std::string& params::trusted_ca_list = std::string("trusted_ca_list"); const std::string& params::server_mode = std::string("server_mode"); const std::string& params::local_port = std::string("local_port"); diff --git a/ccsrc/Protocols/Http/http_codec.cc b/ccsrc/Protocols/Http/http_codec.cc index 1d997fe9565efa4aed62b6db7b5ba418226af8e8..9e633bab88c9c3e529aa759f4c2380d9af46846d 100644 --- a/ccsrc/Protocols/Http/http_codec.cc +++ b/ccsrc/Protocols/Http/http_codec.cc @@ -57,6 +57,7 @@ int http_codec::decode (const OCTETSTRING& data, LibItsHttp__TypesAndValues::Htt return -1; } loggers::get_instance().log_msg("http_codec::decode: message_id: ", message_id); + // Extract parameters try { std::string str(static_cast(message_id)); @@ -535,7 +536,7 @@ int http_codec::decode_body(TTCN_Buffer& decoding_buffer, LibItsHttp__MessageBod } loggers::get_instance().log("http_codec::decode_body: counter=%d", counter); body = OCTETSTRING(body.lengthof() - counter, static_cast(body)); - if (_dc.chunked){ + if (_dc.chunked) { int counter = 0; int prev = 0; OCTETSTRING os(0, nullptr); @@ -555,6 +556,14 @@ int http_codec::decode_body(TTCN_Buffer& decoding_buffer, LibItsHttp__MessageBod loggers::get_instance().log("http_codec::decode_body: str: '%s'", str.c_str()); int len = std::stoi(str, nullptr, 16);//converter::get_instance().string_to_int(str); loggers::get_instance().log("http_codec::decode_body: Chunk len: %d", len); + if (len > body.lengthof()) { // Missing data :( + loggers::get_instance().warning("http_codec::decode_body: Missing data and chunked mode"); + _params->insert(std::pair("missing_data", "1")); + _params->log(); + OCTETSTRING raw_trunk(len, idx + static_cast(body)); + loggers::get_instance().log_msg("http_codec::decode_body: raw_trunk: ", raw_trunk); + return -1; + } while (counter < body.lengthof() && ((body[counter].get_octet() == '\r') || (body[counter].get_octet() == '\n'))) { // Skip additional \n counter += 1; } // End of 'while' statement diff --git a/ccsrc/Protocols/Http/http_layer.cc b/ccsrc/Protocols/Http/http_layer.cc index 6602d69ce07d8f242501718e37e5a93cbcae1cae..33c83512409ed55615397b4fd6641f780cdc8e5e 100644 --- a/ccsrc/Protocols/Http/http_layer.cc +++ b/ccsrc/Protocols/Http/http_layer.cc @@ -11,7 +11,7 @@ using namespace std; // Required for isnan() #include "LibItsHttp_TypesAndValues.hh" #include "LibItsHttp_TestSystem.hh" -http_layer::http_layer(const std::string & p_type, const std::string & param) : t_layer(p_type), _params(), _device_mode{false} +http_layer::http_layer(const std::string & p_type, const std::string & param) : t_layer(p_type), _params(), _device_mode{false}, _stream_buffer(0, NULL) { loggers::get_instance().log(">>> http_layer::http_layer: %s, %s", to_string().c_str(), param.c_str()); // Setup parameters @@ -83,12 +83,37 @@ void http_layer::send_data(OCTETSTRING& data, params& params) { void http_layer::receive_data(OCTETSTRING& data, params& params) { loggers::get_instance().log_msg(">>> http_layer::receive_data: ", data); + loggers::get_instance().log_msg(">>> http_layer::receive_data: _stream_buffer= ", _stream_buffer); // Decode HTTP message LibItsHttp__TypesAndValues::HttpMessage http_message; - if (_codec.decode(data, http_message) == -1) { - loggers::get_instance().warning("http_layer::receive_data: Failed to decode data"); - return; + if (!_stream_buffer.is_bound() || (_stream_buffer.lengthof() == 0)) { + if (data.lengthof() < 6) { // 'HTTP/' or 'GET /' + loggers::get_instance().warning("http_layer::receive_data: Inconsistant buffer length"); + return; + } + if (_codec.decode(data, http_message, ¶ms) == -1) { + loggers::get_instance().warning("http_layer::receive_data (0): Failed to decode data"); + return; + } + } else { // First chunk is received + loggers::get_instance().warning("http_layer::receive_data: #######################################"); + _stream_buffer += data; + if (_codec.decode(_stream_buffer, http_message, ¶ms) == -1) { + loggers::get_instance().warning("http_layer::receive_data (1): Failed to decode data"); + return; + } + } + params::const_iterator it = params.find("missing_data"); + if (it != params.cend()) { // Transport layer didn't reassemble chunks, keep current state and wait for the next chunk + // Store data and wait for the next stream + loggers::get_instance().warning("http_layer::receive_data: Missing data, save current stream"); + _stream_buffer += data; + return; // Terminate here + } else { + // Reset stream buffer and continue + loggers::get_instance().log("http_layer::receive_data: Reset stream buffer"); + _stream_buffer.clean_up(); } if (_device_mode) { OCTETSTRING os; @@ -120,8 +145,8 @@ void http_layer::receive_data(OCTETSTRING& data, params& params) loggers::get_instance().warning("http_layer::receive_data: An HTTP response is expected"); } } else { - // Pass it to the ports - to_all_upper_ports(http_message, params); + // Pass it to the ports + to_all_upper_ports(http_message, params); } } diff --git a/ccsrc/Protocols/Http/http_layer.hh b/ccsrc/Protocols/Http/http_layer.hh index ea55368bc84829274f8a6d7d27316f2e527cd640..d22dfea55ac340c93638363f9e5ace4359a35bb2 100644 --- a/ccsrc/Protocols/Http/http_layer.hh +++ b/ccsrc/Protocols/Http/http_layer.hh @@ -34,6 +34,7 @@ class http_layer : public t_layer { params _params; http_codec _codec; bool _device_mode; + OCTETSTRING _stream_buffer; public: //! \publicsection /*! diff --git a/ccsrc/Protocols/Json/json_codec.cc b/ccsrc/Protocols/Json/json_codec.cc index c3ef42be000663bc03af438a86a1e86d27811244..06ee679d464c9c42f807483e96bcc4b927d63d05 100644 --- a/ccsrc/Protocols/Json/json_codec.cc +++ b/ccsrc/Protocols/Json/json_codec.cc @@ -23,46 +23,50 @@ int json_codec::encode (const LibItsHttp__JsonMessageBodyTypes::JsonBody& msg, O } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_userTrackingSubscription)) { const LocationAPI__TypesAndValues::UserTrackingSubscription& user_tracking_subscription = msg.userTrackingSubscription(); user_tracking_subscription.encode(LocationAPI__TypesAndValues::UserTrackingSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = /*char2oct(CHARSTRING("{\"userTrackingSubscription\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + data = char2oct(CHARSTRING("{\"userTrackingSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); + } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_periodicNotificationSubscription)) { + const LocationAPI__TypesAndValues::PeriodicNotificationSubscription& periodic_notification_subscription = msg.periodicNotificationSubscription(); + periodic_notification_subscription.encode(LocationAPI__TypesAndValues::PeriodicNotificationSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = char2oct(CHARSTRING("{\"periodicNotificationSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_zonalTrafficSubscription)) { const LocationAPI__TypesAndValues::ZonalTrafficSubscription& zonal_traffic_subscription = msg.zonalTrafficSubscription(); zonal_traffic_subscription.encode(LocationAPI__TypesAndValues::ZonalTrafficSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = /*char2oct(CHARSTRING("{\"zonalTrafficSubscription\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + data = char2oct(CHARSTRING("{\"zonalTrafficSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_circleNotificationSubscription)) { const LocationAPI__TypesAndValues::CircleNotificationSubscription& notif = msg.circleNotificationSubscription(); notif.encode(LocationAPI__TypesAndValues::CircleNotificationSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = /*char2oct(CHARSTRING("{\"circleNotificationSubscription\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + data = char2oct(CHARSTRING("{\"circleNotificationSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_distanceNotificationSubscription)) { const LocationAPI__TypesAndValues::DistanceNotificationSubscription& notif = msg.distanceNotificationSubscription(); notif.encode(LocationAPI__TypesAndValues::DistanceNotificationSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = /*char2oct(CHARSTRING("{\"distanceNotificationSubscription\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + data = char2oct(CHARSTRING("{\"distanceNotificationSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_cellChangeSubscription)) { const RnisAPI__TypesAndValues::CellChangeSubscription& cell_change_subscription = msg.cellChangeSubscription(); cell_change_subscription.encode(RnisAPI__TypesAndValues::CellChangeSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = char2oct(CHARSTRING("{\"CellChangeSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); + data = /*char2oct(CHARSTRING("{\"CellChangeSubscription\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_appContext)) { const UEAppInterfaceAPI__TypesAndValues::AppContext& app_context = msg.appContext(); app_context.encode(UEAppInterfaceAPI__TypesAndValues::AppContext_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = char2oct(CHARSTRING("{\"AppContext\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_serviceInfo)) { - const AppEnablementAPI__TypesAndValues::ServiceInfo& service_info = msg.serviceInfo(); - service_info.encode(AppEnablementAPI__TypesAndValues::ServiceInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + const EdgePlatformApplicationEnablementAPI__TypesAndValues::ServiceInfo& service_info = msg.serviceInfo(); + service_info.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::ServiceInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"ServiceInfo\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_appTerminationNotificationSubscription)) { - const AppEnablementAPI__TypesAndValues::AppTerminationNotificationSubscription& app = msg.appTerminationNotificationSubscription(); - app.encode(AppEnablementAPI__TypesAndValues::AppTerminationNotificationSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + const EdgePlatformApplicationEnablementAPI__TypesAndValues::AppTerminationNotificationSubscription& app = msg.appTerminationNotificationSubscription(); + app.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppTerminationNotificationSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"AppTerminationNotificationSubscription\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_dnsRule)) { - const AppEnablementAPI__TypesAndValues::DnsRule& dns_rule = msg.dnsRule(); - dns_rule.encode(AppEnablementAPI__TypesAndValues::DnsRule_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + const EdgePlatformApplicationEnablementAPI__TypesAndValues::DnsRule& dns_rule = msg.dnsRule(); + dns_rule.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::DnsRule_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"DnsRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_serAvailabilityNotificationSubscription)) { - const AppEnablementAPI__TypesAndValues::SerAvailabilityNotificationSubscription& ser = msg.serAvailabilityNotificationSubscription(); - ser.encode(AppEnablementAPI__TypesAndValues::SerAvailabilityNotificationSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + const EdgePlatformApplicationEnablementAPI__TypesAndValues::SerAvailabilityNotificationSubscription& ser = msg.serAvailabilityNotificationSubscription(); + ser.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::SerAvailabilityNotificationSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"SerAvailabilityNotificationSubscription\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_trafficRule)) { - const AppEnablementAPI__TypesAndValues::TrafficRule& traffic_rule = msg.trafficRule(); - traffic_rule.encode(AppEnablementAPI__TypesAndValues::TrafficRule_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + const EdgePlatformApplicationEnablementAPI__TypesAndValues::TrafficRule& traffic_rule = msg.trafficRule(); + traffic_rule.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::TrafficRule_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_bwInfo)) { const TrafficManagementAPI__TypesAndValues::BwInfo& bw_info = msg.bwInfo(); @@ -135,7 +139,10 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy 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 careful to the order - // TODO To be refined, find("\"accessPointList\"") is not optimal + int idx_begin = it->second.find(":"); + int idx_end = it->second.rfind("}") - 1; // Remove the last '}' + str = it->second.substr(idx_begin + 1, idx_end - idx_begin); + TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); 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; @@ -147,6 +154,28 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy LocationAPI__TypesAndValues::UserTrackingSubscription user_tracking_subscription; user_tracking_subscription.decode(LocationAPI__TypesAndValues::UserTrackingSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.userTrackingSubscription() = user_tracking_subscription; + + + + + + + } else if (it->second.find("\"periodicNotificationSubscription\"") != std::string::npos) { + int idx_begin = it->second.find(":"); + int idx_end = it->second.rfind("}") - 1; // Remove the last '}' + str = it->second.substr(idx_begin + 1, idx_end - idx_begin); + TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + LocationAPI__TypesAndValues::PeriodicNotificationSubscription periodic_notification_subscription; + periodic_notification_subscription.decode(LocationAPI__TypesAndValues::PeriodicNotificationSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.periodicNotificationSubscription() = periodic_notification_subscription; + } else if (it->second.find("\"zonalTrafficSubscription\"") != std::string::npos) { + int idx_begin = it->second.find(":"); + int idx_end = it->second.rfind("}") - 1; // Remove the last '}' + str = it->second.substr(idx_begin + 1, idx_end - idx_begin); + TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + LocationAPI__TypesAndValues::ZonalTrafficSubscription zonal_traffic_subscription; + zonal_traffic_subscription.decode(LocationAPI__TypesAndValues::ZonalTrafficSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.zonalTrafficSubscription() = zonal_traffic_subscription; } else if (it->second.find("\"periodicTrackingSubscription\"") != std::string::npos) { int idx_begin = it->second.find(":"); int idx_end = it->second.rfind("}") - 1; // Remove the last '}' @@ -168,18 +197,21 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy terminal_distance.decode(LocationAPI__TypesAndValues::TerminalDistance_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.terminalDistance() = terminal_distance; } else if (it->second.find("\"enteringLeavingCriteria\"") != std::string::npos) { + int idx_begin = it->second.find(":"); + int idx_end = it->second.rfind("}") - 1; // Remove the last '}' + str = it->second.substr(idx_begin + 1, idx_end - idx_begin); + TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); LocationAPI__TypesAndValues::CircleNotificationSubscription notif; notif.decode(LocationAPI__TypesAndValues::CircleNotificationSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.circleNotificationSubscription() = notif; } else if (it->second.find("\"distanceNotificationSubscription\"") != std::string::npos) { + int idx_begin = it->second.find(":"); + int idx_end = it->second.rfind("}") - 1; // Remove the last '}' + str = it->second.substr(idx_begin + 1, idx_end - idx_begin); + TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); LocationAPI__TypesAndValues::DistanceNotificationSubscription notif; notif.decode(LocationAPI__TypesAndValues::DistanceNotificationSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.distanceNotificationSubscription() = notif; - } 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("\"ueIdentityTagInfo\"") != std::string::npos) { UEidentityAPI__TypesAndValues::UeIdentityTagInfo ue_identity_tag_info; ue_identity_tag_info.decode(UEidentityAPI__TypesAndValues::UeIdentityTagInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); @@ -187,184 +219,104 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy } else if (it->second.find("\"serName\"") != std::string::npos) { // Be careful to the order // TODO To be refined, find("\"accessPointList\"") is not optimal if (it->second[0] == '[') { - AppEnablementAPI__TypesAndValues::ServiceInfoList service_info_list; - service_info_list.decode(AppEnablementAPI__TypesAndValues::ServiceInfoList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + std::size_t it_start; + while ((it_start = str.find("null")) != std::string::npos) { + loggers::get_instance().log("json_codec::decode: id_start=%d", it_start); + loggers::get_instance().log("json_codec::decode: Before, str=%s", str.c_str()); + std::size_t it_stop = it_start + 4; + loggers::get_instance().log("json_codec::decode: id_stop=%d", it_stop); + loggers::get_instance().log("json_codec::decode: segment=%s", str.substr(it_start, it_stop - it_start).c_str()); + str = str.substr(0, it_start) + "{}" + str.substr(it_stop); + loggers::get_instance().log("json_codec::decode: After, str=%s", str.c_str()); + } // End of 'while' statement + decoding_buffer.clear(); + decoding_buffer.put_os(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + EdgePlatformApplicationEnablementAPI__TypesAndValues::ServiceInfoList service_info_list; + service_info_list.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::ServiceInfoList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.serviceInfoList() = service_info_list; } else { - AppEnablementAPI__TypesAndValues::ServiceInfo service_info; - service_info.decode(AppEnablementAPI__TypesAndValues::ServiceInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + EdgePlatformApplicationEnablementAPI__TypesAndValues::ServiceInfo service_info; + service_info.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::ServiceInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.serviceInfo() = service_info; } } else if (it->second.find("\"security\"") != 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); + std::size_t it_start; + while ((it_start = str.find("null")) != std::string::npos) { + loggers::get_instance().log("json_codec::decode: id_start=%d", it_start); + loggers::get_instance().log("json_codec::decode: Before, str=%s", str.c_str()); + std::size_t it_stop = it_start + 4; + loggers::get_instance().log("json_codec::decode: id_stop=%d", it_stop); + loggers::get_instance().log("json_codec::decode: segment=%s", str.substr(it_start, it_stop - it_start).c_str()); + str = str.substr(0, it_start) + "{}" + str.substr(it_stop); + loggers::get_instance().log("json_codec::decode: After, str=%s", str.c_str()); + } // End of 'while' statement + decoding_buffer.clear(); + decoding_buffer.put_os(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + EdgePlatformApplicationEnablementAPI__TypesAndValues::TransportInfoList transport_info_list; + transport_info_list.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::TransportInfoList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.transportInfoList() = transport_info_list; } else if (it->second.find("\"trafficRuleId\"") != std::string::npos) { if (it->second[0] == '[') { - AppEnablementAPI__TypesAndValues::TrafficRuleList traffic_rule_list; - traffic_rule_list.decode(AppEnablementAPI__TypesAndValues::TrafficRuleList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + EdgePlatformApplicationEnablementAPI__TypesAndValues::TrafficRuleList traffic_rule_list; + traffic_rule_list.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::TrafficRuleList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.trafficRuleList() = traffic_rule_list; } else { - AppEnablementAPI__TypesAndValues::TrafficRule traffic_rule; - traffic_rule.decode(AppEnablementAPI__TypesAndValues::TrafficRule_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + EdgePlatformApplicationEnablementAPI__TypesAndValues::TrafficRule traffic_rule; + traffic_rule.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::TrafficRule_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.trafficRule() = traffic_rule; } } else if (it->second.find("\"dnsRuleId\"") != std::string::npos) { if (it->second[0] == '[') { - AppEnablementAPI__TypesAndValues::DnsRuleList dns_rule_list; - dns_rule_list.decode(AppEnablementAPI__TypesAndValues::DnsRuleList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + EdgePlatformApplicationEnablementAPI__TypesAndValues::DnsRuleList dns_rule_list; + dns_rule_list.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::DnsRuleList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.dnsRuleList() = dns_rule_list; } else { - AppEnablementAPI__TypesAndValues::DnsRule dns_rule; - dns_rule.decode(AppEnablementAPI__TypesAndValues::DnsRule_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + EdgePlatformApplicationEnablementAPI__TypesAndValues::DnsRule dns_rule; + dns_rule.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::DnsRule_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.dnsRule() = dns_rule; } - } else if ((it->second.find("\"appInstanceId\"") != std::string::npos) && (it->second.find("\"subscriptionType\"") != std::string::npos)) { - AppEnablementAPI__TypesAndValues::AppTerminationNotificationSubscription app_term; - app_term.decode(AppEnablementAPI__TypesAndValues::AppTerminationNotificationSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.appTerminationNotificationSubscription() = app_term; } else if ((it->second.find("\"_links\"") != std::string::npos) && (it->second.find("\"subscriptions\"") != std::string::npos)) { - AppEnablementAPI__TypesAndValues::SubscriptionLinkList sub_link_list; - sub_link_list.decode(AppEnablementAPI__TypesAndValues::SubscriptionLinkList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + EdgePlatformApplicationEnablementAPI__TypesAndValues::SubscriptionLinkList sub_link_list; + sub_link_list.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::SubscriptionLinkList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.subscriptionLinkList__app__ens() = sub_link_list; - } else if ((it->second.find("\"subscriptionType\"") != std::string::npos) && (it->second.find("\"filteringCriteria\"") != std::string::npos)) { - AppEnablementAPI__TypesAndValues::SerAvailabilityNotificationSubscription ser_av; - ser_av.decode(AppEnablementAPI__TypesAndValues::SerAvailabilityNotificationSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + } else if (it->second.find("\"AppTerminationNotificationSubscription\"") != std::string::npos) { + EdgePlatformApplicationEnablementAPI__TypesAndValues::AppTerminationNotificationSubscription app_term; + app_term.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppTerminationNotificationSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.appTerminationNotificationSubscription() = app_term; + } else if ((it->second.find("\"subscriptionType\"") != std::string::npos) && (it->second.find("\"SerAvailabilityNotificationSubscription\"") != std::string::npos)) { + EdgePlatformApplicationEnablementAPI__TypesAndValues::SerAvailabilityNotificationSubscription ser_av; + ser_av.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::SerAvailabilityNotificationSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.serAvailabilityNotificationSubscription() = ser_av; - } else if (it->second.find("\"ntpServers\"") != std::string::npos) { - AppEnablementAPI__TypesAndValues::TimingCaps timing_caps; - timing_caps.decode(AppEnablementAPI__TypesAndValues::TimingCaps_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + } else if ((it->second.find("\"ntpServers\"") != std::string::npos) || (it->second.find("{\"timeStamp\"") == 0)) { + EdgePlatformApplicationEnablementAPI__TypesAndValues::TimingCaps timing_caps; + timing_caps.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::TimingCaps_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.timingCaps() = timing_caps; } else if (it->second.find("\"timeSourceStatus\"") != std::string::npos) { - AppEnablementAPI__TypesAndValues::CurrentTime current_time; - current_time.decode(AppEnablementAPI__TypesAndValues::CurrentTime_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + EdgePlatformApplicationEnablementAPI__TypesAndValues::CurrentTime current_time; + current_time.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::CurrentTime_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.currentTime() = current_time; } else if (it->second.find("\"CellChangeSubscription\"") != std::string::npos) { - // // Replace "type": "1" by type": "EU_IPV4_ADDRESS", "type": "2"... - // // TODO Create a method instead of copy/past - // //loggers::get_instance().log("json_codec::decode: Before, str=%s", str.c_str()); - // std::size_t it_start = str.find("\"type\""); - // loggers::get_instance().log("json_codec::decode: id_start=%d", it_start); - // if (it_start != std::string::npos) { - // std::size_t it_stop = str.find(",", it_start); - // //loggers::get_instance().log("json_codec::decode: id_stop=%d", it_stop); - // //loggers::get_instance().log("json_codec::decode: segment=%s", str.substr(it_start, it_stop - it_start).c_str()); - // std::size_t it = str.find("1", it_start, 1); - // //loggers::get_instance().log("json_codec::decode: it=%d", it); - // if ((it != std::string::npos) && (it < it_stop)) { - // str = str.substr(0, it) + "UE_IPV4_ADDRESS" + str.substr(it + 1); - // } else { - // it = str.find("2", it_start, 1); - // //loggers::get_instance().log("json_codec::decode: it=%d", it); - // if ((it != std::string::npos) && (it < it_stop)) { - // str = str.substr(0, it) + "UE_IPV6_ADDRESS" + str.substr(it + 1); - // } else { - // it = str.find("3", it_start, 1); - // //loggers::get_instance().log("json_codec::decode: it=%d", it); - // if ((it != std::string::npos) && (it < it_stop)) { - // str = str.substr(0, it) + "NATED_IP_ADDRESS" + str.substr(it + 1); - // } else { - // it = str.find("4", it_start, 1); - // //loggers::get_instance().log("json_codec::decode: it=%d", it); - // if ((it != std::string::npos) && (it < it_stop)) { - // str = str.substr(0, it) + "GTP_TEID" + str.substr(it + 1); - // } - // } - // } - // } - // } - // //loggers::get_instance().log("json_codec::decode: After, str=%s", str.c_str()); - // decoding_buffer.clear(); - // decoding_buffer.put_os(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); RnisAPI__TypesAndValues::CellChangeSubscription cell_change_subscription; cell_change_subscription.decode(RnisAPI__TypesAndValues::CellChangeSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.cellChangeSubscription() = cell_change_subscription; //TODO Continue with other ChangeSubscription - } else if (it->second.find("\"RabInfo\"") != std::string::npos) { - // // Replace "type": "1" by type": "EU_IPV4_ADDRESS", "type": "2"... - // // TODO Create a method instead of copy/past - // // loggers::get_instance().log("json_codec::decode: Before, str=%s", str.c_str()); - // std::size_t it_start = str.find("\"type\""); - // loggers::get_instance().log("json_codec::decode: id_start=%d", it_start); - // if (it_start != std::string::npos) { - // std::size_t it_stop = str.find(",", it_start); - // //loggers::get_instance().log("json_codec::decode: id_stop=%d", it_stop); - // //loggers::get_instance().log("json_codec::decode: segment=%s", str.substr(it_start, it_stop - it_start).c_str()); - // std::size_t it = str.find("1", it_start, 1); - // //loggers::get_instance().log("json_codec::decode: it=%d", it); - // if ((it != std::string::npos) && (it < it_stop)) { - // str = str.substr(0, it) + "UE_IPV4_ADDRESS" + str.substr(it + 1); - // } else { - // it = str.find("2", it_start, 1); - // //loggers::get_instance().log("json_codec::decode: it=%d", it); - // if ((it != std::string::npos) && (it < it_stop)) { - // str = str.substr(0, it) + "UE_IPV6_ADDRESS" + str.substr(it + 1); - // } else { - // it = str.find("3", it_start, 1); - // //loggers::get_instance().log("json_codec::decode: it=%d", it); - // if ((it != std::string::npos) && (it < it_stop)) { - // str = str.substr(0, it) + "NATED_IP_ADDRESS" + str.substr(it + 1); - // } else { - // it = str.find("4", it_start, 1); - // //loggers::get_instance().log("json_codec::decode: it=%d", it); - // if ((it != std::string::npos) && (it < it_stop)) { - // str = str.substr(0, it) + "GTP_TEID" + str.substr(it + 1); - // } - // } - // } - // } - // } - // //loggers::get_instance().log("json_codec::decode: After, str=%s", str.c_str()); - // decoding_buffer.clear(); - // decoding_buffer.put_os(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + } else if (it->second.find("\"cellInfo\"") != std::string::npos) { + RnisAPI__TypesAndValues::L2Meas l2_meas; + l2_meas.decode(RnisAPI__TypesAndValues::L2Meas_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.l2Meas() = l2_meas; + } else if ((it->second.find("\"appInstanceId\"") != std::string::npos) && (it->second.find("\"requestId\"") != std::string::npos)) { RnisAPI__TypesAndValues::RabInfo rab_info; rab_info.decode(RnisAPI__TypesAndValues::RabInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.rabInfo() = rab_info; } else if (it->second.find("\"S1BearerInfo\"") != std::string::npos) { - // // Replace "type": "1" by type": "EU_IPV4_ADDRESS", "type": "2"... - // // TODO Create a method instead of copy/past - // // loggers::get_instance().log("json_codec::decode: Before, str=%s", str.c_str()); - // std::size_t it_start = str.find("\"type\""); - // loggers::get_instance().log("json_codec::decode: id_start=%d", it_start); - // if (it_start != std::string::npos) { - // std::size_t it_stop = str.find(",", it_start); - // //loggers::get_instance().log("json_codec::decode: id_stop=%d", it_stop); - // //loggers::get_instance().log("json_codec::decode: segment=%s", str.substr(it_start, it_stop - it_start).c_str()); - // std::size_t it = str.find("1", it_start, 1); - // //loggers::get_instance().log("json_codec::decode: it=%d", it); - // if ((it != std::string::npos) && (it < it_stop)) { - // str = str.substr(0, it) + "UE_IPV4_ADDRESS" + str.substr(it + 1); - // } else { - // it = str.find("2", it_start, 1); - // //loggers::get_instance().log("json_codec::decode: it=%d", it); - // if ((it != std::string::npos) && (it < it_stop)) { - // str = str.substr(0, it) + "UE_IPV6_ADDRESS" + str.substr(it + 1); - // } else { - // it = str.find("3", it_start, 1); - // //loggers::get_instance().log("json_codec::decode: it=%d", it); - // if ((it != std::string::npos) && (it < it_stop)) { - // str = str.substr(0, it) + "NATED_IP_ADDRESS" + str.substr(it + 1); - // } else { - // it = str.find("4", it_start, 1); - // //loggers::get_instance().log("json_codec::decode: it=%d", it); - // if ((it != std::string::npos) && (it < it_stop)) { - // str = str.substr(0, it) + "GTP_TEID" + str.substr(it + 1); - // } - // } - // } - // } - // } - // //loggers::get_instance().log("json_codec::decode: After, str=%s", str.c_str()); - // decoding_buffer.clear(); - // decoding_buffer.put_os(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); RnisAPI__TypesAndValues::S1BearerInfo s1_nearer_info; s1_nearer_info.decode(RnisAPI__TypesAndValues::S1BearerInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.s1BearerInfo() = s1_nearer_info; - } else if (it->second.find("\"PlmnInfo\"") != std::string::npos) { - RnisAPI__TypesAndValues::PlmnInfo plmn_info; - plmn_info.decode(RnisAPI__TypesAndValues::PlmnInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.plmnInfo() = plmn_info; + } else if ((it->second.find("\"appInstanceId\"") != std::string::npos) && (it->second.find("\"plmn\"") != std::string::npos)) { + RnisAPI__TypesAndValues::PlmnInfos plmn_infos; + plmn_infos.decode(RnisAPI__TypesAndValues::PlmnInfos_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.plmnInfos() = plmn_infos; } else if (it->second.find("\"RabEstSubscription\"") != std::string::npos) { RnisAPI__TypesAndValues::RabEstSubscription rab_est_subscription; rab_est_subscription.decode(RnisAPI__TypesAndValues::RabEstSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); @@ -377,6 +329,11 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy RnisAPI__TypesAndValues::RabRelSubscription rab_rel_subscription; rab_rel_subscription.decode(RnisAPI__TypesAndValues::RabRelSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.rabRelSubscription() = rab_rel_subscription; + } else if ((it->second.find("\"_links\"") != std::string::npos) && (it->second.find("subscriptions") != std::string::npos)) { // SubscriptionLinkList + // FIXME Conflict with MEC-028 SubscriptionLinkList data type + 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("\"AppContext\"") != std::string::npos) { UEAppInterfaceAPI__TypesAndValues::AppContext appContext; appContext.decode(UEAppInterfaceAPI__TypesAndValues::AppContext_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); @@ -475,17 +432,29 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy msg.provChgPc5Notification() = prov_chg_pc5_notification; - } else if (it->second.find("\"AssocStaSubscription\"") != std::string::npos) { - WlanInformationAPI__TypesAndValues::AssocStaSubscription assoc_sta_subscription; - TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); - assoc_sta_subscription.decode(WlanInformationAPI__TypesAndValues::AssocStaSubscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); - msg.assocStaSubscription() = assoc_sta_subscription; + if (it->second.find("\"subscription\"") != std::string::npos) { // SubscriptionLinkList + WlanInformationAPI__TypesAndValues::SubscriptionLinkList subscription_link_list; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + subscription_link_list.decode(WlanInformationAPI__TypesAndValues::SubscriptionLinkList_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.subscriptionLinkList__wlan() = subscription_link_list; + } else { // AssocStaSubscription + WlanInformationAPI__TypesAndValues::AssocStaSubscription assoc_sta_subscription; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + assoc_sta_subscription.decode(WlanInformationAPI__TypesAndValues::AssocStaSubscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.assocStaSubscription() = assoc_sta_subscription; + } } else if (it->second.find("\"StaDataRateSubscription\"") != std::string::npos) { WlanInformationAPI__TypesAndValues::StaDataRateSubscription sta_data_rate_subscription; TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); sta_data_rate_subscription.decode(WlanInformationAPI__TypesAndValues::StaDataRateSubscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); msg.staDataRateSubscription() = sta_data_rate_subscription; + } else if ((it->second.find("\"_links\"") != std::string::npos) && (it->second.find("subscriptions") != std::string::npos)) { // SubscriptionLinkList + // decode_str: {"_links":{"self":{"href":"https://try-mec.etsi.org/sbxpb4c4k2/wai/v2/subscriptions"}}} + WlanInformationAPI__TypesAndValues::SubscriptionLinkList subscription_link_list; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + subscription_link_list.decode(WlanInformationAPI__TypesAndValues::SubscriptionLinkList_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.subscriptionLinkList__wlan() = subscription_link_list; } else if ((it->second.find("\"apInfo\"") != std::string::npos) || (it->second.find("\"apId\"") != std::string::npos)) { WlanInformationAPI__TypesAndValues::ApInfoList ap_info_list; TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); @@ -497,6 +466,11 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); sta_info_list.decode(WlanInformationAPI__TypesAndValues::StaInfoList_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); msg.staInfoList() = sta_info_list; + } else if (it->second.find("\"AssocStaNotification\"") != std::string::npos) { + WlanInformationAPI__TypesAndValues::AssocStaNotification assoc_sta_notification; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + assoc_sta_notification.decode(WlanInformationAPI__TypesAndValues::AssocStaNotification_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.assocStaNotification() = assoc_sta_notification; diff --git a/ccsrc/Protocols/Tcp/tcp_layer.cc b/ccsrc/Protocols/Tcp/tcp_layer.cc index 56b117b302af2c1b80391ab87c1ff012f800651e..107237503054ca68ef1d1ccc12866908b700d579 100644 --- a/ccsrc/Protocols/Tcp/tcp_layer.cc +++ b/ccsrc/Protocols/Tcp/tcp_layer.cc @@ -77,12 +77,33 @@ tcp_layer::tcp_layer(const std::string & p_type, const std::string & param) : la set_server_mode(server_mode); if (server_mode) { parameter_set("serverPort", _params[params::local_port].c_str()); - if (ssl_mode) { // Add certificate bundle - parameter_set(ssl_verifycertificate_name(), "no"); - parameter_set(ssl_private_key_file_name(), "../certificates/out/privates/486c4cb43fcbcdb5f564824ad201cffb405f3d3659fc1facd5f5cb21d4ea64e0_server_rsa.key.pem"); - parameter_set(ssl_certificate_file_name(), "../certificates/out/certs/486c4cb43fcbcdb5f564824ad201cffb405f3d3659fc1facd5f5cb21d4ea64e0_server_rsa.cert.pem"); - parameter_set(ssl_trustedCAlist_file_name(), "../certificates/out/certs/486c4cb43fcbcdb5f564824ad201cffb405f3d3659fc1facd5f5cb21d4ea64e0_server_rsa.cert.pem"); // FIXME Use a parameter + } + if (ssl_mode) { // Add certificate bundle + // Check mutual authentication param + _params.insert(std::pair(std::string("mutual_tls"), "0")); + parameter_set(ssl_verifycertificate_name(), "no"); + it = _params.find(params::mutual_auth); + if (it == _params.cend()) { + if (_params[params::mutual_auth].compare("1") == 0) { // Use mutual authentication + parameter_set(ssl_verifycertificate_name(), "yes"); + _params.insert(std::pair(std::string("mutual_tls"), "1")); + } } + // Set trusted CA file + /*it = _params.find(params::mutual_auth); + if (it == _params.cend()) { + parameter_set(ssl_trustedCAlist_file_name(), it->second.c_str()); + _params.insert(std::pair(std::string("mutual_tls"), it->second)); + } else { + parameter_set(ssl_trustedCAlist_file_name(), "/usr/share/ca-certificates/mozilla/Amazon_Root_CA_1.crt"); + }*/ + // Set additional certificates + parameter_set(ssl_trustedCAlist_file_name(), "../certificates/out/certs/CA_rsa.cert.pem"); // FIXME Use a parameter + parameter_set(ssl_private_key_file_name(), "../certificates/out/privates/96ea9868b49aebca76608fa2579e9c4884c14cc2c867d34423a4841e2225342d_server_rsa.key.pem"); + parameter_set(ssl_certificate_file_name(), "../certificates/out/certs/96ea9868b49aebca76608fa2579e9c4884c14cc2c867d34423a4841e2225342d_server_rsa.cert.pem"); + } else { + parameter_set(ssl_trustedCAlist_file_name(), "../certificates/out/certs/CA_rsa.cert.pem"); // FIXME Use a parameter + parameter_set(ssl_certificate_file_name(), "../certificates/out/certs/96ea9868b49aebca76608fa2579e9c4884c14cc2c867d34423a4841e2225342d_client_rsa.cert.pem"); } set_ttcn_buffer_usercontrol(false); set_handle_half_close(true); @@ -91,11 +112,11 @@ tcp_layer::tcp_layer(const std::string & p_type, const std::string & param) : la parameter_set(client_TCP_reconnect_name(), "yes"); - if (!server_mode) { + if (server_mode == 0) { loggers::get_instance().log("tcp_layer::tcp_layer: Establish connection: %s/%s", _params[params::server].c_str(), _params[params::port].c_str()); open_client_connection(_params[params::server].c_str(), _params[params::port].c_str(), NULL, NULL); } - } + } tcp_layer::~tcp_layer() { loggers::get_instance().log(">>> tcp_layer::~tcp_layer: %d", _client_id); @@ -175,11 +196,10 @@ int tcp_layer::send_message_on_fd(int p_client_id, const unsigned char * message { loggers::get_instance().log(">>> tcp_layer::send_message_on_fd: %d", p_client_id); - if(get_user_data(p_client_id)) - { - loggers::get_instance().log("tcp_layer::send_message_on_fd: SSL mode"); - return SSL_Socket::send_message_on_fd(p_client_id, message_buffer, length_of_message); - } + if(get_user_data(p_client_id)) { + loggers::get_instance().log("tcp_layer::send_message_on_fd: SSL mode"); + return SSL_Socket::send_message_on_fd(p_client_id, message_buffer, length_of_message); + } loggers::get_instance().log("tcp_layer::send_message_on_fd: Non secured mode"); return Abstract_Socket::send_message_on_fd(p_client_id, message_buffer, length_of_message); @@ -189,11 +209,10 @@ int tcp_layer::send_message_on_nonblocking_fd(int p_client_id, const unsigned ch { loggers::get_instance().log(">>> tcp_layer::send_message_on_nonblocking_fd: %d", p_client_id); - if(get_user_data(p_client_id)) - { - loggers::get_instance().log("tcp_layer::send_message_on_nonblocking_fd: SSL mode"); - return SSL_Socket::send_message_on_nonblocking_fd(p_client_id, message_buffer, length_of_message); - } + if(get_user_data(p_client_id)) { + loggers::get_instance().log("tcp_layer::send_message_on_nonblocking_fd: SSL mode"); + return SSL_Socket::send_message_on_nonblocking_fd(p_client_id, message_buffer, length_of_message); + } loggers::get_instance().log("tcp_layer::send_message_on_nonblocking_fd: Non secured mode"); return Abstract_Socket::send_message_on_nonblocking_fd(p_client_id, message_buffer, length_of_message); @@ -210,6 +229,9 @@ int tcp_layer::receive_message_on_fd(int p_client_id) } loggers::get_instance().log("tcp_layer::receive_message_on_fd: Non secured mode"); + if (_params[std::string("tcp_fragmented")].compare("1") == 0) { + sleep(5); // FIXME When HTTP paquet is fragmented into several TCP packets, a timer is required. This is a Q&D solution + } return Abstract_Socket::receive_message_on_fd(p_client_id); } diff --git a/docker/home/etc/init.d/20-eclipse.sh b/docker/home/etc/init.d/20-eclipse.sh deleted file mode 100755 index 0f95364e3bc959470a52d209bffbc376244c65a5..0000000000000000000000000000000000000000 --- a/docker/home/etc/init.d/20-eclipse.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -#set -e -set -vx - -echo -e "*****************************\n* Install eclipse\n*****************************\n" -mkdir -p ${HOME}/frameworks -cd ${HOME}/frameworks || exit 1 -wget --progress=dot:mega 'https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/helios/SR2/eclipse-cpp-helios-SR2-linux-gtk-x86_64.tar.gz' -Oeclipse-cpp-helios-SR2-linux-gtk-x86_64.tar.gz || exit 1 -tar -zxvf ./eclipse-cpp-helios-SR2-linux-gtk-x86_64.tar.gz || exit 1 -ln -sf ${HOME}/frameworks/eclipse/eclipse ${HOME}/bin/eclipse -rm -f ./eclipse-cpp-helios-SR2-linux-gtk-x86_64.tar.gz - -if wget --progress=dot:mega 'https://www.eclipse.org/downloads/download.php?file=/titan/TITAN_Designer_and_Executor_plugin-6.4.pl0.zip&r=1' -OTITAN_Designer_and_Executor_plugin.zip; then - eclipse/eclipse -noSplash -application org.eclipse.equinox.p2.director \ - -destination ${HOME}/frameworks/eclipse \ - -repository jar:file://${HOME}/frameworks/TITAN_Designer_and_Executor_plugin.zip!/ \ - -installIU TITAN_Designer.feature.group,TITAN_Executor.feature.group,TITAN_Log_Viewer.feature.group,Titan_external_dependencies.feature.group,Titanium.feature.group,Titanium_external_dependencies.feature.group - rm -f TITAN_Designer_and_Executor_plugin.zip -fi - -cd ${HOME} diff --git a/docker/run.sh b/docker/run.sh deleted file mode 100755 index 7d1687813e581fe2b7c27c5bb2c8127cccafda42..0000000000000000000000000000000000000000 --- a/docker/run.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -# Copyright ETSI 2018 -# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt - -#set -e -set -vx - -docker run --interactive --tty --rm --publish 2222:22 --env DISPLAY=$DISPLAY --volume /tmp/.X11-unix:/tmp/.X11-unix --cap-add=NET_RAW --cap-add=NET_ADMIN ttf_t012_mec:latest - -# That's all Floks -exit 0 diff --git a/docs/o2.cfg b/docs/o2.cfg index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f92902f5572bf80f328437dfebe410434c0d313a 100644 --- a/docs/o2.cfg +++ b/docs/o2.cfg @@ -0,0 +1,1768 @@ +# Doxyfile 1.8.1.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" "). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or sequence of words) that should +# identify the project. Note that if you do not use Doxywizard you need +# to put quotes around the project name if it contains spaces. + +PROJECT_NAME = "ETSI TTF012" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "This project provides the Test System for ETSI MEC-DECODE API Conformance testing" + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = ./AtsMecDocs + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = YES + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = YES + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = YES + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = "license=@par License:\n" + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding +# "class=itcl::class" will allow you to use the command class in the +# itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all +# comments according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you +# can mix doxygen, HTML, and XML commands with Markdown formatting. +# Disable only in case of backward compatibilities issues. + +MARKDOWN_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and +# unions with only public data fields will be shown inline in the documentation +# of the scope in which they are defined (i.e. file, namespace, or group +# documentation), provided this scope is documented. If set to NO (the default), +# structs, classes, and unions are shown on a separate page (for HTML and Man +# pages) or section (for LaTeX and RTF). + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be +# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given +# their name and scope. Since this can be an expensive process and often the +# same symbol appear multiple times in the code, doxygen keeps a cache of +# pre-resolved symbols. If the cache is too small doxygen will become slower. +# If the cache is too large, memory is wasted. The cache size is given by this +# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. + +EXTRACT_PACKAGE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = YES + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = YES + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = YES + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files +# containing the references data. This must be a list of .bib files. The +# .bib extension is automatically appended if omitted. Using this command +# requires the bibtex tool to be installed. See also +# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style +# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this +# feature you need bibtex and perl available in the search path. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../ccsrc + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = *.h *.hh *.hpp \ + *.c *.cc *.cpp \ + *.inl \ + *.s \ + *.md *.dox + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = YES + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C, C++ and Fortran comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = TES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is advised to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# style sheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the style sheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of +# entries shown in the various tree structured indices initially; the user +# can expand and collapse entries dynamically later on. Doxygen will expand +# the tree to such a level that at most the specified number of entries are +# visible (unless a fully collapsed tree already exceeds this amount). +# So setting the number of entries 1 will produce a full collapsed tree by +# default. 0 is a special value representing an infinite number of entries +# and will result in a full expanded tree by default. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) +# at top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. Since the tabs have the same information as the +# navigation tree you can set this option to NO if you already set +# GENERATE_TREEVIEW to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. +# Since the tree basically has the same information as the tab index you +# could consider to set DISABLE_INDEX to NO when enabling this option. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you may also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to +# the MathJax Content Delivery Network so you can quickly see the result without +# installing MathJax. +# However, it is strongly recommended to install a local +# copy of MathJax from http://www.mathjax.org before deployment. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension +# names that should be enabled during MathJax rendering. + +MATHJAX_EXTENSIONS = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See +# http://en.wikipedia.org/wiki/BibTeX for more info. + +LATEX_BIB_STYLE = plain + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load style sheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = YES + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = __cplusplus + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. For each +# tag file the location of the external documentation should be added. The +# format of a tag file without this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths +# or URLs. Note that each tag file must have a unique name (where the name does +# NOT include the path). If a tag file is not located in the directory in which +# doxygen is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = NO + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will use the Helvetica font for all dot files that +# doxygen generates. When you want a differently looking font you can specify +# the font name using DOT_FONTNAME. You need to make sure dot is able to find +# the font, which can be done by putting it in a standard location or by setting +# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the Helvetica font. +# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to +# set the path where dot can find it. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = YES + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside +# the class node. If there are many fields or methods and many nodes the +# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS +# threshold limits the number of items for each type to make the size more +# managable. Set this to 0 for no limit. Note that the threshold may be +# exceeded by 50% before the limit is enforced. + +UML_LIMIT_NUM_FIELDS = 20 + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = YES + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. If you choose svg you need to set +# HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible in IE 9+ (other browsers do not have this requirement). + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# Note that this requires a modern browser other than Internet Explorer. +# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you +# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible. Older versions of IE do not have SVG support. + +INTERACTIVE_SVG = NO + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/etc/AtsMec/AtsMec_AdvantEDGE.cf_ b/etc/AtsMec/AtsMec_AdvantEDGE.cf_ deleted file mode 100644 index fa6ac41f6382a8ebd1808ba8aff4810ef79feca0..0000000000000000000000000000000000000000 --- a/etc/AtsMec/AtsMec_AdvantEDGE.cf_ +++ /dev/null @@ -1,155 +0,0 @@ -[MODULE_PARAMETERS] -# This section shall contain the values of all parameters that are defined in your TTCN-3 modules. - -# IUT roles - -LibCommon_Time.PX_TAC := 30.0 -#LibCommon_Time.PX_TWAIT := 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.22.1.6" - -LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" -LibItsHttp_Pics.PICS_USE_TOKEN_HEADER := true -#LibItsHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" - -LibMec_Pics.PICS_ROOT_API := "etsi-013" -LibMec_Pics.PICS_MEC_PLAT := true -LibMec_Pics.PICS_SERVICES := true -LibMec_Pics.PICS_RNIS := true -LibMec_Pics.PICS_RNIS_QUERY := true -LibMec_Pics.PICS_RNIS_ALL_SUBSCRIPTIONS := true -LibMec_Pics.PICS_RNIS_NOTIFICATIONS := true - -LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true - -UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := false - -BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false - -#AppEnablementAPI_Pics.PICS_APP_ENABLEMENT_API_SUPPORTED := true -#AppEnablementAPI_Pics.PICS_ME_APP_SUPPORT_TIMING_CAPS_URI - - -[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). - -LogFile := "../logs/%e.%h-%r.%s" -FileMask := LOG_ALL | USER | DEBUG | MATCHING -ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING -#FileMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP -#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP -LogSourceInfo := Stack -LogEntityName:= Yes -LogEventTypes:= Yes -#TimeStampFormat := DateTime - -[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.22.1.6,port=31007,use_ssl=0)" -#system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.28.4.253,port=30007,use_ssl=0)" -system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=8081,use_ssl=0)" - -[DEFINE] -# In this section you can create macro definitions, -# that can be used in other configuration file sections except [INCLUDE] and [ORDERED_INCLUDE]. - -[INCLUDE] -# To use configuration settings given in other configuration files, -# the configuration files just need to be listed in this section, with their full or relative pathnames. - -[ORDERED_INCLUDE] -# To use configuration settings given in other configuration files, -# the configuration files just need to be listed in this section, with their full or relative pathnames. - -[EXTERNAL_COMMANDS] -# This section can define external commands (shell scripts) to be executed by the ETS -# whenever a control part or test case is started or terminated. - -#BeginTestCase := "" -#EndTestCase := "" -#BeginControlPart := "" -#EndControlPart := "" - -[EXECUTE] -# In this section you can specify what parts of your test suite you want to execute. -#AtsMec_TestControl.control -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_OK -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_BR -#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 - -# ETSI GS MEC 013 -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_OK -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_BR -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_NF - -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_NF - -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_NF - -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_NF - -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF - -#AtsMec_RadioNodeLocationAPI_TestCases.TP_MEC_SRV_RLOCLOOK_001_OK - -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_NF - -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_001_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_002_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_003_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_004_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_005_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_006_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_007_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_008_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. - -[COMPONENTS] -# This section consists of rules restricting the location of created PTCs. - -[MAIN_CONTROLLER] -# The options herein control the behavior of MC. -KillTimer := 10.0 -LocalAddress := 127.0.0.1 -TCPPort := 12000 -NumHCs := 1 diff --git a/etc/AtsMec/AtsMec_Mockoon.cf_ b/etc/AtsMec/AtsMec_Mockoon.cf_ index c3e644e00a3f3617e7bb91ad334975a47b7394cc..893163fa3659c3ef4581a09382c2fef67e4e0837 100644 --- a/etc/AtsMec/AtsMec_Mockoon.cf_ +++ b/etc/AtsMec/AtsMec_Mockoon.cf_ @@ -14,11 +14,9 @@ LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" LibItsHttp_Pics.PICS_USE_TOKEN_HEADER := true #LibItsHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" -LibMec_Pics.PICS_ROOT_API := "/sbxcyccf53" # Need to sign in on https://try-mec.etsi.org/, section 'Try-it from your MEC application' +LibMec_Pics.PICS_ROOT_API := "/sbx1y8q0x9/mep1" # Need to sign in on https://try-mec.etsi.org/, section 'Try-it from your MEC application' # LibMec_Pixits -LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/queries/zones" -LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/queries/users" LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v2/subscriptions" LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v2/queries" LibMec_Pixits.PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v2/applications" @@ -30,25 +28,27 @@ LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/mec_app_support/v2/timin LibMec_Pics.PICS_MEC_PLAT := true # Mec-011 AppEnblementAPI -AppEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "appInst01" -AppEnablementAPI_Pixits.PX_SERVICE_NAME := "serName" -AppEnablementAPI_Pixits.PX_SERVICE_ID := "serInst01" -AppEnablementAPI_Pixits.PX_SERVICE_INFO_VERSION := "1.0.0" -AppEnablementAPI_Pixits.PX_NEW_SERVICE_INFO_VERSION := "1.0.0" -AppEnablementAPI_Pixits.PX_SERVICE_INFO_STATE := ACTIVE -AppEnablementAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" -AppEnablementAPI_Pixits.PX_DNS_RULE_ID := "route2home" -AppEnablementAPI_Pixits.PX_DOMAIN_NAME := "etsi.org" -AppEnablementAPI_Pixits.PX_IP_ADDRESS := "10.10.0.2" -AppEnablementAPI_Pixits.PX_TTL := 8 -AppEnablementAPI_Pixits.PX_TRAFFIC_RULE_ID := "trafficRuleId01" +EdgePlatformApplicationEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "b8ae165a-a1e3-4d6c-86d9-52c59ad314b6" +EdgePlatformApplicationEnablementAPI_Pixits.PX_NON_EXISTENT_APP_INSTANCE_ID := "1b5d27e6-5cc4-47d4-812b-a943233dbe08" +EdgePlatformApplicationEnablementAPI_Pixits.PX_SERVICE_NAME := "mec028-1" +EdgePlatformApplicationEnablementAPI_Pixits.PX_SERVICE_ID := "1b5d27e6-5cc4-47d4-812b-a943233dbe08" +EdgePlatformApplicationEnablementAPI_Pixits.PX_HREF := "http://yanngarcia.ddns.net/mec_service_mgmt/v2/notif/1" +EdgePlatformApplicationEnablementAPI_Pixits.PX_SRV_AVAIL_NOTIF_CALLBACK_URI := "http://yanngarcia.ddns.net/mec_service_mgmt/v2/srv_notif/1" +EdgePlatformApplicationEnablementAPI_Pixits.PX_SERVICE_INFO_VERSION := "v2" +EdgePlatformApplicationEnablementAPI_Pixits.PX_NEW_SERVICE_INFO_VERSION := "v2.1" +EdgePlatformApplicationEnablementAPI_Pixits.PX_SERVICE_INFO_STATE := ACTIVE +EdgePlatformApplicationEnablementAPI_Pixits.PX_SUBSCRIPTION_ID := "3" +EdgePlatformApplicationEnablementAPI_Pixits.PX_DNS_RULE_ID := "route2home" +EdgePlatformApplicationEnablementAPI_Pixits.PX_DOMAIN_NAME := "try-mec.etsi.org" +EdgePlatformApplicationEnablementAPI_Pixits.PX_IP_ADDRESS := "10.10.0.2" +EdgePlatformApplicationEnablementAPI_Pixits.PX_TTL := 8 +EdgePlatformApplicationEnablementAPI_Pixits.PX_TRAFFIC_RULE_ID := "trafficRuleId01" # Mec-012 RnisAPI RnisAPI_Pixits.PX_SUBSCRIPTION_HREF_VALUE := "cell_change" -RnisAPI_Pixits.PX_SUBSCRIPTION_TYPE := CELL_CHANGE -RnisAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" -RnisAPI_Pixits.PX_ASSOCIATE_ID_VALUE := "192.0.0.2" -RnisAPI_Pixits.PX_CELL_ID := "0x4040404" +RnisAPI_Pixits.PX_CALLBACK_REFERENCE := "http://yanngarcia.ddns.net/rni/v2/notif/1" +RnisAPI_Pixits.PX_ASSOCIATE_ID_VALUE := "10.100.0.1" +RnisAPI_Pixits.PX_CELL_ID := "1010101" RnisAPI_Pixits.PX_C_ID := "0xFFFFFFFF" RnisAPI_Pixits.PX_APP_INS_ID := "01" RnisAPI_Pixits.PX_APP_ID := "19" @@ -57,11 +57,18 @@ RnisAPI_Pixits.PX_QCI := 0 # Mec-013 LocationAPI LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true -LocationAPI_Pixits.PX_ZONE_ID := "zone02" -LocationAPI_Pixits.PX_ACCESS_POINT_ID := "4g-macro-cell-4" -LocationAPI_Pixits.PX_USER := "10.10.0.1" +LocationAPI_Pixits.PX_ZONE_ID := "zone01" +LocationAPI_Pixits.PX_ACCESS_POINT_ID := "4g-macro-cell-2" +LocationAPI_Pixits.PX_USER := "4005C0A640001" +LocationAPI_Pixits.PX_IP_ADDRESS := "10.100.0.1" LocationAPI_Pixits.PX_CLIENT_ID := "0123" -LocationAPI_Pixits.PX_SUBSCRIPTION_ID := "subscription0123" +LocationAPI_Pixits.PX_SUBSCRIPTION_ID := "1" +LocationAPI_Pixits.PX_CALLBACK_REF_URL := { notifyURL := "http://yanngarcia.ddns.net/location/v2/notif/1", callbackData := omit, notificationFormat := omit } +LocationAPI_Pixits.PX_AREA_SUB_CALLBACK_URI := { notifyURL := "http://yanngarcia.ddns.net/location/v2/notif/1", callbackData := omit, notificationFormat := omit } +LocationAPI_Pixits.PX_UE_DIST_SUB_CALLBACK_URI := { notifyURL := "http://yanngarcia.ddns.net/location/v2/notif/1", callbackData := omit, notificationFormat := omit } +LocationAPI_Pixits.PX_UE_COORD_LAT := 43.729538 +LocationAPI_Pixits.PX_UE_COORD_LONG := 7.413819 + UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := false @@ -75,7 +82,7 @@ LibMec_Pixits.PX_ME_WLAN_URI := "/wai/v2" #WlanInformationAPI_Pixits.PX_WLAN_FILTER_FIELD := "ap/macId" # ApInfo filter WlanInformationAPI_Pixits.PX_WLAN_FILTER_FIELD := "staId/macId" # StatInfo filter WlanInformationAPI_Pixits.PX_WLAN_FILTER_VALUE := "\"005C06060606\"" -WlanInformationAPI_Pixits.PX_ASSOC_STA_SUBSCRIPTION_CALLBACK := "https://yanngarcia.ddns.net/wai/v2/notif" +WlanInformationAPI_Pixits.PX_ASSOC_STA_SUBSCRIPTION_CALLBACK := "http://yanngarcia.ddns.net/wai/v2/notif" # Mec-030 V2X Information Service API @@ -86,8 +93,8 @@ WlanInformationAPI_Pixits.PX_ASSOC_STA_SUBSCRIPTION_CALLBACK := "https://yanngar LogFile := "../logs/AtsMec/%e.%h-%r.%s" FileMask := LOG_ALL | USER | DEBUG | MATCHING ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING -#FileMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT -#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT +#FileMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT | TESTCASE +#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT | TESTCASE LogSourceInfo := Stack LogEntityName:= Yes LogEventTypes:= Yes @@ -97,7 +104,8 @@ LogEventTypes:= Yes # 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=192.168.1.39,port=30030,use_ssl=0)" system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=try-mec.etsi.org,port=443,use_ssl=1)" -system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1)" +#system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=80,use_ssl=0)" [DEFINE] # In this section you can create macro definitions, @@ -125,113 +133,242 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server #AtsMec_TestControl.control # ETSI GS MEC 011 -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_PF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_PF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_PF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK +# Check that the IUT responds with a list of available MEC services for a given application instance when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_001_BR +# Check that the IUT notifies the authorised relevant (subscribed) application instances when a new service for a given application instance is registered +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_002_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_002_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_002_NF +# Check that the IUT responds with the information on a specific service for a given application instance when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_003_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_003_NF +# Check that the IUT updates a service information for a given application instance when commanded by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_004_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_004_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_004_NF +# Check that the IUT responds with an error when a request sent by a MEC Application doesn't comply with a required condition +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_004_PF +# Check that the IUT responds with a list of subscriptions for notifications on services availability when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSUB_001_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSUB_001_NF +# Check that the IUT acknowledges the subscription by a MEC Application to notifications on service availability events +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSUB_002_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSUB_002_BR +# Check that the IUT responds with the information on a specific subscription when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSUB_003_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSUB_003_NF +# Check that the IUT acknowledges the unsubscribe from service availability event notifications when commanded by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSUB_004_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSUB_004_NF +# Check that the IUT responds that it has completed the application level termination +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_CONFTASK_001_OK +# Check that the IUT responds with an error when a request for an operationAction is sent to an unknown application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_CONFTASK_001_NF +# Check that the IUT responds that the MEC application is up and running +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_CONFTASK_002_OK +# Check that the IUT responds with an error when a request for an indication is sent to an unknown application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_CONFTASK_002_NF +# Check that the IUT responds with a list of active DNS rules when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_DNS_001_OK +# Check that the IUT responds with the information on a specific DNS rule when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_DNS_002_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_DNS_002_NF +# Check that the IUT updates a specific DNS rule when commanded by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_DNS_003_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_DNS_003_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_DNS_003_NF +# Check that the IUT responds with an error when a request sent by a MEC Application doesn't comply with a required condition +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_DNS_003_PF +# Check that the IUT responds with the liveness of a MEC service instance when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_MSL_001_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_MSL_001_NF +# Check that the IUT updates the liveness of a MEC service instance when requested by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_MSL_002_OK +# Check that the IUT responds with an error when incorrect parameters were sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_MSL_002_BR +# Check that the IUT responds with a list of available MEC services when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SAQ_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SAQ_001_BR +# Check that the IUT responds with the information on a specific service when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SAQ_002_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SAQ_002_NF +# Check that the IUT responds with a list of subscriptions for notifications on services availability when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SRVSUB_001_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SRVSUB_001_NF +# Check that the IUT acknowledges the subscription by a MEC Application to notifications on service availability events +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SRVSUB_002_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SRVSUB_002_BR +# Check that the IUT responds with the information on a specific subscription when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SRVSUB_003_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SRVSUB_003_NF +# Check that the IUT acknowledges the unsubscribe from service availability event notifications when commanded by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SRVSUB_004_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SRVSUB_004_NF +# Check that the IUT responds with timing capabilities when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TIME_001_OK +# Check that the IUT responds with current time when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TIME_002_OK +# Check that the IUT responds with a list of available traffic rules when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TRAF_001_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TRAF_001_NF +# Check that the IUT responds with the information on a specific traffic rule when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TRAF_002_OK +# Check that the IUT updates a specific traffic rule when commanded by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TRAF_003_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TRAF_003_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TRAF_003_NF +# Check that the IUT responds with an error when a request sent by a MEC Application doesn't comply with a required condition +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TRAF_003_PF +# Check that the IUT responds with a list of available transports when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TRANS_001_OK # ETSI GS MEC 012 +# Check that the RNIS service sends an RNIS notification about cell change if the RNIS service has an associated subscription and the event is generated +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_001_OK +# Check that the RNIS service sends an RNIS notification about RAB establishment if the RNIS service has an associated subscription and the event is generated +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_002_OK +# Check that the RNIS service sends an RNIS notification about RAB modification if the RNIS service has an associated subscription and the event is generated +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_003_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_004_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_005_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_006_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_007_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_008_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_009_OK +# Check that the RNIS service sends the list of links to the relevant RNIS subscriptions when requested #AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_011_OK +# Check that the RNIS service creates a new RNIS subscription #AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_012_OK +# Check that the RNIS service responds with an error when it receives a request to get all RNIS subscriptions with a wrong subscription type #AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_011_BR +# Check that the RNIS service responds with an error when it receives a request to create a new RNIS subscription with a wrong format #AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_012_BR +# Check that the RNIS service sends a RNIS subscription when requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_013_OK +# Check that the RNIS service responds with error when a not existing RNIS subscription is requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_013_NF +# Check that the RNIS service modifies a RNIS subscription when requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_014_OK +# Check that the RNIS service sends an error when it receives a malformed modify request for a RNIS subscription +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_014_BR +# Check that the RNIS service responds with error when a modification for a not existing RNIS subscription is requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_014_NF +# Check that the RNIS service deletes a RNIS subscription when requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_015_OK +# Check that the RNIS service responds with error when the deletion of a not existing RNIS subscription is requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_015_NF +# Check that the RNIS service returns the RAB information when requested #AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_016_OK +# Check that the RNIS service returns the PLMN information when requested #AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_017_OK +# Check that the RNIS service returns the S1 bearer information #AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_018_OK +# Check that the RNIS service returns the L2 measurements information #AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_019_OK +# Check that the RNIS service returns an error when the RAB information is requested with a malformatted message #AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_016_BR +# Check that the RNIS service returns an error when the RAB information is requested with a malformatted message #AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_016_NF +# Check that the RNIS service returns an error when the PLMN information is requested with a malformatted message #AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_017_BR +# Check that the RNIS service returns an error when the PLMN information for a not existing element is requested #AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_017_NF +# Check that the RNIS service returns an error when the S1 bearer information is requested with a malformatted message #AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_018_BR +# Check that the RNIS service returns an error when the S1 bearer information for a not existing element is requested #AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_018_NF +# Check that the RNIS service returns an error when the L2 measurements information is requested with a malformatted message #AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_019_BR +# Check that the RNIS service returns an error when the L2 measurements information for a not existing element is requested #AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_019_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_001_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_002_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_003_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_004_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_005_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_006_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_007_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_008_OK # ETSI GS MEC 013 +# Check that the IUT responds with a list for the location of User Equipments when queried by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_001_BR +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_001_NF +# Check that the IUT acknowledges the UE location change subscription request when commanded by a MEC Application and notifies it when the location changes #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_BR +# Check that the IUT acknowledges the cancellation of UE location change notifications when commanded by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_002_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_002_NF +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UETRACKSUB_001_OK +# Check that the IUT acknowledges the UE location change subscription request when commanded by a MEC Application and notifies it when the UE changes location #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UETRACKSUB_001_BR +# Check that the IUT acknowledges the cancellation of UE location change notifications when commanded by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UETRACKSUB_002_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UETRACKSUB_002_NF +# Check that the IUT responds with the information pertaining to one or more UEs in a particular location when queried by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFLOOK_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFLOOK_001_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFLOOK_001_NF +# Check that the IUT acknowledges the UE information change subscription request when commanded by a MEC Application and notifies it when the location changes #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFSUB_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFSUB_001_BR +# Check that the IUT acknowledges the cancellation of UE information change notifications when commanded by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFSUB_002_OK +# Check that the IUT acknowledges the cancellation of UE information change notifications when commanded by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFSUB_002_NF -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_NF -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_BR -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_NF -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTLOOK_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTLOOK_001_BR -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTSUB_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTSUB_001_BR -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTSUB_002_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTSUB_002_NF +# heck that the IUT responds with the list of radio nodes currently associated with the MEC host and the location of each radio node when queried by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_RLOCLOOK_001_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_RLOCLOOK_001_NF +# Check that the IUT acknowledges the UE area change subscription request when commanded by a MEC Application and notifies it when the UE enters the specified circle +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREASUB_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREASUB_001_BR +# Check that the IUT acknowledges the cancellation of UE area change notifications when commanded by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREASUB_002_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREASUB_002_NF +# Check that the IUT responds with the distance to a UE when queried by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTLOOK_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTLOOK_001_BR +# Check that the IUT acknowledges the UE distance subscription request when commanded by a MEC Application and notifies it when (all) the requested UE(s) is (are) within the specified distance +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTSUB_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTSUB_001_BR +# Check that the IUT acknowledges the cancellation of UE distance notifications when commanded by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTSUB_002_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTSUB_002_NF +# ETSI GS MEC 014 #AtsMec_UEidentityAPI_TestCases.TC_MEC_MEC014_SRV_UETAG_001_OK #AtsMec_UEidentityAPI_TestCases.TC_MEC_MEC014_SRV_UETAG_001_BR #AtsMec_UEidentityAPI_TestCases.TC_MEC_MEC014_SRV_UETAG_001_NF @@ -332,7 +469,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server # Check that the IUT responds with an error when an not existing subscription cannot be deleted #AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_010_NF # Check that the IUT sends a notification about WLAN event notification if the MEC service has an associated subscription and the event is generated -AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_011_OK +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_011_OK # ETSI GS MEC 030 # Check that the IUT responds with a configured provisioning information over Uu unicast when queried by a MEC Application @@ -422,8 +559,6 @@ AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_011_OK #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_OK_04 # Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_NF -# Check that the IUT sends a notification about WLAN event notification if the MEC service has an associated subscription and the event is generated -AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC028_SRV_WAI_011_OK [GROUPS] # In this section you can specify groups of hosts. These groups can be used inside the diff --git a/etc/AtsMec/AtsMec_Sandbox.cf_ b/etc/AtsMec/AtsMec_Sandbox.cf_ index a8f94d47c827dcecff7d4b46a3f9008d8883556b..c6006e9d1ecdc5b430174e5ffcf27711efd01db2 100644 --- a/etc/AtsMec/AtsMec_Sandbox.cf_ +++ b/etc/AtsMec/AtsMec_Sandbox.cf_ @@ -8,45 +8,47 @@ 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 := "try-mec.etsi.org" +LibItsHttp_Pics.PICS_HEADER_HOST := "try-mec.etsi.org" #"192.168.1.39" LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" LibItsHttp_Pics.PICS_USE_TOKEN_HEADER := true #LibItsHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" -LibMec_Pics.PICS_ROOT_API := "sbxog70p4h" # Need to sign in on https://try-mec.etsi.org/, section 'Try-it from your MEC application' +LibMec_Pics.PICS_ROOT_API := "/sbxdflb1km/mep1" # Need to sign in on https://try-mec.etsi.org/, section 'Try-it from your MEC application' # LibMec_Pixits -LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/queries/zones" -LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/queries/users" LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v2/subscriptions" LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v2/queries" -LibMec_Pixits.PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v2/applications" -LibMec_Pixits.PX_ME_APP_SUPPORT_URI := "/mec_app_support/v2/applications" -LibMec_Pixits.PX_SVC_MGMT_TRANS_URI := "/mec_service_mgmt/v2/transports" -LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/mec_app_support/v2/timing/timing_caps" -LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/mec_app_support/v2/timing/current_time" +LibMec_Pixits.PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v1/applications" +LibMec_Pixits.PX_ME_APP_SUPPORT_URI := "/mec_app_support/v1/applications" +LibMec_Pixits.PX_SVC_MGMT_TRANS_URI := "/mec_service_mgmt/v1/transports" +LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/mec_app_support/v1/timing/timing_caps" +LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/mec_app_support/v1/timing/current_time" + +LibMec_Pics.PICS_MEC_PLAT := true # Mec-011 AppEnblementAPI -AppEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "appInst01" -AppEnablementAPI_Pixits.PX_SERVICE_NAME := "serName" -AppEnablementAPI_Pixits.PX_SERVICE_ID := "serInst01" -AppEnablementAPI_Pixits.PX_SERVICE_INFO_VERSION := "1.0.0" -AppEnablementAPI_Pixits.PX_NEW_SERVICE_INFO_VERSION := "1.0.0" -AppEnablementAPI_Pixits.PX_SERVICE_INFO_STATE := ACTIVE -AppEnablementAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" -AppEnablementAPI_Pixits.PX_DNS_RULE_ID := "route2home" -AppEnablementAPI_Pixits.PX_DOMAIN_NAME := "etsi.org" -AppEnablementAPI_Pixits.PX_IP_ADDRESS := "10.10.0.2" -AppEnablementAPI_Pixits.PX_TTL := 8 -AppEnablementAPI_Pixits.PX_TRAFFIC_RULE_ID := "trafficRuleId01" +EdgePlatformApplicationEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "b8ae165a-a1e3-4d6c-86d9-52c59ad314b6" +EdgePlatformApplicationEnablementAPI_Pixits.PX_NON_EXISTENT_APP_INSTANCE_ID := "1b5d27e6-5cc4-47d4-812b-a943233dbe08" +EdgePlatformApplicationEnablementAPI_Pixits.PX_SERVICE_NAME := "mec028-1" +EdgePlatformApplicationEnablementAPI_Pixits.PX_SERVICE_ID := "1b5d27e6-5cc4-47d4-812b-a943233dbe08" +EdgePlatformApplicationEnablementAPI_Pixits.PX_HREF := "http://yanngarcia.ddns.net/mec_service_mgmt/v2/notif/1" +EdgePlatformApplicationEnablementAPI_Pixits.PX_SRV_AVAIL_NOTIF_CALLBACK_URI := "http://yanngarcia.ddns.net/mec_service_mgmt/v2/srv_notif/1" +EdgePlatformApplicationEnablementAPI_Pixits.PX_SERVICE_INFO_VERSION := "v2" +EdgePlatformApplicationEnablementAPI_Pixits.PX_NEW_SERVICE_INFO_VERSION := "v2.1" +EdgePlatformApplicationEnablementAPI_Pixits.PX_SERVICE_INFO_STATE := ACTIVE +EdgePlatformApplicationEnablementAPI_Pixits.PX_SUBSCRIPTION_ID := "3" +EdgePlatformApplicationEnablementAPI_Pixits.PX_DNS_RULE_ID := "route2home" +EdgePlatformApplicationEnablementAPI_Pixits.PX_DOMAIN_NAME := "try-mec.etsi.org" +EdgePlatformApplicationEnablementAPI_Pixits.PX_IP_ADDRESS := "10.10.0.2" +EdgePlatformApplicationEnablementAPI_Pixits.PX_TTL := 8 +EdgePlatformApplicationEnablementAPI_Pixits.PX_TRAFFIC_RULE_ID := "trafficRuleId01" # Mec-012 RnisAPI RnisAPI_Pixits.PX_SUBSCRIPTION_HREF_VALUE := "cell_change" -RnisAPI_Pixits.PX_SUBSCRIPTION_TYPE := CELL_CHANGE -RnisAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" -RnisAPI_Pixits.PX_ASSOCIATE_ID_VALUE := "192.0.0.2" -RnisAPI_Pixits.PX_CELL_ID := "0x4040404" +RnisAPI_Pixits.PX_CALLBACK_REFERENCE := "http://yanngarcia.ddns.net/rni/v2/notif/1" +RnisAPI_Pixits.PX_ASSOCIATE_ID_VALUE := "10.100.0.1" +RnisAPI_Pixits.PX_CELL_ID := "1010101" RnisAPI_Pixits.PX_C_ID := "0xFFFFFFFF" RnisAPI_Pixits.PX_APP_INS_ID := "01" RnisAPI_Pixits.PX_APP_ID := "19" @@ -55,15 +57,34 @@ RnisAPI_Pixits.PX_QCI := 0 # Mec-013 LocationAPI LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true -LocationAPI_Pixits.PX_ZONE_ID := "zone02" -LocationAPI_Pixits.PX_ACCESS_POINT_ID := "4g-macro-cell-4" -LocationAPI_Pixits.PX_USER := "10.10.0.1" +LocationAPI_Pixits.PX_ZONE_ID := "zone01" +LocationAPI_Pixits.PX_ACCESS_POINT_ID := "4g-macro-cell-2" +LocationAPI_Pixits.PX_USER := "4005C0A640001" +LocationAPI_Pixits.PX_IP_ADDRESS := "10.100.0.1" LocationAPI_Pixits.PX_CLIENT_ID := "0123" -LocationAPI_Pixits.PX_SUBSCRIPTION_ID := "subscription0123" +LocationAPI_Pixits.PX_SUBSCRIPTION_ID := "1" +LocationAPI_Pixits.PX_CALLBACK_REF_URL := { notifyURL := "http://yanngarcia.ddns.net/location/v2/notif/1", callbackData := omit, notificationFormat := omit } +LocationAPI_Pixits.PX_AREA_SUB_CALLBACK_URI := { notifyURL := "http://yanngarcia.ddns.net/location/v2/notif/1", callbackData := omit, notificationFormat := omit } +LocationAPI_Pixits.PX_UE_DIST_SUB_CALLBACK_URI := { notifyURL := "http://yanngarcia.ddns.net/location/v2/notif/1", callbackData := omit, notificationFormat := omit } +LocationAPI_Pixits.PX_UE_COORD_LAT := 43.729538 +LocationAPI_Pixits.PX_UE_COORD_LONG := 7.413819 + UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := false -BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false +# Mec-015 TrafficManagementAPI +TrafficManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := true + +# Mec-028 WLAN Information API +LibMec_Pixits.PX_ME_WLAN_QUERIES_URI := "/wai/v2/queries" +LibMec_Pixits.PX_ME_WLAN_URI := "/wai/v2" + +#WlanInformationAPI_Pixits.PX_WLAN_FILTER_FIELD := "ap/macId" # ApInfo filter +WlanInformationAPI_Pixits.PX_WLAN_FILTER_FIELD := "staId/macId" # StatInfo filter +WlanInformationAPI_Pixits.PX_WLAN_FILTER_VALUE := "\"005C06060606\"" +WlanInformationAPI_Pixits.PX_ASSOC_STA_SUBSCRIPTION_CALLBACK := "http://yanngarcia.ddns.net/wai/v2/notif" + +# Mec-030 V2X Information Service API [LOGGING] # In this section you can specify the name of the log file and the classes of events @@ -72,8 +93,8 @@ BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false LogFile := "../logs/AtsMec/%e.%h-%r.%s" FileMask := LOG_ALL | USER | DEBUG | MATCHING ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING -#FileMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT -#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT +#FileMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT | TESTCASE +#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT | TESTCASE LogSourceInfo := Stack LogEntityName:= Yes LogEventTypes:= Yes @@ -81,9 +102,10 @@ 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=192.168.1.39,port=30030,use_ssl=0)" system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=try-mec.etsi.org,port=443,use_ssl=1)" -#system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=try-mec.etsi.org,port=443,use_ssl=1)" -#system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=8081,use_ssl=1)" +#system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=80,use_ssl=0)" [DEFINE] # In this section you can create macro definitions, @@ -109,120 +131,434 @@ system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=try-m [EXECUTE] # In this section you can specify what parts of your test suite you want to execute. #AtsMec_TestControl.control -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_OK -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_BR -#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 -# ETSI GS MEC 013 -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_NF -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_BR -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_NF -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_BR -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_BR -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_NF +# ETSI GS MEC 011 +# Check that the IUT responds with a list of available MEC services for a given application instance when queried by a MEC Application +AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_001_BR +# Check that the IUT notifies the authorised relevant (subscribed) application instances when a new service for a given application instance is registered +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_002_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_002_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_002_NF +# Check that the IUT responds with the information on a specific service for a given application instance when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_003_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_003_NF +# Check that the IUT updates a service information for a given application instance when commanded by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_004_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_004_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_004_NF +# Check that the IUT responds with an error when a request sent by a MEC Application doesn't comply with a required condition +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_004_PF +# Check that the IUT responds with a list of subscriptions for notifications on services availability when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSUB_001_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSUB_001_NF +# Check that the IUT acknowledges the subscription by a MEC Application to notifications on service availability events +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSUB_002_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSUB_002_BR +# Check that the IUT responds with the information on a specific subscription when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSUB_003_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSUB_003_NF +# Check that the IUT acknowledges the unsubscribe from service availability event notifications when commanded by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSUB_004_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSUB_004_NF +# Check that the IUT responds that it has completed the application level termination +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_CONFTASK_001_OK +# Check that the IUT responds with an error when a request for an operationAction is sent to an unknown application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_CONFTASK_001_NF +# Check that the IUT responds that the MEC application is up and running +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_CONFTASK_002_OK +# Check that the IUT responds with an error when a request for an indication is sent to an unknown application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_CONFTASK_002_NF +# Check that the IUT responds with a list of active DNS rules when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_DNS_001_OK +# Check that the IUT responds with the information on a specific DNS rule when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_DNS_002_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_DNS_002_NF +# Check that the IUT updates a specific DNS rule when commanded by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_DNS_003_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_DNS_003_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_DNS_003_NF +# Check that the IUT responds with an error when a request sent by a MEC Application doesn't comply with a required condition +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_DNS_003_PF +# Check that the IUT responds with the liveness of a MEC service instance when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_MSL_001_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_MSL_001_NF +# Check that the IUT updates the liveness of a MEC service instance when requested by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_MSL_002_OK +# Check that the IUT responds with an error when incorrect parameters were sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_MSL_002_BR +# Check that the IUT responds with a list of available MEC services when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SAQ_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SAQ_001_BR +# Check that the IUT responds with the information on a specific service when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SAQ_002_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SAQ_002_NF +# Check that the IUT responds with a list of subscriptions for notifications on services availability when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SRVSUB_001_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SRVSUB_001_NF +# Check that the IUT acknowledges the subscription by a MEC Application to notifications on service availability events +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SRVSUB_002_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SRVSUB_002_BR +# Check that the IUT responds with the information on a specific subscription when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SRVSUB_003_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SRVSUB_003_NF +# Check that the IUT acknowledges the unsubscribe from service availability event notifications when commanded by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SRVSUB_004_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SRVSUB_004_NF +# Check that the IUT responds with timing capabilities when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TIME_001_OK +# Check that the IUT responds with current time when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TIME_002_OK +# Check that the IUT responds with a list of available traffic rules when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TRAF_001_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TRAF_001_NF +# Check that the IUT responds with the information on a specific traffic rule when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TRAF_002_OK +# Check that the IUT updates a specific traffic rule when commanded by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TRAF_003_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TRAF_003_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TRAF_003_NF +# Check that the IUT responds with an error when a request sent by a MEC Application doesn't comply with a required condition +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TRAF_003_PF +# Check that the IUT responds with a list of available transports when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_TRANS_001_OK # ETSI GS MEC 012 -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_001_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_002_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_003_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_004_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_005_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_006_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_007_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_008_OK +# Check that the RNIS service sends an RNIS notification about cell change if the RNIS service has an associated subscription and the event is generated +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_001_OK +# Check that the RNIS service sends an RNIS notification about RAB establishment if the RNIS service has an associated subscription and the event is generated +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_002_OK +# Check that the RNIS service sends an RNIS notification about RAB modification if the RNIS service has an associated subscription and the event is generated +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_003_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_004_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_005_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_006_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_007_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_008_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_009_OK +# Check that the RNIS service sends the list of links to the relevant RNIS subscriptions when requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_011_OK +# Check that the RNIS service creates a new RNIS subscription +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_012_OK +# Check that the RNIS service responds with an error when it receives a request to get all RNIS subscriptions with a wrong subscription type +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_011_BR +# Check that the RNIS service responds with an error when it receives a request to create a new RNIS subscription with a wrong format +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_012_BR +# Check that the RNIS service sends a RNIS subscription when requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_013_OK +# Check that the RNIS service responds with error when a not existing RNIS subscription is requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_013_NF +# Check that the RNIS service modifies a RNIS subscription when requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_014_OK +# Check that the RNIS service sends an error when it receives a malformed modify request for a RNIS subscription +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_014_BR +# Check that the RNIS service responds with error when a modification for a not existing RNIS subscription is requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_014_NF +# Check that the RNIS service deletes a RNIS subscription when requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_015_OK +# Check that the RNIS service responds with error when the deletion of a not existing RNIS subscription is requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_015_NF +# Check that the RNIS service returns the RAB information when requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_016_OK +# Check that the RNIS service returns the PLMN information when requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_017_OK +# Check that the RNIS service returns the S1 bearer information +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_018_OK +# Check that the RNIS service returns the L2 measurements information +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_019_OK +# Check that the RNIS service returns an error when the RAB information is requested with a malformatted message +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_016_BR +# Check that the RNIS service returns an error when the RAB information is requested with a malformatted message +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_016_NF +# Check that the RNIS service returns an error when the PLMN information is requested with a malformatted message +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_017_BR +# Check that the RNIS service returns an error when the PLMN information for a not existing element is requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_017_NF +# Check that the RNIS service returns an error when the S1 bearer information is requested with a malformatted message +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_018_BR +# Check that the RNIS service returns an error when the S1 bearer information for a not existing element is requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_018_NF +# Check that the RNIS service returns an error when the L2 measurements information is requested with a malformatted message +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_019_BR +# Check that the RNIS service returns an error when the L2 measurements information for a not existing element is requested +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_019_NF -# ETSI GS MEC 011 -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_PF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_PF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_PF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK +# ETSI GS MEC 013 +# Check that the IUT responds with a list for the location of User Equipments when queried by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_001_BR +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_001_NF +# Check that the IUT acknowledges the UE location change subscription request when commanded by a MEC Application and notifies it when the location changes +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_BR +# Check that the IUT acknowledges the cancellation of UE location change notifications when commanded by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_002_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_002_NF +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UETRACKSUB_001_OK +# Check that the IUT acknowledges the UE location change subscription request when commanded by a MEC Application and notifies it when the UE changes location +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UETRACKSUB_001_BR +# Check that the IUT acknowledges the cancellation of UE location change notifications when commanded by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UETRACKSUB_002_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UETRACKSUB_002_NF +# Check that the IUT responds with the information pertaining to one or more UEs in a particular location when queried by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFLOOK_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFLOOK_001_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFLOOK_001_NF +# Check that the IUT acknowledges the UE information change subscription request when commanded by a MEC Application and notifies it when the location changes +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFSUB_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFSUB_001_BR +# Check that the IUT acknowledges the cancellation of UE information change notifications when commanded by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFSUB_002_OK +# Check that the IUT acknowledges the cancellation of UE information change notifications when commanded by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFSUB_002_NF +# heck that the IUT responds with the list of radio nodes currently associated with the MEC host and the location of each radio node when queried by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_RLOCLOOK_001_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_RLOCLOOK_001_NF +# Check that the IUT acknowledges the UE area change subscription request when commanded by a MEC Application and notifies it when the UE enters the specified circle +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREASUB_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREASUB_001_BR +# Check that the IUT acknowledges the cancellation of UE area change notifications when commanded by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREASUB_002_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREASUB_002_NF +# Check that the IUT responds with the distance to a UE when queried by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTLOOK_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTLOOK_001_BR +# Check that the IUT acknowledges the UE distance subscription request when commanded by a MEC Application and notifies it when (all) the requested UE(s) is (are) within the specified distance +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTSUB_001_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTSUB_001_BR +# Check that the IUT acknowledges the cancellation of UE distance notifications when commanded by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTSUB_002_OK +# Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTSUB_002_NF + +# ETSI GS MEC 014 +#AtsMec_UEidentityAPI_TestCases.TC_MEC_MEC014_SRV_UETAG_001_OK +#AtsMec_UEidentityAPI_TestCases.TC_MEC_MEC014_SRV_UETAG_001_BR +#AtsMec_UEidentityAPI_TestCases.TC_MEC_MEC014_SRV_UETAG_001_NF +#AtsMec_UEidentityAPI_TestCases.TC_MEC_MEC014_SRV_UETAG_002_OK +#AtsMec_UEidentityAPI_TestCases.TC_MEC_MEC014_SRV_UETAG_002_BR +#AtsMec_UEidentityAPI_TestCases.TC_MEC_MEC014_SRV_UETAG_002_PF + +# ETSI GS MEC 015 +# Check that the IUT responds with the list of configured bandwidth allocations when queried by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_001_OK +# Check that the IUT responds with a configured bandwidth allocation when queried by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_002_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_002_BR +# Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_002_NF +# Check that the IUT responds with a registration and initialisation approval for the requested bandwidth requirements sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_003_OK_01 +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_003_OK_02 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_003_BR_01 +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_003_BR_02 +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_003_BR_03 +# Check that the IUT responds with the configured bandwidth allocation when queried by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_004_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_004_NF +# Check that the IUT updates the requested bandwidth requirements when commanded by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_005_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_005_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_005_NF +# Check that the IUT when provided with just the changes (deltas) updates the requested bandwidth requirements when commanded by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_006_OK +#Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_006_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_006_NF +# Check that the IUT unregisters from the Bandwidth Management Service when commanded by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_007_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_007_NF +# Check that the IUT responds with the Multi-access Traffic Steering information when queried by a MEC Application +#AtsMec_MultiAccessSteeringInfoAPI_TestCases.TC_MEC_MEC015_SRV_MTS_001_OK +# Check that the IUT responds with the list of configured Multi-access Traffic Steering when queried by a MEC Application +#AtsMec_MultiAccessSteeringInfoAPI_TestCases.TC_MEC_MEC015_SRV_MTS_002_OK +#Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_MTS_002_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_MTS_002_NF +# Check that the IUT responds with a configured Multi-access Traffic Steering when queried by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_MTS_003_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_MTS_003_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_MTS_003_NF + +# ETSI GS MEC 016 + +# ETSI GS MEC 028 +# Check that the IUT responds with the list of WLAN Access Point +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_001_OK +# Check that the IUT responds with the list of WLAN Access Point filtered by the macId provided as query parameter +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_002_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_002_BR +# Check that the IUT responds with the list of Station Point +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_003_OK +# Check that the IUT responds with the list of Station Point filtered by the macId provided as query parameter +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_004_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_004_BR +# Check that the IUT responds with the requested list of subscription +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_005_OK +# Check that the IUT responds with the requested list of subscription +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_006_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_006_BR +# Check that the IUT responds with an error when a request with not existing parameters is sent +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_006_NF +# Check that the IUT responds with a Notification Subscription +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_007_OK +# Check that the IUT responds with an error when an invalid Subscription request is sent +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_007_BR +# Check that the IUT responds with an error when a request with not existing parameters is sent +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_007_NF +# Check that the IUT responds with the list of Subscription +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_008_OK +# Check that the IUT responds with an error when a request for existing subscription with incorrect parameters is sent +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_008_NF +# Check that the IUT responds with a Notification Subscription when it is modified +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_009_OK +# Check that the IUT responds with an error when an invalid field is set in the subscription modification reques +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_009_BR +# Check that the IUT responds with 204 when an existing subscription is correctly deleted +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_010_OK +# Check that the IUT responds with an error when an not existing subscription cannot be deleted +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_010_NF +# Check that the IUT sends a notification about WLAN event notification if the MEC service has an associated subscription and the event is generated +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_011_OK + +# ETSI GS MEC 030 +# Check that the IUT responds with a configured provisioning information over Uu unicast when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_001_OK_01 +# Check that the IUT responds with a configured provisioning information over Uu unicast when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_001_OK_02 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_001_BR +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_001_NF +# Check that the IUT responds with a configured provisioning information over Uu MBMS when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_OK_01 +# Check that the IUT responds with a configured provisioning information over Uu MBMS when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_OK_02 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_BR +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_NF +# Check that the IUT responds with a configured provisioning information over PC5 when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_003_OK_01 +# Check that the IUT responds with a configured provisioning information over PC5 when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_003_OK_02 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_003_BR +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_003_NF +# Check that the IUT sends a request about QoS information for a vehicular UE when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_004_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_004_BR +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_004_NF +# Check that the IUT processes properly a request to publish a V2X message +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_005_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_005_BR +# Check that the IUT responds with the requested list of subscription when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_006_OK_01 +# Check that the IUT responds with the requested list of subscription when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_006_OK_02 +# Check that the IUT responds with the requested list of subscription when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_006_OK_03 +# Check that the IUT responds with the requested list of subscription when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_006_OK_04 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_006_BR +# Check that the IUT responds with the requested to create a subscription +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_OK_01 +# Check that the IUT responds with the requested to create a subscription +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_OK_02 +# Check that the IUT responds with the requested to create a subscription +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_OK_03 +# Check that the IUT responds with the requested to create a subscription +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_OK_04 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_BR +# Check that the IUT responds with the requested of subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_01 +# Check that the IUT responds with the requested of subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_02 +# Check that the IUT responds with the requested of subscription information when queried by a MEC Application#AtsMec_V2XInformationServiceAPI_TestCases.TC_#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_03 +# Check that the IUT responds with the requested of subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_04 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_BR +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_NF +# Check that the IUT responds with the request of updating subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_01 +# Check that the IUT responds with the request of updating subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_02 +# Check that the IUT responds with the request of updating subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_03 +# Check that the IUT responds with the request of updating subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_04 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_BR +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_NF +# Check that the IUT responds with the request of removing subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_OK_01 +# Check that the IUT responds with the request of removing subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_OK_02 +# Check that the IUT responds with the request of removing subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_OK_03 +# Check that the IUT responds with the request of removing subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_OK_04 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_NF [GROUPS] # In this section you can specify groups of hosts. These groups can be used inside the diff --git a/etc/AtsMec/AtsMec_Simu.cf_ b/etc/AtsMec/AtsMec_Simu.cf_ deleted file mode 100644 index 1c4783ec1db92bbcab341ea1c13d8f3e524b25a5..0000000000000000000000000000000000000000 --- a/etc/AtsMec/AtsMec_Simu.cf_ +++ /dev/null @@ -1,239 +0,0 @@ -[MODULE_PARAMETERS] -# This section shall contain the values of all parameters that are defined in your TTCN-3 modules. - -# IUT roles - -LibCommon_Time.PX_TAC := 30.0 -#LibCommon_Time.PX_TWAIT := 30.0 -LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0; -LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0; - -LibItsHttp_Pics.PICS_HEADER_HOST := "127.0.0.1" - -LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" -LibItsHttp_Pics.PICS_USE_TOKEN_HEADER := true -#LibItsHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" - -LibMec_Pics.PICS_ROOT_API := "" # Need to sign in on https://try-mec.etsi.org/, section 'Try-it from your MEC application' - -# LibMec_Pixits -LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/queries/zones" -LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/queries/users" -LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v2/subscriptions" -LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v2/queries" -LibMec_Pixits.PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v2/applications" -LibMec_Pixits.PX_ME_APP_SUPPORT_URI := "/mec_app_support/v2/applications" -LibMec_Pixits.PX_SVC_MGMT_TRANS_URI := "/mec_service_mgmt/v2/transports" -LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/mec_app_support/v2/timing/timing_caps" -LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/mec_app_support/v2/timing/current_time" - -# Mec-011 AppEnblementAPI -AppEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "appInst01" -AppEnablementAPI_Pixits.PX_SERVICE_NAME := "serName" -AppEnablementAPI_Pixits.PX_SERVICE_ID := "serInst01" -AppEnablementAPI_Pixits.PX_SERVICE_INFO_VERSION := "1.0.0" -AppEnablementAPI_Pixits.PX_NEW_SERVICE_INFO_VERSION := "1.0.0" -AppEnablementAPI_Pixits.PX_SERVICE_INFO_STATE := ACTIVE -AppEnablementAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" -AppEnablementAPI_Pixits.PX_DNS_RULE_ID := "route2home" -AppEnablementAPI_Pixits.PX_DOMAIN_NAME := "etsi.org" -AppEnablementAPI_Pixits.PX_IP_ADDRESS := "10.10.0.2" -AppEnablementAPI_Pixits.PX_TTL := 8 -AppEnablementAPI_Pixits.PX_TRAFFIC_RULE_ID := "trafficRuleId01" - -# Mec-012 RnisAPI -RnisAPI_Pixits.PX_SUBSCRIPTION_HREF_VALUE := "cell_change" -RnisAPI_Pixits.PX_SUBSCRIPTION_TYPE := CELL_CHANGE -RnisAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" -RnisAPI_Pixits.PX_ASSOCIATE_ID_VALUE := "192.0.0.2" -RnisAPI_Pixits.PX_CELL_ID := "0x4040404" -RnisAPI_Pixits.PX_C_ID := "0xFFFFFFFF" -RnisAPI_Pixits.PX_APP_INS_ID := "01" -RnisAPI_Pixits.PX_APP_ID := "19" -RnisAPI_Pixits.PX_E_RAB_ID := 0 -RnisAPI_Pixits.PX_QCI := 0 - -# Mec-013 LocationAPI -LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true -LocationAPI_Pixits.PX_ZONE_ID := "zone02" -LocationAPI_Pixits.PX_ACCESS_POINT_ID := "4g-macro-cell-4" -LocationAPI_Pixits.PX_USER := "10.10.0.1" -LocationAPI_Pixits.PX_CLIENT_ID := "0123" -LocationAPI_Pixits.PX_SUBSCRIPTION_ID := "subscription0123" - -UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := false - -BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false - -[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). - -LogFile := "../logs/AtsMec/%e.%h-%r.%s" -FileMask := LOG_ALL | USER | DEBUG | MATCHING -ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING -#FileMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT -#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT -LogSourceInfo := Stack -LogEntityName:= Yes -LogEventTypes:= Yes -#TimeStampFormat := DateTime - -[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=try-mec.etsi.org,port=443,use_ssl=1)" -system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=127.0.0.1,port=8081,use_ssl=0)" -system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=8082,use_ssl=1)" - -[DEFINE] -# In this section you can create macro definitions, -# that can be used in other configuration file sections except [INCLUDE] and [ORDERED_INCLUDE]. - -[INCLUDE] -# To use configuration settings given in other configuration files, -# the configuration files just need to be listed in this section, with their full or relative pathnames. - -[ORDERED_INCLUDE] -# To use configuration settings given in other configuration files, -# the configuration files just need to be listed in this section, with their full or relative pathnames. - -[EXTERNAL_COMMANDS] -# This section can define external commands (shell scripts) to be executed by the ETS -# whenever a control part or test case is started or terminated. - -#BeginTestCase := "" -#EndTestCase := "" -#BeginControlPart := "" -#EndControlPart := "" - -[EXECUTE] -# In this section you can specify what parts of your test suite you want to execute. -#AtsMec_TestControl.control -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_OK -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_BR -#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 - -# ETSI GS MEC 013 -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_NF -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_BR -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_NF -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_BR -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_BR -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_NF - -# ETSI GS MEC 012 -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_001_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_002_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_003_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_004_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_005_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_006_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_007_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_008_OK - -# ETSI GS MEC 011 -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_PF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_PF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_PF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK - -[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. - -[COMPONENTS] -# This section consists of rules restricting the location of created PTCs. - -[MAIN_CONTROLLER] -# The options herein control the behavior of MC. -KillTimer := 10.0 -LocalAddress := 127.0.0.1 -TCPPort := 12000 -NumHCs := 1 diff --git a/etc/AtsMec/AtsMec_Zte.cf_ b/etc/AtsMec/AtsMec_Zte.cf_ deleted file mode 100644 index 34b4aa47800c93be0de58fbf265972cb31b34b74..0000000000000000000000000000000000000000 --- a/etc/AtsMec/AtsMec_Zte.cf_ +++ /dev/null @@ -1,243 +0,0 @@ -[MODULE_PARAMETERS] -# This section shall contain the values of all parameters that are defined in your TTCN-3 modules. - -# IUT roles - -LibCommon_Time.PX_TAC := 30.0 -#LibCommon_Time.PX_TWAIT := 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.22.16.202" - -LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" -LibItsHttp_Pics.PICS_USE_TOKEN_HEADER := true -#LibItsHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" - -LibMec_Pics.PICS_ROOT_API := "zte" -LibMec_Pics.PICS_RNIS_NOTIFICATIONS := false - -# LibMex_Pixits -LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/zones" -LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/users" -LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v1/subscriptions" -LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v1/queries" -LibMec_Pixits.PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v1/applications" -LibMec_Pixits.PX_ME_APP_SUPPORT_URI := "/mec_app_support/v1/applications" -LibMec_Pixits.PX_SVC_MGMT_TRANS_URI := "/mec_service_mgmt/v1/transports" -LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/mec_app_support/v1/timing/timing_caps" -LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/mec_app_support/v1/timing/current_time" - -# Mec-011 AppEnblementAPI -AppEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "12345678901234567890" -AppEnablementAPI_Pixits.PX_SERVICE_NAME := "testservice23" -AppEnablementAPI_Pixits.PX_SERVICE_ID := "testservice23" -AppEnablementAPI_Pixits.PX_SERVICE_INFO_VERSION := "1.0.0" -AppEnablementAPI_Pixits.PX_NEW_SERVICE_INFO_VERSION := "1.0.0" -AppEnablementAPI_Pixits.PX_SERVICE_INFO_STATE := ACTIVE -AppEnablementAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" -AppEnablementAPI_Pixits.PX_DNS_RULE_ID := "dnsrule1" -AppEnablementAPI_Pixits.PX_DOMAIN_NAME := "etsi.org" -AppEnablementAPI_Pixits.PX_IP_ADDRESS := "10.10.0.2" -AppEnablementAPI_Pixits.PX_TTL := 8 -AppEnablementAPI_Pixits.PX_TRAFFIC_RULE_ID := "trafficRuleId01" - -# Mec-012 RnisAPI -RnisAPI_Pixits.PX_SUBSCRIPTION_HREF_VALUE := "cell_change" -RnisAPI_Pixits.PX_SUBSCRIPTION_TYPE := CELL_CHANGE -RnisAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" -RnisAPI_Pixits.PX_ASSOCIATE_ID_VALUE := "192.0.0.2" -RnisAPI_Pixits.PX_CELL_ID := "0x0800000A" -RnisAPI_Pixits.PX_C_ID := "0xFFFFFFFF" -RnisAPI_Pixits.PX_APP_INS_ID := "01" -RnisAPI_Pixits.PX_APP_ID := "19" -RnisAPI_Pixits.PX_E_RAB_ID := 0 -RnisAPI_Pixits.PX_QCI := 0 - -# Mec-013 LocationAPI -LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true -LocationAPI_Pixits.PX_ZONE_ID := "zone1" -LocationAPI_Pixits.PX_USER := "ue1" -LocationAPI_Pixits.PX_CLIENT_ID := "0123" -LocationAPI_Pixits.PX_SUBSCRIPTION_ID := "subscription0123" - -UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := false - -BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false - -[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). - -LogFile := "../logs/%e.%h-%r.%s" -FileMask := LOG_ALL | USER | DEBUG | MATCHING -ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING -#FileMask := LOG_ALL | USER | DEBUG | MATCHING -#ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING -LogSourceInfo := Stack -LogEntityName:= Yes -LogEventTypes:= Yes -#TimeStampFormat := DateTime - -[TESTPORT_PARAMETERS] -# In this section you can specify parameters that are passed to Test Ports. -#MEC-011 -system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.22.16.202,port=30104,use_ssl=0)" -# MEC-013 -#system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.22.16.202,port=30101,use_ssl=0)" -#system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.28.4.253,port=30007,use_ssl=0)" -system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=8081,use_ssl=0)" - -[DEFINE] -# In this section you can create macro definitions, -# that can be used in other configuration file sections except [INCLUDE] and [ORDERED_INCLUDE]. - -[INCLUDE] -# To use configuration settings given in other configuration files, -# the configuration files just need to be listed in this section, with their full or relative pathnames. - -[ORDERED_INCLUDE] -# To use configuration settings given in other configuration files, -# the configuration files just need to be listed in this section, with their full or relative pathnames. - -[EXTERNAL_COMMANDS] -# This section can define external commands (shell scripts) to be executed by the ETS -# whenever a control part or test case is started or terminated. - -#BeginTestCase := "" -#EndTestCase := "" -#BeginControlPart := "" -#EndControlPart := "" - -[EXECUTE] -# In this section you can specify what parts of your test suite you want to execute. -#AtsMec_TestControl.control -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_OK -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_BR -#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 - -# ETSI GS MEC 013 -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_NF -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_BR -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_NF -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_BR -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_BR -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_NF - -# ETSI GS MEC 012 -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_NF - -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_001_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_002_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_003_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_004_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_005_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_006_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_007_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_008_OK - -# ETSI GS MEC 011 -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_BR -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_NF -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_NF -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_PF -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_NF -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_BR -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_NF -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_NF -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_001_OK -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_NF -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_PF -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_BR -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_NF -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_NF -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_BR -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_NF -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_NF -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_001_OK -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_002_OK -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_NF -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_PF -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK - -[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. - -[COMPONENTS] -# This section consists of rules restricting the location of created PTCs. - -[MAIN_CONTROLLER] -# The options herein control the behavior of MC. -KillTimer := 10.0 -LocalAddress := 127.0.0.1 -TCPPort := 12000 -NumHCs := 1 diff --git a/etc/AtsMec/AtsMec_Zte_MEC011.cf_ b/etc/AtsMec/AtsMec_Zte_MEC011.cf_ deleted file mode 100644 index 602717fb8abcc6301dc028bd8518583544d1f30f..0000000000000000000000000000000000000000 --- a/etc/AtsMec/AtsMec_Zte_MEC011.cf_ +++ /dev/null @@ -1,243 +0,0 @@ -[MODULE_PARAMETERS] -# This section shall contain the values of all parameters that are defined in your TTCN-3 modules. - -# IUT roles - -LibCommon_Time.PX_TAC := 30.0 -#LibCommon_Time.PX_TWAIT := 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.22.16.202" - -LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" -LibItsHttp_Pics.PICS_USE_TOKEN_HEADER := true -#LibItsHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" - -LibMec_Pics.PICS_ROOT_API := "zte" -LibMec_Pics.PICS_RNIS_NOTIFICATIONS := false - -# LibMex_Pixits -LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/zones" -LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/users" -LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v1/subscriptions" -LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v1/queries" -LibMec_Pixits.PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v1/applications" -LibMec_Pixits.PX_ME_APP_SUPPORT_URI := "/mec_app_support/v1/applications" -LibMec_Pixits.PX_SVC_MGMT_TRANS_URI := "/mec_service_mgmt/v1/transports" -LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/mec_app_support/v1/timing/timing_caps" -LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/mec_app_support/v1/timing/current_time" - -# Mec-011 AppEnblementAPI -AppEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "12345678901234567890" -AppEnablementAPI_Pixits.PX_SERVICE_NAME := "testservice23" -AppEnablementAPI_Pixits.PX_SERVICE_ID := "testservice23" -AppEnablementAPI_Pixits.PX_SERVICE_INFO_VERSION := "1.0.0" -AppEnablementAPI_Pixits.PX_NEW_SERVICE_INFO_VERSION := "2.0.0" -AppEnablementAPI_Pixits.PX_SERVICE_INFO_STATE := ACTIVE -AppEnablementAPI_Pixits.PX_SUBSCRIPTION_ID := "12345678901234567890-1" -AppEnablementAPI_Pixits.PX_DNS_RULE_ID := "dnsrule1" -AppEnablementAPI_Pixits.PX_DOMAIN_NAME := "etsi.org" -AppEnablementAPI_Pixits.PX_IP_ADDRESS := "10.10.0.2" -AppEnablementAPI_Pixits.PX_TTL := 8 -AppEnablementAPI_Pixits.PX_TRAFFIC_RULE_ID := "trafficRuleId01" - -# Mec-012 RnisAPI -RnisAPI_Pixits.PX_SUBSCRIPTION_HREF_VALUE := "cell_change" -RnisAPI_Pixits.PX_SUBSCRIPTION_TYPE := CELL_CHANGE -RnisAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" -RnisAPI_Pixits.PX_ASSOCIATE_ID_VALUE := "192.0.0.2" -RnisAPI_Pixits.PX_CELL_ID := "0x0800000A" -RnisAPI_Pixits.PX_C_ID := "0xFFFFFFFF" -RnisAPI_Pixits.PX_APP_INS_ID := "01" -RnisAPI_Pixits.PX_APP_ID := "19" -RnisAPI_Pixits.PX_E_RAB_ID := 0 -RnisAPI_Pixits.PX_QCI := 0 - -# Mec-013 LocationAPI -LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true -LocationAPI_Pixits.PX_ZONE_ID := "zone1" -LocationAPI_Pixits.PX_USER := "ue1" -LocationAPI_Pixits.PX_CLIENT_ID := "0123" -LocationAPI_Pixits.PX_SUBSCRIPTION_ID := "subscription0123" - -UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := false - -BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false - -[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). - -LogFile := "../logs/%e.%h-%r.%s" -FileMask := LOG_ALL | USER | DEBUG | MATCHING -ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING -#FileMask := LOG_ALL | USER | DEBUG | MATCHING -#ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING -LogSourceInfo := Stack -LogEntityName:= Yes -LogEventTypes:= Yes -#TimeStampFormat := DateTime - -[TESTPORT_PARAMETERS] -# In this section you can specify parameters that are passed to Test Ports. -#MEC-011 -system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.22.16.202,port=30104,use_ssl=0)" -# MEC-013 -#system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.22.16.202,port=30101,use_ssl=0)" -#system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.28.4.253,port=30007,use_ssl=0)" -system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=8081,use_ssl=0)" - -[DEFINE] -# In this section you can create macro definitions, -# that can be used in other configuration file sections except [INCLUDE] and [ORDERED_INCLUDE]. - -[INCLUDE] -# To use configuration settings given in other configuration files, -# the configuration files just need to be listed in this section, with their full or relative pathnames. - -[ORDERED_INCLUDE] -# To use configuration settings given in other configuration files, -# the configuration files just need to be listed in this section, with their full or relative pathnames. - -[EXTERNAL_COMMANDS] -# This section can define external commands (shell scripts) to be executed by the ETS -# whenever a control part or test case is started or terminated. - -#BeginTestCase := "" -#EndTestCase := "" -#BeginControlPart := "" -#EndControlPart := "" - -[EXECUTE] -# In this section you can specify what parts of your test suite you want to execute. -#AtsMec_TestControl.control -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_OK -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_BR -#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 - -# ETSI GS MEC 013 -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_NF -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_BR -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_NF -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_BR -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_BR -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_NF - -# ETSI GS MEC 012 -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_NF - -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_001_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_002_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_003_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_004_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_005_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_006_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_007_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_008_OK - -# ETSI GS MEC 011 -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_PF -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_NF -AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_PF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_PF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK - -[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. - -[COMPONENTS] -# This section consists of rules restricting the location of created PTCs. - -[MAIN_CONTROLLER] -# The options herein control the behavior of MC. -KillTimer := 10.0 -LocalAddress := 127.0.0.1 -TCPPort := 12000 -NumHCs := 1 diff --git a/etc/AtsMec/AtsMec_Zte_MEC013.cf_ b/etc/AtsMec/AtsMec_Zte_MEC013.cf_ deleted file mode 100644 index 9831094baa079976d5c18257982618dcc18645d1..0000000000000000000000000000000000000000 --- a/etc/AtsMec/AtsMec_Zte_MEC013.cf_ +++ /dev/null @@ -1,239 +0,0 @@ -[MODULE_PARAMETERS] -# This section shall contain the values of all parameters that are defined in your TTCN-3 modules. - -# IUT roles - -LibCommon_Time.PX_TAC := 30.0 -#LibCommon_Time.PX_TWAIT := 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.22.16.202" - -LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" -LibItsHttp_Pics.PICS_USE_TOKEN_HEADER := true -#LibItsHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" - -LibMec_Pics.PICS_ROOT_API := "zte" -LibMec_Pics.PICS_RNIS_NOTIFICATIONS := false - -# LibMex_Pixits -LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/zones" -LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/users" -LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v1/subscriptions" -LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v1/queries" -LibMec_Pixits.PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v1/applications" -LibMec_Pixits.PX_ME_APP_SUPPORT_URI := "/mec_app_support/v1/applications" -LibMec_Pixits.PX_SVC_MGMT_TRANS_URI := "/mec_service_mgmt/v1/transports" -LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/mec_app_support/v1/timing/timing_caps" -LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/mec_app_support/v1/timing/current_time" - -# Mec-011 AppEnblementAPI -AppEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "appInst01" -AppEnablementAPI_Pixits.PX_SERVICE_NAME := "serName" -AppEnablementAPI_Pixits.PX_SERVICE_ID := "serInst01" -AppEnablementAPI_Pixits.PX_SERVICE_INFO_VERSION := "1.0.0" -AppEnablementAPI_Pixits.PX_NEW_SERVICE_INFO_VERSION := "1.0.0" -AppEnablementAPI_Pixits.PX_SERVICE_INFO_STATE := ACTIVE -AppEnablementAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" -AppEnablementAPI_Pixits.PX_DNS_RULE_ID := "route2home" -AppEnablementAPI_Pixits.PX_DOMAIN_NAME := "etsi.org" -AppEnablementAPI_Pixits.PX_IP_ADDRESS := "10.10.0.2" -AppEnablementAPI_Pixits.PX_TTL := 8 -AppEnablementAPI_Pixits.PX_TRAFFIC_RULE_ID := "trafficRuleId01" - -# Mec-012 RnisAPI -RnisAPI_Pixits.PX_SUBSCRIPTION_HREF_VALUE := "cell_change" -RnisAPI_Pixits.PX_SUBSCRIPTION_TYPE := CELL_CHANGE -RnisAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" -RnisAPI_Pixits.PX_ASSOCIATE_ID_VALUE := "192.0.0.2" -RnisAPI_Pixits.PX_CELL_ID := "0x0800000A" -RnisAPI_Pixits.PX_C_ID := "0xFFFFFFFF" -RnisAPI_Pixits.PX_APP_INS_ID := "01" -RnisAPI_Pixits.PX_APP_ID := "19" -RnisAPI_Pixits.PX_E_RAB_ID := 0 -RnisAPI_Pixits.PX_QCI := 0 - -# Mec-013 LocationAPI -LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true -LocationAPI_Pixits.PX_ZONE_ID := "zone01" -LocationAPI_Pixits.PX_USER := "acr:10.0.0.3" -LocationAPI_Pixits.PX_CLIENT_ID := "0123" -LocationAPI_Pixits.PX_SUBSCRIPTION_ID := "0123" - -UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := false - -BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false - -[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). - -LogFile := "../logs/%e.%h-%r.%s" -#FileMask := LOG_ALL | USER | DEBUG | MATCHING -#ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING -FileMask := LOG_ALL | USER | DEBUG | MATCHING -ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING -LogSourceInfo := Stack -LogEntityName:= Yes -LogEventTypes:= Yes -#TimeStampFormat := DateTime - -[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.22.16.202,port=30101,use_ssl=0)" -#system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.28.4.253,port=30007,use_ssl=0)" -system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=8081,use_ssl=0)" - -[DEFINE] -# In this section you can create macro definitions, -# that can be used in other configuration file sections except [INCLUDE] and [ORDERED_INCLUDE]. - -[INCLUDE] -# To use configuration settings given in other configuration files, -# the configuration files just need to be listed in this section, with their full or relative pathnames. - -[ORDERED_INCLUDE] -# To use configuration settings given in other configuration files, -# the configuration files just need to be listed in this section, with their full or relative pathnames. - -[EXTERNAL_COMMANDS] -# This section can define external commands (shell scripts) to be executed by the ETS -# whenever a control part or test case is started or terminated. - -#BeginTestCase := "" -#EndTestCase := "" -#BeginControlPart := "" -#EndControlPart := "" - -[EXECUTE] -# In this section you can specify what parts of your test suite you want to execute. -#AtsMec_TestControl.control -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_OK -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_BR -#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 - -# ETSI GS MEC 013 -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_OK -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_BR -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_NF -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_OK -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_BR -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_OK -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_NF -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_OK -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_BR -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_OK -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_NF -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_OK -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_BR -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_NF -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_OK -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_BR -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF -AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_OK -AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_NF -AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_OK -AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_BR -AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_OK -AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_NF -AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_OK -AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_BR -AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_OK -AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_BR -AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_OK -AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_NF - -# ETSI GS MEC 012 -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_NF -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_001_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_002_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_003_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_004_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_005_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_006_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_007_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_008_OK - -# ETSI GS MEC 011 -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_PF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_PF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_BR -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_NF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_PF -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK - -[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. - -[COMPONENTS] -# This section consists of rules restricting the location of created PTCs. - -[MAIN_CONTROLLER] -# The options herein control the behavior of MC. -KillTimer := 10.0 -LocalAddress := 127.0.0.1 -TCPPort := 12000 -NumHCs := 1 diff --git a/logs/README.md b/logs/README.md new file mode 100644 index 0000000000000000000000000000000000000000..b0dfb723e139e4ed96bf3ad5648887d4672e12ad --- /dev/null +++ b/logs/README.md @@ -0,0 +1 @@ +This folder will contains execution logs for ETSI MEC-DECODE ATS. diff --git a/scripts/update_user_name.sh b/scripts/update_user_name.sh new file mode 100755 index 0000000000000000000000000000000000000000..b5c5d7f3aa7a64d722acac43be8be11ebc2a15df --- /dev/null +++ b/scripts/update_user_name.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +# Debug mode +#set -e +#set -vx + +# Usage: sudo ./update_user_name.bash +# TODO Use git clone in temporary directory + +USER_NAME='s/etsi/vagrant/g' +for i in `find /home/vagrant/dev/$1 -name "*.cf*"` +do + sed --in-place ${USER_NAME} $i +done + +exit 0 diff --git a/ttcn/AtsMec/AtsMec_AppLCM_TestCases.ttcn b/ttcn/AtsMec/AtsMec_AppLCM_TestCases.ttcn deleted file mode 100644 index da1718b79b7a876626dc8822e811ca17d7426287..0000000000000000000000000000000000000000 --- a/ttcn/AtsMec/AtsMec_AppLCM_TestCases.ttcn +++ /dev/null @@ -1,1622 +0,0 @@ -/** -* @author ETSI / STF569 -* @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 003, Draft ETSI GS MEC 010-2 V2.1.1 -*/ -module AtsMec_AppLCM_TestCases { - - // Libcommon - 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; - - - import from AppLCM_Templates all; - import from AppLCM_Pics all; - import from AppLCM_Pixits all; - - // LibMec - import from LibMec_Functions all; - import from LibMec_Pics all; - import from LibMec_Pixits all; - - group App_lifecycle_management { - - /** - * @desc: Check that MEC API provider creates a new App Package when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.5.1.3.1 - * ETSI GS MEC 010-2 2.0.10, Table 6.2.2.3.2-1 //CreateAppInstanceRequest - * ETSI GS MEC 010-2 2.0.10, Table 6.2.2.4.2-1 //AppInstanceInfo - */ - testcase TC_MEC_MEC010p2_MEX_LCM_001_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEX_LCM_URI, - v_headers, - m_http_message_body_json( - m_body_json_lifecycle_management( - m_lifecycle_management_create( - PX_APP_D_ID - ) - ) - ) - ) - )); - - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_201_created( - mw_http_message_body_json( - mw_body_json_mex_lcm_instance_info( - mw_lcm_instance_info( - -, - PX_APP_D_ID, - PX_INSTANTIATION_STATE - ) - ))))) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with the App LCM Instance info details ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_001_OK - - - - /** - * @desc: Check that MEC API provider sends an error when it receives - * a malformed request for the creation of a new App Instance - * ETSI GS MEC 010-2 2.0.10, clause 7.5.1.3.1 - * ETSI GS MEC 010-2 2.0.10, Table 6.2.2.3.2-1 //CreateAppInstanceRequest - */ - testcase TC_MEC_MEC010p2_MEX_LCM_001_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEX_LCM_URI, - v_headers, - m_http_message_body_json( - m_body_json_lifecycle_management_with_error( - m_lifecycle_management_create_with_error( - PX_APP_D_ID - ) - ) - ) - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a Bad response ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_001_BR - - - - /** - * @desc: Check that MEC API provider retrieves the list of App instances when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.5.1.3.2 - * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 //AppInstanceInfo - */ - testcase TC_MEC_MEC010p2_MEX_LCM_002_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEX_LCM_URI, - 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_mex_lcm_instance_info_list({ - *, - mw_lcm_instance_info( - PX_APP_INSTANCE_ID, - -, - - ), - * - } - ) - ) - ) - )) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with an App LCM instance info and 200 status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_002_OK - - - /** - * @desc: Check that MEC API provider retrieves an App Package when requested - * @see: ETSI GS MEC 010-2 2.0.10, clause 7.5.2.3.2 - * ETSI GS MEC 010-2 2.0.10, Table 6.2.2.4.2-1 - */ - testcase TC_MEC_MEC010p2_MEX_LCM_003_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEX_LCM_URI & oct2char(unichar2oct(PX_APP_INSTANCE_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_mex_lcm_instance_info( - mw_lcm_instance_info( - PX_APP_INSTANCE_ID, - -, - - - ) - ))))) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a App instance info ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_003_OK - - - - - - /** - * @desc: Check that MEC API provider fails on retrieving an App Instance when requested using wrong appInstanceId - * @see: ETSI GS MEC 010-2 2.0.10, clause 7.5.2.3.2 - */ - testcase TC_MEC_MEC010p2_MEX_LCM_003_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEX_LCM_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) &"/app_descriptor", - 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( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 not found status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_003_NF - - - /** - * @desc: Check that MEC API provider service deletes an App Instance when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.5.2.3.4 - */ - testcase TC_MEC_MEC010p2_MEX_LCM_004_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - "/" & PICS_ROOT_API & PX_MEX_LCM_URI & oct2char(unichar2oct(PX_APP_INSTANCE_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_204_no_content( - ))) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 204 no content status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_004_OK - - /** - * @desc: Check that MEC API provider fails on deletion of an App Instance when requested using wrong appInstanceId - * @see: ETSI GS MEC 010-2 2.0.10, clause 7.5.2.3.2 - */ - testcase TC_MEC_MEC010p2_MEX_LCM_004_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - "/" & PICS_ROOT_API & PX_MEX_LCM_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_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_404_not_found( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 not found status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_004_NF - - - /** - * @desc: Check that MEC API provider service instantiates an App Instance when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.5.6.3.1 - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.7.2-1 //InstantiateAppRequest - */ - testcase TC_MEC_MEC010p2_MEX_LCM_005_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEX_LCM_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/instantiate", - v_headers, - m_http_message_body_json( - m_body_json_lifecycle_management_instantiate( - m_lifecycle_management_instantiate( - PX_APP_D_ID - ) - ) - ) - - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_202_accepted( - ))) -> value v_response { - tc_ac.stop; - if (f_check_headers(v_response.response.header) == true) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 202 accepted***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); - } else { - log("*** " & testcasename() & ": FAIL: Header 'Location' was not present in the response headers ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_error); - } - } - [] tc_ac.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); - } - } // End of 'alt' statement - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_005_OK - - - /** - * @desc: Check that MEC API providerservice fails to instantiate an App Instance when - * it receives a request related to a not existing App Instance - * ETSI GS MEC 010-2 2.0.10, clause 7.5.6.3.1 - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.7.2-1 //InstantiateAppRequest - */ - testcase TC_MEC_MEC010p2_MEX_LCM_005_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEX_LCM_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/instantiate", - v_headers, - m_http_message_body_json( - m_body_json_lifecycle_management_instantiate( - m_lifecycle_management_instantiate( - PX_APP_D_ID - ) - ) - ) - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_404_not_found( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 not found status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_005_NF - - - /** - * @desc: Check that MEC API provider service fails to instantiate an App Instance when it receives a malformed request - * ETSI GS MEC 010-2 2.0.10, clause 7.5.6.3.1 - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.7.2-1 //InstantiateAppRequest - */ - testcase TC_MEC_MEC010p2_MEX_LCM_005_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEX_LCM_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/instantiate", - v_headers, - m_http_message_body_json( - m_body_json_lifecycle_management_instantiate_with_error( - m_lifecycle_management_instantiate_with_error( - PX_APP_D_ID - ) - ) - ) - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 400 bad request status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_005_BR - - - /** - * @desc: Check that MEC API provider service terminates an App Instance when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.5.7.3.1 - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.9.2-1 //TerminateAppRequest - */ - testcase TC_MEC_MEC010p2_MEX_LCM_006_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEX_LCM_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/terminate", - v_headers, - m_http_message_body_json( - m_body_json_lifecycle_management_terminate( - m_lifecycle_management_terminate( - PX_APP_TERMINATION_TYPE - ) - ) - ) - - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_202_accepted( - ))) -> value v_response { - tc_ac.stop; - if (f_check_headers(v_response.response.header) == true) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 202 accepted***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); - } else { - log("*** " & testcasename() & ": FAIL: Header 'Location' was not present in the response headers ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_error); - } - } - [] tc_ac.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); - } - } // End of 'alt' statement - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_006_OK - - - /** - * @desc: Check that MEC API providerservice fails to terminate an App Instance when - * it receives a request related to a not existing App Instance - * ETSI GS MEC 010-2 2.0.10, clause 7.5.7.3.1 - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.9.2-1 //TerminateAppRequest - */ - testcase TC_MEC_MEC010p2_MEX_LCM_006_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEX_LCM_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/terminate", - v_headers, - m_http_message_body_json( - m_body_json_lifecycle_management_terminate( - m_lifecycle_management_terminate( - PX_APP_TERMINATION_TYPE - ) - ) - ) - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_404_not_found( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 not found status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_006_NF - - - /** - * @desc: Check that MEC API providerservice fails to terminate an App Instance when it receives a malformed request - * ETSI GS MEC 010-2 2.0.10, clause 7.5.7.3.1 - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.9.2-1 //TerminateAppRequest - */ - testcase TC_MEC_MEC010p2_MEX_LCM_006_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEX_LCM_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/terminate", - v_headers, - m_http_message_body_json( - m_body_json_lifecycle_management_terminate_with_error( - m_lifecycle_management_terminate_with_error( - PX_APP_TERMINATION_TYPE_WITH_ERROR - ) - ) - ) - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 400 Bad Request status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_006_BR - - - /** - * @desc: Check that MEC API provider service terminates an App Instance when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.5.8.3.1 - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.8.2-1 //OperateAppRequest - */ - testcase TC_MEC_MEC010p2_MEX_LCM_007_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEX_LCM_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/operate", - v_headers, - m_http_message_body_json( - m_body_json_lifecycle_management_operate( - m_lifecycle_management_operate( - PX_CHANGE_STATE_TO - ) - ) - ) - - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_202_accepted( - ))) -> value v_response { - tc_ac.stop; - if (f_check_headers(v_response.response.header) == true) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 202 accepted***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); - } else { - log("*** " & testcasename() & ": FAIL: Header 'Location' was not present in the response headers ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_error); - } - } - [] tc_ac.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); - } - } // End of 'alt' statement - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_007_OK - - - /** - * @desc: Check that MEC API provider service fails to change the status of an App Instance - * when it receives a request related to a not existing App Instance - * ETSI GS MEC 010-2 2.0.10, clause 7.5.8.3.1 - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.8.2-1 //OperateAppRequest - */ - testcase TC_MEC_MEC010p2_MEX_LCM_007_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEX_LCM_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/operate", - v_headers, - m_http_message_body_json( - m_body_json_lifecycle_management_operate( - m_lifecycle_management_operate( - PX_CHANGE_STATE_TO - ) - ) - ) - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_404_not_found( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 not found status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_007_NF - - - /** - * @desc: Check that MEC API provider service fails to operate on an App Instance when it receives a malformed request - * ETSI GS MEC 010-2 2.0.10, clause 7.5.8.3.1 - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.8.2-1 //OperateAppRequest - */ - testcase TC_MEC_MEC010p2_MEX_LCM_007_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEX_LCM_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/operate", - v_headers, - m_http_message_body_json( - m_body_json_lifecycle_management_operate_with_error( - m_lifecycle_management_operate_with_error( - PX_CHANGE_STATE_TO_WITH_ERROR - ) - ) - ) - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 400 Bad Request status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_007_BR - - - - /** - * @desc: Check that MEC API provider service retrieves info about LCM Operation Occurrency on App Instances when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.5.9.3.2 - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.14.2-1" //AppLcmOpOcc - */ - testcase TC_MEC_MEC010p2_MEX_LCM_008_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEX_LCM_OP_OCC_URI, - 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_lifecycle_op_occ_list({ - *, - mw_lifecycle_management_op_occ( - PX_APP_LCM_OP_OCC_ID - ), - * - } - ) - ) - ) - )) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with App LCM Operation Occurrencies info and 200 status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_008_OK - - /** - * @desc: Check that MEC API provider service retrieves info about LCM Operation Occurrency on an App Instance when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.5.9.3.2 - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.14.2-1" //AppLcmOpOcc - */ - testcase TC_MEC_MEC010p2_MEX_LCM_009_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEX_LCM_OP_OCC_URI & oct2char(unichar2oct(PX_APP_LCM_OP_OCC_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_lifecycle_op_occ( - mw_lifecycle_management_op_occ( - PX_APP_LCM_OP_OCC_ID - ) - ) - ) - ) - )) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with the requested App LCM Operation Occurrency and 200 status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_009_OK - - /** - * @desc:Check that MEC API provider service sends an error when it receives a query for a not existing LCM Operation Occurrency - * ETSI GS MEC 010-2 2.0.10, clause 7.5.9.3.2 - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.14.2-1" //AppLcmOpOcc - */ - testcase TC_MEC_MEC010p2_MEX_LCM_009_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEX_LCM_OP_OCC_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_LCM_OP_OCC_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_404_not_found( - ) - )) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with 404 not found status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_009_NF - - - -} // End of App_lifecycle_management - - - - -group app_lcm_subscriptions { - - /** - * @desc: Check that MEC API provider service creates a LCM Subscription when requested, - * where the subscription request can have SUBSCRIPTION_TYPE: - * - AppInstanceStateChangeSubscription - * - AppLcmOpOccStateChangeSubscription - * ETSI GS MEC 010-2 2.0.10, clause 7.5.3.3.1 - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.13.2-1 //AppInstSubscriptionRequest - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.10.2-1 //AppInstSubscriptionInfo - */ - testcase TC_MEC_MEC010p2_MEX_LCM_010_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEX_LCM_SUBS, - v_headers, - m_http_message_body_json( - m_body_json_lcm_subscribe( - m_app_lcm_subscribe_request( - PX_SUBSCRIPTION_TYPE, - PX_CALLBACK_URI - ) - ) - ) - ) - )); - - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_201_created( - mw_http_message_body_json( - mw_body_json_lcm_subscription( - mw_app_lcm_subscription_info( - -, - PX_SUBSCRIPTION_TYPE, - PX_CALLBACK_URI) - - ))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with the new created subscription ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_010_OK - - - - /** - * @desc: Check that MEC API providerservice sends an error when it receives a - * malformed request to create a LCM Subscription - * ETSI GS MEC 010-2 2.0.10, clause 7.5.3.3.1 - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.13.2-1 //AppInstSubscriptionRequest - */ - testcase TC_MEC_MEC010p2_MEX_LCM_010_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEX_LCM_SUBS, - v_headers, - m_http_message_body_json( - m_body_json_lcm_subscribe_with_error( - m_app_lcm_subscribe_request_with_error( - PX_SUBSCRIPTION_TYPE, - PX_CALLBACK_URI - ) - ) - ) - ) - )); - - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds a 400 Bad request ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_010_BR - - - /** - * @desc: Check that MEC API provider service sends the list of LCM Subscriptions when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.5.3.3.2 - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.13.2-1 // AppInstSubscriptionRequest - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.15.2-1 // AppLcmOpOccSubscriptionRequest - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.10.2-1 // AppInstSubscriptionInfo - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.16.2-1 // AppLcmOpOccSubscriptionInfo - */ - testcase TC_MEC_MEC010p2_MEX_LCM_011_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEX_LCM_SUBS, - 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_lcm_subscription_list({ - *, - mw_app_lcm_subscription_info( - -, - PX_SUBSCRIPTION_TYPE, - PX_CALLBACK_URI - ), - * - } - - ))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with the list of available subscriptions ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_011_OK - - - /** - * @desc: Check that MEC API provider service sends the information about an existing LCM subscription when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.5.4.3.2 - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.10.2-1 // AppInstSubscriptionInfo - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.16.2-1 // AppLcmOpOccSubscriptionInfo - */ - testcase TC_MEC_MEC010p2_MEX_LCM_012_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEX_LCM_SUBS & oct2char(unichar2oct(PX_SUBSCRIPTION_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_lcm_subscription( - mw_app_lcm_subscription_info( - PX_SUBSCRIPTION_ID, - PX_SUBSCRIPTION_TYPE, - PX_CALLBACK_URI - ) - ))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with the subscription requested ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_012_OK - - - /** - * @desc: Check that MEC API provider service sends an error when it receives a query for a not existing LCM Subscription - * ETSI GS MEC 010-2 2.0.10, clause 7.5.4.3.2 - */ - testcase TC_MEC_MEC010p2_MEX_LCM_012_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEX_LCM_SUBS & oct2char(unichar2oct(PX_NON_ESISTENT_SUBSCRIPTION_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_404_not_found( - ) - )) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 404 not found ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_012_NF - - /** - * @desc: Check that MEC API provider service delete an existing LCM Subscription when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.3.4.3.4 - */ - testcase TC_MEC_MEC010p2_MEX_LCM_013_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - "/" & PICS_ROOT_API & PX_MEX_LCM_SUBS & oct2char(unichar2oct(PX_SUBSCRIPTION_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_204_no_content() - )) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds 204 No Content ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_013_OK - - - /** - * @desc: Check that MEC API provider service delete an existing LCM Subscription when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.3.4.3.4 - */ - testcase TC_MEC_MEC010p2_MEX_LCM_013_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_LCM_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - "/" & PICS_ROOT_API & PX_MEX_LCM_SUBS & oct2char(unichar2oct(PX_NON_ESISTENT_SUBSCRIPTION_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_404_not_found( - ) - )) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 404 not found ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_013_NF - - -} // end of group app_lcm_subscriptions - -group app_lcm__notification { - - /** - * @desc Check that MEC API provider sends a notification to the subscriber - * when an application lcm change event occurs - * @see ETSI GS MEC 010-2 2.0.10, clause 7.5.5.3.1 - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.18.2-1 // AppLcmOpOccNotification - * ETSI GS MEC 010-2 2.0.10, table 6.2.2.12.2-1 // AppInstNotification - */ - testcase TC_MEC_MEC010p2_MEX_LCM_014_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PIC_APP_PACKAGE_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PIC_APP_PACKAGE_NOTIFICATIONS required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_notif_up(); - - // Test adapter configuration - - // Preamble - f_init_default_headers_list(-, -, v_headers); - action("Trigger a expire notification event"); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_wait.start; - alt { - [] httpPort_notif.receive( - mw_http_request( - mw_http_request_post( - unichar2char(PX_CALLBACK_URI), - -, - mw_http_message_body_json( - mw_body_json_lcm_notification( - mw_app_lcm_notification( - PX_NOTIFICATION_ID, - PX_NOTIFICATION_TYPE - ) - ) - ) - ) - ) - ) { - tc_wait.stop; - log("*** " & testcasename() & ": INFO: IUT successfully sends notification ***"); - - // Send 204 No Content - httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); - - log("*** " & testcasename() & ": PASS: IUT successfully sends notification ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); - } - [] tc_wait.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); - } - } // End of 'alt' statement - - // Postamble - f_cf_01_http_notif_down(); - } - - -} // end of group app_lcm__notification - - -} // End of module AtsMec_PkgMgmt_mm1_TestCases - - - - - - - diff --git a/ttcn/AtsMec/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..03c3c78d15223a9529874f8abfafad18124a4815 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn @@ -0,0 +1,3289 @@ +/** +* @Author ETSI / STF569 / TTF012 +* @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 003, Draft ETSI GS MEC 010-2 V2.2.1 +*/ +module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { + + // JSON + import from JSON all; + + // Libcommon + 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_ApplicationPackageLifecycleAndOperationGrantingAPI + import from ApplicationPackageLifecycleAndOperationGrantingAPI_Templates all; + import from ApplicationPackageLifecycleAndOperationGrantingAPI_Pics all; + import from ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits all; + + // LibMec + import from LibMec_Functions all; + import from LibMec_Pics all; + import from LibMec_Pixits all; + + group granting { + + /** + * @desc Check that MEO sends a synchronous grant response when a grant request is requested - INSTANTIATE + */ + testcase TC_MEC_MEC010p2_MEO_GRANT_001_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_GRANTS_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_GRANTS_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_MEO_GRANT_URI, + v_headers, + m_http_message_body_json( + m_body_json_grant_request( + m_grant_request( + PX_APP_INSTANCE_ID, + PX_APP_LCM_OP_OCC_ID, + PX_APP_ID, + INSTANTIATE, + m_grant_request_link( + m_link_type(""), // TODO + m_link_type("") // TODO + ))))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_grant_response( + mw_grant + ))))) -> value v_response { + tc_ac.stop; + + if (f_check_headers(valueof(v_response.response.header)) == false) { + log("*** " & testcasename() & ": FAIL: Header 'Location' was not present in the response headers ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + log("*** " & testcasename() & ": PASS: IUT successfully responds with a Grant Response ***"); + 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 + } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_001_OK + + /** + * @desc Check that MEO responds with an error when it receives a malformed request when a new grant request is performed + */ + testcase TC_MEC_MEC010p2_MEO_GRANT_001_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_GRANTS_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_GRANTS_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_MEO_GRANT_URI, + v_headers, + m_http_message_body_json( + m_body_json_grant_request( + m_grant_request( + PX_APP_INSTANCE_ID, + PX_APP_LCM_OP_OCC_ID, + PX_APP_ID, + INVALID_OPERATE, + m_grant_request_link( + m_link_type(""), // TODO + m_link_type("") // TODO + ))))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request( + ))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a Bad response ***"); + 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 + } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_001_BR + + /** + * @desc Check that MEO sends a synchronous grant response when a grant request is requested + */ + testcase TC_MEC_MEC010p2_MEO_GRANT_002_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_GRANTS_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_GRANTS_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_MEO_GRANT_URI, + v_headers, + m_http_message_body_json( + m_body_json_grant_request( + m_grant_request( + PX_APP_INSTANCE_ID, + PX_APP_LCM_OP_OCC_ID, + PX_APP_ID, + PX_APP_OPERATION, + m_grant_request_link( + m_link_type(""), // TODO + m_link_type("") // TODO + ))))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_grant_response( + mw_grant + ))))) -> value v_response { + tc_ac.stop; + + if (f_check_headers(valueof(v_response.response.header)) == false) { + log("*** " & testcasename() & ": FAIL: Header 'Location' was not present in the response headers ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + log("*** " & testcasename() & ": PASS: IUT successfully responds with a Grant Response ***"); + 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 + } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_002_OK + + /** + * @desc Check that MEO sends a asynchronous grant response when a grant request is requested - INSTANTIATE + */ + testcase TC_MEC_MEC010p2_MEO_GRANT_003_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response_1; + var HttpMessage v_response_2; + + // Test control + if (not(PICS_GRANTS_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_GRANTS_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_MEO_GRANT_URI & oct2char(unichar2oct(PX_GRANTING_ID, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_grant_request( + m_grant_request( + PX_APP_INSTANCE_ID, + PX_APP_LCM_OP_OCC_ID, + PX_APP_ID, + PX_APP_OPERATION, + m_grant_request_link( + m_link_type(""), // TODO + m_link_type("") // TODO + ))))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_202_accepted + )) -> value v_response_1 { + tc_ac.stop; + + if (f_check_headers(valueof(v_response_1.response.header)) == false) { + log("*** " & testcasename() & ": FAIL: Header 'Location' was not present in the response headers ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + repeat; + } + } + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_grant_response( + mw_grant + ))))) -> value v_response_2 { + tc_ac.stop; + + if (not(isbound(v_response_1)) or f_check_headers(valueof(v_response_2.response.header)) == false) { + log("*** " & testcasename() & ": FAIL: Didn't receive 202 accepted or Header 'Location' was not present in the response headers ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + log("*** " & testcasename() & ": PASS: IUT successfully responds with a Grant Response ***"); + 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 + } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_003_OK + + /** + * @desc Check that MEO sends the status of a grant request when a query on a granting ID is performed + */ + testcase TC_MEC_MEC010p2_MEO_GRANT_004_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_GRANTS_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_GRANTS_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_GRANT_URI & oct2char(unichar2oct(PX_GRANTING_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_grant_response( + mw_grant( + PX_APP_INSTANCE_ID + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a 202 accepted status code ***"); + 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 + } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_004_OK + + /** + * @desc Check that MEO sends the status of a grant request when a query on a granting ID is performed + */ + testcase TC_MEC_MEC010p2_MEO_GRANT_005_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_GRANTS_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_GRANTS_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_GRANT_URI & oct2char(unichar2oct(PX_GRANTING_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_202_accepted + )) -> value v_response { + repeat; + } + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_grant_response( + mw_grant( + PX_APP_INSTANCE_ID + ) + ))))) { + tc_ac.stop; + + if (isbound(v_response)) { + log("*** " & testcasename() & ": PASS: IUT successfully responds with a 202 accepted status code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } else { + log("*** " & testcasename() & ": FAIL: IUT successfully didn't respond with a 202 accepted status code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_005_OK + + /** + * @desc Check that MEO sends the status of a grant request when a query on a granting ID is performed + */ + testcase TC_MEC_MEC010p2_MEO_GRANT_006_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_GRANTS_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_GRANTS_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_GRANT_URI & oct2char(unichar2oct(PX_GRANTING_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_grant_response( + mw_grant( + PX_APP_INSTANCE_ID + )))))) { + tc_ac.stop; + + if (isbound(v_response)) { + log("*** " & testcasename() & ": PASS: IUT successfully responds with a 202 accepted status code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } else { + log("*** " & testcasename() & ": FAIL: IUT successfully didn't respond with a 202 accepted status code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_006_OK + + /** + * @desc Check that MEO responds with an error when it receives a request for returning a grant referred with a wrong ID + */ + testcase TC_MEC_MEC010p2_MEO_GRANT_006_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_GRANTS_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_GRANTS_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_GRANT_URI & oct2char(unichar2oct(PX_NON_EXISTANT_GRANTING_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_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a not found status code ***"); + 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 + } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_006_NF + + } // End of group granting + + group meo_pkgmgt { + + /** + * @desc Check that MEO creates a new App Package when requested + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_001_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_MEO_PKGM_URI, + v_headers, + m_http_message_body_json( + m_body_json_create_package_management( + m_create_package_management( + "appPkgName", + PX_APP_PKG_VERSION, + m_checksum(-, PX_CHECKSUM), + PX_APP_PKG_PATH + )))))); + + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_app_pkg_info( + mw_app_pkg_info/*( + -, + PX_APP_PKG_NAME, + PX_APP_PKG_VERSION, + mw_checksum, + PX_OPERATIONAL_STATE, + PX_USAGE_STATE + )*/ + ))))) -> value v_response { + tc_ac.stop; + + // TODO Chek Location header + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an App Package ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_001_OK + + /** + * @desc Check that MEO creates a new App Package when requested + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_001_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_MEO_PKGM_URI, + v_headers, + m_http_message_body_json( + m_body_json_create_package_management( + m_create_package_management( + "", + PX_APP_PKG_VERSION, + m_checksum(-, PX_CHECKSUM), + PX_APP_PKG_PATH + )))))); + + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_001_BR + + /** + * @desc Check that MEO returns the list of App Packages when requested - Note 3 + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_002_01_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_PKGM_URI, + 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_app_pkg_info_list + )))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an App Package list ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_002_01_OK + + /** + * @desc Check that MEO returns the list of App Packages when requested - Note 3 + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_002_02_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_PKGM_URI_ONBOARDED, + 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_app_pkg_info_list + )))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an App Package list ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_002_02_OK + + /** + * @desc Check that MEO responds with an error when it receives + * a malformed request for retrieving the list of existing App Packages + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_002_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_PKGM_URI & "?filter()", + v_headers + ))); + + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_002_BR + + /** + * @desc Check that MEO returns the an App Package when requested - Note 3 + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_003_01_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_PKGM_URI & "/" & oct2char(unichar2oct(PX_APP_PKG_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_app_pkg_info( + mw_app_pkg_info( + PX_APP_PKG_ID + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an App Package ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_003_01_OK + + /** + * @desc Check that MEO returns the an App Package when requested - Note 3 + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_003_02_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_PKGM_URI_ONBOARDED & "/" & oct2char(unichar2oct(PX_ON_BOARDED_APP_PKG_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_app_pkg_info( + mw_app_pkg_info( + PX_APP_PKG_ID + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an App Package ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_003_02_OK + + /** + * @desc Check that MEO responds with an error when it receives + * a request for retrieving a App Package referred with a wrong ID + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_003_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_PKGM_URI_ONBOARDED & "/" & oct2char(unichar2oct(PX_ON_BOARDED_APP_PKG_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_404_not_found + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_003_NF + + /** + * @desc Check that MEO deletes an App Package when requested + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_004_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_MEO_PKGM_URI & "/" & oct2char(unichar2oct(PX_APP_PKG_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_204_no_content + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an App Package ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_004_OK + + /** + * @desc Check that MEO responds with an error when it receives + * a request for deleting an App Package referred with a wrong ID + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_004_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_MEO_PKGM_URI_ONBOARDED & "/" & oct2char(unichar2oct(PX_ON_BOARDED_APP_PKG_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_404_not_found + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_004_NF + + /** + * @desc Check that MEO updates the operational state of an individual application package resource + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_005_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_patch( + PICS_ROOT_API & PX_MEO_PKGM_URI & "/" & oct2char(unichar2oct(PX_APP_PKG_ID, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_app_pkg_info_modification( + m_app_pkg_info_modification( + DISABLED + )))))); + + 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_app_pkg_info_modification( + mw_app_pkg_info_modification( + DISABLED + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an App Package ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_005_OK + + /** + * @desc Check that MEO sends an error when it receives a malformed request to modify + * the operational state of an application package + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_005_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_patch( + PICS_ROOT_API & PX_MEO_PKGM_URI & "/" & oct2char(unichar2oct(PX_APP_PKG_ID, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_app_pkg_info_modification( + m_app_pkg_info_modification( + UNKNOWN + )))))); + + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_005_BR + + /** + * @desc Check that MEO responds with an error when it receives + * a request for updating an App Package referred with a wrong ID + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_005_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_MEO_PKGM_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_PKG_ID, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_app_pkg_info_modification( + m_app_pkg_info_modification( + DISABLED + )))))); + + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_005_NF + + /** + * @desc Check that MEO service returns an application package subscription when requested + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_006_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_MEO_PKGM_SUBS, + v_headers, + m_http_message_body_json( + m_body_json_pkgm_subscription( + m_app_pkg_info_subscription( + PX_CALLBACK_URI + )))))); + + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_pkgm_subscription_info( + mw_app_pkg_subscription_info( + -, + -, + PX_CALLBACK_URI + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a sucbsrciption info ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_006_OK + + /** + * @desc Check that MEO service sends an error when it receives a + * malformed request for creating a new subscription on AppPackages + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_006_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_MEO_PKGM_SUBS, + v_headers, + m_http_message_body_json( + m_body_json_pkgm_subscription( + m_app_pkg_info_subscription( + PX_CALLBACK_URI, + "Invalid_field" + )))))); + + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_006_BR + + /** + * @desc Check that MEO service returns the list of Application Package Subscriptions when requested + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_007_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_PKGM_SUBS, + 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_pkgm_subscription_link_list // TODO + )))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a sucbsrciption info list ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_007_OK + + /** + * @desc Check that MEO service returns an Application Package Subscription when requested + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_008_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_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_pkgm_subscription_info( + mw_app_pkg_subscription_info( + PX_APP_PKG_ID, + -, + PX_CALLBACK_URI, + m_app_pkg_link("") // TODO + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a sucbsrciption info ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_008_OK + + /** + * @desc Check that MEO service returns an Application Package Subscription when requested + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_008_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_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_404_not_found + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_008_NF + + /** + * @desc Check that MEO service deletes an Application Package Subscription when requested + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_009_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_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_204_no_content + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a sucbsrciption info ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_009_OK + + /** + * @desc Check that MEO service sends an error when it receives a deletion request for a subscription on AppPackages + * with a wrong identifier + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_009_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_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_404_not_found + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_009_NF + + /** + * @desc Check that the MEO service sends a application package notification + * if the MEO service has an associated subscription and the event is generated + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_010_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_request( + mw_http_request_post( + PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), // TODO To be changed + v_headers, + mw_http_message_body_json( + mw_body_json_app_package_notification( + mw_app_pkg_notification // TODO To be refined + ))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully sends notification info ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_010_OK + + /** + * @desc Check that MEO reads the content of the AppD of on-boarded individual application package resources when requested + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_011_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + // TODO Set accept filed to application/zip... + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEPM_PKGM_URI & "/" & oct2char(unichar2oct(PX_APP_PKG_ID, "UTF-8")) & "/appd", + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + ? // TODO To be refined + ))) -> value v_response { + tc_ac.stop; + + // TODO Check HTTP message body + log("*** " & testcasename() & ": PASS: IUT successfully responds with AppId content ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_011_OK + + /** + * @desc Check that MEO reads the content of the AppD of on-boarded individual application package resources when requested + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_011_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + // TODO Set accept filed to application/zip... + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEPM_PKGM_URI & "/" & oct2char(unichar2oct(PX_ON_BOARDED_APP_PKG_ID, "UTF-8")) & "/appd", + 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 + )) -> value v_response { + tc_ac.stop; + + // TODO Check HTTP message body + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_011_NF + + /** + * @desc Check that MEO fetches the on-boarded application package content identified by appPkgId when requested + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_012_01_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + // TODO Set accept filed to application/zip... + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_MEPM_PKGM_URI & "/" & oct2char(unichar2oct(PX_APP_PKG_ID, "UTF-8")) & "/package_content", + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + ? // TODO To be refined + ))) -> value v_response { + tc_ac.stop; + + // TODO Check HTTP message body + log("*** " & testcasename() & ": PASS: IUT successfully responds with AppId content ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_012_01_OK + + /** + * @desc Check that MEO fetches the on-boarded application package content identified by appDId when requested + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_012_02_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + // TODO Set accept filed to application/zip... + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_MEPM_PKGM_URI & "/" & oct2char(unichar2oct(PX_ON_BOARDED_APP_PKG_ID, "UTF-8")) & "/package_content", + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + ? // TODO To be refined + ))) -> value v_response { + tc_ac.stop; + + // TODO Check HTTP message body + log("*** " & testcasename() & ": PASS: IUT successfully responds with AppId content ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_012_02_OK + + /** + * @desc Check that MEO fetches the on-boarded application package content identified by appPkgId when requested + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_012_01_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + // TODO Set accept filed to application/zip... + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_MEPM_PKGM_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_PKG_ID, "UTF-8")) & "/package_content", + 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 + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_012_01_NG + + /** + * @desc Check that MEO service sends an error when it receives a request refering a wrong on-boarded appPkgId + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_012_02_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + // TODO Set accept filed to application/zip... + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_MEPM_PKGM_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_ON_BOARDED_APP_PKG_ID, "UTF-8")) & "/package_content", + 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 + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_012_02_NG + + } // End of group meo_pkgmgt + + group mepm_pkgmgt { + + /** + * @desc Check that MEPM returns the list of App Packages when requested - Note 3 + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_001_01_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEPM_PKGM_URI, + 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_app_pkg_info_list + )))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an App Package list ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_001_01_OK + + /** + * @desc Check that MEPM returns the list of App Packages when requested - Note 3 + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_001_02_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_PKGM_URI_ONBOARDED, // FIXME Rename into PX_PKGM_URI_ONBOARDED + 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_app_pkg_info_list + )))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an App Package list ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_001_02_OK + + /** + * @desc Check that MEPM responds with an error when it receives + * a malformed request for retrieving the list of existing App Packages + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_001_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEPM_PKGM_URI & "?filter()", + v_headers + ))); + + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_001_BR + + /** + * @desc Check that MEPM returns the an App Package when requested - Note 3 + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_002_01_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEPM_PKGM_URI & "/" & oct2char(unichar2oct(PX_APP_PKG_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_app_pkg_info( + mw_app_pkg_info( + PX_APP_PKG_ID + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an App Package ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_002_01_OK + + /** + * @desc Check that MEPM returns the an App Package when requested - Note 3 + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_002_02_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_PKGM_URI_ONBOARDED & "/" & oct2char(unichar2oct(PX_ON_BOARDED_APP_PKG_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_app_pkg_info( + mw_app_pkg_info( + PX_APP_PKG_ID + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an App Package ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_002_02_OK + + /** + * @desc Check that MEPM responds with an error when it receives + * a request for retrieving a App Package referred with a wrong ID + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_002_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_PKGM_URI_ONBOARDED & "/" & oct2char(unichar2oct(PX_ON_BOARDED_APP_PKG_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_404_not_found + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_002_NF + + /** + * @desc Check that MEPM service returns an application package subscription when requested + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_003_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_MEPM_PKGM_SUBS, + v_headers, + m_http_message_body_json( + m_body_json_pkgm_subscription( + m_app_pkg_info_subscription( + PX_CALLBACK_URI + )))))); + + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_pkgm_subscription_info( + mw_app_pkg_subscription_info( + -, + -, + PX_CALLBACK_URI + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a sucbsrciption info ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_003_OK + + /** + * @desc Check that MEPM service sends an error when it receives a + * malformed request for creating a new subscription on AppPackages + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_003_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_MEPM_PKGM_SUBS, + v_headers, + m_http_message_body_json( + m_body_json_pkgm_subscription( + m_app_pkg_info_subscription( + PX_CALLBACK_URI, + "Invalid_field" + )))))); + + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_003_BR + + /** + * @desc Check that MEPM service returns the list of Application Package Subscriptions when requested + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_004_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEPM_PKGM_SUBS, + 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_pkgm_subscription_link_list // TODO + )))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a sucbsrciption info list ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_004_OK + + /** + * @desc Check that MEPM service returns an Application Package Subscription when requested + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_005_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_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_pkgm_subscription_info( + mw_app_pkg_subscription_info( + PX_APP_PKG_ID, + -, + PX_CALLBACK_URI, + m_app_pkg_link("") // TODO + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a sucbsrciption info ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_005_OK + + /** + * @desc Check that MEPM service returns an Application Package Subscription when requested + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_005_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_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_404_not_found + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_005_NF + + /** + * @desc Check that MEPM service deletes an Application Package Subscription when requested + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_006_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_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_204_no_content + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a sucbsrciption info ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_006_OK + + /** + * @desc Check that MEPM service sends an error when it receives a deletion request for a subscription on AppPackages + * with a wrong identifier + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_006_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_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_404_not_found + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_006_NF + + /** + * @desc Check that the MEPM service sends a application package notification + * if the MEPM service has an associated subscription and the event is generated + */ + testcase TC_MEC_MEC007p2_MEPM_PKGM_007_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_request( + mw_http_request_post( + PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), // TODO To be changed + v_headers, + mw_http_message_body_json( + mw_body_json_app_package_notification( + mw_app_pkg_notification // TODO To be refined + ))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully sends notification info ***"); + 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 + + } // End of testcase TC_MEC_MEC007p2_MEPM_PKGM_007_OK + + /** + * @desc Check that MEPM reads the content of the AppD of on-boarded individual application package resources when requested + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_009_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + // TODO Set accept filed to application/zip... + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEPM_PKGM_URI & "/" & oct2char(unichar2oct(PX_APP_PKG_ID, "UTF-8")) & "/appd", + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + ? // TODO To be refined + ))) -> value v_response { + tc_ac.stop; + + // TODO Check HTTP message body + log("*** " & testcasename() & ": PASS: IUT successfully responds with AppId content ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_009_OK + + /** + * @desc Check that MEPM reads the content of the AppD of on-boarded individual application package resources when requested + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_009_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + // TODO Set accept filed to application/zip... + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEPM_PKGM_URI & "/" & oct2char(unichar2oct(PX_ON_BOARDED_APP_PKG_ID, "UTF-8")) & "/appd", + 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 + )) -> value v_response { + tc_ac.stop; + + // TODO Check HTTP message body + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_009_NF + + } // End of group mepm_pkgmgt + + group mepm_lifcyclemgt { + + /** + * @desc Check that MEC API provider has created the configuration information in AppD to the MEPM-V + */ + testcase TC_MEC_MEC010p2_MEPM_LCM_01_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_APP_LCM_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/configure_platform_for_app", + v_headers, + m_http_message_body_json( + m_body_json_config_platform_for_app_request( + m_config_platform_for_app_request( + m_service_dependency( + "", "" // TODO Add PIXITs + ))))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_202_accepted + )) -> value v_response { + tc_ac.stop; + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_LCM_01_OK + + /** + * @desc Check that MEC API provider sends an error when it receives a malformed request + * for the configuration information in AppD to the MEPM-V + */ + testcase TC_MEC_MEC010p2_MEPM_LCM_01_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_APP_LCM_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/configure_platform_for_app", + v_headers, + m_http_message_body_json( + m_body_json_config_platform_for_app_request( + m_config_platform_for_app_request( + m_service_dependency( + "", "" // TODO Add PIXITs + ))))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) -> value v_response { + tc_ac.stop; + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_LCM_01_BR + + /** + * @desc Check that MEC API provider sends an error when it receives a request + * for the configuration information in AppD to the MEPM-V with not valid app instance ID + */ + testcase TC_MEC_MEC010p2_MEPM_LCM_01_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_APP_LCM_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTING_APP_INSTANCE_ID, "UTF-8")) & "/configure_platform_for_app", + v_headers, + m_http_message_body_json( + m_body_json_config_platform_for_app_request( + m_config_platform_for_app_request( + m_service_dependency( + "", "" // TODO Add PIXITs + ))))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) -> value v_response { + tc_ac.stop; + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEPM_LCM_01_NF + + } // End of group mepm_lifcyclemgt + + group mex_lifcyclemgt { + + /** + * @desc Check that MEC API provider retrieves the list of App instances when requested + */ + testcase TC_MEC_MEC010p2_MEX_LCM_01_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_APP_LCM_URI, + v_headers, + m_http_message_body_json( + m_body_json_create_app_instance_request( + m_create_app_instance_request( + PX_APP_ID + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_app_instance_info( + mw_app_instance_info( + -, + PX_APP_ID + )))))) -> value v_response { + tc_ac.stop; + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_01_OK + + /** + * @desc Check that MEC API provider sends an error when it receives a malformed request + * for the creation of a new App Instance + */ + testcase TC_MEC_MEC010p2_MEX_LCM_01_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_APP_LCM_URI, + v_headers, + m_http_message_body_json( + m_body_json_create_app_instance_request( + m_create_app_instance_request( + "" + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) -> value v_response { + tc_ac.stop; + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_01_OK + + /** + * @desc Check that MEC API provider retrieves the list of App instances when requested + */ + testcase TC_MEC_MEC010p2_MEX_LCM_02_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_APP_LCM_URI, + 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_app_instance_info_list/*( + (*, mw_app_instance_info(-, PX_APP_ID), *) +*/ + )))) -> value v_response { + tc_ac.stop; + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_02_OK + + /** + * @desc Check that MEC API provider retrieves an App Package when requested + */ + testcase TC_MEC_MEC010p2_MEX_LCM_03_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_APP_LCM_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_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_app_instance_info( + mw_app_instance_info( + -, + PX_APP_ID, + -, -, -, -, -, -, + mw_link( + mw_link_type( + PICS_ROOT_API & PX_APP_LCM_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8"))) + ))))))) -> value v_response { + tc_ac.stop; + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_03_OK + + /** + * @desc Check that MEC API provider fails on retrieving an App Instance when requested using wrong appInstanceId + */ + testcase TC_MEC_MEC010p2_MEX_LCM_03_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_APP_LCM_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTING_APP_INSTANCE_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_404_not_found + )) -> value v_response { + tc_ac.stop; + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_03_NF + + /** + * @desc Check that MEC API provider service deletes an App Instance when requested + */ + testcase TC_MEC_MEC010p2_MEX_LCM_04_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_APP_LCM_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_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_204_no_content + )) -> value v_response { + tc_ac.stop; + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_04_OK + + /** + * @desc Check that MEC API provider fails on deletion of an App Instance when requested using wrong appInstanceId + */ + testcase TC_MEC_MEC010p2_MEX_LCM_04_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_APP_LCM_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTING_APP_INSTANCE_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_404_not_found + )) -> value v_response { + tc_ac.stop; + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct code ***"); + 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 + + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_04_NF + + } // End of group mex_lifcyclemgt + +} // End of module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases diff --git a/ttcn/AtsMec/AtsMec_AppEnablementAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn similarity index 78% rename from ttcn/AtsMec/AtsMec_AppEnablementAPI_TestCases.ttcn rename to ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn index a2874c18284ce6b0f11fa590bab54df923203a60..d9068625db67328158826813a7ef338ba8a4872c 100644 --- a/ttcn/AtsMec/AtsMec_AppEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn @@ -7,9 +7,9 @@ * 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 011 V2.1.1 + * @see ETSI GS MEC 003, Draft ETSI GS MEC 011 V2.2.1 */ -module AtsMec_AppEnablementAPI_TestCases { +module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Libcommon import from LibCommon_BasicTypesAndValues all; @@ -22,11 +22,12 @@ module AtsMec_AppEnablementAPI_TestCases { import from LibItsHttp_JsonTemplates all; import from LibItsHttp_TestSystem all; - // LibMec/AppEnablementAPI - import from AppEnablementAPI_TypesAndValues all; - import from AppEnablementAPI_Templates all; - import from AppEnablementAPI_Pics all; - import from AppEnablementAPI_Pixits all; + // LibMec/EdgePlatformApplicationEnablementAPI + import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; + import from EdgePlatformApplicationEnablementAPI_Templates all; + import from EdgePlatformApplicationEnablementAPI_Functions all; + import from EdgePlatformApplicationEnablementAPI_Pics all; + import from EdgePlatformApplicationEnablementAPI_Pixits all; // LibMec import from LibMec_TypesAndValues all; @@ -67,7 +68,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services", + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services", v_headers ) ) @@ -123,7 +124,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services?instance_id=" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID)), + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services?instance_id=" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID)), v_headers ) ) @@ -180,13 +181,16 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services", + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services", v_headers, m_http_message_body_json( m_body_json_service_info( m_service_info( v_service_name, - -, -, -, -, -, //-, + -, -, -, + m_service_info_link("m_service_info_link"), + -, + -, m_transport_info( "transportId1", "TC_MEC_MEC011_SRV_APPSAQ_002_OK", @@ -278,15 +282,16 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services", + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services", v_headers, m_http_message_body_json( m_body_json_service_info( m_service_info( v_service_name, -, - UNKNOWN, - RAW + SUSPENDED, + RAW, + m_service_info_link("m_service_info_link") ) ) ) @@ -342,12 +347,14 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/services", + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/services", v_headers, m_http_message_body_json( m_body_json_service_info( m_service_info( - PX_SERVICE_NAME + PX_SERVICE_NAME, + -, -, -, + m_service_info_link("m_service_info_link") ) ) ) @@ -403,7 +410,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & oct2char(unichar2oct(PX_SERVICE_ID, "UTF-8")), + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & oct2char(unichar2oct(PX_SERVICE_ID, "UTF-8")), v_headers ) ) @@ -419,7 +426,7 @@ module AtsMec_AppEnablementAPI_TestCases { mw_http_message_body_json( mw_body_json_service_info( mw_service_info( - -, -, -, -, //-, + -, -, -, -, -, PX_SERVICE_ID )))))) { tc_ac.stop; @@ -462,7 +469,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & oct2char(unichar2oct(PX_NON_EXISTENT_SERVICE_ID, "UTF-8")), + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & oct2char(unichar2oct(PX_NON_EXISTENT_SERVICE_ID, "UTF-8")), v_headers ) ) @@ -491,123 +498,14 @@ module AtsMec_AppEnablementAPI_TestCases { f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_003_NF - group f_TC_MEC_MEC011_SRV_APPSAQ_004 { - - /** - * @desc This function request the createion of a new service - * @param p_service_name Indicates the name of the new serivce - * @return 0 on success, -1 otherwise - */ - function f_create_service( - out universal charstring p_service_name, - out ServiceInfo p_service_info, - out Headers p_headers - ) runs on HttpComponent return integer { - var universal charstring v_service_name; - var Headers v_headers; - var integer v_result := -1; - var HttpMessage v_response; - - f_init_default_headers_list(-, -, v_headers); - v_service_name := oct2unichar(char2oct("service_" & int2str(f_get_current_timestamp_utc()))); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services", - v_headers, - m_http_message_body_json( - m_body_json_service_info( - m_service_info( - v_service_name, - -, -, -, -, -, //-, - m_transport_info( - "transportId1", - "TC_MEC_MEC011_SRV_APPSAQ_002_OK", - REST_HTTP, - "HTTP", - "2.0", - m_end_point_uris({"/meMp1/service/MyEntryPoint"}), - m_security_info - ) - ) - ) - ) - ) - ) - ); - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_201_created( - mw_http_message_body_json( - mw_body_json_service_info( - mw_service_info( - v_service_name //serName - )))))) -> value v_response { - tc_ac.stop; - p_service_name := v_service_name; - p_service_info := v_response.response.body.json_body.serviceInfo; - p_headers := v_response.response.header; - v_result := 0; - } - [] tc_ac.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - } - } // End of 'alt' statement - - return v_result; - } // End of function f_create_service_info - - /** - * @desc This function request the deletion of a service - * @param p_service_name Indicates the name of the serivce to delete - * @return 0 on success, -1 otherwise - */ - function f_delete_service( - in universal charstring p_service_name - ) runs on HttpComponent return integer { - var Headers v_headers; - var integer v_result := -1; - - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & oct2char(unichar2oct(p_service_name)), - v_headers - ) - ) - ); - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_204_no_content - )) { - tc_ac.stop; - v_result := 0; - } - [] tc_ac.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - } - } // End of 'alt' statement - - return v_result; - } // End of function f_delete_service_info - - } // End of group f_TC_MEC_MEC011_SRV_APPSAQ_004 - /** * @desc Check that the IUT updates a service information for a given application instance when commanded by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 */ - testcase TC_MEC_MEC011_SRV_APPSAQ_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var charstring_list v_etag; - var universal charstring v_service_name; var ServiceInfo v_service_info; // Test control @@ -623,30 +521,28 @@ module AtsMec_AppEnablementAPI_TestCases { // Test adapter configuration // Preamble - if(f_create_service(v_service_name, v_service_info, v_headers) == -1) { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); - } + f_create_service_info(v_service_info, v_headers); if (f_check_headers(v_headers, c_etag_http_header) == false) { log("*** " & testcasename() & ": INCONC: 'ETag' HTTP header not set ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } f_get_header(v_headers, c_etag_http_header, v_etag); // TODO Check headers - log("*** " & testcasename() & ": INFO: New servie created: ", v_service_name, ", transportID=", v_service_info.transportInfo.id, ", ETag=", v_etag[0]); // If-Match header needs to have a PROPER_ETAG f_init_default_headers_list(-, -, v_headers); f_set_headers_list({ "If-Match" }, v_etag, v_headers); httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & oct2char(unichar2oct(v_service_name, "UTF-8")), + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & oct2char(unichar2oct(v_service_info.serName, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_service_info( m_service_info( - v_service_name, + v_service_info.serName, PX_NEW_SERVICE_INFO_VERSION, - -, -, -, -, + -, -, + m_service_info_link("m_service_info_link"), + -, -, v_service_info.transportInfo ) ) @@ -665,7 +561,7 @@ module AtsMec_AppEnablementAPI_TestCases { mw_http_message_body_json( mw_body_json_service_info( mw_service_info( - v_service_name, + v_service_info.serName, PX_NEW_SERVICE_INFO_VERSION )))))) { tc_ac.stop; @@ -680,7 +576,7 @@ module AtsMec_AppEnablementAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_service(v_service_name); + f_delete_service_info(v_service_info); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_004_OK @@ -692,7 +588,6 @@ module AtsMec_AppEnablementAPI_TestCases { // Local variables var Headers v_headers; var charstring_list v_etag; - var universal charstring v_service_name := ""; var ServiceInfo v_service_info; // Test control @@ -708,29 +603,32 @@ module AtsMec_AppEnablementAPI_TestCases { // Test adapter configuration // Preamble - if(f_create_service(v_service_name, v_service_info, v_headers) == -1) { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_create_service_info(v_service_info, v_headers); + if (f_check_headers(v_headers, c_etag_http_header) == false) { + log("*** " & testcasename() & ": INCONC: 'ETag' HTTP header not set ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } + f_get_header(v_headers, c_etag_http_header, v_etag); // TODO Check headers if (f_check_headers(v_headers, c_etag_http_header) == false) { log("*** " & testcasename() & ": INCONC: 'ETag' HTTP header not set ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } f_get_header(v_headers, c_etag_http_header, v_etag); // TODO Check headers - log("*** " & testcasename() & ": INFO: New servie created: ", v_service_name, ", transportID=", v_service_info.transportInfo.id, ", ETag=", v_etag[0]); // If-Match header needs to have a PROPER_ETAG f_init_default_headers_list(-, -, v_headers); f_set_headers_list({ "If-Match" }, v_etag, v_headers); httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & oct2char(unichar2oct(v_service_name, "UTF-8")), + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & oct2char(unichar2oct(v_service_info.serName, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_service_info( m_service_info( - v_service_name & char(0, 0, 1, 111), - PX_NEW_SERVICE_INFO_VERSION + v_service_info.serName & char(0, 0, 1, 111), + PX_NEW_SERVICE_INFO_VERSION, + -, -, + m_service_info_link("m_service_info_link") ) ) ) @@ -758,7 +656,7 @@ module AtsMec_AppEnablementAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_service(v_service_name); + f_delete_service_info(v_service_info); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_004_BR @@ -788,13 +686,15 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & oct2char(unichar2oct(PX_NON_EXISTENT_SERVICE_ID, "UTF-8")), + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & oct2char(unichar2oct(PX_NON_EXISTENT_SERVICE_ID, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_service_info( m_service_info( PX_SERVICE_NAME, - PX_NEW_SERVICE_INFO_VERSION + PX_NEW_SERVICE_INFO_VERSION, + -, -, + m_service_info_link("m_service_info_link") ) ) ) @@ -833,7 +733,6 @@ module AtsMec_AppEnablementAPI_TestCases { // Local variables var Headers v_headers; var charstring_list v_etag; - var universal charstring v_service_name; var ServiceInfo v_service_info; // Test control @@ -849,30 +748,28 @@ module AtsMec_AppEnablementAPI_TestCases { // Test adapter configuration // Preamble - if(f_create_service(v_service_name, v_service_info, v_headers) == -1) { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); - } + f_create_service_info(v_service_info, v_headers); if (f_check_headers(v_headers, c_etag_http_header) == false) { log("*** " & testcasename() & ": INCONC: 'ETag' HTTP header not set ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } f_get_header(v_headers, c_etag_http_header, v_etag); - log("*** " & testcasename() & ": INFO: New servie created: ", v_service_name, ", transportID=", v_service_info.transportInfo.id, ", ETag=", v_etag[0]); // If-Match header needs to have an INVALID_ETAG f_init_default_headers_list(-, -, v_headers); f_set_headers_list({ "If-Match" }, { int2str(f_get_current_timestamp_utc()) }, v_headers); httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & oct2char(unichar2oct(v_service_name, "UTF-8")), + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & oct2char(unichar2oct(v_service_info.serName, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_service_info( m_service_info( - v_service_name, + v_service_info.serName, PX_NEW_SERVICE_INFO_VERSION, - -, -, -, -, + -, -, + m_service_info_link("m_service_info_link"), + -, -, v_service_info.transportInfo ) ) @@ -901,7 +798,7 @@ module AtsMec_AppEnablementAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_service(v_service_name); + f_delete_service_info(v_service_info); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_004_PF @@ -937,7 +834,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", v_headers ) ) @@ -994,7 +891,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", v_headers ) ) @@ -1050,7 +947,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", v_headers, m_http_message_body_json( m_body_json_app_termination_notif_subscription( @@ -1125,7 +1022,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", v_headers, m_http_message_body_json( m_body_json_app_termination_notif_subscription( @@ -1190,7 +1087,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) @@ -1247,7 +1144,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) @@ -1301,7 +1198,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_delete( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) @@ -1356,7 +1253,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_delete( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) @@ -1388,10 +1285,249 @@ module AtsMec_AppEnablementAPI_TestCases { } // End of group app_sub + group conf_task { - /* - * DNS rules (DNS) - */ + /** + * @desc Check that the IUT responds that it has completed the application level termination + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/CONFTASK/ConfirmTasks.tplan2 + */ + testcase TC_MEC_MEC011_SRV_CONFTASK_001_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_APP_ENABLEMENT_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_MEC_SVC_MGMT_APPS_URI & "/applications/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/confirm_termination", + v_headers, + m_http_message_body_json( + m_body_json_app_termination_confirmation( + { operationAction := TERMINATING } + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppTerminationConf ***"); + 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_MEC011_SRV_CONFTASK_001_OK + + /** + * @desc Check that the IUT responds with an error when a request for an operationAction is sent to an unknown application + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/CONFTASK/ConfirmTasks.tplan2 + */ + testcase TC_MEC_MEC011_SRV_CONFTASK_001_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_APP_ENABLEMENT_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_MEC_SVC_MGMT_APPS_URI & "/applications/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/confirm_termination", + v_headers, + m_http_message_body_json( + m_body_json_app_termination_confirmation( + { operationAction := TERMINATING } + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); + 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_MEC011_SRV_CONFTASK_001_NF + + /** + * @desc Check that the IUT responds that the MEC application is up and running + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/CONFTASK/ConfirmTasks.tplan2 + */ + testcase TC_MEC_MEC011_SRV_CONFTASK_002_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_APP_ENABLEMENT_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_MEC_SVC_MGMT_APPS_URI & "/applications/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/confirm_ready", + v_headers, + m_http_message_body_json( + m_body_json_app_ready_confirmation( + { indication := "READY" } + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppReadyConf ***"); + 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_MEC011_SRV_CONFTASK_002_OK + + /** + * @desc Check that the IUT responds with an error when a request for an indication is sent to an unknown application + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/CONFTASK/ConfirmTasks.tplan2 + */ + testcase TC_MEC_MEC011_SRV_CONFTASK_002_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_APP_ENABLEMENT_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_MEC_SVC_MGMT_APPS_URI & "/applications/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/confirm_ready", + v_headers, + m_http_message_body_json( + m_body_json_app_ready_confirmation( + { indication := "READY" } + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); + 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_MEC011_SRV_CONFTASK_002_NF + + } // End of group conf_task + + /* + * DNS rules (DNS) + */ group app_dns { /** @@ -1419,7 +1555,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/dns_rules", + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/dns_rules", v_headers ) ) @@ -1475,7 +1611,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/dns_rules/" & oct2char(unichar2oct(PX_DNS_RULE_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/dns_rules/" & oct2char(unichar2oct(PX_DNS_RULE_ID, "UTF-8")), v_headers ) ) @@ -1533,7 +1669,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/dns_rules/" & oct2char(unichar2oct(PX_NON_EXISTENT_DNS_RULE_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/dns_rules/" & oct2char(unichar2oct(PX_NON_EXISTENT_DNS_RULE_ID, "UTF-8")), v_headers ) ) @@ -1588,7 +1724,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/dns_rules/" & oct2char(unichar2oct(PX_DNS_RULE_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/dns_rules/" & oct2char(unichar2oct(PX_DNS_RULE_ID, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_dns_rule( @@ -1655,7 +1791,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/dns_rules/" & oct2char(unichar2oct(PX_DNS_RULE_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/dns_rules/" & oct2char(unichar2oct(PX_DNS_RULE_ID, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_dns_rule( @@ -1719,7 +1855,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/dns_rules/" & oct2char(unichar2oct(PX_NON_EXISTENT_DNS_RULE_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/dns_rules/" & oct2char(unichar2oct(PX_NON_EXISTENT_DNS_RULE_ID, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_dns_rule( @@ -1784,7 +1920,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/dns_rules/" & oct2char(unichar2oct(PX_DNS_RULE_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/dns_rules/" & oct2char(unichar2oct(PX_DNS_RULE_ID, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_dns_rule( @@ -1824,9 +1960,259 @@ module AtsMec_AppEnablementAPI_TestCases { } // End of group app_dns - /* - * Service Availability Query (SAQ) - */ + group liv { + + /** + * @desc Check that the IUT responds with the liveness of a MEC service instance when queried by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/Liveness.tplan2 + */ + testcase TC_MEC_MEC011_SRV_MSL_001_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_APP_ENABLEMENT_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_LINK_LIV, + 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_srv_liveness_info( + mw_service_liveness_info( + ACTIVE + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a ServiceLivenessInfo ***"); + 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_MEC011_SRV_MSL_001_OK + + /** + * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/Liveness.tplan2 + */ + testcase TC_MEC_MEC011_SRV_MSL_001_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_APP_ENABLEMENT_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_LINK_LIV, + 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 + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); + 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_MEC011_SRV_APPSUB_002_OK + + /** + * @desc Check that the IUT updates the liveness of a MEC service instance when requested by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/Liveness.tplan2 + */ + testcase TC_MEC_MEC011_SRV_MSL_002_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_APP_ENABLEMENT_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_patch( + PICS_ROOT_API & "/" & PX_LINK_LIV, + v_headers, + m_http_message_body_json( + m_body_json_srv_liveness_info( + m_service_liveness_info( + ACTIVE, + m_time_stamp( + f_get_current_timestamp_utc() + ), + 10 + ) + ) + ) + ) + ) + ); + 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_srv_liveness_info( + mw_service_liveness_info( + ACTIVE + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a new ServiceLivenessInfo ***"); + 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_MEC011_SRV_MSL_002_OK + + /** + * @desc Check that the IUT responds with an error when incorrect parameters were sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/Liveness.tplan2 + */ + testcase TC_MEC_MEC011_SRV_MSL_002_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_APP_ENABLEMENT_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_patch( + PICS_ROOT_API & "/" & PX_LINK_LIV, + v_headers, + m_http_message_body_json( + m_body_json_srv_liveness_info( + m_service_liveness_info( + INACTIVE, + m_time_stamp( + f_get_current_timestamp_utc() + ), + 10 + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); + 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_MEC011_SRV_MSL_002_BR + + } // End of group liv + + /* + * Service Availability Query (SAQ) + */ group saq { /** @@ -1854,7 +2240,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_SVC_URI, + PICS_ROOT_API & PX_MEC_SVC_MGMT_SVC_URI, v_headers ) ) @@ -1911,7 +2297,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_SVC_URI & "?instance_id=" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")), + PICS_ROOT_API & PX_MEC_SVC_MGMT_SVC_URI & "?instance_id=" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")), v_headers ) ) @@ -1965,7 +2351,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_SVC_URI & "/" & oct2char(unichar2oct(PX_SERVICE_ID, "UTF-8")), + PICS_ROOT_API & PX_MEC_SVC_MGMT_SVC_URI & "/" & oct2char(unichar2oct(PX_SERVICE_ID, "UTF-8")), v_headers ) ) @@ -2023,7 +2409,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_SVC_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SERVICE_ID, "UTF-8")), + PICS_ROOT_API & PX_MEC_SVC_MGMT_SVC_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SERVICE_ID, "UTF-8")), v_headers ) ) @@ -2066,6 +2452,7 @@ module AtsMec_AppEnablementAPI_TestCases { testcase TC_MEC_MEC011_SRV_SRVSUB_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var SerAvailabilityNotificationSubscription v_ser_availability_notification_subscription; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -2081,10 +2468,11 @@ module AtsMec_AppEnablementAPI_TestCases { // Preamble f_init_default_headers_list(-, -, v_headers); + f_create_ser_availability_notification_subscription(v_ser_availability_notification_subscription); httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", v_headers ) ) @@ -2098,8 +2486,9 @@ module AtsMec_AppEnablementAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_subscription_link_list - )))) { + mw_body_json_subscription_link_list( + mw_subscription_link_list + ))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a Mp1SubscriptionLinkList ***"); @@ -2112,6 +2501,7 @@ module AtsMec_AppEnablementAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_ser_availability_notification_subscription(v_ser_availability_notification_subscription); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_SRVSUB_001_OK @@ -2140,7 +2530,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", v_headers ) ) @@ -2195,7 +2585,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", v_headers, m_http_message_body_json( m_body_json_srv_avail_notif_subscription( @@ -2237,6 +2627,7 @@ module AtsMec_AppEnablementAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_ser_availability_notification_subscription(v_response.response.body.json_body.serAvailabilityNotificationSubscription); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_APPSUB_002_OK @@ -2266,7 +2657,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", v_headers, m_http_message_body_json( m_body_json_srv_avail_notif_subscription( @@ -2309,6 +2700,8 @@ module AtsMec_AppEnablementAPI_TestCases { testcase TC_MEC_MEC011_SRV_SRVSUB_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var SerAvailabilityNotificationSubscription v_ser_availability_notification_subscription; + var charstring v_uri; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -2324,16 +2717,21 @@ module AtsMec_AppEnablementAPI_TestCases { // Preamble f_init_default_headers_list(-, -, v_headers); + f_create_ser_availability_notification_subscription(v_ser_availability_notification_subscription); + v_uri := regexp( + oct2char(unichar2oct(v_ser_availability_notification_subscription.links.self_.href)), + "?+(" & PX_MEC_SVC_MGMT_APPS_URI & "/?*)", + 0 + ); httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & v_uri, v_headers ) ) ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - // Test Body tc_ac.start; alt { @@ -2341,10 +2739,10 @@ module AtsMec_AppEnablementAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - m_body_json_srv_avail_notif_subscription( - m_srv_avail_notif_subscription( - PX_SRV_AVAIL_NOTIF_CALLBACK_URI - )))))) { + mw_body_json_srv_avail_notif_subscription( + mw_srv_avail_notif_subscription( + v_ser_availability_notification_subscription.callbackReference + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a SerAvailabilityNotificationSubscription ***"); @@ -2357,6 +2755,7 @@ module AtsMec_AppEnablementAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_ser_availability_notification_subscription(v_ser_availability_notification_subscription); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_SRVSUB_003_OK @@ -2385,7 +2784,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) @@ -2421,6 +2820,8 @@ module AtsMec_AppEnablementAPI_TestCases { testcase TC_MEC_MEC011_SRV_SRVSUB_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var SerAvailabilityNotificationSubscription v_ser_availability_notification_subscription; + var charstring v_uri; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -2436,14 +2837,18 @@ module AtsMec_AppEnablementAPI_TestCases { // Preamble f_init_default_headers_list(-, -, v_headers); + f_create_ser_availability_notification_subscription(v_ser_availability_notification_subscription); + v_uri := regexp( + oct2char(unichar2oct(v_ser_availability_notification_subscription.links.self_.href)), + "?+(" & PX_MEC_SVC_MGMT_APPS_URI & "/?*)", + 0 + ); httpPort.send( m_http_request( m_http_request_delete( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), - v_headers - ) - ) - ); + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & v_uri, + v_headers + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2494,7 +2899,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_delete( - "/" & PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) @@ -2537,6 +2942,7 @@ module AtsMec_AppEnablementAPI_TestCases { testcase TC_MEC_MEC011_SRV_TIME_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var UInt64 v_time_stamp; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -2555,11 +2961,12 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_TIMING_CAPS_URI, + PICS_ROOT_API & PX_ME_APP_SUPPORT_TIMING_CAPS_URI, v_headers ) ) ); + v_time_stamp := f_get_current_timestamp_utc() / 1000; f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2570,8 +2977,9 @@ module AtsMec_AppEnablementAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_timing_caps( - mw_timing_caps - ))))) { + mw_timing_caps( + { seconds := ( v_time_stamp - 60 .. v_time_stamp + 60), nanoSeconds := ? } + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a TimingCaps ***"); @@ -2613,12 +3021,12 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_TIMING_CURRENT_URI, + PICS_ROOT_API & PX_ME_APP_SUPPORT_TIMING_CURRENT_URI, v_headers ) ) ); - v_current_time := f_get_current_time_utc(); + v_current_time := f_get_current_time_utc() / 1000; f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2630,8 +3038,7 @@ module AtsMec_AppEnablementAPI_TestCases { mw_http_message_body_json( mw_body_json_current_time( mw_current_time( - (v_current_time - 60 .. v_current_time + 60), - (v_current_time / 1000 - 60 .. v_current_time / 1000 + 60) + (v_current_time - 60 .. v_current_time + 60) )))))) { tc_ac.stop; @@ -2662,6 +3069,7 @@ module AtsMec_AppEnablementAPI_TestCases { testcase TC_MEC_MEC011_SRV_TRAF_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var UInt64 v_time_stamp; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -2680,7 +3088,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules", + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules", v_headers ) ) @@ -2736,7 +3144,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules", + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules", v_headers ) ) @@ -2790,7 +3198,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_TRAFFIC_RULE_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_TRAFFIC_RULE_ID, "UTF-8")), v_headers ) ) @@ -2848,7 +3256,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_TRAFFIC_RULE_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_SUPPORT_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( @@ -2920,7 +3328,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_TRAFFIC_RULE_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_SUPPORT_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( @@ -2982,7 +3390,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_NON_EXISTENT_TRAFFIC_RULE_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_NON_EXISTENT_TRAFFIC_RULE_ID, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_traffic_rule( @@ -3047,7 +3455,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_NON_EXISTENT_TRAFFIC_RULE_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_NON_EXISTENT_TRAFFIC_RULE_ID, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_traffic_rule( @@ -3117,7 +3525,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_SVC_MGMT_TRANS_URI, + PICS_ROOT_API & PX_SVC_MGMT_TRANS_URI, v_headers ) ) @@ -3150,4 +3558,4 @@ module AtsMec_AppEnablementAPI_TestCases { } // End of group transport_rules -} // End of module AtsMec_AppEnablementAPI_TestCases +} // End of module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases diff --git a/ttcn/AtsMec/AtsMec_Grant_TestCases.ttcn b/ttcn/AtsMec/AtsMec_Grant_TestCases.ttcn deleted file mode 100644 index b176ea44872587b75799a487ae94ca2054817a2b..0000000000000000000000000000000000000000 --- a/ttcn/AtsMec/AtsMec_Grant_TestCases.ttcn +++ /dev/null @@ -1,397 +0,0 @@ -/** -* @author ETSI / STF569 -* @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 003, Draft ETSI GS MEC 010-2 V2.1.1 -*/ -module AtsMec_Grant_TestCases { - -// Libcommon -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_LocationAPI -import from Grant_Templates all; -import from Grant_Pics all; -import from Grant_Pixits all; - -// LibMec -import from LibMec_Functions all; -import from LibMec_Pics all; -import from LibMec_Pixits all; - -group grant { - - /** - * @desc: Check that MEO sends a synchronous grant response when a grant request is requested - * ETSI GS MEC 010-2 2.0.10, clause 7.6.1.3.1, - * ETSI GS MEC 010-2 2.0.10, Table 6.2.4.2.2-1, //GrantRequest - * ETSI GS MEC 010-2 2.0.10, Table 6.2.4.4.2-1 //Grant - */ - testcase TC_MEC_MEC010p2_MEO_GRANT_001_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_GRANTS_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_GRANTS_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEO_GRANT_URI, - v_headers, - m_http_message_body_json( - m_body_json_grant_request( - m_grant_request( - PX_APP_INSTANCE_ID, - PX_APP_OPERATION - ) - ) - ) - - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_201_created( - mw_http_message_body_json( - mw_body_json_grant_response( - mw_grant_response( - PX_APP_INSTANCE_ID - ) - ))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a Grant Response ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_001_OK - - - - /** - * @desc: Check that MEO responds with an error when it receives a malformed request when a new grant request is performed - * ETSI GS MEC 010-2 2.0.10, clause 7.6.1.3.1, - * ETSI GS MEC 010-2 2.0.10, Table 6.2.4.2.2-1, //GrantRequest - */ - testcase TC_MEC_MEC010p2_MEO_GRANT_001_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_GRANTS_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_GRANTS_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEO_GRANT_URI, - v_headers, - m_http_message_body_json( - m_body_json_grant_request_with_error( - m_grant_request_with_error( - PX_APP_INSTANCE_ID, - PX_APP_OPERATION_ERROR - ) - ) - ) - - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request( - ))) -> value v_response { - tc_ac.stop; - - if (v_response.response.statuscode == 400) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a Bad response ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_001_BR - - - /** - * @desc: Check that MEO sends a asynchronous grant response when a grant request is requested - * ETSI GS MEC 010-2 2.0.10, clause 7.6.1.3.1, - * ETSI GS MEC 010-2 2.0.10, Table 6.2.4.2.2-1, //GrantRequest - */ - testcase TC_MEC_MEC010p2_MEO_GRANT_002_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_GRANTS_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_GRANTS_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEO_GRANT_URI, - v_headers, - m_http_message_body_json( - m_body_json_grant_request( - m_grant_request( - PX_APP_INSTANCE_ID, - PX_APP_OPERATION - ) - ) - ) - - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - //@TODO: Need to add 202 accepted to the library - mw_http_response_202_accepted() - )) -> value v_response { - tc_ac.stop; - //@TODO: How to check Location??? - if (v_response.response.statuscode == 202) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 202 accepted status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_002_OK - - - /** - * @desc: Check that MEO sends the status of a grant request when a query on a granting ID is performed - * ETSI GS MEC 010-2 2.0.10, clause 7.6.1.3.2, - */ - testcase TC_MEC_MEC010p2_MEO_GRANT_003_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_GRANTS_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_GRANTS_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEO_GRANT_URI & oct2char(unichar2oct(PX_GRANTING_ID, "UTF-8")), - v_headers - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - //@TODO: Need to add 202 accepted to the library - mw_http_response_202_accepted() - )) -> value v_response { - tc_ac.stop; - //@TODO: How to check Location??? - if (v_response.response.statuscode == 201) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 202 accepted status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_003_OK - - - /** - * @desc: Check that MEO responds with an error when it receives a request for returning a grant referred with a wrong ID - * ETSI GS MEC 010-2 2.0.10, clause 7.6.1.3.2 - */ - testcase TC_MEC_MEC010p2_MEO_GRANT_003_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_GRANTS_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_GRANTS_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEO_GRANT_URI & oct2char(unichar2oct(PX_NON_EXISTANT_GRANTING_ID, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_grant_request( - m_grant_request( - PX_APP_INSTANCE_ID, - PX_APP_OPERATION - ) - ) - ) - - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_404_not_found( - ))) -> value v_response { - tc_ac.stop; - - if (v_response.response.statuscode == 404) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a not found status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_003_NF - - - /** - * @desc: Check that MEO sends the status of a grant request when a query on a granting ID is performed - * ETSI GS MEC 010-2 2.0.10, clause 7.6.1.3.2 - * ETSI GS MEC 010-2 2.0.10, Table 6.2.4.4.2-1 //Grant - */ - testcase TC_MEC_MEC010p2_MEO_GRANT_004_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_GRANTS_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_GRANTS_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEO_GRANT_URI & oct2char(unichar2oct(PX_GRANTING_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_grant_response( - mw_grant_response( - PX_APP_INSTANCE_ID - ) - ))))) -> value v_response { - tc_ac.stop; - //@TODO: How to check Location??? - if (v_response.response.statuscode == 200) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 202 accepted status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_004_OK - -} - - - -} diff --git a/ttcn/AtsMec/AtsMec_LocationAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_LocationAPI_TestCases.ttcn index dc949a6d804bfbf9a77033971e525cf9257eb592..0a3b1b3c4971a7def00edd8d50b758e11eda7b19 100644 --- a/ttcn/AtsMec/AtsMec_LocationAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_LocationAPI_TestCases.ttcn @@ -22,7 +22,9 @@ module AtsMec_LocationAPI_TestCases { import from LibItsHttp_TestSystem all; // LibMec/LocationAPI + import from LocationAPI_TypesAndValues all; import from LocationAPI_Templates all; + import from LocationAPI_Functions all; import from LocationAPI_Pics all; import from LocationAPI_Pixits all; @@ -59,7 +61,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?zoneId=" & oct2char(unichar2oct(PX_ZONE_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?zoneId=" & oct2char(unichar2oct(PX_ZONE_ID, "UTF-8")), v_headers ) ) @@ -125,7 +127,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?areaId=" & oct2char(unichar2oct(PX_ZONE_ID, "UTF-8")), // areaId instead of zoneId + PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?areaId=" & oct2char(unichar2oct(PX_ZONE_ID, "UTF-8")), // areaId instead of zoneId v_headers ) ) @@ -180,7 +182,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?zoneId=" & oct2char(unichar2oct(PX_NON_EXISTENT_ZONE_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?zoneId=" & oct2char(unichar2oct(PX_NON_EXISTENT_ZONE_ID, "UTF-8")), v_headers ) ) @@ -220,6 +222,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK() 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_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { @@ -238,7 +241,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LOC_SUB_URI, + PICS_ROOT_API & PX_ME_APP_Q_USERS_LOC_SUB_URI, v_headers, m_http_message_body_json( m_body_json_user_tracking_subscription( @@ -266,7 +269,7 @@ module AtsMec_LocationAPI_TestCases { PX_CLIENT_ID, PX_CALLBACK_REF_URL, PX_USER - )))))) { + )))))) -> value v_response { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a callbackURL ***"); @@ -279,6 +282,7 @@ module AtsMec_LocationAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_user_tracking_subscription(v_response.response.body.json_body.userTrackingSubscription); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK @@ -307,14 +311,14 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LOC_SUB_URI, + PICS_ROOT_API & PX_ME_APP_Q_USERS_LOC_SUB_URI & "_Invalid", v_headers, m_http_message_body_json( m_body_json_user_tracking_subscription( m_user_tracking_subscription( PX_CLIENT_ID_UNKNOWN, PX_CALLBACK_REF_URL, - PX_USER + PX_USER_UNKNOWN ) ) ) @@ -351,7 +355,9 @@ module AtsMec_LocationAPI_TestCases { */ testcase TC_MEC_MEC013_SRV_UELOCSUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables + var UserTrackingSubscription v_user_tracking_subscription; var Headers v_headers; + var charstring v_uri; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { @@ -366,18 +372,24 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble + f_create_user_tracking_subscription(v_user_tracking_subscription); + v_uri :=regexp( + oct2char(unichar2oct(v_user_tracking_subscription.resourceURL)), + "?+" & PX_ME_APP_Q_USERS_LOC_SUB_URI & "/(?*)", + 0 + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_delete( - "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LOC_SUB_URI & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), // TODO Shall be extract from Subscription request + PICS_ROOT_API & PX_ME_APP_Q_USERS_LOC_SUB_URI & "/" & v_uri, v_headers ) ) ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body tc_ac.start; alt { [] httpPort.receive( @@ -424,7 +436,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_delete( - "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LOC_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), // TODO Shall be extract from Subscription request + PICS_ROOT_API & PX_ME_APP_Q_USERS_LOC_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) @@ -464,6 +476,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_OK() 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_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { @@ -482,11 +495,16 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_TRACK_SUB_URI & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), - v_headers - ) - ) - ); + PICS_ROOT_API & PX_ME_APP_Q_USERS_TRACK_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_periodic_notification_subscription( + m_periodic_notification_subscription( + { PX_IP_ADDRESS }, + PX_CALLBACK_REF_URL, + -, -, + PX_USER + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -496,12 +514,14 @@ module AtsMec_LocationAPI_TestCases { mw_http_response( mw_http_response_201_created( mw_http_message_body_json( - mw_body_json_periodic_tracking_subscription( - mw_periodic_tracking_subscription( - PX_CLIENT_ID, - PX_CALLBACK_REF_URL, - PX_USER - )))))) { + mw_body_json_periodic_notification_subscription( + mw_periodic_notification_subscription( + { PX_IP_ADDRESS }, + PX_CALLBACK_REF_URL, + -, -, + PX_USER, + ? + )))))) -> value v_response { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a callbackURL ***"); @@ -514,11 +534,12 @@ module AtsMec_LocationAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_periodic_notification_subscription(v_response.response.body.json_body.periodicNotificationSubscription); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_OK /** - * @desc Check that the IUT acknowledges the UE location change subscription request when commanded by a MEC Application and notifies it when the UE changes location + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UETRACKSUB/PlatUeTrackingSubscription.tplan2 */ testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_BR() runs on HttpComponent system HttpTestAdapter { @@ -542,7 +563,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_TRACK_SUB_URI, + PICS_ROOT_API & PX_ME_APP_Q_USERS_TRACK_SUB_URI & "_Invalid", v_headers, m_http_message_body_json( m_body_json_user_tracking_subscription( @@ -581,12 +602,14 @@ module AtsMec_LocationAPI_TestCases { } // End of testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_BR /** - * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application + * @desc Check that the IUT acknowledges the cancellation of UE location change notifications when commanded by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UETRACKSUB/PlatUeTrackingSubscription.tplan2 */ testcase TC_MEC_MEC013_SRV_UETRACKSUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var PeriodicNotificationSubscription v_position_notification_subscription; + var charstring v_uri; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { @@ -601,11 +624,17 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble + f_create_periodic_notification_subscription(v_position_notification_subscription); + v_uri := regexp( + oct2char(unichar2oct(v_position_notification_subscription.resourceURL)), + "?+" & PX_ME_APP_Q_USERS_TRACK_SUB_URI & "/(?*)", + 0 + ); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_delete( - "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_TRACK_SUB_URI & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_Q_USERS_TRACK_SUB_URI & "/" & v_uri, v_headers ) ) @@ -659,7 +688,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_delete( - "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_TRACK_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_Q_USERS_TRACK_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) @@ -671,11 +700,11 @@ module AtsMec_LocationAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_400_bad_request + mw_http_response_404_not_found )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds 404 Not Found ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -717,7 +746,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI, + PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI, v_headers ) ) @@ -774,7 +803,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "/invalid/" & oct2char(unichar2oct(PX_USER, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "/invalid/" & oct2char(unichar2oct(PX_USER, "UTF-8")), v_headers ) ) @@ -828,7 +857,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "/" & oct2char(unichar2oct(PX_USER_UNKNOWN, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "/" & oct2char(unichar2oct(PX_USER_UNKNOWN, "UTF-8")), v_headers ) ) @@ -855,7 +884,7 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UEINFLOOK_001_NF + } // End of testcase TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_001_NF } // End of group ueInfLook @@ -868,6 +897,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UEINFSUB_001_OK() 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_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { @@ -886,7 +916,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_INF_SUB_URI, + PICS_ROOT_API & PX_ME_APP_Q_USERS_INF_SUB_URI, v_headers, m_http_message_body_json( m_body_json_zonal_traffic_subscription( @@ -914,7 +944,7 @@ module AtsMec_LocationAPI_TestCases { PX_CLIENT_ID, PX_CALLBACK_REF_URL, PX_ZONE_ID - )))))) { + )))))) -> value v_response { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a callbackURL ***"); @@ -927,6 +957,7 @@ module AtsMec_LocationAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_zonal_traffic_subscription(v_response.response.body.json_body.zonalTrafficSubscription); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC013_SRV_UEINFSUB_001_OK @@ -955,7 +986,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - "/" & PICS_ROOT_API & "/invilad/" & PX_ME_APP_Q_USERS_INF_SUB_URI, + PICS_ROOT_API & "/invilad/" & PX_ME_APP_Q_USERS_INF_SUB_URI, v_headers, m_http_message_body_json( m_body_json_zonal_traffic_subscription( @@ -988,7 +1019,6 @@ module AtsMec_LocationAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC013_SRV_UEINFSUB_001_BR @@ -1000,6 +1030,8 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UEINFSUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var ZonalTrafficSubscription v_zonal_traffic_subscription; + var charstring v_uri; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { @@ -1014,24 +1046,19 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble + f_create_zonal_traffic_subscription(v_zonal_traffic_subscription); + v_uri := regexp( + oct2char(unichar2oct(v_zonal_traffic_subscription.resourceURL)), + "?+" & PX_ME_APP_Q_USERS_INF_SUB_URI & "/(?*)", + 0 + ); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_delete( - "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_INF_SUB_URI, - v_headers, - m_http_message_body_json( - m_body_json_zonal_traffic_subscription( - m_zonal_traffic_subscription( - PX_CLIENT_ID, - PX_CALLBACK_REF_URL, - PX_ZONE_ID - ) - ) - ) - ) - ) - ); + PICS_ROOT_API & PX_ME_APP_Q_USERS_INF_SUB_URI & "/" & v_uri, + v_headers + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1081,7 +1108,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_delete( - "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_INF_SUB_URI & "/" & oct2char(unichar2oct(PX_USER_UNKNOWN, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_Q_USERS_INF_SUB_URI & "/" & oct2char(unichar2oct(PX_USER_UNKNOWN, "UTF-8")), v_headers ) ) @@ -1112,8 +1139,786 @@ module AtsMec_LocationAPI_TestCases { } // End of group ueInfSub - group ueDistSub { + /* + * Radio Node Location Lookup (RLOCLOOK) + */ + + group radioNodeLocationLookup { + + /** + * @desc Check that the IUT responds with the list of radio nodes currently associated with the MEC host and the location of each radio node when queried by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/gs013-location-api/blob/master/LocationAPI.yaml#/definitions/AccessPointList + */ + testcase TC_MEC_MEC013_SRV_RLOCLOOK_001_OK() 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_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_ME_APP_Q_ZONE_ID_URI & "/" & oct2char(unichar2oct(PX_ZONE_ID, "UTF-8")) & "/accessPoints", + 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_access_point_list( + mw_access_point_list( + PX_ZONE_ID + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an AccessPoint list containing a ZoneId ***"); + 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_MEC013_SRV_RLOCLOOK_001_OK + + /** + * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_RLOCLOOK_001_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_ME_APP_Q_ZONE_ID_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_ZONE_ID, "UTF-8")) & "/accessPoints", + 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() + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 404 Not Found ***"); + 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_MEC013_SRV_RLOCLOOK_001_NF + + } // End of group radioNodeLocationLookup + + + + /* + * UE Area Subscribe (UEAREASUB) + */ + group ueAreaSubscribe { - } // End of group ueDistSub - + /** + * @desc Check that the IUT acknowledges the UE area change subscription request when commanded by a MEC Application and notifies it when the UE enters the specified circle + */ + testcase TC_MEC_MEC013_SRV_UEAREASUB_001_OK() 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_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_ME_APP_Q_AREA_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_circle_notification_subscription( + m_circle_notification_subscription( + PX_CLIENT_ID, //clientCorrelator + PX_AREA_SUB_CALLBACK_URI, // callbackReference + { PX_IP_ADDRESS } // address + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_circle_notification_subscription( + mw_circle_notification_subscription( + PX_CLIENT_ID )))))) -> value v_response { + // TODO how to send this when the UE enters the area? The TP has the IUT doing this immediately. Do we want this or will it be discarded as part of the test? +// // MEC 013, clause 7.3.11.3 +// the IUT entity sends a vPOST containing, +// uri indicating value CALLBACK_URL +// body containing +// subscriptionNotification containing +// terminalLocation containing +// address set to IP_ADDRESS +// ; +// ; +// ; +// ; +// to the MEC_APP entity + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a circleNotificationSubscription ***"); + 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_delete_circle_notification_subscription(v_response.response.body.json_body.circleNotificationSubscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEAREASUB_001_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UEAREASUB_001_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_ME_APP_Q_AREA_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_circle_notification_subscription( + m_circle_notification_subscription( + PX_CLIENT_ID_UNKNOWN, //clientCorrelator + PX_AREA_SUB_CALLBACK_URI, // callbackReference + { PX_IP_ADDRESS } // address + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with 400 Bad Request ***"); + 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_MEC013_SRV_UEAREASUB_001_BR + + /** + * @desc Check that the IUT acknowledges the cancellation of UE area change notifications when commanded by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UEAREASUB_002_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var CircleNotificationSubscription v_circle_notification_subscription; + var charstring v_uri; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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); + f_create_circle_notification_subscription(v_circle_notification_subscription); + v_uri := regexp( + oct2char(unichar2oct(v_circle_notification_subscription.resourceURL)), + "?+" & PX_ME_APP_Q_AREA_SUB_URI & "/(?*)", + 0 + ); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI & "/" & v_uri, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with no content ***"); + 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_MEC013_SRV_UEAREASUB_002_OK + + /** + * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UEAREASUB_002_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_delete( + PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_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_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with 404 Not Found ***"); + 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_MEC013_SRV_UEAREASUB_002_NF + + } // End of group ueAreaSubscribe + + /* + * UE Distance Lookup (UEDISTLOOK) + */ + group ueDistanceLookup { + + /** + * @desc Check that the IUT responds with the distance to a UE when queried by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UEDISTLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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 & oct2char(unichar2oct(PX_UE_LOC_QRY_URI, "UTF-8")) & "?address=" & oct2char(unichar2oct(PX_IP_ADDRESS, "UTF-8")) & "&latitude=" & float2str(PX_UE_COORD_LAT) & "&longitude=" & float2str(PX_UE_COORD_LONG), + 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_terminal_distance( + mw_terminal_distance + ))))) { + + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a 200 OK ***"); + 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_MEC013_SRV_UEDISTLOOK_001_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UEDISTLOOK_001_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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 & oct2char(unichar2oct(PX_UE_LOC_QRY_URI, "UTF-8")) & "?address=" & oct2char(unichar2oct(PX_IP_ADDRESS, "UTF-8")) & "&lat=" & float2str(PX_UE_COORD_LAT) & "&longitude=" & float2str(PX_UE_COORD_LONG), + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a 400 bad request ***"); + 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_MEC013_SRV_UEDISTLOOK_001_BR + + } // End of group ueDistanceLookup + + /* + * UE Distance Subscribe (UEDISTSUB) + */ + group ueDistanceSubscribe { + + /** + * @desc Check that the IUT acknowledges the UE distance subscription request when commanded by a MEC Application and notifies it when (all) the requested UE(s) is (are) within the specified distance + */ + testcase TC_MEC_MEC013_SRV_UEDISTSUB_001_OK() 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_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_ME_APP_Q_DIST_URI, + v_headers, + m_http_message_body_json( + m_body_json_distance_notification_subscription( + m_distance_notification_subscription( + PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference + -, // checkImmediate + PX_CLIENT_ID, //clientCorrelator + -, // criteria + 10.0, // distance + -, + { PX_UE_MONITORED_IP_ADDRESS } // monitoredAddress + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_distance_notification_subscription( + mw_distance_notification_subscription( + PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference + -, + PX_CLIENT_ID, //clientCorrelator + -, -, -, + { PX_UE_MONITORED_IP_ADDRESS } // monitoredAddress + )))))) -> value v_response { + // TODO how to send this when the UE enters the area? The TP has the IUT doing this immediately. Do we want this or will it be discarded as part of the test? +// + // MEC 013, clause 7.3.11.3 +// the IUT entity sends a vPOST containing, // uri indicating value CALLBACK_URL +// body containing +// subscriptionNotification containing +// terminalLocation containing +// address set to IP_ADDRESS +// ; +// ; +// ; +// ; +// to the MEC_APP entity + + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a circleNotificationSubscription ***"); + 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_delete_distance_notification_subscription(v_response.response.body.json_body.distanceNotificationSubscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEDISTSUB_001_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UEDISTSUB_001_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_ME_APP_Q_DIST_URI & "_INVALID", + v_headers, + m_http_message_body_json( + m_body_json_distance_notification_subscription( + // TODO the TP uses a wrong field name to trigger an error response. Do we create a new data structure just for this or + // change the test to use another trigger (e.g.: invalid IP address)? + m_distance_notification_subscription( + PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference + -, // checkImmediate + PX_CLIENT_ID, //clientCorrelator + -, // criteria + 10.0, // distance + -, // frequency + { PX_UE_MONITORED_IP_ADDRESS }, // monitoredAddress + { PX_IP_ADDRESS } // referenceAddress + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with 400 Bad Request ***"); + 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_MEC013_SRV_UEDISTSUB_001_BR + + /** + * @desc Check that the IUT acknowledges the cancellation of UE distance notifications when commanded by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UEDISTSUB_002_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var DistanceNotificationSubscription v_distance_notification_subscription; + var charstring v_uri; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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); + f_create_distance_notification_subscription(v_distance_notification_subscription); + v_uri := regexp( + oct2char(unichar2oct(v_distance_notification_subscription.resourceURL)), + "?+" & PX_ME_APP_Q_DIST_URI & "/(?*)", + 0 + ); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_APP_Q_DIST_URI & "/" & v_uri, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with no content ***"); + 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_MEC013_SRV_UEDISTSUB_002_OK + + /** + * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UEDISTSUB_002_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_delete( + PICS_ROOT_API & PX_ME_APP_Q_DIST_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_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_404_not_found() + )) { + + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with 404 Not Found ***"); + 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_MEC013_SRV_UEDISTSUB_002_NF + + } // End of group ueDistanceSubscribe + } // End of module AtsMec_LocationAPI_TestCases diff --git a/ttcn/AtsMec/AtsMec_MeoPkgm_TestCases.ttcn b/ttcn/AtsMec/AtsMec_MeoPkgm_TestCases.ttcn deleted file mode 100644 index b11dfa2c7745aaf901b2588a4499dd37ab4df57d..0000000000000000000000000000000000000000 --- a/ttcn/AtsMec/AtsMec_MeoPkgm_TestCases.ttcn +++ /dev/null @@ -1,1260 +0,0 @@ -/** -* @author ETSI / STF569 -* @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 003, Draft ETSI GS MEC 010-2 V2.1.1 -*/ -module AtsMec_PkgMgmt_mm1_TestCases { - - // Libcommon - 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; - - - import from MeoPkgm_Templates all; - import from MeoPkgm_Pics all; - import from MeoPkgm_Pixits all; - - // LibMec - import from LibMec_Functions all; - import from LibMec_Pics all; - import from LibMec_Pixits all; - - group appPackageManagement { - - /** - * @desc: Check that MEO creates a new App Package when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.3.1.3.1, - * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1, //OnboardedAppPkgInfo - * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.2.2-1 //AppPkg - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_001_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEO_PKGM_URI, - v_headers, - m_http_message_body_json( - m_body_json_package_management( - m_package_management( - PX_APP_PKG_NAME, - PX_APP_PKG_VERSION, - PX_CHECKSUM, - PX_APP_PKG_PATH - ) - ) - ) - ) - )); - - 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_pkg_mgmt_response( - mw_package_management_list( - -, - PX_APP_PKG_NAME, - PX_APP_PKG_VERSION, - PX_CHECKSUM, - PX_OPERATIONAL_STATE, - PX_USAGE_STATE - ) - ))))) -> value v_response { - tc_ac.stop; - - if (v_response.response.statuscode == 201) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a Onboarded App Package ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_001_OK - - - - /** - * @desc: Check that MEO responds with an error when it receives a malformed request for creating a new App Package - * ETSI GS MEC 010-2 2.0.10, clause 7.3.1.3.1 - * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.2.2-1 //AppPkg - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_001_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEO_PKGM_URI, - v_headers, - m_http_message_body_json( - m_body_json_package_management_with_error( - m_package_management_with_error( - PX_APP_PKG_VERSION, - PX_CHECKSUM, - PX_APP_PKG_PATH - ) - ) - ) - - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request( - ))) -> value v_response { - tc_ac.stop; - - if (v_response.response.statuscode == 400) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a Bad response ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_001_BR - - - /** - * @desc: Check that MEO returns the list of App Packages when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.3.1.3.2 - * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 //OnboardedAppPkgInfo - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_002_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEO_PKGM_URI, - 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_pkg_mgmt_response( - mw_package_management_list( - -, - PX_APP_PKG_NAME, - PX_APP_PKG_VERSION, - PX_CHECKSUM, - PX_OPERATIONAL_STATE, - PX_USAGE_STATE - ) - ) - ) - ) - ) - ) -> value v_response { - tc_ac.stop; - if (v_response.response.statuscode == 200) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of OnboardedAppPkgInfo and 200 status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_002_OK - - - /** - * @desc: Check that MEO responds with an error when it receives a malformed request for retrieving the list of existing App Packages - * ETSI GS MEC 010-2 2.0.10, clause 7.3.1.3.2 - * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 //OnboardedAppPkgInfo - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_002_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEO_PKGM_URI & "?operationalStatus=ENABLED", - 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_pkg_mgmt_response( - mw_package_management_list( - -, - PX_APP_PKG_NAME, - PX_APP_PKG_VERSION, - PX_CHECKSUM, - PX_OPERATIONAL_STATE, - PX_USAGE_STATE - ) - ) - ) - ) - ) - ) -> value v_response { - tc_ac.stop; - if (v_response.response.statuscode == 400) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 400 Bad Request status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_002_BR - - - - /** - * @desc: Check that MEO returns the an App Package when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.3.2.3.2 - * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 //OnboardedAppPkgInfo - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_003_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEO_PKGM_URI & oct2char(unichar2oct(PX_ON_BOARDED_APP_PKG_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_pkg_mgmt_response( - mw_package_management_list( - PX_ON_BOARDED_APP_PKG_ID, - PX_APP_PKG_NAME, - PX_APP_PKG_VERSION, - PX_CHECKSUM, - PX_OPERATIONAL_STATE, - PX_USAGE_STATE - ) - ) - ) - ) - )) -> value v_response { - tc_ac.stop; - //@TODO: How to check Location??? - if (v_response.response.statuscode == 201) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with an Onboarded App Package info and 200 status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_003_OK - - - /** - * @desc: Check that MEO responds with an error when it receives a request for retrieving a App Package referred with a wrong ID - * ETSI GS MEC 010-2 2.0.10, clause 7.3.2.3.2 - * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 //OnboardedAppPkgInfo - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_003_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEO_PKGM_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_PKG_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_404_not_found( - ))) -> value v_response { - tc_ac.stop; - - if (v_response.response.statuscode == 404) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 not found status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_003_NF - - - /** - * @desc: Check that MEO deletes an App Package when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.3.2.3.4 - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_004_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - "/" & PICS_ROOT_API & PX_MEO_PKGM_URI & oct2char(unichar2oct(PX_ON_BOARDED_APP_PKG_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_204_no_content( - ))) -> value v_response { - tc_ac.stop; - if (v_response.response.statuscode == 204) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 204 no content status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_004_OK - - - /** - * @desc: Check that MEO responds with an error when it receives a request for deleting an App Package referred with a wrong ID - * ETSI GS MEC 010-2 2.0.10, clause 7.3.2.3.4 - * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 //OnboardedAppPkgInfo - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_004_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - "/" & PICS_ROOT_API & PX_MEO_PKGM_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_PKG_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_404_not_found( - ))) -> value v_response { - tc_ac.stop; - - if (v_response.response.statuscode == 404) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 not found status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_004_NF - - - /** - * @desc: Check that MEO changes the status of an App Package from INITIAL_OP_STATE with an operation of type OPERATION_VALUE when requested, with the following possible combinations: - * - ENABLED, DISABLE - * - DISABLED, ENABLE - * - DELETION_PENDING, ABORT - * ETSI GS MEC 010-2 2.0.10, clause 7.3.2.3.3 - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_005_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_put( - "/" & PICS_ROOT_API & PX_MEO_PKGM_URI & oct2char(unichar2oct(PX_ON_BOARDED_APP_PKG_ID, "UTF-8")) & "?appPkgOperation=DISABLE", - v_headers - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_ok( - ))) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 200 ok status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_005_OK - - - /** - * @desc: Check that MEO sends an error when it receives a malformed request to modify the operational state of an application package - * ETSI GS MEC 010-2 2.0.10, clause 7.3.2.3.3 - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_005_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - "/" & PICS_ROOT_API & PX_MEO_PKGM_URI & oct2char(unichar2oct(PX_ON_BOARDED_APP_PKG_ID, "UTF-8")) & "?appPkgOperation=DISAB", - v_headers, - - - - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 400 Bad request status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_005_BR - - - /** - * @desc: Check that MEO responds with an error when it receives a request for updating an App Package referred with a wrong ID - * ETSI GS MEC 010-2 2.0.10, clause 7.3.2.3.3 - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_005_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - "/" & PICS_ROOT_API & PX_MEO_PKGM_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_PKG_ID, "UTF-8")) & "?appPkgOperation=DISABLE", - v_headers, - - - - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request( - ))) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 400 Bad Request status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_005_NF - - - /** - * @desc: Check that MEO returns the Application Descriptor contained on a on-boarded Application Package when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.3.6.3.2 - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_006_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEO_PKGM_URI & oct2char(unichar2oct(PX_ON_BOARDED_APP_PKG_ID, "UTF-8")) & "/appDId", - v_headers - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_ok( - //@TODO: The response should contain a file. Is it possible to check? - ))) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 200 ok status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_006_OK - - - /** - * @desc: Check that MEO responds with an error when it receives a request to retrieve an application descriptor referred with a wrong app package ID - * ETSI GS MEC 010-2 2.0.10, clause 7.3.6.3.2 - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_006_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEO_PKGM_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_PKG_ID, "UTF-8")) & "/appDId", - 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( - ))) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 not found status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_006_NF - - - -} // End of packageManagement - -group pkg_mgmt_subscriptions { - - /** - * @desc: Check that MEO service sends a Application Package Subscription when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.3.3.3.1 - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_007_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEO_PKGM_SUBS, - v_headers, - m_http_message_body_json( - m_body_json_pkgm_subscription( - m_app_package_subscription( - PX_CALLBACK_URI, - PX_SUBSCRIPTION_TYPE - ) - ) - ) - ) - )); - - 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_pkgm_subscription_info( - mw_app_package_subscription_info( - -, - PX_SUBSCRIPTION_TYPE, - PX_CALLBACK_URI - ) - ))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a App Package Subscription Info ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_007_OK - - /** - * @desc: Check that MEO service sends an error when it receives a malformed request for creating a new subscription on AppPackages - * ETSI GS MEC 010-2 2.0.10, clause 7.3.3.3.1 - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_007_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEO_PKGM_SUBS, - v_headers, - m_http_message_body_json( - m_body_json_pkgm_subscription_with_error( - m_app_package_subscription_with_error( - PX_CALLBACK_URI, - PX_SUBSCRIPTION_TYPE_WITH_ERROR - ) - ) - ) - - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request( - ))) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 400 Bad Request status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_007_BR - - /** - * @desc: Check that MEO service returns the list of Application Package Subscriptions when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.3.3.3.2 - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_008_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEO_PKGM_SUBS, - 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_pkgm_subscription_info_list( - { - *, - mw_app_package_subscription_info( - -, - PX_SUBSCRIPTION_TYPE, - PX_CALLBACK_URI - ), - * - } - ))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a App Package Subscription Info List ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_008_OK - - - /** - * @desc: Check that MEO service returns an Application Package Subscription when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.3.4.3.2 - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_009_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_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_pkgm_subscription_info( - mw_app_package_subscription_info( - PX_SUBSCRIPTION_ID, - PX_SUBSCRIPTION_TYPE, - PX_CALLBACK_URI - ) - ))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a App Package Subscription Info identified by the given ID ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_009_OK - - - /** - * @desc: Check that MEO service sends an error when it receives a query - * for a subscription on AppPackages with a wrong identifier - * ETSI GS MEC 010-2 2.0.10, clause 7.3.4.3.2 - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_009_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_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_404_not_found( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 404 not found ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_009_NF - - /** - * @desc: Check that MEO service deletes an Application Package Subscription when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.3.4.3.4 - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_010_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - "/" & PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_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_204_no_content( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds 204 No Content removing the AppPkgSubscription identified by the given ID ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_010_OK - - - /** - * @desc: Check that MEO service sends an error when it receives a deletion - * request for a subscription on AppPackages with a wrong identifier - * ETSI GS MEC 010-2 2.0.10, clause 7.3.4.3.4 - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_010_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - "/" & PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_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_404_not_found( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 404 not found ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_010_NF - -} // end of group pkg_mgmt_subscriptions - -group pkg_management_notification { - - /** - * @desc Check that the MEO service sends a application package notification - * if the MEO service has an associated subscription and the event is generated - * @see ETSI GS MEC 010-2 2.0.10, clause 7.3.5.1 - */ - testcase TC_MEC_MEC010p2_MEO_PKGM_011_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PIC_APP_PACKAGE_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PIC_APP_PACKAGE_NOTIFICATIONS required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_notif_up(); - - // Test adapter configuration - - // Preamble - f_init_default_headers_list(-, -, v_headers); - action("Trigger a expire notification event"); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_wait.start; - alt { - [] httpPort_notif.receive( - mw_http_request( - mw_http_request_post( - unichar2char(PX_CALLBACK_URI), - -, - mw_http_message_body_json( - mw_body_json_app_package_notification( - mw_app_package_notification( - -, - PX_NOTIFICATION_TYPE, - PX_SUBSCRIPTION_ID, - PX_CALLBACK_URI) - ) - ) - ) - ) - ) { - tc_wait.stop; - log("*** " & testcasename() & ": INFO: IUT successfully sends notification ***"); - - // Send 204 No Content - httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); - - log("*** " & testcasename() & ": PASS: IUT successfully sends notification ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); - } - [] tc_wait.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); - } - } // End of 'alt' statement - - // Postamble - f_cf_01_http_notif_down(); - } - - -} // end of group pkg_management_notification - - -} // End of module AtsMec_PkgMgmt_mm1_TestCases - - - - - - - diff --git a/ttcn/AtsMec/AtsMec_MepmPkgm_TestCases.ttcn b/ttcn/AtsMec/AtsMec_MepmPkgm_TestCases.ttcn deleted file mode 100644 index 2f6992631f43856f8fcdf9cfff20e129c4088b9f..0000000000000000000000000000000000000000 --- a/ttcn/AtsMec/AtsMec_MepmPkgm_TestCases.ttcn +++ /dev/null @@ -1,937 +0,0 @@ -/** -* @author ETSI / STF569 -* @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 003, Draft ETSI GS MEC 010-2 V2.1.1 -*/ -module AtsMec_PkgMgmt_mm3_TestCases { - - // Libcommon - 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; - - - import from MepmPkgm_Templates all; - import from MepmPkgm_Pics all; - import from MepmPkgm_Pixits all; - - // LibMec - import from LibMec_Functions all; - import from LibMec_Pics all; - import from LibMec_Pixits all; - - group appPackageManagement { - - /** - * @desc: Check that MEPM returns the list of App Packages when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.4.1.3.2, - * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1, //OnboardedAppPkgInfo - */ - testcase TC_MEC_MEPM_PKGM_001_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEPM_PKGM_URI, - 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_mepm_pkg_mgmt_response_list( - { - *, - mw_package_management( - PX_ON_BOARDED_APP_PKG_ID, - PX_APP_D_ID, - -, - -, - -, - - - ), - * - } - ))))) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a Onboarded App Package list***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_001_OK - - - - /** - * @desc: Check that MEPM responds with an error when it receives a malformed request for requesting the list of existing App Packages - * ETSI GS MEC 010-2 2.0.10, clause 7.4.1.3.2 - * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 //OnboardedAppPkgInfo - */ - testcase TC_MEC_MEC010p2_MEPM_PKGM_001_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEPM_PKGM_URI & "?operationalStatus=ENABLED", //query prameter should be operationalState - v_headers - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a Bad response ***"); - 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 - } // End of testcase TC_MEC_MEO_PKGM_001_BR - - - - /** - * @desc: Check that MEPM returns the an App Package when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.4.2.3.2 - * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 //OnboardedAppPkgInfo - */ - testcase TC_MEC_MEC010p2_MEPM_PKGM_002_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEPM_PKGM_URI & oct2char(unichar2oct(PX_ON_BOARDED_APP_PKG_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_mepm_pkg_mgmt_response( - mw_package_management( - PX_ON_BOARDED_APP_PKG_ID, - -, -, -, -, -, - - ) - ) - ) - ) - )) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with an Onboarded App Package info and 200 status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_002_OK - - - /** - * @desc: Check that MEPM responds with an error when it receives - * a request for returning a App Package referred with a wrong ID - * @see: ETSI GS MEC 010-2 2.0.10, clause 7.4.2.3.2 - */ - testcase TC_MEC_MEC010p2_MEPM_PKGM_002_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEPM_PKGM_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_PKG_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_404_not_found( - ))) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 not found status code ***"); - 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 - } // End of testcase TC_MEC_MEO_PKGM_003_NF - - - /** - * @desc: Check that MEPM returns the Application Descriptor contained on a on-boarded Application Package when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.4.4.3.2 - */ - testcase TC_MEC_MEC010p2_MEPM_PKGM_003_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEPM_PKGM_URI & "/" & oct2char(unichar2oct(PX_ON_BOARDED_APP_PKG_ID, "UTF-8")) & "/app_descriptor", - v_headers - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_ok( - //@TODO: How to check if a file is present in the body? - ))) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with the app descriptor contained in the app pkg ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_003_OK - - - /** - * @desc: Check that MEPM responds with an error when it receives - * a request for returning a App Descriptor referred with a wrong App Package ID - * @see: ETSI GS MEC 010-2 2.0.10, clause 7.4.4.3.2 - */ - testcase TC_MEC_MEC010p2_MEPM_PKGM_003_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEPM_PKGM_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_PKG_ID, "UTF-8")) &"/app_descriptor", - 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( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 not found status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_003_NF - - - /** - * @desc: Check that MEPM returns the content on a on-boarded Application Package when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.4.3.3.2 - */ - testcase TC_MEC_MEC010p2_MEPM_PKGM_004_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_put( - "/" & PICS_ROOT_API & PX_MEPM_PKGM_URI & oct2char(unichar2oct(PX_ON_BOARDED_APP_PKG_ID, "UTF-8")) & "/appPkgContent", - v_headers - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_ok( - //@TODO: How to check if a file is present in the body? - ))) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with and APP Descriptor and a 200 ok status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_004_OK - - /** - * @desc: Check that MEPM responds with an error when it receives - * a request for returning a App Descriptor referred with a wrong App Package ID - * @see: ETSI GS MEC 010-2 2.0.10, clause 7.4.4.3.2 - */ - testcase TC_MEC_MEC010p2_MEPM_PKGM_004_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEPM_PKGM_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_PKG_ID, "UTF-8")) & "/appPkgContent", - 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( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 not found status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_004_NF - -} // End of packageManagement - -group pkg_mgmt_subscriptions { - - /** - * @desc: Check that MEPM service returns an application package subscription when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.4.5.3.1 - */ - testcase TC_MEC_MEC010p2_MEPM_PKGM_005_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEPM_PKGM_SUBS, - v_headers, - m_http_message_body_json( - m_body_json_mepm_pkgm_subscription( - m_app_package_subscription( - PX_CALLBACK_URI, - PX_SUBSCRIPTION_TYPE - ) - ) - ) - ) - )); - - 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_mepm_pkgm_subscription_info( - mw_app_package_subscription_info( - -, - PX_SUBSCRIPTION_TYPE, - PX_CALLBACK_URI - ) - ))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a App Package Subscription Info ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_005_OK - - /** - * @desc: Check that MEPM service sends an error when it receives a - * malformed request for creating a new subscription on AppPackages - * ETSI GS MEC 010-2 2.0.10, clause 7.4.5.3.1 - */ - testcase TC_MEC_MEC010p2_MEPM_PKGM_005_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_MEPM_PKGM_SUBS, - v_headers, - m_http_message_body_json( - m_body_json_mepm_pkgm_subscription_with_error( - m_app_package_subscription_with_error( - PX_CALLBACK_URI, - PX_SUBSCRIPTION_TYPE_WITH_ERROR - ) - ) - ) - - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request( - ))) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 400 Bad Request status code ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_005_BR - - /** - * @desc: Check that MEPM service returns the list of Application Package Subscriptions when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.4.5.3.2 - */ - testcase TC_MEC_MEC010p2_MEPM_PKGM_006_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEPM_PKGM_SUBS, - 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_mepm_pkgm_subscription_info_list( - { - *, - mw_app_package_subscription_info( - -, - PX_SUBSCRIPTION_TYPE, - PX_CALLBACK_URI - ), - * - } - ))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a App Package Subscription Info List ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_006_OK - - - /** - * @desc: Check that MEPM service returns an Application Package Subscription when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.4.6.3.2 - */ - testcase TC_MEC_MEC010p2_MEPM_PKGM_007_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEPM_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_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_mepm_pkgm_subscription_info( - mw_app_package_subscription_info( - PX_SUBSCRIPTION_ID, - PX_SUBSCRIPTION_TYPE, - PX_CALLBACK_URI - ) - ))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a App Package Subscription Info identified by the given ID ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_007_OK - - - /** - * @desc: Check that MEPM service sends an error when it receives a query - * for a subscription on AppPackages with a wrong identifier - * ETSI GS MEC 010-2 2.0.10, clause 7.4.6.3.2 - */ - testcase TC_MEC_MEC010p2_MEPM_PKGM_007_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_MEPM_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_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_404_not_found( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 404 not found ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_007_NF - - /** - * @desc: Check that MEPM service deletes an Application Package Subscription when requested - * ETSI GS MEC 010-2 2.0.10, clause 7.4.6.3.4 - */ - testcase TC_MEC_MEC010p2_MEPM_PKGM_008_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - "/" & PICS_ROOT_API & PX_MEPM_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_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_204_no_content( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds 204 No Content removing the AppPkgSubscription identified by the given ID ***"); - 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 - } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_008_OK - - - /** - * @desc: Check that MEPM service sends an error when it receives a deletion request - * for a subscription on AppPackages with a wrong identifier - * ETSI GS MEC 010-2 2.0.10, clause 7.4.6.3.4 - */ - testcase TC_MEC_MEC010p2_MEPM_PKGM_008_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PIC_APP_PACKAGE_MANAGEMENT)){ - log("*** " & testcasename() & ": PIC_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - "/" & PICS_ROOT_API & PX_MEPM_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_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_404_not_found( - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 404 not found ***"); - 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 - } // End of testcase TC_MEC_MEO_PKGM_010_NF - -} // end of group pkg_mgmt_subscriptions - -group mepm_pkg_management_notification { - - /** - * @desc Check that the MEPM service sends a application package notification if - * the MEPM service has an associated subscription and the event is generated - * @see ETSI GS MEC 010-2 2.0.10, clause 7.4.7.3.1 - */ - testcase TC_MEC_MEC010p2_MEPM_PKGM_009_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PIC_APP_PACKAGE_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PIC_APP_PACKAGE_NOTIFICATIONS required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_notif_up(); - - // Test adapter configuration - - // Preamble - f_init_default_headers_list(-, -, v_headers); - action("Trigger a expire notification event"); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_wait.start; - alt { - [] httpPort_notif.receive( - mw_http_request( - mw_http_request_post( - unichar2char(PX_CALLBACK_URI), - -, - mw_http_message_body_json( - mw_body_json_mepm_app_package_notification( - mw_app_package_notification( - -, - PX_NOTIFICATION_TYPE, - PX_SUBSCRIPTION_ID, - PX_CALLBACK_URI) - ) - ) - ) - ) - ) { - tc_wait.stop; - log("*** " & testcasename() & ": INFO: IUT successfully sends notification ***"); - - // Send 204 No Content - httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); - - log("*** " & testcasename() & ": PASS: IUT successfully sends notification ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); - } - [] tc_wait.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); - } - } // End of 'alt' statement - - // Postamble - f_cf_01_http_notif_down(); - } - - -} // end of group pkg_management_notification - - -} // End of module AtsMec_PkgMgmt_mm1_TestCases - - - - - - - diff --git a/ttcn/AtsMec/AtsMec_RadioNodeLocationAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_RadioNodeLocationAPI_TestCases.ttcn deleted file mode 100644 index 510c37ab5e427445cc09c5d5cf6d7003d7318693..0000000000000000000000000000000000000000 --- a/ttcn/AtsMec/AtsMec_RadioNodeLocationAPI_TestCases.ttcn +++ /dev/null @@ -1,1932 +0,0 @@ -/** - * @author ETSI / STF569 - * @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 003, ETSI GS MEC 013 V2.1.1 - */ -module AtsMec_RadioNodeLocationAPI_TestCases { - - // 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/LocationAPI - import from LocationAPI_TypesAndValues all; - import from LocationAPI_Templates all; - import from LocationAPI_Pics all; - import from LocationAPI_Pixits all; - - // LibMec - import from LibMec_TypesAndValues all; - import from LibMec_Templates all; - import from LibMec_Functions all; - import from LibMec_Pics all; - import from LibMec_Pixits all; - - - /* - * Radio Node Location Lookup (RLOCLOOK) - */ - - group radioNodeLocationLookup { - - /** - * @desc Check that the IUT responds with the list of radio nodes currently associated with the MEC host and the location of each radio node when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs013-location-api/blob/master/LocationAPI.yaml#/definitions/AccessPointList - */ - testcase TC_MEC_MEC013_SRV_RLOCLOOK_001_OK() 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_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_ME_APP_Q_ZONE_ID_URI & "/" & oct2char(unichar2oct(PX_ZONE_ID, "UTF-8")) & "/accessPoints", - 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_access_point_list( - mw_access_point_list( - PX_ZONE_ID - )))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with an AccessPoint list containing a ZoneId ***"); - 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_MEC013_SRV_RLOCLOOK_001_OK - - /** - * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_RLOCLOOK_001_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_ME_APP_Q_ZONE_ID_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_ZONE_ID, "UTF-8")) & "/accessPoints", - 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() - )) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 404 Not Found ***"); - 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_MEC013_SRV_RLOCLOOK_001_NF - - } // End of group radioNodeLocationLookup - - - - /* - * UE Area Subscribe (UEAREASUB) - */ - group ueAreaSubscribe { - - /** - * @desc Check that the IUT acknowledges the UE area change subscription request when commanded by a MEC Application and notifies it when the UE enters the specified circle - */ - testcase TC_MEC_MEC013_SRV_UEAREASUB_001_OK() 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_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_ME_APP_Q_AREA_SUB_URI, - v_headers, - m_http_message_body_json( - m_body_json_circle_notification_subscription( - m_circle_notification_subscription( - PX_CLIENT_ID, //clientCorrelator - PX_AREA_SUB_CALLBACK_URI, // callbackReference - { PX_IP_ADDRESS } // address - ) - ) - ) - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_201_created( - mw_http_message_body_json( - mw_body_json_circle_notification_subscription( - mw_circle_notification_subscription( - PX_CLIENT_ID )))))) -> value v_response { - // TODO how to send this when the UE enters the area? The TP has the IUT doing this immediately. Do we want this or will it be discarded as part of the test? -// // MEC 013, clause 7.3.11.3 -// the IUT entity sends a vPOST containing, -// uri indicating value CALLBACK_URL -// body containing -// subscriptionNotification containing -// terminalLocation containing -// address set to IP_ADDRESS -// ; -// ; -// ; -// ; -// to the MEC_APP entity - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a circleNotificationSubscription ***"); - 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_MEC013_SRV_UEAREASUB_001_OK - - /** - * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UEAREASUB_001_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_ME_APP_Q_AREA_SUB_URI, - v_headers, - m_http_message_body_json( - m_body_json_circle_notification_subscription( - m_circle_notification_subscription( - PX_CLIENT_ID_UNKNOWN, //clientCorrelator - PX_AREA_SUB_CALLBACK_URI, // callbackReference - { PX_IP_ADDRESS } // address - ) - ) - ) - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request - )) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 400 Bad Request ***"); - 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_MEC013_SRV_UEAREASUB_001_BR - - /** - * @desc Check that the IUT acknowledges the cancellation of UE area change notifications when commanded by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UEAREASUB_002_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_delete( - "/" & PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_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_204_no_content - )) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with no content ***"); - 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_MEC013_SRV_UEAREASUB_002_OK - - /** - * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UEAREASUB_002_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_delete( - "/" & PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_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_404_not_found - )) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 404 Not Found ***"); - 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_MEC013_SRV_UEAREASUB_002_NF - - } // End of group ueAreaSubscribe - - /* - * UE Distance Lookup (UEDISTLOOK) - */ - group ueDistanceLookup { - - /** - * @desc Check that the IUT responds with the distance to a UE when queried by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UEDISTLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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 & oct2char(unichar2oct(PX_UE_LOC_QRY_URI, "UTF-8")) & "?address=" & oct2char(unichar2oct(PX_IP_ADDRESS, "UTF-8")) & "&latitude=" & float2str(PX_UE_COORD_LAT) & "&longitude=" & float2str(PX_UE_COORD_LONG), - 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_terminal_distance( - mw_terminal_distance - ))))) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 200 OK ***"); - 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_MEC013_SRV_UEDISTLOOK_001_OK - - /** - * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UEDISTLOOK_001_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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 & oct2char(unichar2oct(PX_UE_LOC_QRY_URI, "UTF-8")) & "?address=" & oct2char(unichar2oct(PX_IP_ADDRESS, "UTF-8")) & "&lat=" & float2str(PX_UE_COORD_LAT) & "&longitude=" & float2str(PX_UE_COORD_LONG), - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request - )) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 400 bad request ***"); - 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_MEC013_SRV_UEDISTLOOK_001_BR - - } // End of group ueDistanceLookup - - /* - * UE Distance Subscribe (UEDISTSUB) - */ - group ueDistanceSubscribe { - - /** - * @desc Check that the IUT acknowledges the UE distance subscription request when commanded by a MEC Application and notifies it when (all) the requested UE(s) is (are) within the specified distance - */ - testcase TC_MEC_MEC013_SRV_UEDISTSUB_001_OK() 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_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_ME_APP_Q_DIST_URI, - v_headers, - m_http_message_body_json( - m_body_json_distance_notification_subscription( - m_distance_notification_subscription( - PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference - -, // checkImmediate - PX_CLIENT_ID, //clientCorrelator - -, // criteria - 10.0, // distance - -, - PX_UE_MONITORED_IP_ADDRESS // monitoredAddress - )))))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_201_created( - mw_http_message_body_json( - mw_body_json_distance_notification_subscription( - mw_distance_notification_subscription( - PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference - -, - PX_CLIENT_ID, //clientCorrelator - -, -, -, - PX_UE_MONITORED_IP_ADDRESS // monitoredAddress - )))))) -> value v_response { - // TODO how to send this when the UE enters the area? The TP has the IUT doing this immediately. Do we want this or will it be discarded as part of the test? -// - // MEC 013, clause 7.3.11.3 -// the IUT entity sends a vPOST containing, // uri indicating value CALLBACK_URL -// body containing -// subscriptionNotification containing -// terminalLocation containing -// address set to IP_ADDRESS -// ; -// ; -// ; -// ; -// to the MEC_APP entity - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a circleNotificationSubscription ***"); - 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_MEC013_SRV_UEDISTSUB_001_OK - - /** - * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UEDISTSUB_001_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_ME_APP_Q_DIST_URI, - v_headers, - m_http_message_body_json( - m_body_json_distance_notification_subscription( - // TODO the TP uses a wrong field name to trigger an error response. Do we create a new data structure just for this or - // change the test to use another trigger (e.g.: invalid IP address)? - m_distance_notification_subscription( - PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference - -, // checkImmediate - PX_CLIENT_ID, //clientCorrelator - -, // criteria - 10.0, // distance - -, // frequency - PX_UE_MONITORED_IP_ADDRESS, // monitoredAddress - { PX_IP_ADDRESS } // referenceAddress - ) - ) - ) - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request - )) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 400 Bad Request ***"); - 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_MEC013_SRV_UEDISTSUB_001_BR - - /** - * @desc Check that the IUT acknowledges the cancellation of UE distance notifications when commanded by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UEDISTSUB_002_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_delete( - "/" & PICS_ROOT_API & PX_ME_APP_Q_DIST_URI & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_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_204_no_content() - )) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with no content ***"); - 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_MEC013_SRV_UEDISTSUB_002_OK - - /** - * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UEDISTSUB_002_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_delete( - "/" & PICS_ROOT_API & PX_ME_APP_Q_DIST_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_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_404_not_found() - )) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 404 Not Found ***"); - 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_MEC013_SRV_UEDISTSUB_002_NF - - } // End of group ueDistanceSubscribe - - /* - * UE Information Lookup (UEINFOLOOK) - */ - group ueInformationLookup { - - /** - * @desc Check that the IUT responds with the information pertaining to one or more UEs in a particular location when queried by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UEINFOLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_ME_APP_Q_USERS_LIST_URI, - 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_user_list( - mw_user_list - ))))) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 200 OK ***"); - 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_MEC013_SRV_UEINFOLOOK_001_OK - - /** - * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UEINFOLOOK_001_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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 & oct2char(unichar2oct(PX_UE_LOC_USERS_URI, "UTF-8")) & "?addr=" & oct2char(unichar2oct(PX_ACR_SOME_IP, "UTF-8")), - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request - )) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 400 Bad Request ***"); - 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_MEC013_SRV_UEINFOLOOK_001_BR - - /** - * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UEINFOLOOK_001_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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 & oct2char(unichar2oct(PX_UE_LOC_USERS_URI, "UTF-8")) & "?address=" & oct2char(unichar2oct(PX_ACR_UNKNOWN_IP, "UTF-8")), - 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 - )) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 Not Found ***"); - 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_MEC013_SRV_UEINFOLOOK_001_NF - - } // End of group ueInformationLookup - - /* - * UE Information Subscription (UEINFOSUB) - */ - group ueInformationSubscription { - - /** - * @desc Check that the IUT acknowledges the UE information change subscription request when commanded by a MEC Application and notifies it when the location changes - */ - testcase TC_MEC_MEC013_SRV_UEINFOSUB_001_OK() 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_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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 & oct2char(unichar2oct(PX_UE_ZONAL_TRAF_SUB_URI, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_zonal_traffic_subscription( - m_zonal_traffic_subscription( - PX_CLIENT_ID, //clientCorrelator - PX_TRAFFIC_SUB_CALLBACK_URI, // callbackReference - PX_ZONE_ID // zoneId - ) - ) - ) - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_201_created( - mw_http_message_body_json( - mw_body_json_zonal_traffic_subscription( - mw_zonal_traffic_subscription( - PX_CLIENT_ID, //clientCorrelator - PX_TRAFFIC_SUB_CALLBACK_URI, // callbackReference - PX_ZONE_ID // zoneId - )))))) -> value v_response { - // TODO how to send this when the UE enters the area? The TP has the IUT doing this immediately. Do we want this or will it be discarded as part of the test? - // MEC 013, clause 7.3.5.3 -// the IUT entity sends a vPOST containing -// Uri set to CALLBACK_URL -// body containing -// zonalPresenceNotification containing -// clientCorrelator set to CLIENT_ID, -// zoneId indicating value ZONE_ID -// ; -// ; -// ; -// to the MEC_APP entity - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a circleNotificationSubscription ***"); - 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_MEC013_SRV_UEINFOSUB_001_OK - - /** - * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UEINFOSUB_001_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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 & oct2char(unichar2oct(PX_UE_ZONAL_TRAF_SUB_URI, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_circle_notification_subscription( - m_circle_notification_subscription( - PX_CLIENT_ID_UNKNOWN, //clientCorrelator - PX_TRAFFIC_SUB_CALLBACK_URI, // callbackReference - { PX_IP_ADDRESS } // address - ) - ) - ) - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request - )) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 400 Bad Request ***"); - 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_MEC013_SRV_UEINFOSUB_001_BR - - /** - * @desc Check that the IUT acknowledges the cancellation of UE information change notifications when commanded by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UEINFOSUB_002_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_delete( - "/" & PICS_ROOT_API & oct2char(unichar2oct(PX_UE_ZONAL_TRAF_SUB_URI, "UTF-8")) & oct2char(unichar2oct(PX_SUBSCRIPTION_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_204_no_content - )) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with no content ***"); - 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_MEC013_SRV_UEINFOSUB_002_OK - - /** - * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UEINFOSUB_002_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_delete( - "/" & PICS_ROOT_API & oct2char(unichar2oct(PX_UE_ZONAL_TRAF_SUB_URI, "UTF-8")) & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_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_404_not_found() - )) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with no 404 Not Found ***"); - 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_MEC013_SRV_UEINFOSUB_002_NF - - } // End of group ueInformationSubscription - - /* - * UE Location Lookup (UELOCLOOK) - */ - group ueLocationLookup { - - /** - * @desc Check that the IUT responds with a list for the location of User Equipments when queried by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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 & oct2char(unichar2oct(PX_UE_LOC_USERS_URI, "UTF-8")) & "?zoneId=" & oct2char(unichar2oct(PX_ZONE_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_user_info( - mw_user_info( - PX_ZONE_ID // zoneId - )))))) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 200 OK ***"); - 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_MEC013_SRV_UELOCLOOK_001_OK - - /** - * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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 & oct2char(unichar2oct(PX_UE_LOC_USERS_URI, "UTF-8")) & "?zone=" & oct2char(unichar2oct(PX_ZONE_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_400_bad_request - )) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 400 Bad Request ***"); - 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_MEC013_SRV_UELOCLOOK_001_BR - - /** - * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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 & oct2char(unichar2oct(PX_UE_LOC_USERS_URI, "UTF-8")) & "?zoneId=" & oct2char(unichar2oct(PX_NON_EXISTENT_ZONE_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_404_not_found - )) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 Not Found ***"); - 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_MEC013_SRV_UELOCLOOK_001_NF - - } // End of group ueLocationLookup - - /* - * UE Location Subscription (UELOCSUB) - */ - group ueLocationSubscription { - - /** - * @desc Check that the IUT acknowledges the UE location change subscription request when commanded by a MEC Application and notifies it when the location changes - */ - testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK() 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_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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 & oct2char(unichar2oct(PX_UE_LOC_USERTRACK_SUB_URI, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_user_tracking_subscription( - m_user_tracking_subscription( - PX_CLIENT_ID, //clientCorrelator - PX_USERTRACK_SUB_CALLBACK_URI, // callbackReference - PX_IP_ADDRESS // address - ) - ) - ) - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_201_created( - mw_http_message_body_json( - mw_body_json_user_tracking_subscription( - mw_user_tracking_subscription( - PX_CLIENT_ID, //clientCorrelator - PX_USERTRACK_SUB_CALLBACK_URI, // callbackReference - PX_IP_ADDRESS // address - )))))) -> value v_response { - // TODO how to send this when the UE enters the area? The TP has the IUT doing this immediately. Do we want this or will it be discarded as part of the test? - // MEC 013, clause 7.3.4.3 -// the IUT entity sends a vPOST containing -// Uri set to CALLBACK_URL -// body containing -// zonalPresenceNotification containing -// clientCorrelator set to CLIENT_ID, -// address set to IP_ADDRESS -// ; -// ; -// ; -// to the MEC_APP entity - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a userTrackingSubscription ***"); - 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_MEC013_SRV_UELOCSUB_001_OK - - /** - * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UELOCSUB_001_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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 & oct2char(unichar2oct(PX_UE_LOC_USERTRACK_SUB_URI, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_user_tracking_subscription( - m_user_tracking_subscription( - PX_CLIENT_ID, //clientCorrelator - // TODO the TP uses a wrong field name to trigger an error response. Do we create a new data structure just for this or - // change the test to use another trigger? - PX_USERTRACK_SUB_CALLBACK_URI, // callbackReference - PX_IP_ADDRESS // address - ) - ) - ) - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request - )) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 400 Bad Request ***"); - 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_MEC013_SRV_UELOCSUB_001_BR - - /** - * @desc Check that the IUT acknowledges the cancellation of UE location change notifications when commanded by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UELOCSUB_002_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_delete( - "/" & PICS_ROOT_API & oct2char(unichar2oct(PX_UE_LOC_USERTRACK_SUB_URI, "UTF-8")) & oct2char(unichar2oct(PX_SUBSCRIPTION_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_204_no_content - )) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with no content ***"); - 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_MEC013_SRV_UELOCSUB_002_OK - - /** - * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UELOCSUB_002_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_delete( - "/" & PICS_ROOT_API & oct2char(unichar2oct(PX_UE_LOC_USERTRACK_SUB_URI, "UTF-8")) & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_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_404_not_found - )) { - - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with no 404 Not Found ***"); - 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_MEC013_SRV_UELOCSUB_002_NF - - } // End of group ueLocationSubscription - - /* - * UE Tracking Subscribe (UETRACKSUB) - */ - group ueTrackingSubscribe { - - /** - * @desc Check that the IUT acknowledges the UE location change subscription request when commanded by a MEC Application and notifies it when the UE changes location - */ - testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_OK() 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_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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 & oct2char(unichar2oct(PX_UE_PERIODIC_SUB_URI, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_periodic_notification_subscription( - m_periodic_notification_subscription( - PX_IP_ADDRESS, // address - PX_USERTRACK_SUB_CALLBACK_URI, // callbackReference - -, -, - PX_CLIENT_ID //clientCorrelator - ) - ) - ) - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_201_created( - mw_http_message_body_json( - mw_body_json_periodic_notification_subscription( - mw_periodic_notification_subscription( - PX_IP_ADDRESS, // address - PX_USERTRACK_SUB_CALLBACK_URI, // callbackReference - -, -, - PX_CLIENT_ID //clientCorrelator - )))))) -> value v_response { - // TODO how to send this when the UE enters the area? The TP has the IUT doing this immediately. Do we want this or will it be discarded as part of the test? -// // MEC 013, clause 7.3.8.3 -// the IUT entity sends a vPOST containing -// uri indicating value CALLBACK_URL -// body containing -// subscriptionNotification containing -// terminalLocation containing -// address set to IP_ADDRESS -// ; -// ; -// ; -// ; -// to the MEC_APP entity - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a periodicNotificationSubscription ***"); - 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_MEC013_SRV_UETRACKSUB_001_OK - - /** - * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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 & oct2char(unichar2oct(PX_UE_PERIODIC_SUB_URI, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_user_tracking_subscription( - m_user_tracking_subscription( - PX_CLIENT_ID, //clientCorrelator - // TODO the TP uses a wrong field name to trigger an error response. Do we create a new data structure just for this or - // change the test to use another trigger? - PX_UE_PERIODIC_SUB_CALLBACK_URI, // callbackReference - PX_IP_ADDRESS // address - ) - ) - ) - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request - )) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 400 Bad Request ***"); - 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_MEC013_SRV_UETRACKSUB_001_BR - - /** - * @desc Check that the IUT acknowledges the cancellation of UE tracking notifications when commanded by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UETRACKSUB_002_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_delete( - "/" & PICS_ROOT_API & oct2char(unichar2oct(PX_UE_PERIODIC_SUB_URI, "UTF-8")) & oct2char(unichar2oct(PX_SUBSCRIPTION_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_204_no_content - )) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with no content ***"); - 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_MEC013_SRV_UETRACKSUB_002_OK - - /** - * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application - */ - testcase TC_MEC_MEC013_SRV_UETRACKSUB_002_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_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_delete( - "/" & PICS_ROOT_API & oct2char(unichar2oct(PX_UE_LOC_USERTRACK_SUB_URI, "UTF-8")) & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_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_404_not_found - )) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with no 404 Not Found ***"); - 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_MEC013_SRV_UETRACKSUB_002_NF - - } // End of group ueTrackingSubscribe - -} // End of module AtsMec_RadioNodeLocationAPI_TestCases diff --git a/ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn index 2a3aea828b4fcd6db55f07aa50edbfede4e714e4..5821f34e12777e50ad6689e423972c2e2d38e930 100644 --- a/ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn @@ -23,6 +23,7 @@ module AtsMec_RnisAPI_TestCases { import from LibItsHttp_Templates all; import from LibItsHttp_JsonTemplates all; import from LibItsHttp_TestSystem all; + import from LibItsHttp_Pics all; // LibMec/RnisAPI import from RnisAPI_TypesAndValues all; @@ -37,6 +38,591 @@ module AtsMec_RnisAPI_TestCases { import from LibMec_Pics all; import from LibMec_Pixits all; + group rnis_notifications { + + /** + * @desc Check that the RNIS service sends an RNIS notification about cell change if the RNIS service has an associated subscription and the event is generated. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + */ + testcase TC_MEC_MEC012_SRV_RNIS_001_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var integer v_result; + var JsonBody v_json_body; + var charstring v_subscription_id; + var charstring v_uri; + // Test control + if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_notif_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + v_result := f_register_for_notification( + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI, + v_headers, + m_body_json_cell_change_subscription( + m_cell_change_subscription( + PX_CALLBACK_REFERENCE, + m_filter_criteria_ho( + "01", + { m_associate_id(UE_IPV4_ADDRESS, PX_ASSOCIATE_ID_VALUE) }, + { + m_ecgi( + m_plmn("001", "001"), + PX_CELL_ID + ) + } + ) + ) + ), + v_json_body + ); + if (v_result == 0) { + // Extract subscription ID for de-registration + if (ispresent(v_json_body.cellChangeSubscription)) { + v_subscription_id := oct2char(unichar2oct(v_json_body.cellChangeSubscription.links.self_.href, "UTF-8")); + } else { + log("*** " & testcasename() & ": INCONC: Unexpected JSON message ***"); + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); // Fail with incoclusive verdict, testcase execution will terminate here + } + } else { + log("*** " & testcasename() & ": INCONC: Failed to register subsciption ***"); + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); // Fail with incoclusive verdict, testcase execution will terminate here + } + action("Trigger a cell change event"); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_wait.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + PX_CALLBACK_URI, + -, + mw_http_message_body_json( + mw_body_json_cell_change_subscription( + mw_cell_change_subscription( + PX_CALLBACK_REFERENCE + )))))) { + tc_wait.stop; + log("*** " & testcasename() & ": INFO: IUT successfully sends cell-change notification ***"); + + // Send 204 No Content + httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + + log("*** " & testcasename() & ": PASS: IUT successfully sends cell-change notification ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_wait.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + v_uri := regexp( + v_subscription_id, + "?+" & PX_RNIS_SUBSCRITIONS_URI & "(?*)", + 0); + f_unregister_for_notification( + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & v_uri, + v_headers + ); + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_001_OK + + /** + * @desc Check that the RNIS service sends an RNIS notification about RAB establishment if the RNIS service has an associated subscription and the event is generated. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + */ + testcase TC_MEC_MEC012_SRV_RNIS_002_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_notif_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + action("Trigger a RabEstSubscription event"); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_wait.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + PX_CALLBACK_URI, + -, + mw_http_message_body_json( + mw_body_json_rab_est_subscription( + mw_rab_est_subscription( + PX_CALLBACK_REFERENCE, + PX_LINKS_SELF, + mw_rab_est_filter_criteria_qci( + PX_APP_INS_ID, + -, + PX_QCI + ))))))) { + tc_wait.stop; + + // Send 204 No Content + httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + + log("*** " & testcasename() & ": PASS: IUT successfully sends RAB establishment notification ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_wait.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_002_OK + + /** + * @desc Check that the RNIS service sends an RNIS notification about RAB modification if the RNIS service has an associated subscription and the event is generated. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + */ + testcase TC_MEC_MEC012_SRV_RNIS_003_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_notif_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + action("Trigger a RabEstSubscription event"); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_wait.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + PX_CALLBACK_URI, + -, + mw_http_message_body_json( + mw_body_json_rab_mod_subscription( + mw_rab_mod_subscription( + PX_CALLBACK_REFERENCE, + PX_LINKS_SELF, + mw_filter_criteria_qci( + PX_APP_INS_ID, + PX_E_RAB_ID, + -, + PX_QCI + ))))))) { + tc_wait.stop; + + // Send 204 No Content + httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + + log("*** " & testcasename() & ": PASS: IUT successfully sends RAB modification notification ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_wait.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_003_OK + + /** + * @desc Check that the RNIS service sends an RNIS notification about RAB release if the RNIS service has an associated subscription and the event is generated. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + */ + testcase TC_MEC_MEC012_SRV_RNIS_004_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_notif_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + action("Trigger a RabEstSubscription event"); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_wait.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + PX_CALLBACK_URI, + -, + mw_http_message_body_json( + mw_body_json_rab_rel_subscription( + mw_rab_rel_subscription( + PX_CALLBACK_REFERENCE, + PX_LINKS_SELF, + mw_filter_criteria_qci( + PX_APP_INS_ID, + PX_E_RAB_ID, + -, + PX_QCI + ))))))) { + tc_wait.stop; + + // Send 204 No Content + httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + + log("*** " & testcasename() & ": PASS: IUT successfully sends RAB release notification ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_wait.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_004_OK + + /** + * @desc Check that the RNIS service sends an RNIS notification about UE measurement report if the RNIS service has an associated subscription and the event is generated. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + */ + testcase TC_MEC_MEC012_SRV_RNIS_005_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_notif_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + action("Trigger a MeasTaSubscription event"); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_wait.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + PX_CALLBACK_URI, + -, + mw_http_message_body_json( + mw_body_json_meas_rep_ue_subscription( + mw_meas_rep_ue_subscription( + PX_CALLBACK_REFERENCE, + PX_LINKS_SELF, + mw_filter_criteria_tri( + PX_APP_INS_ID, + -//TODO PX_E_RAB_ID + ))))))) { + tc_wait.stop; + + // Send 204 No Content + httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + + log("*** " & testcasename() & ": PASS: IUT successfully sends RAB release notification ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_wait.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_005_OK + + /** + * @desc Check that the RNIS service sends an RNIS notification about UE timing advance if the RNIS service has an associated subscription and the event is generated. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + */ + testcase TC_MEC_MEC012_SRV_RNIS_006_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_notif_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + action("Trigger a MeasTaSubscription event"); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_wait.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + PX_CALLBACK_URI, + -, + mw_http_message_body_json( + mw_body_json_meas_ta_subscription( + mw_meas_ta_subscription( + PX_CALLBACK_REFERENCE, + PX_LINKS_SELF, + mw_filter_criteria_ho( + PX_APP_INS_ID, + -//TODO PX_E_RAB_ID + ))))))) { + tc_wait.stop; + + // Send 204 No Content + httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + + log("*** " & testcasename() & ": PASS: IUT successfully sends RAB release notification ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_wait.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_006_OK + + /** + * @desc Check that the RNIS service sends an RNIS notification about UE carrier aggregation reconfiguration if the RNIS service has an associated subscription and the event is generated. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + */ + testcase TC_MEC_MEC012_SRV_RNIS_007_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_notif_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + action("Trigger a MeasTaSubscription event"); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_wait.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + PX_CALLBACK_URI, + -, + mw_http_message_body_json( + mw_body_json_ca_reconf_subscription( + mw_ca_reconfig_subscription( + PX_CALLBACK_REFERENCE, + PX_LINKS_SELF, + mw_filter_criteria( + PX_APP_INS_ID, + -//TODO PX_E_RAB_ID + ))))))) { + tc_wait.stop; + + // Send 204 No Content + httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + + log("*** " & testcasename() & ": PASS: IUT successfully sends RAB release notification ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_wait.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_007_OK + + /** + * @desc Check that the RNIS service sends an RNIS notification about S1-U bearer if the RNIS service has an associated subscription and the event is generated. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + */ + testcase TC_MEC_MEC012_SRV_RNIS_008_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_notif_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + action("Trigger a MeasTaSubscription event"); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_wait.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + PX_CALLBACK_URI, + -, + mw_http_message_body_json( + mw_body_json_s1_bearer_subscription( + mw_s1_bearer_subscription( + PX_CALLBACK_REFERENCE, + PX_LINKS_SELF, + -//mw_filter_criteria + )))))) { + tc_wait.stop; + + // Send 204 No Content + httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + + log("*** " & testcasename() & ": PASS: IUT successfully sends RAB release notification ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_wait.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_008_OK + + /** + * @desc Check that the RNIS service sends an RNIS notification about 5G NR UE measurement report if the RNIS service has an associated subscription and the event is generated. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + */ + testcase TC_MEC_MEC012_SRV_RNIS_009_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_notif_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + action("Trigger a MeasRepUeNotification event"); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_wait.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + PX_CALLBACK_URI, + -, + mw_http_message_body_json( + mw_body_json_s1_bearer_subscription( + mw_s1_bearer_subscription( + PX_CALLBACK_REFERENCE, + PX_LINKS_SELF, + -//mw_filter_criteria + )))))) { + tc_wait.stop; + + // Send 204 No Content + httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + + log("*** " & testcasename() & ": PASS: IUT successfully sends RAB release notification ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_wait.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_009_OK + + } // End of group rnis_notifications + group all_subscriptions { /** @@ -74,7 +660,7 @@ module AtsMec_RnisAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & "?subscription_type=" & oct2char(unichar2oct(PX_SUBSCRIPTION_HREF_VALUE, "UTF-8")), + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & "?subscription_type=" & oct2char(unichar2oct(PX_SUBSCRIPTION_HREF_VALUE, "UTF-8")), v_headers ) ) @@ -90,9 +676,9 @@ module AtsMec_RnisAPI_TestCases { mw_http_message_body_json( mw_body_json_subscriptions_list( mw_subscriptions_list( - PX_LINKS_SELF, - { *, mw_subscription(-, PX_SUBSCRIPTION_TYPE), * } - )))))) { + mw_subscription_link_list_Link( + ?//PX_LINKS_SELF.self_ + ))))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a cell subscription ***"); @@ -125,6 +711,8 @@ module AtsMec_RnisAPI_TestCases { testcase TC_MEC_MEC012_SRV_RNIS_012_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var HttpMessage v_response; + var charstring v_uri; // Test control if (not(PICS_RNIS) or not(PICS_RNIS_ALL_SUBSCRIPTIONS)) { @@ -143,27 +731,22 @@ module AtsMec_RnisAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - "/" & PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI, + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI, v_headers, m_http_message_body_json( m_body_json_cell_change_subscription( m_cell_change_subscription( PX_CALLBACK_REFERENCE, - PX_LINKS_SELF, m_filter_criteria_ho( - "01", - { m_associate_id(UE_IPV4_ADDRESS, PX_ASSOCIATE_ID_VALUE) }, - m_plmn("01", "001"), - PX_CELL_ID, - COMPLETED - ), - m_time_stamp(1577836800) - ) - ) - ) - ) - ) - ); + "01", + { m_associate_id(UE_IPV4_ADDRESS, PX_ASSOCIATE_ID_VALUE) }, + { + m_ecgi( + m_plmn("001", "001"), + PX_CELL_ID + ) + } + ))))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -175,9 +758,7 @@ module AtsMec_RnisAPI_TestCases { mw_http_message_body_json( mw_body_json_cell_change_subscription( mw_cell_change_subscription( - PX_CALLBACK_REFERENCE, - PX_LINKS_SELF - )))))) { + PX_CALLBACK_REFERENCE )))))) -> value v_response { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a cell subscription ***"); @@ -190,6 +771,14 @@ module AtsMec_RnisAPI_TestCases { } // End of 'alt' statement // Postamble + v_uri := regexp( + oct2char(unichar2oct(v_response.response.body.json_body.cellChangeSubscription.links.self_.href)), + "?+" & PX_RNIS_SUBSCRITIONS_URI & "(?*)", + 0); + f_unregister_for_notification( + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & v_uri, + v_headers + ); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC012_SRV_RNIS_012_OK @@ -222,7 +811,7 @@ module AtsMec_RnisAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & "?subscription_type=wrongSubscriptionType", + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & "?subscription_type=wrongSubscriptionType", v_headers ) ) @@ -280,27 +869,22 @@ module AtsMec_RnisAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - "/" & PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI, + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI, v_headers, m_http_message_body_json( m_body_json_cell_change_subscription( m_cell_change_subscription_wrong_subscription_type( PX_CALLBACK_REFERENCE, - PX_LINKS_SELF, m_filter_criteria_ho( - "01", - { m_associate_id(UE_IPV4_ADDRESS, PX_ASSOCIATE_ID_VALUE) }, - m_plmn("01", "001"), - PX_CELL_ID, - COMPLETED - ), - m_time_stamp(1577836800) - ) - ) - ) - ) - ) - ); + "01", + { m_associate_id(UE_IPV4_ADDRESS, PX_ASSOCIATE_ID_VALUE) }, + { + m_ecgi( + m_plmn("001", "001"), + PX_CELL_ID + ) + } + ))))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -330,20 +914,34 @@ module AtsMec_RnisAPI_TestCases { } // End of testcase TC_MEC_MEC012_SRV_RNIS_012_BR } // End of group allSubscription_bo_bi - - group rnis_query { - + + group specificSubscription_bv { + /** - * @desc Check that the RNIS service returns the RAB information when requested. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BV.tplan2 + * @desc Check that the RNIS service sends a RNIS subscription 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_MEC_MEC012_SRV_RNIS_016_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_013_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var integer v_result; + var JsonBody v_json_body; + var charstring v_subscription_id; + var charstring v_uri; // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); + if (not(PICS_RNIS) or not(PICS_RNIS_SPECIFIC_SUBSCRIPTION)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_SPECIFIC_SUBSCRIPTION required for executing the TC ***"); setverdict(inconc); stop; } @@ -355,10 +953,47 @@ module AtsMec_RnisAPI_TestCases { // Preamble f_init_default_headers_list(-, -, v_headers); + v_result := f_register_for_notification( + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI, + v_headers, + m_body_json_cell_change_subscription( + m_cell_change_subscription( + PX_CALLBACK_REFERENCE, + m_filter_criteria_ho( + "01", + { m_associate_id(UE_IPV4_ADDRESS, PX_ASSOCIATE_ID_VALUE) }, + { + m_ecgi( + m_plmn("001", "001"), + PX_CELL_ID + ) + } + ) + ) + ), + v_json_body + ); + if (v_result == 0) { + // Extract subscription ID for de-registration + if (ispresent(v_json_body.cellChangeSubscription)) { + v_subscription_id := oct2char(unichar2oct(v_json_body.cellChangeSubscription.links.self_.href, "UTF-8")); + v_uri := regexp( + oct2char(unichar2oct(v_subscription_id)), + "?+" & PX_RNIS_SUBSCRITIONS_URI & "(?*)", + 0); + } else { + log("*** " & testcasename() & ": INCONC: Unexpected JSON message ***"); + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); // Fail with incoclusive verdict, testcase execution will terminate here + } + } else { + log("*** " & testcasename() & ": INCONC: Failed to register subsciption ***"); + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); // Fail with incoclusive verdict, testcase execution will terminate here + } + httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/rab_info?cell_id=" & oct2char(unichar2oct(PX_CELL_ID, "UTF-8")), + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & v_uri, v_headers ) ) @@ -372,20 +1007,24 @@ module AtsMec_RnisAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_rab_info( - mw_rab_info( - mw_time_stamp, - PX_APP_INS_ID, - -, - { - mw_cell_user_info( - { *, mw_ecgi(mw_plmn, PX_CELL_ID), * } - ) - } - )))))) { + mw_body_json_cell_change_subscription( + mw_cell_change_subscription( + PX_CALLBACK_REFERENCE, + { self_ := { href := "https://" & PICS_HEADER_HOST & PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & v_uri } }, // TODO Rebuild PX_LINKS_SELF, + mw_filter_criteria_ho( + "01", + { mw_associate_id(UE_IPV4_ADDRESS, PX_ASSOCIATE_ID_VALUE) }, + { + mw_ecgi( + m_plmn("001", "001"), + PX_CELL_ID + ) + } + ) + )))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a RAB information ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a cell subscription ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -395,20 +1034,38 @@ module AtsMec_RnisAPI_TestCases { } // End of 'alt' statement // Postamble + f_unregister_for_notification( + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & v_uri, + v_headers + ); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_016_OK + } // End of testcase TC_MEC_MEC012_SRV_RNIS_013_OK /** - * @desc Check that the RNIS service returns the PLMN information when requested. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BV.tplan2 + * @desc Check that the RNIS service sends a RNIS subscription 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_MEC_MEC012_SRV_RNIS_017_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_014_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var integer v_result; + var JsonBody v_json_body; + var charstring v_subscription_id; + var charstring v_uri; // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); + if (not(PICS_RNIS) or not(PICS_RNIS_SPECIFIC_SUBSCRIPTION)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_SPECIFIC_SUBSCRIPTION required for executing the TC ***"); setverdict(inconc); stop; } @@ -420,71 +1077,66 @@ module AtsMec_RnisAPI_TestCases { // Preamble f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/plmn_info?app_ins_id=" & oct2char(unichar2oct(PX_APP_INS_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_plmn_info( - mw_plmn_info( - mw_time_stamp, - PX_APP_INS_ID, - { mw_plmn } - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a PLMN information ***"); - 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_MEC012_SRV_RNIS_017_OK - - /** - * @desc Check that the RNIS service returns the S1 bearer information. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BV.tplan2 - */ - testcase TC_MEC_MEC012_SRV_RNIS_018_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); - setverdict(inconc); - stop; + v_result := f_register_for_notification( + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI, + v_headers, + m_body_json_cell_change_subscription( + m_cell_change_subscription( + PX_CALLBACK_REFERENCE, + m_filter_criteria_ho( + "01", + { m_associate_id(UE_IPV4_ADDRESS, PX_ASSOCIATE_ID_VALUE) }, + { + m_ecgi( + m_plmn("001", "001"), + PX_CELL_ID + ) + } + ) + ) + ), + v_json_body + ); + if (v_result == 0) { + // Extract subscription ID for de-registration + if (ispresent(v_json_body.cellChangeSubscription)) { + v_subscription_id := oct2char(unichar2oct(v_json_body.cellChangeSubscription.links.self_.href, "UTF-8")); + v_uri := regexp( + oct2char(unichar2oct(v_subscription_id)), + "?+" & PX_RNIS_SUBSCRITIONS_URI & "(?*)", + 0); + } else { + log("*** " & testcasename() & ": INCONC: Unexpected JSON message ***"); + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); // Fail with incoclusive verdict, testcase execution will terminate here + } + } else { + log("*** " & testcasename() & ": INCONC: Failed to register subsciption ***"); + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); // Fail with incoclusive verdict, testcase execution will terminate here } - - // 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_RNIS_QUERIES_URI & "/s1_bearer_info?cell_id=" & oct2char(unichar2oct(PX_CELL_ID, "UTF-8")), - v_headers + m_http_request_put( + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & v_uri, + v_headers, + m_http_message_body_json( + m_body_json_cell_change_subscription( + m_cell_change_subscription( + PX_CALLBACK_REFERENCE & "_1", + m_filter_criteria_ho( + "01", + { m_associate_id(UE_IPV4_ADDRESS, PX_ASSOCIATE_ID_VALUE) }, + { + m_ecgi( + m_plmn("001", "001"), + PX_CELL_ID + ) + } + ), + v_json_body.cellChangeSubscription.links + ) + ) + ) ) ) ); @@ -497,22 +1149,24 @@ module AtsMec_RnisAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_s1_bearer_info( - mw_s1_bearer_info( - mw_time_stamp, - { - mw_s1_ue_info( - { mw_temp_ue_id }, - -, // TODO use superset instead of { mw_associate_id }, - { *, mw_ecgi(mw_plmn, PX_CELL_ID), * }, - { - mw_s1_bearer_info_detailed - // TODO To be refined - }) - })))))) { + mw_body_json_cell_change_subscription( + mw_cell_change_subscription( + PX_CALLBACK_REFERENCE & "_1", + { self_ := { href := "https://" & PICS_HEADER_HOST & PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & v_uri } }, // TODO Rebuild PX_LINKS_SELF, + mw_filter_criteria_ho( + "01", + { mw_associate_id(UE_IPV4_ADDRESS, PX_ASSOCIATE_ID_VALUE) }, + { + mw_ecgi( + m_plmn("001", "001"), + PX_CELL_ID + ) + } + ) + )))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a S1BearerInfo information ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a cell subscription ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -522,54 +1176,28 @@ module AtsMec_RnisAPI_TestCases { } // End of 'alt' statement // Postamble + f_unregister_for_notification( + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & v_uri, + v_headers + ); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_018_OK - - /** - * @desc Check that the RNIS service returns the L2 measurements information. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BV.tplan2 - */ - testcase TC_MEC_MEC012_SRV_RNIS_019_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - - // Test Body - log("*** " & testcasename() & ": INCONC: Too many changes in JSON data description, not implemented ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); - - // Postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_019_OK - - } // End of group rnis_query - - group rnis_query_bi_bo { + } // End of testcase TC_MEC_MEC012_SRV_RNIS_014_OK /** - * @desc Check that the RNIS service returns an error when the RAB information is requested with a malformatted message. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 + * @desc Check that the RNIS service deletes a RNIS subscription when requested + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2 */ - testcase TC_MEC_MEC012_SRV_RNIS_016_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_015_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var integer v_result; + var JsonBody v_json_body; + var charstring v_subscription_id; + var charstring v_uri; // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); + if (not(PICS_RNIS) or not(PICS_RNIS_SPECIFIC_SUBSCRIPTION)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_SPECIFIC_SUBSCRIPTION required for executing the TC ***"); setverdict(inconc); stop; } @@ -581,14 +1209,49 @@ module AtsMec_RnisAPI_TestCases { // Preamble f_init_default_headers_list(-, -, v_headers); + v_result := f_register_for_notification( + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI, + v_headers, + m_body_json_cell_change_subscription( + m_cell_change_subscription( + PX_CALLBACK_REFERENCE, + m_filter_criteria_ho( + "01", + { m_associate_id(UE_IPV4_ADDRESS, PX_ASSOCIATE_ID_VALUE) }, + { + m_ecgi( + m_plmn("001", "001"), + PX_CELL_ID + ) + } + ) + ) + ), + v_json_body + ); + if (v_result == 0) { + // Extract subscription ID for de-registration + if (ispresent(v_json_body.cellChangeSubscription)) { + v_subscription_id := oct2char(unichar2oct(v_json_body.cellChangeSubscription.links.self_.href, "UTF-8")); + v_uri := regexp( + oct2char(unichar2oct(v_subscription_id)), + "?+" & PX_RNIS_SUBSCRITIONS_URI & "(?*)", + 0); + } else { + log("*** " & testcasename() & ": INCONC: Unexpected JSON message ***"); + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); // Fail with incoclusive verdict, testcase execution will terminate here + } + } else { + log("*** " & testcasename() & ": INCONC: Failed to register subsciption ***"); + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); // Fail with incoclusive verdict, testcase execution will terminate here + } + httpPort.send( m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/rab_info?c_id=" & oct2char(unichar2oct(PX_CELL_ID, "UTF-8")), - v_headers - ) - ) - ); + m_http_request_delete( + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & v_uri, + v_headers + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -596,15 +1259,11 @@ module AtsMec_RnisAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_400_bad_request( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, -, 400 - )))))) { + mw_http_response_204_no_content + )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with HTTP error 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully deletes subscription ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -615,19 +1274,23 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_016_BR - + } // End of testcase TC_MEC_MEC012_SRV_RNIS_015_OK + + } // End of group specificSubscription_bv + + group specificSubscription_bo_bi { + /** - * @desc Check that the RNIS service returns an error when the RAB information is requested with a malformatted message. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 + * @desc Check that the RNIS service responds with error when a not existing RNIS subscription is requested + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BO_BI.tplan2 */ - testcase TC_MEC_MEC012_SRV_RNIS_016_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_013_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); + if (not(PICS_RNIS) or not(PICS_RNIS_SPECIFIC_SUBSCRIPTION)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_SPECIFIC_SUBSCRIPTION required for executing the TC ***"); setverdict(inconc); stop; } @@ -642,7 +1305,7 @@ module AtsMec_RnisAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/rab_info?cell_id=" & oct2char(unichar2oct(PX_NOT_EXISTENT_CELL_ID, "UTF-8")), + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & PX_UNKNOWN_SUBSCRIPTION_ID, v_headers ) ) @@ -654,15 +1317,11 @@ module AtsMec_RnisAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_404_not_found( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, -, 404 - )))))) { + mw_http_response_404_not_found + )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with HTTP error 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -673,19 +1332,23 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_016_NF + } // End of testcase TC_MEC_MEC012_SRV_RNIS_013_NF /** - * @desc Check that the RNIS service returns an error when the PLMN information is requested with a malformatted message. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 + * @desc Check that the RNIS service responds with error when a modification for a not existing RNIS subscription is requested + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BO_BI.tplan2 */ - testcase TC_MEC_MEC012_SRV_RNIS_017_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_014_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var integer v_result; + var JsonBody v_json_body; + var charstring v_subscription_id; + var charstring v_uri; // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); + if (not(PICS_RNIS) or not(PICS_RNIS_SPECIFIC_SUBSCRIPTION)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_SPECIFIC_SUBSCRIPTION required for executing the TC ***"); setverdict(inconc); stop; } @@ -697,11 +1360,65 @@ module AtsMec_RnisAPI_TestCases { // Preamble f_init_default_headers_list(-, -, v_headers); + v_result := f_register_for_notification( + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI, + v_headers, + m_body_json_cell_change_subscription( + m_cell_change_subscription( + PX_CALLBACK_REFERENCE, + m_filter_criteria_ho( + "01", + { m_associate_id(UE_IPV4_ADDRESS, PX_ASSOCIATE_ID_VALUE) }, + { + m_ecgi( + m_plmn("001", "001"), + PX_CELL_ID + ) + } + ) + ) + ), + v_json_body + ); + if (v_result == 0) { + // Extract subscription ID for de-registration + if (ispresent(v_json_body.cellChangeSubscription)) { + v_subscription_id := oct2char(unichar2oct(v_json_body.cellChangeSubscription.links.self_.href, "UTF-8")); + v_uri := regexp( + oct2char(unichar2oct(v_subscription_id)), + "?+" & PX_RNIS_SUBSCRITIONS_URI & "(?*)", + 0); + } else { + log("*** " & testcasename() & ": INCONC: Unexpected JSON message ***"); + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); // Fail with incoclusive verdict, testcase execution will terminate here + } + } else { + log("*** " & testcasename() & ": INCONC: Failed to register subsciption ***"); + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); // Fail with incoclusive verdict, testcase execution will terminate here + } + httpPort.send( m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/plmn_info?app_id=" & oct2char(unichar2oct(PX_APP_ID, "UTF-8")), - v_headers + m_http_request_put( + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & v_uri, + v_headers, + m_http_message_body_json( + m_body_json_cell_change_subscription( + m_cell_change_subscription( + PX_CALLBACK_REFERENCE & "_1", + m_filter_criteria_ho( + "01", + { m_associate_id(UE_IPV4_ADDRESS, PX_ASSOCIATE_ID_VALUE) }, + { + m_ecgi( + m_plmn("001", "001"), + PX_CELL_ID + ) + } + ) + ) + ) + ) ) ) ); @@ -712,15 +1429,11 @@ module AtsMec_RnisAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_400_bad_request( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, -, 400 - )))))) { + mw_http_response_400_bad_request + )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with HTTP error 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -730,20 +1443,24 @@ module AtsMec_RnisAPI_TestCases { } // End of 'alt' statement // Postamble + f_unregister_for_notification( + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & v_uri, + v_headers + ); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_017_BR + } // End of testcase TC_MEC_MEC012_SRV_RNIS_014_BR /** - * @desc Check that the RNIS service returns an error when the PLMN information for a not existing element is requested. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 + * @desc Check that the RNIS service responds with error when a modification for a not existing RNIS subscription is requested + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BO_BI.tplan2 */ - testcase TC_MEC_MEC012_SRV_RNIS_017_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_014_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); + if (not(PICS_RNIS) or not(PICS_RNIS_SPECIFIC_SUBSCRIPTION)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_SPECIFIC_SUBSCRIPTION required for executing the TC ***"); setverdict(inconc); stop; } @@ -757,9 +1474,26 @@ module AtsMec_RnisAPI_TestCases { f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/plmn_info?app_ins_id=" & oct2char(unichar2oct(PX_NOT_EXISTENT_APP_INS_ID, "UTF-8")), - v_headers + m_http_request_put( + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & PX_UNKNOWN_SUBSCRIPTION_ID, + v_headers, + m_http_message_body_json( + m_body_json_cell_change_subscription( + m_cell_change_subscription( + PX_CALLBACK_REFERENCE & "_1", + m_filter_criteria_ho( + "01", + { m_associate_id(UE_IPV4_ADDRESS, PX_ASSOCIATE_ID_VALUE) }, + { + m_ecgi( + m_plmn("001", "001"), + PX_CELL_ID + ) + } + ) + ) + ) + ) ) ) ); @@ -770,15 +1504,11 @@ module AtsMec_RnisAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_404_not_found( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, -, 404 - )))))) { + mw_http_response_404_not_found + )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with HTTP error 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -789,19 +1519,19 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_017_NF + } // End of testcase TC_MEC_MEC012_SRV_RNIS_014_NF /** - * @desc Check that the RNIS service returns an error when the S1 bearer information is requested with a malformatted message. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 + * @desc Check that the RNIS service responds with error when the deletion of a not existing RNIS subscription is requested + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BO_BI.tplan2 */ - testcase TC_MEC_MEC012_SRV_RNIS_018_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_015_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); + if (not(PICS_RNIS) or not(PICS_RNIS_SPECIFIC_SUBSCRIPTION)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_SPECIFIC_SUBSCRIPTION required for executing the TC ***"); setverdict(inconc); stop; } @@ -815,12 +1545,10 @@ module AtsMec_RnisAPI_TestCases { f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/s1_bearer_info?c_id=" & oct2char(unichar2oct(PX_C_ID, "UTF-8")), - v_headers - ) - ) - ); + m_http_request_delete( + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & PX_UNKNOWN_SUBSCRIPTION_ID, + v_headers + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -828,15 +1556,11 @@ module AtsMec_RnisAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_400_bad_request( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, -, 400 - )))))) { + mw_http_response_404_not_found + )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with HTTP error 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -847,13 +1571,17 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_018_BR + } // End of testcase TC_MEC_MEC012_SRV_RNIS_015_NF + + } // End of group specificSubscription_bo_bi + + group rnis_query { /** - * @desc Check that the RNIS service returns an error when the S1 bearer information for a not existing element is requested. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 + * @desc Check that the RNIS service returns the RAB information when requested. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BV.tplan2 */ - testcase TC_MEC_MEC012_SRV_RNIS_018_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_016_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -874,7 +1602,7 @@ module AtsMec_RnisAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/s1_bearer_info?cell_id=" & oct2char(unichar2oct(PX_NOT_EXISTENT_CELL_ID, "UTF-8")), + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/rab_info?cell_id=" & oct2char(unichar2oct(PX_CELL_ID, "UTF-8")), v_headers ) ) @@ -886,17 +1614,41 @@ module AtsMec_RnisAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_404_not_found( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, -, 404 - )))))) { + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_rab_info( + mw_rab_info( + -,//PX_APP_INS_ID, + -, + { *, mw_cell_user_info( + mw_ecgi( + mw_plmn, + PX_CELL_ID + ), + ? + ), + * + }, + mw_time_stamp + + )))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with HTTP error 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a RAB information ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_rab_info( + mw_rab_info_no_info + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": INCONC: IUT successfully responds with a RAB information, without any detail on this cell ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); @@ -905,13 +1657,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_018_NF - + } // End of testcase TC_MEC_MEC012_SRV_RNIS_016_OK + /** - * @desc Check that the RNIS service returns an error when the L2 measurements information is requested with a malformatted message. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 + * @desc Check that the RNIS service returns the PLMN information when requested. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BV.tplan2 */ - testcase TC_MEC_MEC012_SRV_RNIS_019_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_017_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -932,7 +1684,7 @@ module AtsMec_RnisAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/layer2_meas?c_id=" & oct2char(unichar2oct(PX_C_ID, "UTF-8")), + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/plmn_info?app_ins_id=" & oct2char(unichar2oct(PX_APP_INS_ID, "UTF-8")), v_headers ) ) @@ -944,15 +1696,19 @@ module AtsMec_RnisAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_400_bad_request( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, -, 400 - )))))) { + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_plmn_infos( + { + mw_plmn_info( + PX_APP_INS_ID, + { *, mw_plmn, * } + ) + } + ))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with HTTP error 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a PLMN information ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -963,13 +1719,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_019_BR + } // End of testcase TC_MEC_MEC012_SRV_RNIS_017_OK /** - * @desc Check that the RNIS service returns an error when the L2 measurements information for a not existing element is requested. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 + * @desc Check that the RNIS service returns the S1 bearer information. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BV.tplan2 */ - testcase TC_MEC_MEC012_SRV_RNIS_019_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_018_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -990,7 +1746,7 @@ module AtsMec_RnisAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/layer2_meas?cell_id=" & oct2char(unichar2oct(PX_NOT_EXISTENT_CELL_ID, "UTF-8")), + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/s1_bearer_info?cell_id=" & oct2char(unichar2oct(PX_CELL_ID, "UTF-8")), v_headers ) ) @@ -1002,15 +1758,25 @@ module AtsMec_RnisAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_404_not_found( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, -, 404 - )))))) { + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_s1_bearer_info( + mw_s1_bearer_info( + { + mw_s1_ue_info( + { mw_temp_ue_id }, + -, // TODO use superset instead of { mw_associate_id }, + mw_ecgi( + mw_plmn, + PX_CELL_ID + ) + ) + }, + mw_time_stamp + )))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with HTTP error 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a S1BearerInfo information ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1021,589 +1787,514 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_019_NF - - } // End of group rnis_query_bi_bo - - group rnis_notifications { + } // End of testcase TC_MEC_MEC012_SRV_RNIS_018_OK /** - * @desc Check that the RNIS service sends an RNIS notification about cell change if the RNIS service has an associated subscription and the event is generated. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + * @desc Check that the RNIS service returns the L2 measurements information. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BV.tplan2 */ - testcase TC_MEC_MEC012_SRV_RNIS_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_019_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var integer v_result; - var JsonBody v_json_body; - var charstring v_subscription_id; // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration - f_cf_01_http_notif_up(); + f_cf_01_http_up(); // Test adapter configuration // Preamble f_init_default_headers_list(-, -, v_headers); - v_result := f_register_for_notification( - "/" & PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI, - v_headers, - m_body_json_cell_change_subscription( - m_cell_change_subscription( - PX_CALLBACK_REFERENCE, - PX_LINKS_SELF, - m_filter_criteria_ho( - "01", - { m_associate_id(UE_IPV4_ADDRESS, PX_ASSOCIATE_ID_VALUE) }, - m_plmn("01", "001"), - PX_CELL_ID, - COMPLETED - ) - ) - ), - v_json_body - ); - if (v_result == 0) { - // Extract subscription ID for de-registration - if (ispresent(v_json_body.cellChangeSubscription)) { - v_subscription_id := oct2char(unichar2oct(v_json_body.cellChangeSubscription.links.self_, "UTF-8")); - } else { - log("*** " & testcasename() & ": INCONC: Unexpected JSON message ***"); - f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); // Fail with incoclusive verdict, testcase execution will terminate here - } - } else { - log("*** " & testcasename() & ": INCONC: Failed to register subsciption ***"); - f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); // Fail with incoclusive verdict, testcase execution will terminate here - } - action("Trigger a cell change event"); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/layer2_meas?cell_id=" & oct2char(unichar2oct(PX_CELL_ID, "UTF-8")), + v_headers + ) + ) + ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body - tc_wait.start; + tc_ac.start; alt { - [] httpPort_notif.receive( - mw_http_request( - mw_http_request_post( - PX_CALLBACK_URI, - -, - mw_http_message_body_json( - mw_body_json_cell_change_subscription( - mw_cell_change_subscription( - PX_CALLBACK_REFERENCE - )))))) { - tc_wait.stop; - log("*** " & testcasename() & ": INFO: IUT successfully sends cell-change notification ***"); - - // Send 204 No Content - httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_l2_meas_subscription( + mw_l2_meas + ))))) { + tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully sends cell-change notification ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a L2_MEAS information ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - [] tc_wait.timeout { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_rab_info( + mw_rab_info_no_info + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": INCONC: IUT successfully responds with a RAB information, without any detail on this cell ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement // Postamble - f_unregister_for_notification( - "/" & PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_URI & "/cell_change/" & v_subscription_id, - v_headers - ); - f_cf_01_http_notif_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_001_OK + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_019_OK + } // End of group rnis_query + + group rnis_query_bi_bo { + /** - * @desc Check that the RNIS service sends an RNIS notification about RAB establishment if the RNIS service has an associated subscription and the event is generated. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + * @desc Check that the RNIS service returns an error when the RAB information is requested with a malformatted message. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 */ - testcase TC_MEC_MEC012_SRV_RNIS_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_016_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration - f_cf_01_http_notif_up(); + f_cf_01_http_up(); // Test adapter configuration // Preamble f_init_default_headers_list(-, -, v_headers); - action("Trigger a RabEstSubscription event"); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/rab_info_invalid?cell_id=" & oct2char(unichar2oct(PX_CELL_ID, "UTF-8")), + v_headers + ) + ) + ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body - tc_wait.start; + tc_ac.start; alt { - [] httpPort_notif.receive( - mw_http_request( - mw_http_request_post( - PX_CALLBACK_URI, - -, - mw_http_message_body_json( - mw_body_json_rab_est_subscription( - mw_rab_est_subscription( - PX_CALLBACK_REFERENCE, - PX_LINKS_SELF, - mw_filter_criteria_qci( - PX_APP_INS_ID, - PX_E_RAB_ID, - -, - PX_QCI - ))))))) { - tc_wait.stop; - - // Send 204 No Content - httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully sends RAB establishment notification ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - [] tc_wait.timeout { + [] 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_notif_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_002_OK - + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_016_BR + /** - * @desc Check that the RNIS service sends an RNIS notification about RAB modification if the RNIS service has an associated subscription and the event is generated. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + * @desc Check that the RNIS service returns an error when the RAB information is requested with a malformatted message. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 */ - testcase TC_MEC_MEC012_SRV_RNIS_003_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_016_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration - f_cf_01_http_notif_up(); + f_cf_01_http_up(); // Test adapter configuration // Preamble f_init_default_headers_list(-, -, v_headers); - action("Trigger a RabEstSubscription event"); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/rab_info?cell_id=" & oct2char(unichar2oct(PX_UNKNOWN_CELL_ID, "UTF-8")), + v_headers + ) + ) + ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body - tc_wait.start; + tc_ac.start; alt { - [] httpPort_notif.receive( - mw_http_request( - mw_http_request_post( - PX_CALLBACK_URI, - -, - mw_http_message_body_json( - mw_body_json_rab_mod_subscription( - mw_rab_mod_subscription( - PX_CALLBACK_REFERENCE, - PX_LINKS_SELF, - mw_filter_criteria_qci( - PX_APP_INS_ID, - PX_E_RAB_ID, - -, - PX_QCI - ))))))) { - tc_wait.stop; - - // Send 204 No Content - httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully sends RAB modification notification ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - [] tc_wait.timeout { + [] 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_notif_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_003_OK - + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_016_NF + /** - * @desc Check that the RNIS service sends an RNIS notification about RAB release if the RNIS service has an associated subscription and the event is generated. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + * @desc Check that the RNIS service returns an error when the PLMN information is requested with a malformatted message. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 */ - testcase TC_MEC_MEC012_SRV_RNIS_004_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_017_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration - f_cf_01_http_notif_up(); + f_cf_01_http_up(); // Test adapter configuration // Preamble f_init_default_headers_list(-, -, v_headers); - action("Trigger a RabEstSubscription event"); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/plmn_info_invalid?app_ins_id=" & oct2char(unichar2oct(PX_APP_INS_ID, "UTF-8")), + v_headers + ) + ) + ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body - tc_wait.start; + tc_ac.start; alt { - [] httpPort_notif.receive( - mw_http_request( - mw_http_request_post( - PX_CALLBACK_URI, - -, - mw_http_message_body_json( - mw_body_json_rab_rel_subscription( - mw_rab_rel_subscription( - PX_CALLBACK_REFERENCE, - PX_LINKS_SELF, - mw_filter_criteria_qci( - PX_APP_INS_ID, - PX_E_RAB_ID, - -, - PX_QCI - ))))))) { - tc_wait.stop; - - // Send 204 No Content - httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully sends RAB release notification ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - [] tc_wait.timeout { + [] 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_notif_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_004_OK + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_017_BR /** - * @desc Check that the RNIS service sends an RNIS notification about UE measurement report if the RNIS service has an associated subscription and the event is generated. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + * @desc Check that the RNIS service returns an error when the PLMN information for a not existing element is requested. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 */ - testcase TC_MEC_MEC012_SRV_RNIS_005_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_017_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration - f_cf_01_http_notif_up(); + f_cf_01_http_up(); // Test adapter configuration // Preamble f_init_default_headers_list(-, -, v_headers); - action("Trigger a MeasTaSubscription event"); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/plmn_info?app_ins_id=" & oct2char(unichar2oct(PX_NOT_EXISTENT_APP_INS_ID, "UTF-8")), + v_headers + ) + ) + ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body - tc_wait.start; + tc_ac.start; alt { - [] httpPort_notif.receive( - mw_http_request( - mw_http_request_post( - PX_CALLBACK_URI, - -, - mw_http_message_body_json( - mw_body_json_meas_rep_ue_subscription( - mw_meas_rep_ue_subscription( - PX_CALLBACK_REFERENCE, - PX_LINKS_SELF, - mw_filter_criteria_tri( - PX_APP_INS_ID, - -//TODO PX_E_RAB_ID - ))))))) { - tc_wait.stop; - - // Send 204 No Content - httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully sends RAB release notification ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - [] tc_wait.timeout { + [] 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_notif_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_005_OK + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_017_NF /** - * @desc Check that the RNIS service sends an RNIS notification about UE timing advance if the RNIS service has an associated subscription and the event is generated. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + * @desc Check that the RNIS service returns an error when the S1 bearer information is requested with a malformatted message. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 */ - testcase TC_MEC_MEC012_SRV_RNIS_006_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_018_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration - f_cf_01_http_notif_up(); + f_cf_01_http_up(); // Test adapter configuration // Preamble f_init_default_headers_list(-, -, v_headers); - action("Trigger a MeasTaSubscription event"); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/s1_bearer_info_invalid?cell_id=" & oct2char(unichar2oct(PX_CELL_ID, "UTF-8")), + v_headers + ) + ) + ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body - tc_wait.start; + tc_ac.start; alt { - [] httpPort_notif.receive( - mw_http_request( - mw_http_request_post( - PX_CALLBACK_URI, - -, - mw_http_message_body_json( - mw_body_json_meas_ta_subscription( - mw_meas_ta_subscription( - PX_CALLBACK_REFERENCE, - PX_LINKS_SELF, - mw_filter_criteria_ho( - PX_APP_INS_ID, - -//TODO PX_E_RAB_ID - ))))))) { - tc_wait.stop; - - // Send 204 No Content - httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully sends RAB release notification ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - [] tc_wait.timeout { + [] 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_notif_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_006_OK + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_018_BR /** - * @desc Check that the RNIS service sends an RNIS notification about UE carrier aggregation reconfiguration if the RNIS service has an associated subscription and the event is generated. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + * @desc Check that the RNIS service returns an error when the S1 bearer information for a not existing element is requested. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 */ - testcase TC_MEC_MEC012_SRV_RNIS_007_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_018_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration - f_cf_01_http_notif_up(); + f_cf_01_http_up(); // Test adapter configuration // Preamble f_init_default_headers_list(-, -, v_headers); - action("Trigger a MeasTaSubscription event"); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/s1_bearer_info?cell_id=" & oct2char(unichar2oct(PX_UNKNOWN_CELL_ID, "UTF-8")), + v_headers + ) + ) + ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body - tc_wait.start; + tc_ac.start; alt { - [] httpPort_notif.receive( - mw_http_request( - mw_http_request_post( - PX_CALLBACK_URI, - -, - mw_http_message_body_json( - mw_body_json_ca_reconf_subscription( - mw_ca_reconfig_subscription( - PX_CALLBACK_REFERENCE, - PX_LINKS_SELF, - mw_filter_criteria( - PX_APP_INS_ID, - -//TODO PX_E_RAB_ID - ))))))) { - tc_wait.stop; - - // Send 204 No Content - httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully sends RAB release notification ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - [] tc_wait.timeout { + [] 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_notif_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_007_OK + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_018_NF /** - * @desc Check that the RNIS service sends an RNIS notification about S1-U bearer if the RNIS service has an associated subscription and the event is generated. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + * @desc Check that the RNIS service returns an error when the L2 measurements information is requested with a malformatted message. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 */ - testcase TC_MEC_MEC012_SRV_RNIS_008_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_019_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration - f_cf_01_http_notif_up(); + f_cf_01_http_up(); // Test adapter configuration // Preamble f_init_default_headers_list(-, -, v_headers); - action("Trigger a MeasTaSubscription event"); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/layer2_meas_invalid?cell_id=" & oct2char(unichar2oct(PX_CELL_ID, "UTF-8")), + v_headers + ) + ) + ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body - tc_wait.start; + tc_ac.start; alt { - [] httpPort_notif.receive( - mw_http_request( - mw_http_request_post( - PX_CALLBACK_URI, - -, - mw_http_message_body_json( - mw_body_json_s1_bearer_subscription( - mw_s1_bearer_subscription( - PX_CALLBACK_REFERENCE, - PX_LINKS_SELF, - -//mw_filter_criteria - )))))) { - tc_wait.stop; - - // Send 204 No Content - httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully sends RAB release notification ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - [] tc_wait.timeout { + [] 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_notif_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_008_OK + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_019_BR /** - * @desc Check that the RNIS service sends an RNIS notification about 5G NR UE measurement report if the RNIS service has an associated subscription and the event is generated. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 + * @desc Check that the RNIS service returns an error when the L2 measurements information for a not existing element is requested. + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 */ - testcase TC_MEC_MEC012_SRV_RNIS_009_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_019_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_NOTIFICATIONS required for executing the TC ***"); + if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration - f_cf_01_http_notif_up(); + f_cf_01_http_up(); // Test adapter configuration // Preamble f_init_default_headers_list(-, -, v_headers); - action("Trigger a MeasRepUeNotification event"); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/layer2_meas?cell_id=" & oct2char(unichar2oct(PX_UNKNOWN_CELL_ID, "UTF-8")), + v_headers + ) + ) + ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body - tc_wait.start; + tc_ac.start; alt { - [] httpPort_notif.receive( - mw_http_request( - mw_http_request_post( - PX_CALLBACK_URI, - -, - mw_http_message_body_json( - mw_body_json_s1_bearer_subscription( - mw_s1_bearer_subscription( - PX_CALLBACK_REFERENCE, - PX_LINKS_SELF, - -//mw_filter_criteria - )))))) { - tc_wait.stop; - - // Send 204 No Content - httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully sends RAB release notification ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - [] tc_wait.timeout { + [] 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_notif_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_009_OK - - } // End of group rnis_notifications + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_019_NF + + } // End of group rnis_query_bi_bo } // End of module AtsMec_RnisAPI_TestCases diff --git a/ttcn/AtsMec/AtsMec_TestControl.ttcn b/ttcn/AtsMec/AtsMec_TestControl.ttcn index 5d6fc075acf500d45a3def356c07c3d4aa7ddc1d..4c747361eaddfb23a600476d43a2462f78889fbc 100644 --- a/ttcn/AtsMec/AtsMec_TestControl.ttcn +++ b/ttcn/AtsMec/AtsMec_TestControl.ttcn @@ -9,7 +9,7 @@ module AtsMec_TestControl { // LibMec/TrafficManagementAPI import from TrafficManagementAPI_Pics all; // LibMec/AppEnablementAPI - import from AppEnablementAPI_Pics all; + import from EdgePlatformApplicationEnablementAPI_Pics all; // LibMec/UEAppInterfaceAPI import from UEAppInterfaceAPI_Pics all; @@ -22,7 +22,7 @@ module AtsMec_TestControl { // import from AtsMec_RadioNodeLocationAPI_TestCases all; import from AtsMec_RnisAPI_TestCases all; import from AtsMec_TrafficManagementAPI_TestCases all; - import from AtsMec_AppEnablementAPI_TestCases all; + import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; import from AtsMec_UEAppInterfaceAPI_TestCases all; control { @@ -86,7 +86,13 @@ module AtsMec_TestControl { } } - if (PICS_RNIS) { + /*if (PICS_RNIS) { + if (PICS_RNIS_NOTIFICATIONS) { + execute(TC_MEC_MEC012_SRV_RNIS_001_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_002_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_003_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_004_OK()); + } if (PICS_RNIS_ALL_SUBSCRIPTIONS) { execute(TC_MEC_MEC012_SRV_RNIS_011_OK()); execute(TC_MEC_MEC012_SRV_RNIS_012_OK()); @@ -107,13 +113,7 @@ module AtsMec_TestControl { execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); } - if (PICS_RNIS_NOTIFICATIONS) { - execute(TC_MEC_MEC012_SRV_RNIS_001_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_002_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_003_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_004_OK()); - } - } + }*/ if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { execute(TC_MEC_MEC015_SRV_TM_001_OK()); diff --git a/ttcn/AtsMec/AtsMec_WlanInformationAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_WlanInformationAPI_TestCases.ttcn index dbc365bb96c033efeedb13869b8caec0346241b8..77e96268e2fe5a75a85365d5e12a6706c9b4c635 100644 --- a/ttcn/AtsMec/AtsMec_WlanInformationAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_WlanInformationAPI_TestCases.ttcn @@ -184,7 +184,7 @@ module AtsMec_WlanInformationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_WLAN_QUERIES_URI & "/apId/ap_information?filter=(eq," & PX_WLAN_FILTER_FIELD & "," & PX_WLAN_FILTER_VALUE & ")", // Invalid requery + PICS_ROOT_API & PX_ME_WLAN_QUERIES_URI & "/apId/ap_information?filter=(ee," & PX_WLAN_FILTER_FIELD & "," & PX_WLAN_FILTER_VALUE & ")", // Invalid requery v_headers ) ) @@ -216,7 +216,7 @@ module AtsMec_WlanInformationAPI_TestCases { /** * @desc Check that the IUT responds with the list of Station Point * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/StationInfo.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -274,7 +274,7 @@ module AtsMec_WlanInformationAPI_TestCases { /** * @desc Check that the IUT responds with the list of Station Point filtered by the macId provided as query parameter * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/StationInfo.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -332,7 +332,7 @@ module AtsMec_WlanInformationAPI_TestCases { /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/StationInfo.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_004_BR() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -356,7 +356,7 @@ module AtsMec_WlanInformationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_WLAN_QUERIES_URI & "/staId/sta_information?filter=(eq," & PX_WLAN_FILTER_FIELD & "," & PX_WLAN_FILTER_VALUE & ")", // Invalid requery + PICS_ROOT_API & PX_ME_WLAN_QUERIES_URI & "/staId/sta_information?filter=(ee," & PX_WLAN_FILTER_FIELD & "," & PX_WLAN_FILTER_VALUE & ")", // Invalid requery v_headers ) ) @@ -388,11 +388,11 @@ module AtsMec_WlanInformationAPI_TestCases { /** * @desc Check that the IUT responds with the requested list of subscription * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Subscription.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_005_OK() runs on HttpComponent system HttpTestAdapter { // Local variables - var AssocStaSubscription v_assoc_sta_subscription; // FIXME Use an array of 3 elements to get a list + var AssocStaSubscription v_assoc_sta_subscription; // FIXME Use an array of 3 elements to get a list var Headers v_headers; var HttpMessage v_response; @@ -404,12 +404,12 @@ module AtsMec_WlanInformationAPI_TestCases { } // Test component configuration - f_create_assoc_sta_subscription(v_assoc_sta_subscription); f_cf_01_http_up(); // Test adapter configuration // Preamble + f_create_assoc_sta_subscription(v_assoc_sta_subscription); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -450,130 +450,71 @@ module AtsMec_WlanInformationAPI_TestCases { /** * @desc Check that the IUT responds with the requested list of subscription * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 - */ - testcase TC_MEC_MEC028_SRV_WAI_005_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var AssocStaSubscription v_assoc_sta_subscription; - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_create_assoc_sta_subscription(v_assoc_sta_subscription); - 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_ME_WLAN_URI & "/subscriptions", - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request - )) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); - 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_delete_assoc_sta_subscription(v_assoc_sta_subscription); - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC028_SRV_WAI_005_BR - - /** - * @desc Check that the IUT responds with the requested list of subscription - * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Subscription.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_006_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables + // Local variables var AssocStaSubscription v_assoc_sta_subscription; - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_create_assoc_sta_subscription(v_assoc_sta_subscription); - 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_ME_WLAN_URI & "/subscriptions/assoc_sta", - 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_wlan_subscription_link_list( - mw_subscription_link_list( - -, - ? - )))))) -> value v_response { - tc_ac.stop; + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_assoc_sta_subscription(v_assoc_sta_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions?subscription_type=assoc_sta", + 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_wlan_subscription_link_list( + mw_subscription_link_list( + -, + ? + )))))) -> value v_response { + tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of AssocStaSubscription ***"); - 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_delete_assoc_sta_subscription(v_assoc_sta_subscription); - f_cf_01_http_down(); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of AssocStaSubscription ***"); + 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_delete_assoc_sta_subscription(v_assoc_sta_subscription); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC028_SRV_WAI_006_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Subscription.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_006_BR() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -588,12 +529,12 @@ module AtsMec_WlanInformationAPI_TestCases { } // Test component configuration - f_create_assoc_sta_subscription(v_assoc_sta_subscription); f_cf_01_http_up(); // Test adapter configuration // Preamble + f_create_assoc_sta_subscription(v_assoc_sta_subscription); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -631,7 +572,7 @@ module AtsMec_WlanInformationAPI_TestCases { /** * @desc Check that the IUT responds with an error when a request with not existing parameters is sent * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Subscription.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_006_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -683,10 +624,19 @@ module AtsMec_WlanInformationAPI_TestCases { f_cf_01_http_down(); } // End of testcase TC_MEC_MEC028_SRV_WAI_006_NF + /*** + var charstring v_uri; + v_uri := regexp( + oct2char(unichar2oct(v_assoc_sta_subscription.links.self_.href)), + "?+(" & PX_ME_WLAN_URI & "?*)", + 0 + ); + ***/ + /** * @desc Check that the IUT responds with the list of Station Point filtered by the macId provided as query parameter * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Subscription.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_007_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -718,7 +668,13 @@ module AtsMec_WlanInformationAPI_TestCases { PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, m_ap_identity( PX_MAC_ID - ))))))); + ), + -, -, -, + 10, // notificationPeriod - Table 6.3.2-1: Attributes of the AssocStaSubscription Note 2 + -, + m_time_stamp( + f_get_current_timestamp_utc() / 1000 + 30 // Expiry time: T + 30 seconds + ))))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -726,14 +682,14 @@ module AtsMec_WlanInformationAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_ok( - mw_http_message_body_json( - mw_body_json_assoc_sta_subscription( - mw_assoc_sta_subscription( - PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, - -, - ? - )))))) -> value v_response { + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_assoc_sta_subscription( + mw_assoc_sta_subscription( + PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, + -, -, -, + ? + )))))) -> value v_response { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds to the subscription ***"); @@ -753,7 +709,7 @@ module AtsMec_WlanInformationAPI_TestCases { /** * @desc Check that the IUT responds with an error when an invalid Subscription request is sent * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Subscription.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_007_BR() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -812,7 +768,7 @@ module AtsMec_WlanInformationAPI_TestCases { /** * @desc Check that the IUT responds with an error when a request with not existing parameters is sent * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Subscription.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_007_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -871,13 +827,14 @@ module AtsMec_WlanInformationAPI_TestCases { /** * @desc Check that the IUT responds with the list of Subscription * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ExistingSub.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_008_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var AssocStaSubscription v_assoc_sta_subscription; var Headers v_headers; var HttpMessage v_response; + var charstring v_uri; // Test control if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { @@ -887,17 +844,22 @@ module AtsMec_WlanInformationAPI_TestCases { } // Test component configuration - f_create_assoc_sta_subscription(v_assoc_sta_subscription); f_cf_01_http_up(); // Test adapter configuration // Preamble + f_create_assoc_sta_subscription(v_assoc_sta_subscription); f_init_default_headers_list(-, -, v_headers); + v_uri := regexp( + oct2char(unichar2oct(v_assoc_sta_subscription.links.self_.href)), + "?+" & PX_ME_WLAN_URI & "/subscriptions/" & "(?*)", + 0 + ); httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & v_assoc_sta_subscription.links.self_.href, + PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions/" & v_uri, v_headers ) ) @@ -915,6 +877,7 @@ module AtsMec_WlanInformationAPI_TestCases { mw_assoc_sta_subscription( v_assoc_sta_subscription.callbackReference, -, + -, -, v_assoc_sta_subscription.links )))))) -> value v_response { tc_ac.stop; @@ -936,14 +899,15 @@ module AtsMec_WlanInformationAPI_TestCases { /** * @desc Check that the IUT responds with an error when a request for existing subscription with incorrect parameters is sent * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ExistingSub.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_008_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var AssocStaSubscription v_assoc_sta_subscription; var Headers v_headers; var HttpMessage v_response; - + var charstring v_uri := "unknown"; + // Test control if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); @@ -952,17 +916,17 @@ module AtsMec_WlanInformationAPI_TestCases { } // Test component configuration - f_create_assoc_sta_subscription(v_assoc_sta_subscription); f_cf_01_http_up(); // Test adapter configuration // Preamble + f_create_assoc_sta_subscription(v_assoc_sta_subscription); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & v_assoc_sta_subscription.links.self_.href & "_Invalid", + PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions/unknown", v_headers ) ) @@ -995,13 +959,14 @@ module AtsMec_WlanInformationAPI_TestCases { /** * @desc Check that the IUT responds with a Notification Subscription when it is modified * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ExistingSub.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_009_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var AssocStaSubscription v_assoc_sta_subscription; var Headers v_headers; var HttpMessage v_response; + var charstring v_uri; // Test control if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { @@ -1018,10 +983,15 @@ module AtsMec_WlanInformationAPI_TestCases { // Preamble f_create_assoc_sta_subscription(v_assoc_sta_subscription); f_init_default_headers_list(-, -, v_headers); + v_uri := regexp( + oct2char(unichar2oct(v_assoc_sta_subscription.links.self_.href)), + "?+" & PX_ME_WLAN_URI & "/subscriptions/" & "(?*)", + 0 + ); httpPort.send( m_http_request( m_http_request_put( - PICS_ROOT_API & v_assoc_sta_subscription.links.self_.href, + PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions/" & v_uri, v_headers, m_http_message_body_json( m_body_json_assoc_sta_subscription( @@ -1030,8 +1000,12 @@ module AtsMec_WlanInformationAPI_TestCases { m_ap_identity( PX_MAC_ID ), - v_assoc_sta_subscription.links - )))))); + -, -, + v_assoc_sta_subscription.links, + 12, + m_time_stamp( + f_get_current_timestamp_utc() / 1000 + 30 // Expiry time: T + 30 seconds + ))))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1045,6 +1019,7 @@ module AtsMec_WlanInformationAPI_TestCases { mw_assoc_sta_subscription( v_assoc_sta_subscription.callbackReference, ?, + -, -, v_assoc_sta_subscription.links )))))) -> value v_response { tc_ac.stop; @@ -1065,13 +1040,12 @@ module AtsMec_WlanInformationAPI_TestCases { /** * @desc Check that the IUT responds with an error when an invalid field is set in the subscription modification request * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ExistingSub.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_009_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var AssocStaSubscription v_assoc_sta_subscription; var Headers v_headers; - var HttpMessage v_response; // Test control if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { @@ -1091,17 +1065,21 @@ module AtsMec_WlanInformationAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - PICS_ROOT_API & v_assoc_sta_subscription.links.self_.href, + PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions/unknown", v_headers, m_http_message_body_json( m_body_json_assoc_sta_subscription( - m_assoc_sta_subscription_invalid( - v_assoc_sta_subscription.callbackReference, - m_ap_identity( - PX_MAC_ID - ), - v_assoc_sta_subscription.links - )))))); + m_assoc_sta_subscription( + v_assoc_sta_subscription.callbackReference, + m_ap_identity( + PX_MAC_ID + ), + -, -, + v_assoc_sta_subscription.links, + 12, + m_time_stamp( + f_get_current_timestamp_utc() / 1000 + 30 // Expiry time: T + 30 seconds + ))))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1110,7 +1088,7 @@ module AtsMec_WlanInformationAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_400_bad_request - )) -> value v_response { + )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds the correct error code ***"); @@ -1123,20 +1101,20 @@ module AtsMec_WlanInformationAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_assoc_sta_subscription(v_response.response.body.json_body.assocStaSubscription); + f_delete_assoc_sta_subscription(v_assoc_sta_subscription); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC028_SRV_WAI_009_BR /** * @desc Check that the IUT responds with 204 when an existing subscription is correctly deleted * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ExistingSub.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_010_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var AssocStaSubscription v_assoc_sta_subscription; var Headers v_headers; - var HttpMessage v_response; + var charstring v_uri; // Test control if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { @@ -1146,17 +1124,22 @@ module AtsMec_WlanInformationAPI_TestCases { } // Test component configuration - f_create_assoc_sta_subscription(v_assoc_sta_subscription); f_cf_01_http_up(); // Test adapter configuration // Preamble + f_create_assoc_sta_subscription(v_assoc_sta_subscription); f_init_default_headers_list(-, -, v_headers); + v_uri := regexp( + oct2char(unichar2oct(v_assoc_sta_subscription.links.self_.href)), + "?+(" & PX_ME_WLAN_URI & "?*)", + 0 + ); httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & v_assoc_sta_subscription.links.self_.href, + PICS_ROOT_API & v_uri, v_headers ) ) @@ -1169,7 +1152,7 @@ module AtsMec_WlanInformationAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_204_no_content - )) -> value v_response { + )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with an AssocStaSubscription ***"); @@ -1188,13 +1171,13 @@ module AtsMec_WlanInformationAPI_TestCases { /** * @desc Check that the IUT responds with an error when an not existing subscription cannot be deleted * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ExistingSub.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_010_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var AssocStaSubscription v_assoc_sta_subscription; var Headers v_headers; - var HttpMessage v_response; + var charstring v_uri; // Test control if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { @@ -1204,17 +1187,22 @@ module AtsMec_WlanInformationAPI_TestCases { } // Test component configuration - f_create_assoc_sta_subscription(v_assoc_sta_subscription); f_cf_01_http_up(); // Test adapter configuration // Preamble + f_create_assoc_sta_subscription(v_assoc_sta_subscription); f_init_default_headers_list(-, -, v_headers); + v_uri := regexp( + oct2char(unichar2oct(v_assoc_sta_subscription.links.self_.href)), + "?+(" & PX_ME_WLAN_URI & "?*)", + 0 + ); httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & v_assoc_sta_subscription.links.self_.href & "_Invalid", + PICS_ROOT_API & v_uri & "_Invalid", v_headers ) ) @@ -1227,7 +1215,7 @@ module AtsMec_WlanInformationAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_404_not_found - )) -> value v_response { + )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with an AssocStaSubscription ***"); @@ -1247,7 +1235,7 @@ module AtsMec_WlanInformationAPI_TestCases { /** * @desc Check that the IUT sends a notification about WLAN event notification if the MEC service has an associated subscription and the event is generated * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/NotificationCallback.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_011_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1284,6 +1272,7 @@ module AtsMec_WlanInformationAPI_TestCases { mw_assoc_sta_subscription( PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, -, + -, -, ? )))))) -> value v_response { tc_wait.stop; @@ -1309,6 +1298,782 @@ module AtsMec_WlanInformationAPI_TestCases { f_cf_01_http_notif_down(); } // End of testcase TC_MEC_MEC028_SRV_WAI_011_OK + /** + * @desc Check that the IUT responds with the list of WLAN Access Point + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Measurement.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_012_OK() 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_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_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_ME_WLAN_QUERIES_URI & "/queries/measurements", + 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_wlan_measurement_config_link_list + )))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of measurement config ***"); + 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_MEC028_SRV_WAI_012_OK + + /** + * @desc Check that the IUT responds with the list of WLAN Access Point + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Measurement.tplan2 + */ + /*testcase TC_MEC_MEC028_SRV_WAI_012_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_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_ME_WLAN_QUERIES_URI & "/invalid_measurements", + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); + 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_MEC028_SRV_WAI_012_BR + + /** + * @desc Check that the IUT responds with the list of WLAN Access Point + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Measurement.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_012_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_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_ME_WLAN_QUERIES_URI & "/invalid_measurements", + 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 + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of ApInfo ***"); + 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_MEC028_SRV_WAI_012_NF + + /** + * @desc Check that the IUT responds with a new measurement configuration + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Measurement.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_013_OK() 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_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_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_ME_WLAN_URI & "/measurements", + v_headers, + m_http_message_body_json( + m_body_json_wlan_measurement_config( + m_measurement_config( + -, + { + m_sta_identity( + PX_MAC_ID, + PX_SSID, + -, + PX_IP_ADDRESS + ) + }, + PX_MEASUREMENT_ID, + m_measurement_info(1000, 10) + )))))); + 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_wlan_measurement_config( + mw_measurement_config( + ?, + {mw_sta_identity(PX_MAC_ID, + PX_SSID, + -, + PX_IP_ADDRESS + )}, + PX_MEASUREMENT_ID, + mw_measurement_info + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the new measurement config ***"); + 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_delete_measurement_config(v_response.response.body.json_body.measurementConfig); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_013_OK + + /** + * @desc Check that the IUT responds with an error when an invalid request is sent + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Measurement.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_013_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_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_ME_WLAN_URI & "/measurements", + v_headers, + m_http_message_body_json( + m_body_json_wlan_measurement_config( + m_measurement_config( + -, + { + m_sta_identity( + PX_MAC_ID & ":00", // Invalid MAC address + PX_SSID, + -, + PX_IP_ADDRESS + ) + }, + PX_MEASUREMENT_ID, + m_measurement_info(1000, 10) + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully with the correct error code ***"); + 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_MEC028_SRV_WAI_013_BR + + /** + * @desc Check that the IUT responds with an error when an invalid request is sent + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Measurement.tplan2 + */ + /*testcase TC_MEC_MEC028_SRV_WAI_013_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_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_ME_WLAN_URI & "/Invalid_measurements", + v_headers, + m_http_message_body_json( + m_body_json_wlan_measurement_config( + m_measurement_config( + -, + { + m_sta_identity( + PX_MAC_ID, + PX_SSID, + -, + PX_IP_ADDRESS + ) + }, + PX_MEASUREMENT_ID, + m_measurement_info(1000, 10) + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully with the correct error code ***"); + 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_MEC028_SRV_WAI_013_NF + + /** + * @desc Check that the IUT responds with the specified measurement configuration + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Measurement.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_014_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var MeasurementConfig v_measurement_config; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_measurement_config(v_measurement_config); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_WLAN_QUERIES_URI & "/measurements/" & v_measurement_config.links.self_.href, + 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_wlan_measurement_config( + mw_measurement_config( + ?, + { + mw_sta_identity( + PX_MAC_ID, + PX_SSID, + -, + PX_IP_ADDRESS + ) + }, + PX_MEASUREMENT_ID, + mw_measurement_info + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the new measurement config ***"); + 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_delete_measurement_config(v_response.response.body.json_body.measurementConfig); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_014_OK + + /** + * @desc Check that the IUT responds with an error when an invalid request is sent + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Measurement.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_014_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var MeasurementConfig v_measurement_config; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_measurement_config(v_measurement_config); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_WLAN_QUERIES_URI & "/measurements/" & v_measurement_config.links.self_.href & "_Invalid", + 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 + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT responds with the correct error code ***"); + 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_delete_measurement_config(v_measurement_config); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_014_NF + + /** + * @desc Check that the IUT responds with the modified measurement configuration + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Measurement.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_015_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var MeasurementConfig v_measurement_config; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_measurement_config(v_measurement_config); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_WLAN_URI & "/measurements" & v_measurement_config.links.self_.href, + v_headers, + m_http_message_body_json( + m_body_json_wlan_measurement_config( + m_measurement_config( + -, + { + m_sta_identity( + PX_MAC_ID, + PX_SSID, + -, + PX_IP_ADDRESS + ) + }, + PX_MEASUREMENT_ID, + m_measurement_info(2000, 20) + )))))); + 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_wlan_measurement_config( + mw_measurement_config( + ?, + {mw_sta_identity(PX_MAC_ID, + PX_SSID, + -, + PX_IP_ADDRESS + )}, + PX_MEASUREMENT_ID, + mw_measurement_info(2000, 20) + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the new measurement config ***"); + 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_delete_measurement_config(v_response.response.body.json_body.measurementConfig); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_015_OK + + /** + * @desc Check that the IUT responds with an error when an invalid request is sent + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Measurement.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_015_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var MeasurementConfig v_measurement_config; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_measurement_config(v_measurement_config); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_WLAN_URI & "/measurements" & v_measurement_config.links.self_.href & "_Invalid", + v_headers, + m_http_message_body_json( + m_body_json_wlan_measurement_config( + m_measurement_config( + -, + { + m_sta_identity( + PX_MAC_ID, + PX_SSID, + -, + PX_IP_ADDRESS + ) + }, + PX_MEASUREMENT_ID, + m_measurement_info(2000, 20) + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the new measurement config ***"); + 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_delete_measurement_config(v_measurement_config); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_015_NF + + /** + * @desc Check that the IUT responds with with 204 when requested to delete the specified measurement configuration + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Measurement.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_016_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var MeasurementConfig v_measurement_config; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_measurement_config(v_measurement_config); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_WLAN_URI & "/measurements" & v_measurement_config.links.self_.href, + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the new measurement config ***"); + 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_MEC028_SRV_WAI_016_OK + + /** + * @desc Check that the IUT responds with an error when an invalid request is sent + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/Measurement.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_016_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var MeasurementConfig v_measurement_config; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_measurement_config(v_measurement_config); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_WLAN_URI & "/measurements" & v_measurement_config.links.self_.href & "_invalid", + 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 + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); + 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_delete_measurement_config(v_measurement_config); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_016_NF + } // End of group me_app_role } // End of module AtsMec_WlanInformationAPI_TestCases diff --git a/ttcn/AtsMec/module.mk b/ttcn/AtsMec/module.mk index 59bbccb49a5a2a51964a9d14c59dc642bd595310..77286dbb44209c07b2439297235c64933087e64c 100644 --- a/ttcn/AtsMec/module.mk +++ b/ttcn/AtsMec/module.mk @@ -1,14 +1,10 @@ suite := AtsMEC sources := \ - AtsMec_Ams_TestCases.ttcn \ - AtsMec_AppEnablementAPI_TestCases.ttcn \ - AtsMec_AppLCM_TestCases.ttcn \ + AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ AtsMec_TrafficManagementAPI_TestCases.ttcn \ AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ - AtsMec_Grant_TestCases.ttcn \ AtsMec_LocationAPI_TestCases.ttcn \ - AtsMec_RadioNodeLocationAPI_TestCases.ttcn \ AtsMec_RnisAPI_TestCases.ttcn \ AtsMec_TestControl.ttcn \ AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ @@ -16,29 +12,26 @@ sources := \ AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ AtsMec_WlanInformationAPI_TestCases.ttcn \ -# AtsMec_MeoPkgm_TestCases.ttcn \ -# AtsMec_MepmPkgm_TestCases.ttcn \ + AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn \ +# AtsMec_Ams_TestCases.ttcn \ # AtsMec_FixedAccessInfoAPI_TestCases.ttcn \ - +# AtsMec_RadioNodeLocationAPI_TestCases.ttcn \ modules := ../LibCommon \ ../LibIts \ ../LibIts/ttcn/Http \ ../LibMec \ - ../LibMec/Ams \ - ../LibMec/AppEna \ - ../LibMec/AppLCM \ + ../LibMec/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ ../LibMec/TrafficManagementAPI \ - ../LibMec/Grant \ ../LibMec/LocationAPI \ - ../LibMec/MeoPkgm \ - ../LibMec/MepmPkgm \ ../LibMec/RnisAPI \ ../LibMec/UEAppInterfaceAPI \ ../LibMec/UEidentityAPI \ ../LibMec/V2XInformationServiceAPI \ ../LibMec/DeviceApplicationInterfaceAPI \ ../LibMec/WlanInformationAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ ../../ccsrc/Ports/LibHttp \ ../../ccsrc/EncDec/LibHttp \ ../../ccsrc/EncDec/LibMec \ diff --git a/ttcn/LibMec/AppEna/module.mk b/ttcn/LibMec/AppEna/module.mk deleted file mode 100644 index e5ba54e3a5e1b83846fe126da8fe499c7415227c..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/AppEna/module.mk +++ /dev/null @@ -1,6 +0,0 @@ -sources := \ - ttcn/AppEnablementAPI_Pics.ttcn \ - ttcn/AppEnablementAPI_Pixits.ttcn \ - ttcn/AppEnablementAPI_Templates.ttcn \ - ttcn/AppEnablementAPI_TypesAndValues.ttcn - diff --git a/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Pics.ttcn b/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Pics.ttcn deleted file mode 100644 index a16b810bb1c5b3d797dffda0aae89f57cc6322c8..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Pics.ttcn +++ /dev/null @@ -1,7 +0,0 @@ -module AppEnablementAPI_Pics { - - modulepar boolean PICS_APP_ENABLEMENT_API_SUPPORTED := true; - - modulepar boolean PICS_ME_APP_SUPPORT_TIMING_CAPS_URI := true; - -} // End of module AppEnablementAPI_Pics diff --git a/ttcn/LibMec/AppLCM/module.mk b/ttcn/LibMec/AppLCM/module.mk deleted file mode 100644 index 91b8c99f4570070ab75b78c18c9687996bfbd6ca..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/AppLCM/module.mk +++ /dev/null @@ -1,5 +0,0 @@ -sources := \ - ttcn/AppLCM_Pics.ttcn \ - ttcn/AppLCM_Pixits.ttcn \ - ttcn/AppLCM_Templates.ttcn \ - ttcn/AppLCM_TypesAndValues.ttcn diff --git a/ttcn/LibMec/AppLCM/ttcn/AppLCM_Pics.ttcn b/ttcn/LibMec/AppLCM/ttcn/AppLCM_Pics.ttcn deleted file mode 100644 index dc1c9e17129a913e86aae038a7f9e1533e131793..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/AppLCM/ttcn/AppLCM_Pics.ttcn +++ /dev/null @@ -1,8 +0,0 @@ -module AppLCM_Pics { - - /** - * @desc Does the IUT support LocationAPI? - */ - modulepar boolean PICS_LCM_API_SUPPORTED := true; - -} // End of module LocationAPI_Pics diff --git a/ttcn/LibMec/AppLCM/ttcn/AppLCM_Pixits.ttcn b/ttcn/LibMec/AppLCM/ttcn/AppLCM_Pixits.ttcn deleted file mode 100644 index 828e9cfaf76a91520521ea9419fbcdd5154e2844..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/AppLCM/ttcn/AppLCM_Pixits.ttcn +++ /dev/null @@ -1,42 +0,0 @@ -module AppLCM_Pixits { - - // JSON - import from JSON all; - - - import from AppLCM_TypesAndValues all; - - - modulepar JSON.String PX_APP_D_ID := "5lkj4782-2c70-4e47-9a4e-0ee3a1a0fd1f" - - modulepar InstantiationState PX_INSTANTIATION_STATE := NOT_INSTANTIATED - - modulepar JSON.String PX_APP_INSTANCE_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f" - - modulepar JSON.String PX_NON_EXISTENT_APP_INSTANCE_ID := "PX_NON_EXISTENT_APP_INSTANCE_ID" - - modulepar TerminationType PX_APP_TERMINATION_TYPE := GRACEFUL - - modulepar TerminationTypeWithError PX_APP_TERMINATION_TYPE_WITH_ERROR := GRACE - - modulepar OperationType PX_CHANGE_STATE_TO := STARTED - - modulepar OperationTypeWithError PX_CHANGE_STATE_TO_WITH_ERROR := START - - modulepar JSON.String PX_APP_LCM_OP_OCC_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f" - - modulepar JSON.String PX_NON_EXISTENT_APP_LCM_OP_OCC_ID := "PX_NON_EXISTENT_APP_LCM_OP_OCC_ID" - - modulepar JSON.AnyURI PX_CALLBACK_URI := "http://127.0.0.1/callback" - - modulepar SubscriptionType PX_SUBSCRIPTION_TYPE := AppInstanceStateChangeSubscription - - modulepar JSON.String PX_SUBSCRIPTION_ID := "e0deee2b-6e50-4f33-ab09-8bf0585025d3" - - modulepar JSON.String PX_NON_ESISTENT_SUBSCRIPTION_ID := "PX_NON_ESISTENT_SUBSCRIPTION_ID" - - modulepar JSON.String PX_NOTIFICATION_ID := "208c95ec-121f-4bc2-b896-be3fe000d3ea" - - modulepar NotificationType PX_NOTIFICATION_TYPE := AppInstNotification - -} // End of module \ No newline at end of file diff --git a/ttcn/LibMec/AppLCM/ttcn/AppLCM_Templates.ttcn b/ttcn/LibMec/AppLCM/ttcn/AppLCM_Templates.ttcn deleted file mode 100644 index 7cf328c3b682fabd1054badf78368307e6a35c0b..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/AppLCM/ttcn/AppLCM_Templates.ttcn +++ /dev/null @@ -1,114 +0,0 @@ -module AppLCM_Templates { - - // JSON - import from JSON all; - - // LibCommon - import from LibCommon_BasicTypesAndValues all; - - import from AppLCM_TypesAndValues all; - import from AppLCM_Pixits all; - - - template (present) CreateAppInstanceRequest m_lifecycle_management_create ( - in template (present) String p_appDId := ? - ) := { - appDId := p_appDId - } - - template (present) CreateAppInstanceRequestWithError m_lifecycle_management_create_with_error ( - in template (present) String p_appDIdWithError := ? - ) := { - appDIdWithError := p_appDIdWithError - } - - template (present) AppInstanceInfo mw_lcm_instance_info ( - in template (present) String p_app_instance_id := ?, - in template (present) String p_app_d_id := ?, - in template (present) InstantiationState p_instantiation_state := ? - ) := { - appInstanceId := p_app_instance_id, - appDId := p_app_d_id, - instantiationState := p_instantiation_state - } - - template (present) InstantiateAppRequest m_lifecycle_management_instantiate ( - in template (present) String p_app_instance_id - ) := { - appInstanceId := p_app_instance_id - } - - template (present) InstantiateAppRequestWithError m_lifecycle_management_instantiate_with_error ( - in template (present) String p_app_instance_id - ) := { - appId := p_app_instance_id - } - - template (present) TerminateAppRequest m_lifecycle_management_terminate ( - in template (present) TerminationType p_termination_type - ) := { - terminationType := p_termination_type - } - - template (present) TerminateAppRequestWithError m_lifecycle_management_terminate_with_error ( - in template (present) TerminationTypeWithError p_termination_type_with_error - ) := { - terminationTypeWithError := p_termination_type_with_error - } - - template (present) OperateAppRequest m_lifecycle_management_operate ( - in template (present) OperationType p_change_state_to_type - ) := { - changeStateTo := p_change_state_to_type - } - - template (present) OperateAppRequestWithError m_lifecycle_management_operate_with_error ( - in template (present) OperationTypeWithError p_change_state_to_type_with_error - ) := { - changeStateToWithError := p_change_state_to_type_with_error - } - - template (present) AppInstanceLcmOpOcc mw_lifecycle_management_op_occ ( - in template (present) JSON.String p_app_lcm_op_occ_id := ? - ) := { - appLcmOpOccId := p_app_lcm_op_occ_id - } - - - template (present) SubscriptionRequest m_app_lcm_subscribe_request ( - in template (present) SubscriptionType p_subscription_type, - in template (present) AnyURI p_callback_uri - ) := { - subscriptionType := p_subscription_type, - callbackUri := p_callback_uri - } - - - template (present) SubscriptionRequestWithError m_app_lcm_subscribe_request_with_error ( - in template (present) SubscriptionType p_subscription_type, - in template (present) AnyURI p_callback_uri_with_error - ) := { - subscriptionType := p_subscription_type, - callbackUriWithError := p_callback_uri_with_error - } - - template (present) SubscriptionInfo mw_app_lcm_subscription_info ( - in template (present) String p_subscription_id := ?, - in template (present) SubscriptionType p_subscription_type := ?, - in template (present) AnyURI p_callback_uri := ? - ) := { - subscriptionId := p_subscription_id, - subscriptionType := p_subscription_type, - callbackUri := p_callback_uri - } - - template (present) Notification mw_app_lcm_notification ( - in template (present) String p_notification_id := ?, - in template (present) NotificationType p_notification_type := ?, - in template (present) String p_subscription_id := ? - ) := { - notificationId := p_notification_id, - notificationType := p_notification_type - } - -} \ No newline at end of file diff --git a/ttcn/LibMec/AppLCM/ttcn/AppLCM_TypesAndValues.ttcn b/ttcn/LibMec/AppLCM/ttcn/AppLCM_TypesAndValues.ttcn deleted file mode 100644 index e9710176bd4dd3b9f7a5b18fd2fafc22ace87dc8..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/AppLCM/ttcn/AppLCM_TypesAndValues.ttcn +++ /dev/null @@ -1,128 +0,0 @@ -module AppLCM_TypesAndValues { - -// JSON -import from JSON all; - -// LibCommon -import from LibCommon_BasicTypesAndValues all; - - -type enumerated InstantiationState { - NOT_INSTANTIATED, - INSTANTIATED -} - - -type enumerated TerminationType { - FORCEFUL, - GRACEFUL -} - -type enumerated TerminationTypeWithError { - FORCE, - GRACE -} - - -type enumerated OperationType { - STARTED, - STOPPED -} - -type enumerated OperationTypeWithError { - START, - STOP -} - - -type enumerated SubscriptionType { - AppInstanceStateChangeSubscription, - AppLcmOpOccStateChangeSubscription -} - - -type enumerated NotificationType { - AppInstNotification, - AppLcmOpOccNotification -} - -type record CreateAppInstanceRequest { - String appDId -} - - -type record CreateAppInstanceRequestWithError { - String appDIdWithError -} - -type record of AppInstanceInfo AppInstanceInfoList; -type record AppInstanceInfo { - String appInstanceId, - String appDId, - InstantiationState instantiationState -} - -type record of SelectedMECHostInfo SelectedMECHostInfoList -type record SelectedMECHostInfo { - -} - -type record InstantiateAppRequest { - String appInstanceId, - SelectedMECHostInfoList selectedMECHostInfo -} - -type record InstantiateAppRequestWithError { - String appId, - SelectedMECHostInfoList selectedMECHostInfo -} - -type record TerminateAppRequest { - TerminationType terminationType -} - -type record TerminateAppRequestWithError { - TerminationTypeWithError terminationTypeWithError -} - -type record OperateAppRequest { - OperationType changeStateTo -} - -type record OperateAppRequestWithError { - OperationTypeWithError changeStateToWithError -} - -type record of AppInstanceLcmOpOcc AppInstanceLcmOpOccList; -type record AppInstanceLcmOpOcc { - String appLcmOpOccId -} - - -type record SubscriptionRequest { - SubscriptionType subscriptionType, - AnyURI callbackUri -} - -type record SubscriptionRequestWithError { - SubscriptionType subscriptionType, - AnyURI callbackUriWithError -} - -type record of SubscriptionInfo SubscriptionInfoList; -type record SubscriptionInfo { - String subscriptionId, - SubscriptionType subscriptionType, - AnyURI callbackUri -} - - -type record Notification { - String notificationId, - NotificationType notificationType, - String subscriptionId -} - -} with { -encode "JSON" -} diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/module.mk b/ttcn/LibMec/ApplicationMobilityServiceAPI/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..46b5cab7d7abdebb65bf9ec7995ab94799aa009f --- /dev/null +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/module.mk @@ -0,0 +1,7 @@ +sources := \ + ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn \ + ttcn/ApplicationMobilityServiceAPI_Pics.ttcn \ + ttcn/ApplicationMobilityServiceAPI_Pixits.ttcn \ + ttcn/ApplicationMobilityServiceAPI_Templates.ttcn \ + ttcn/ApplicationMobilityServiceAPI_Functions.ttcn \ + diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Functions.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Functions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..3e2f38a05dc5c2baa059769171239dd62de9ea85 --- /dev/null +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Functions.ttcn @@ -0,0 +1,6 @@ +module ApplicationMobilityServiceAPI_Functions { + + // JSON + import from JSON all; + +} // End of module ApplicationMobilityServiceAPI_Functions diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pics.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pics.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..640f0884c5de5193e42e5e725921c34a01b21659 --- /dev/null +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pics.ttcn @@ -0,0 +1,6 @@ +module ApplicationMobilityServiceAPI_Pics { + + // JSON + import from JSON all; + +} // End of module ApplicationMobilityServiceAPI_Pics diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pixits.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pixits.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..18403eff705c32b3b94cb7c859d5f372533411fd --- /dev/null +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pixits.ttcn @@ -0,0 +1,6 @@ +module ApplicationMobilityServiceAPI_Pixits { + + // JSON + import from JSON all; + +} // End of module ApplicationMobilityServiceAPI_Pixits diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Templates.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..b1085637496ab58e95e38c3002d6965155d2281e --- /dev/null +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Templates.ttcn @@ -0,0 +1,9 @@ +module ApplicationMobilityServiceAPI_Templates { + + // JSON + import from JSON all; + + // LibMec/ApplicationMobilityServiceAPI + import from ApplicationMobilityServiceAPI_TypesAndValues all; + +} // End of module ApplicationMobilityServiceAPI_Templates diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..b60fc87de50b9e48a72c0369058f0fbfbc8a63c9 --- /dev/null +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn @@ -0,0 +1,33 @@ +module ApplicationMobilityServiceAPI_TypesAndValues { + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + /** + * @desc This type represents the communication interface of an application instance + * @member ipAddresses Entry point information of the service as one or more pairs of IP address and port + * @see ETSI GS MEC 021 Clause 7.5.2 Type: CommunicationInterface + */ + type record CommunicationInterface { + IpAddresses ipAddresses optional + } + + /** + * @desc Entry point information of the service as one or more pairs of IP address and port + * @member host Host portion of the address + * @member port Port portion of the address + * @see ETSI GS MEC 021 Clause 7.5.2 Type: CommunicationInterface + */ + type record IpAddress { + JSON.String host, + UInt32 port_ + } with { + variant (port_) "name as 'port'"; + } + + type record length(1..infinity) of IpAddress IpAddresses; + +} // End of module ApplicationMobilityServiceAPI_TypesAndValues diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/module.mk b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..17e016a5cc3913af23ac80b7ae61c4b448e176a9 --- /dev/null +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/module.mk @@ -0,0 +1,7 @@ +sources := \ + ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_EncdecDeclarations.ttcn \ + ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn \ + ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pics.ttcn \ + ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn \ + ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn \ + ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_EncdecDeclarations.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_EncdecDeclarations.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..6fe0fefc622a534ad5c66ca69b57c1a858fed17e --- /dev/null +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_EncdecDeclarations.ttcn @@ -0,0 +1,6 @@ +module ApplicationPackageLifecycleAndOperationGrantingAPI_EncdecDeclarations { + + // LibMec_ApplicationPackageLifecycleAndOperationGrantingAPI + import from ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues all; + +} // End of ApplicationPackageLifecycleAndOperationGrantingAPI_EncdecDeclarations diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..ba95c97ee03e3c7d973e0a6f1b44695b5e7bb767 --- /dev/null +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn @@ -0,0 +1,3 @@ +module ApplicationPackageLifecycleAndOperationGrantingAPI_Functions { + +} // End of ApplicationPackageLifecycleAndOperationGrantingAPI_Functions diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pics.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pics.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..6ca4b5049e16d4c5ae23f8df159159ae0a1b2502 --- /dev/null +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pics.ttcn @@ -0,0 +1,8 @@ +module ApplicationPackageLifecycleAndOperationGrantingAPI_Pics { + + /** + * @desc Does the IUT support GRANT? + */ + modulepar boolean PICS_GRANT_API_SUPPORTED := true; + +} // End of module ApplicationPackageLifecycleAndOperationGrantingAPI_Pics diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..b80eed4e26ee4550dbf94983016a86765ea49643 --- /dev/null +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn @@ -0,0 +1,55 @@ +module ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits { + + // JSON + import from JSON all; + + // LibMec_ApplicationPackageLifecycleAndOperationGrantingAPI + import from ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues all; + + modulepar JSON.String PX_APP_INSTANCE_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1a"; + + modulepar JSON.String PX_NON_EXISTING_APP_INSTANCE_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1b"; + + modulepar JSON.String PX_APP_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1c"; + + modulepar OperationType PX_APP_OPERATION := INSTANTIATE; + + modulepar OperationType PX_APP_OPERATION_ERROR := INSTANTIATE; + + modulepar JSON.String PX_APP_LCM_OP_OCC_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1c" + + modulepar JSON.String PX_GRANTING_ID := "e0deee2b-6e50-4f33-ab09-8bf0585025d3"; + + modulepar JSON.String PX_NON_EXISTANT_GRANTING_ID := "PX_NON_EXISTANT_GRANTING_ID"; + + + + modulepar JSON.String PX_APP_PKG_NAME := "APP_PKG_NAME" + + modulepar JSON.String PX_APP_PKG_VERSION := "APP_PKG_VERSION" + + modulepar JSON.String PX_CHECKSUM := "CHECKSUM" + + modulepar JSON.String PX_APP_PKG_PATH := "APP_PKG_PATH" + + modulepar OperationalState PX_OPERATIONAL_STATE := STARTED + + modulepar UsageState PX_USAGE_STATE := NOT_IN_USE + + modulepar JSON.String PX_APP_PKG_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f" + + modulepar JSON.String PX_ON_BOARDED_APP_PKG_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f" + + modulepar JSON.String PX_NON_EXISTENT_APP_PKG_ID := "NON_EXISTENT_APP_PKG_ID" + + modulepar JSON.String PX_NON_EXISTENT_ON_BOARDED_APP_PKG_ID := "NON_ON_BOARDED_EXISTENT_APP_PKG_ID" + + modulepar JSON.AnyURI PX_CALLBACK_URI := "http://127.0.0.1/callback" + + modulepar JSON.String PX_SUBSCRIPTION_ID := "e0deee2b-6e50-4f33-ab09-8bf0585025d3" + + modulepar JSON.String PX_NON_EXISTENT_SUBSCRIPTION_ID := "NON_EXISTENT_SUBSCRIPTION_ID" + + modulepar JSON.AnyURI PX_APP_PKG_HREF := ""; + +} // End of module ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..a4ea336bac9c69c9231006a3e25d9903c1e8112b --- /dev/null +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn @@ -0,0 +1,477 @@ +module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { + + // JSON + import from JSON all; + + // LibMec_EdgePlatformApplicationEnablementAPI + import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; + + // LibMec_ApplicationMobilityServiceAPI + import from ApplicationMobilityServiceAPI_TypesAndValues all; + + // LibMec_ApplicationPackageLifecycleAndOperationGrantingAPI + import from ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues all; + import from ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits all; + + group granting { + + template (value) GrantRequest m_grant_request( + in String p_app_instance_id := PX_APP_INSTANCE_ID, + in String p_appLcmOpOccId := PX_APP_LCM_OP_OCC_ID, + in String p_appDId := PX_APP_ID, + in OperationType p_operation := PX_APP_OPERATION, + in template (value) GrantRequest_Link p_links + ) := { + appInstanceId := p_app_instance_id, + appLcmOpOccId := p_appLcmOpOccId, + appDId := p_appDId, + operation := p_operation, + addResources := omit, + tempResources := omit, + updateResources := omit, + additionalParams := omit, + links := p_links + } // End of template m_grant_request + + template (present) GrantRequest mw_grant_request( + template (present) String p_app_instance_id := ?, + template (present) String p_appLcmOpOccId := ?, + template (present) String p_appDId := ?, + template (present) OperationType p_operation := ?, + template (present) GrantRequest_Link p_links := ? + ) := { + appInstanceId := p_app_instance_id, + appLcmOpOccId := p_appLcmOpOccId, + appDId := p_appDId, + operation := p_operation, + addResources := *, + tempResources := *, + updateResources := *, + additionalParams := *, + links := p_links + } // End of template mw_grant_request + + template (present) Grant mw_grant( + template (present) String p_id := ?, + template (present) String p_app_instance_id := PX_APP_INSTANCE_ID, + template (present) String p_appLcmOpOccId := ?, + template (present) Grant_Link p_links := ? + ) := { + id := p_id, + appInstanceId := p_app_instance_id, + appLcmOpOccId := p_appLcmOpOccId, + vimConnections := *, + zones := *, + zoneGroups := *, + addResources := *, + tempResources := *, + removeResources := *, + updateResources := *, + vimAssets := *, + extVirtualLinks := *, + additionalParams := *, + links := p_links + } // End of template mw_grant + + template (value) GrantRequest_Link m_grant_request_link( + in template (value) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType p_appLcmOpOcc, + in template (value) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType p_appInstance + ) := { + appLcmOpOcc := p_appLcmOpOcc, + appInstance := p_appInstance + } // End of template m_grant_request_link + + template (present) GrantRequest_Link mw_grant_request_link( + template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType p_appLcmOpOcc := ?, + template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType p_appInstance := ? + ) := { + appLcmOpOcc := p_appLcmOpOcc, + appInstance := p_appInstance + } // End of template mw_grant_request_link + + template (value) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType m_link_type( + in template (value) JSON.AnyURI p_href + ) := { + href := p_href + } // End of template m_link_type + + template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType mw_link_type( + template (present) JSON.AnyURI p_href := ? + ) := { + href := p_href + } // End of template mw_link_type + + } // End of group granting + + group pkgmgt { + + template (value) CreateAppPkg m_create_package_management( + in String p_appPkgName, + in String p_appPkgVersion, + in template (value) Checksum p_checksum, + in AnyURI p_appPkgPath + ) := { + appPkgName := p_appPkgName, + appPkgVersion := p_appPkgVersion, + appProvider := omit, + checksum := p_checksum, + userDefinedData := omit, + appPkgPath := p_appPkgPath + } // End of template m_create_package_management + + template (present) CreateAppPkg mw_create_package_management( + template (present) String p_appPkgName := ?, + template (present) String p_appPkgVersion := ?, + template (present) Checksum p_checksum := ?, + template (present) AnyURI p_appPkgPath := ? + ) := { + appPkgName := p_appPkgName, + appPkgVersion := p_appPkgVersion, + appProvider := *, + checksum := p_checksum, + userDefinedData := *, + appPkgPath := p_appPkgPath + } // End of template mw_create_package_management + + template (present) AppPkgInfo mw_app_pkg_info( + template (present) JSON.String p_id:= ?, + template (present) JSON.String p_appDId:= ?, + template (present) JSON.String p_appName:= ?, + template (present) JSON.String p_appSoftwareVersion:= ?, + template (present) JSON.String p_appDVersion:= ?, + template (present) Checksum p_checksum:= ?, + template (present) AppPkgSWImageInfo p_softwareImages:= ?, + template (present) OnboardingState p_onboardingState:= ?, + template (present) AppPkgInfo_OperationalState p_operationalState:= ?, + template (present) UsageState p_usageState:= ?, + template (present) AppPkgInfo_MecInfo p_mecInfo:= ?, + template (present) AppPkgInfo_Links p_links := ? + ) := { + id := p_id, + appDId := p_appDId, + appProvider := *, + appName := p_appName, + appSoftwareVersion := p_appSoftwareVersion, + appDVersion := p_appDVersion, + checksum := p_checksum, + signingCertificate := *, + softwareImages := p_softwareImages, + additionalArtifacts := *, + onboardingState := p_onboardingState, + operationalState := p_operationalState, + usageState := p_usageState, + mecInfo := p_mecInfo, + userDefinedData := *, + onboardingFailureDetails := *, + links := p_links + } // End of template mw_app_pkg_info + + template (value) Checksum m_checksum( + in JSON.String p_algorithm := "SHA256", + in JSON.String p_hash + ) := { + algorithm := p_algorithm, + hash := p_hash + } // End of template m_checksum + + template (present) Checksum mw_checksum( + template (present) JSON.String p_algorithm := ?, + template (present) JSON.String p_hash := ? + ) := { + algorithm := p_algorithm, + hash := p_hash + } // End of template mw_checksum + + template (value) AppPkgInfoModifications m_app_pkg_info_modification( + in AppPkgInfo_OperationalState p_operationalState + ) := { + operationalState := p_operationalState + } // End of template m_app_pkg_info_modification + + template (present) AppPkgInfoModifications mw_app_pkg_info_modification( + template (present) AppPkgInfo_OperationalState p_operationalState := ? + ) := { + operationalState := p_operationalState + } // End of template mw_app_pkg_info_modification + + template (omit) AppPkgSubscription m_app_pkg_info_subscription( + in template (value) JSON.AnyURI p_callbackUri, + in template (value) AppPkgSubscriptionType p_subscriptionType := "AppPackageOnBoardingSubscription", + in template (omit) AppPkgFilter p_appPkgFilter := omit + ) := { + callbackUri := p_callbackUri, + subscriptionType := p_subscriptionType, + appPkgFilter := p_appPkgFilter + } // End of template m_app_pkg_info_subscription + + template (value) AppPkgSubscriptionInfo m_app_pkg_subscription_info( + in template (value) JSON.String p_id, + in template (value) AppPkgSubscriptionType p_subscriptionType := "AppPackageOnBoardingSubscription", + in template (value) JSON.AnyURI p_callbackUri, + in template (value) AppPkgSubscriptionInfo_Link p_links + ):= { + id := p_id, + subscriptionType := p_subscriptionType, + callbackUri := p_callbackUri, + links := p_links + } // End of template m_app_pkg_subscription_info + + template (present) AppPkgSubscriptionInfo mw_app_pkg_subscription_info( + template (present) JSON.String p_id := ?, + template (present) AppPkgSubscriptionType p_subscriptionType := "AppPackageOnBoardingSubscription", + template (present) JSON.AnyURI p_callbackUri := ?, + template (present) AppPkgSubscriptionInfo_Link p_links := ? + ):= { + id := p_id, + subscriptionType := p_subscriptionType, + callbackUri := p_callbackUri, + links := p_links + } // End of template mw_app_pkg_subscription_info + + template (present) AppPkgNotification mw_app_pkg_notification( + template (present) JSON.String p_id := ?, + template (present) JSON.String p_notificationType := ?, + template (present) JSON.String p_subscriptionId := ?, + template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TimeStamp p_timeStamp := ?, + template (present) JSON.String p_appPkgId := ?, + template (present) JSON.String p_appDId := ?, + template (present) AppPkgInfo_OperationalState p_operationalState := ?, + template (present) AppPkgNotification_Link p_links := ? + ) := { + id := p_id, + notificationType := p_notificationType, + subscriptionId := p_subscriptionId, + timeStamp := p_timeStamp, + appPkgId := p_appPkgId, + appDId := p_appDId, + operationalState := p_operationalState, + links := p_links + } // End of template mw_app_pkg_notification + + template (value) AppPkgSubscriptionInfo_Link m_app_pkg_link( + in JSON.AnyURI p_href + ) := { + self_ := { href := p_href } + } // End of template m_app_pkg_link + + template (present) AppPkgSubscriptionInfo_Link mw_app_pkg_link( + template (present) JSON.AnyURI p_href := ? + ) := { + self_ := { href := p_href } + } // End of template mw_app_pkg_link + + } // End of group pkgmgt + + group mepm_lifcyclemgt { + + template (omit) ConfigPlatformForAppRequest m_config_platform_for_app_request( + in template (value) ServiceDependency p_appServiceRequired, + in template (omit) ServiceDependency p_appServiceOptional := omit, + in template (omit) ServiceDependency p_appServiceProduced := omit, + in template (omit) FeatureDependency p_appFeatureRequired := omit, + in template (omit) FeatureDependency p_appFeatureOptional := omit, + in template (omit) TransportDependency p_transportDependencies := omit, + in template (omit) TrafficRuleDescriptor p_appTrafficRule := omit, + in template (omit) DNSRuleDescriptor p_appDNSRule := omit, + in template (omit) LatencyDescriptor p_appLatency := omit, + in template (omit) UserContextTransferCapability p_userContextTransferCapability := omit, + in template (omit) AppNetworkPolicy p_appNetworkPolicy := omit + ) := { + appServiceRequired := p_appServiceRequired, + appServiceOptional := p_appServiceOptional, + appServiceProduced := p_appServiceProduced, + appFeatureRequired := p_appFeatureRequired, + appFeatureOptional := p_appFeatureOptional, + transportDependencies := p_transportDependencies, + appTrafficRule := p_appTrafficRule, + appDNSRule := p_appDNSRule, + appLatency := p_appLatency, + userContextTransferCapability := p_userContextTransferCapability, + appNetworkPolicy := p_appNetworkPolicy + } // End of template m_config_platform_for_app_request + + template (present) ConfigPlatformForAppRequest mw_config_platform_for_app_request( + template (present) ServiceDependency p_appServiceRequired := ?, + template ServiceDependency p_appServiceOptional := *, + template ServiceDependency p_appServiceProduced := *, + template FeatureDependency p_appFeatureRequired := *, + template FeatureDependency p_appFeatureOptional := *, + template TransportDependency p_transportDependencies := *, + template TrafficRuleDescriptor p_appTrafficRule := *, + template DNSRuleDescriptor p_appDNSRule := *, + template LatencyDescriptor p_appLatency := *, + template UserContextTransferCapability p_userContextTransferCapability := *, + template AppNetworkPolicy p_appNetworkPolicy := * + ) := { + appServiceRequired := p_appServiceRequired, + appServiceOptional := p_appServiceOptional, + appServiceProduced := p_appServiceProduced, + appFeatureRequired := p_appFeatureRequired, + appFeatureOptional := p_appFeatureOptional, + transportDependencies := p_transportDependencies, + appTrafficRule := p_appTrafficRule, + appDNSRule := p_appDNSRule, + appLatency := p_appLatency, + userContextTransferCapability := p_userContextTransferCapability, + appNetworkPolicy := p_appNetworkPolicy + } // End of template mw_config_platform_for_app_request + + template (omit) ServiceDependency m_service_dependency( + in JSON.String p_serName, + in JSON.String p_version, + in template (omit) CategoryRef p_serCategory := omit, + in template (omit) TransportDependency p_serTransportDependencies := omit, + in template (omit) JSON.String p_requestedPermissions := omit + ) := { + serName := p_serName, + serCategory := p_serCategory, + version := p_version, + serTransportDependencies := p_serTransportDependencies, + requestedPermissions := p_requestedPermissions + } // End of template m_service_dependency + + template (present) ServiceDependency mw_service_dependency( + template (present) JSON.String p_serName := ?, + template (present) JSON.String p_version := ?, + template CategoryRef p_serCategory := *, + template TransportDependency p_serTransportDependencies := *, + template JSON.String p_requestedPermissions := * + ) := { + serName := p_serName, + serCategory := p_serCategory, + version := p_version, + serTransportDependencies := p_serTransportDependencies, + requestedPermissions := p_requestedPermissions + } // End of template mw_service_dependency + + } // End of group mepm_lifcyclemgt + + group mex_lifcyclemgt { + + template (omit) CreateAppInstanceRequest m_create_app_instance_request( + in JSON.String p_appDId, + in template (omit) JSON.String p_appInstanceName := omit, + in template (omit) JSON.String p_appInstanceDescription := omit, + in template (omit) MepInformation p_appPlacementInfo := omit + ) := { + appDId := p_appDId, + appInstanceName := p_appInstanceName, + appInstanceDescription := p_appInstanceDescription, + appPlacementInfo := p_appPlacementInfo + } // End of template m_create_app_instance_request + + template (present) CreateAppInstanceRequest mw_create_app_instance_request( + template (present) JSON.String p_appDId := ?, + template JSON.String p_appInstanceName := *, + template JSON.String p_appInstanceDescription := *, + template MepInformation p_appPlacementInfo := * + ) := { + appDId := p_appDId, + appInstanceName := p_appInstanceName, + appInstanceDescription := p_appInstanceDescription, + appPlacementInfo := p_appPlacementInfo + } // End of template mw_create_app_instance_request + + template (omit) AppInstanceInfo m_app_instance_info( + in JSON.String p_id, + in JSON.String p_appDId, + in JSON.String p_appProvider, + in JSON.String p_appName, + in JSON.String p_appSoftVersion, + in JSON.String p_appDVersion, + in InstantiationState p_instantiationState, + in JSON.String p_appPkgId, + in template (value) Link p_links, + in template (omit) JSON.String p_appInstanceName := omit, + in template (omit) JSON.String p_appInstanceDescription := omit, + in template (omit) VimConnectionInfo p_vimConnectionInfo := omit, + in template (omit) JSON.String p_nsInstanceId := omit, + in template (omit) JSON.String p_vnfInstanceId := omit, + in template (omit) InstantiatedAppState p_instantiatedAppState := omit, + in template (omit) CommunicationInterface p_communicationInterface := omit + ) := { + id := p_id, + appInstanceName := p_appInstanceName, + appInstanceDescription := p_appInstanceDescription, + appDId := p_appDId, + appProvider := p_appProvider, + appName := p_appName, + appSoftVersion := p_appSoftVersion, + appDVersion := p_appDVersion, + appPkgId := p_appPkgId, + vimConnectionInfo := p_vimConnectionInfo, + nsInstanceId := p_nsInstanceId, + vnfInstanceId := p_vnfInstanceId, + instantiationState := p_instantiationState, + instantiatedAppState := p_instantiatedAppState, + communicationInterface := p_communicationInterface, + links := p_links + } // End of template m_app_instance_info + + template (present) AppInstanceInfo mw_app_instance_info( + template (present) JSON.String p_id := ?, + template (present) JSON.String p_appDId := ?, + template (present) JSON.String p_appProvider := ?, + template (present) JSON.String p_appName := ?, + template (present) JSON.String p_appSoftVersion := ?, + template (present) JSON.String p_appDVersion := ?, + template (present) JSON.String p_appPkgId := ?, + template (present) InstantiationState p_instantiationState := ?, + template (present) Link p_links := ?, + template JSON.String p_appInstanceName := *, + template JSON.String p_appInstanceDescription := *, + template VimConnectionInfo p_vimConnectionInfo := *, + template JSON.String p_nsInstanceId := *, + template JSON.String p_vnfInstanceId := *, + template InstantiatedAppState p_instantiatedAppState := *, + template CommunicationInterface p_communicationInterface := * + ) := { + id := p_id, + appInstanceName := p_appInstanceName, + appInstanceDescription := p_appInstanceDescription, + appDId := p_appDId, + appProvider := p_appProvider, + appName := p_appName, + appSoftVersion := p_appSoftVersion, + appDVersion := p_appDVersion, + appPkgId := p_appPkgId, + vimConnectionInfo := p_vimConnectionInfo, + nsInstanceId := p_nsInstanceId, + vnfInstanceId := p_vnfInstanceId, + instantiationState := p_instantiationState, + instantiatedAppState := p_instantiatedAppState, + communicationInterface := p_communicationInterface, + links := p_links + } // End of template mw_app_instance_info + + template (omit) Link m_link( + in template (value) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType p_self, + in template (omit) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType p_instantiate := omit, + in template (omit) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType p_terminate := omit, + in template (omit) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType p_operate := omit, + in template (omit) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType p_configure_platform_for_app := omit + ) := { + self_ := p_self, + instantiate := p_instantiate, + terminate := p_terminate, + operate := p_operate, + configure_platform_for_app := p_configure_platform_for_app + } // End of template m_link + + template (present) Link mw_link( + template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType p_self := ?, + template ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType p_instantiate := *, + template ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType p_terminate := *, + template ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType p_operate := *, + template ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType p_configure_platform_for_app := * + ) := { + self_ := p_self, + instantiate := p_instantiate, + terminate := p_terminate, + operate := p_operate, + configure_platform_for_app := p_configure_platform_for_app + } // End of template mw_link + + } // End of group mex_lifcyclemgt + +} // End of module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..2513e204edb7ab206a8589a3e8e8341b66fd5c5a --- /dev/null +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn @@ -0,0 +1,1717 @@ +module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // LibMec + import from LibMec_TypesAndValues all; + + // LibMec_EdgePlatformApplicationEnablementAPI + import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; + + // LibMec_ApplicationMobilityServiceAPI + import from ApplicationMobilityServiceAPI_TypesAndValues all; + + group application_descriptor_information_model { + + /** + * @desc An application Descriptor (AppD) is a part of application package, and describes application requirements and rules required by application provider + * @member appDid Identifier of this MEC application descriptor. This attribute shall be globally unique + * @member appName Name to identify the MEC application + * @member appProvider Provider of the application and of the AppD + * @member appSoftVersion Identifies the version of software of the MEC application + * @member appDVersion Identifies the version of the application descriptor + * @member mecVersion Identifies version(s) of MEC system compatible with the MEC application described in this version of the AppD + * @member appInfoName Human readable name for the MEC application + * @member appDescription Human readable description of the MEC application + * @member virtualComputeDescriptor Describes CPU and memory requirements, as well as optional additional requirements, such as disk and acceleration related capabilities, of the virtualisation container used to realize this MEC application + * @member swImageDescriptor Describes the descriptors of the software image to be used by the virtualisation container used to realize this MEC application + * @member appExtCpd Describes external interface(s) exposed by this MEC application + * @member appServiceRequired Describes services a MEC application requires to run + * @member appServiceOptional Describes services a MEC application may use if available + * @member appServiceProduced Describes services a MEC application is able to produce to the platform or other MEC applications + * @member appFeatureRequired Describes features a MEC application requires to run + * @member appFeatureOptional Describes features a MEC application may use if available + * @member transportDependencies Transports, if any, that this application requires to be provided by the platform + * @member appTrafficRule Describes traffic rules the MEC application requires + * @member appDNSRule Describes DNS rules the MEC application requires + * @member appLatency Describes the maximum latency tolerated by the MEC application + * @member terminateAppInstanceOpConfig Configuration parameters for the Terminate application instance operation + * @member changeAppInstanceStateOpConfig Configuration parameters for the change application instance state operation + * @member userContextTransferCapability If the application supports the user context transfer capability + * @member appNetworkPolicy It represents the application network policy of carrying the application traffic + * @see ETSI GS MEC 010-2 Clause 6.2.1.2.2 + */ + type record AppD { + JSON.String appDId, + JSON.String appName, + JSON.String appProvider, + JSON.String appSoftVersion, + JSON.String appDVersion, + JSON.String mecVersion, + JSON.String appInfoName optional, + JSON.String appDescription, + VirtualComputeDescriptor virtualComputeDescriptor, + SwImageDescriptor virtualStorageDescriptor optional, + AppExternalCpd appExtCpd optional, + ServiceDependency appServiceRequired optional, + ServiceDependency appServiceOptional optional, + ServiceDescriptor appServiceProduced optional, + FeatureDependency appFeatureRequired optional, + FeatureDependency appFeatureOptional optional, + TransportDependency transportDependencies optional, + TrafficRuleDescriptor appTrafficRule optional, + DNSRuleDescriptor appDNSRule optional, + LatencyDescriptor appLatency optional, + TerminateAppInstanceOpConfig terminateAppInstanceOpConfig optional, + ChangeAppInstanceStateOpConfig changeAppInstanceStateOpConfig optional, + UserContextTransferCapability userContextTransferCapability optional, + AppNetworkPolicy appNetworkPolicy optional + } + + /** + * @desc The VirtualComputeDescriptor data type supports the specification of requirements related to virtual compute resources + * @member + * @see ETSI GS MEC 010-2 Clause 6.2.1.3 Type: VirtualComputeDescriptor + */ + type record VirtualComputeDescriptor { + // FIXME shall follow the definition in clause 7.1.9.2.2 of ETSI GS NFV‑IFA 011 [0], with the following consideration: + } + + /** + * @desc The SwImageDescriptor data type describes the software image of a MEC application + * @member + * @see ETSI GS MEC 010-2 Clause 6.2.1.4 Type: SwImageDescriptor + */ + type record SwImageDescriptor { + // FIXME shall follow the definition in clause 7.1.6.5 of ETSI GS NFV‑IFA 011 [0], with the following consideration: + } + + /** + * @desc The VirtualStorageDescriptor data type describes the virtual storage required by a MEC application + * @member + * @see ETSI GS MEC 010-2 Clause 6.2.1.5 Type: VirtualStorageDescriptor + */ + type record VirtualStorageDescriptor { + // FIXME shall follow the definition in clause 7.1.9.4 of ETSI GS NFV‑IFA 011 [0], with the following consideration: + } + + /** + * @desc The AppExternalCpd data type supports the specification of MEC application requirements related to external connection point + * @member virtualNetworkInterfaceRequirements Specifies requirements on a virtual network interface realizing the CPs instantiated from this CPD + * @see ETSI GS MEC 010-2 Clause 6.2.1.6 Type: AppExternalCpd + */ + type record AppExternalCpd { + VirtualNetworkInterfaceRequirements virtualNetworkInterfaceRequirements optional + } + + type record VirtualNetworkInterfaceRequirement { + // FIXME For the definition of the VirtualNetworkInterfaceRequirements, please refer to clause 7.1.6.6 of ETSI GS NFV-IFA 011 [0]. For the definition of Cpd, please refer to clause 7.1.6.3 of ETSI GS NFV-IFA 011 [0] + } + + type record length(1..infinity) of VirtualNetworkInterfaceRequirement VirtualNetworkInterfaceRequirements; + + /** + * @desc The ServiceDescriptor data type describes a MEC service produced by a service-providing MEC applicationt + * @member serName The name of the service, for example, RNIS, LocationService, etc + * @member serCategory A Category reference of the service, defined in ETSI GS MEC 011 [17]i.0 + * @member version The version of the service + * @member transportsSupported Indicates transports and serialization formats supported made available to the service-consuming application + * @see ETSI GS MEC 010-2 Clause 6.2.1.7 Type: ServiceDescriptor + */ + type record ServiceDescriptor { + JSON.String serName, + CategoryRef serCategory optional, + JSON.String version, + TransportsSupported transportsSupported optional + } + + /** + * @desc Indicates transports and serialization formats supported made available to the service-consuming application + * @member transport Information about the transport in this binding + * @member serializers Information about the serializers in this binding, as defined in the SerializerType type in ETSI GS MEC 011 [17]i.0 + * @see ETSI GS MEC 010-2 Clause 6.2.1.7 Type: ServiceDescriptor + */ + type record TransportsSupported { + TransportDescriptor transport, + SerializerType serializers + } + + /** + * @desc The FeatureDependency data type supports the specification of requirements of a MEC application related to a feature of MEC platform + * @member featureName The name of the feature, for example, UserApps, UEIdentity, etc + * @member version The version of the feature + * @see ETSI GS MEC 010-2 Clause 6.2.1.8 Type: FeatureDependency + */ + type record FeatureDependency { + JSON.String featureName, + JSON.String version + } + + /** + * @desc The TrafficRuleDescriptor data type describes traffic rules related to a MEC application + * @member trafficRuleId Identifies the traffic rule + * @member filterType Definition of filter type: per FLOW or PACKET + * @member priority Priority of this traffic rule within the range 0 to 255. If traffic rule conflicts, the one with higher priority take precedence + * @member trafficFilter The filter used to identify specific flow/packets that need to be handled by the MEC host + * @member action_ Identifies the action of the MEC host data plane, when a packet matches the trafficFilter + * @member dstInterface Describes the destination interface information + * @see ETSI GS MEC 010-2 Clause 6.2.1.9 Type: TrafficRuleDescriptor + */ + type record TrafficRuleDescriptor { + JSON.String trafficRuleId, + FilterType filterType, + integer priority, + TrafficFilter trafficFilter, + Action action_, + InterfaceDescriptor dstInterface optional + } with { + variant (action_) "name as 'action'"; + } + + type enumerated FilterType { + FLOW, + PACKET + } with { + variant "JSON: as number" + } + + type enumerated Action { + DROP, + FORWARD_DECAPSULATED, + FORWARD_AS_IS, + PASSTHROUGH, + DUPLICATED_DECAPSULATED, + DUPLICATE_AS_IS + } with { + variant "JSON: as number" + } + + /** + * @desc The TrafficFilter data type supports the specification of MEC application requirements related to traffic rules + * @member srcAddress An IP address or a range of IP addresses + * @member dstAddress A IP address or a range of IP addresses + * @member srcPort A port or a range of ports + * @member dstPort A port or a range of ports + * @member protocol Specify the protocol of the traffic filter + * @member tag Used for tag based traffic rule + * @member uri An URI label, in application layer + * @member packetLabel A customized packet label in network layer, as defined by the owner of the MEC platform, is used to filter the traffic + * @member srcTunnelAddressUsed for GTP tunnel based traffic rule + * @member tgtTunnelAddress Used for GTP tunnel based traffic rule + * @member srcTunnelPort Used for GTP tunnel based traffic rule + * @member qCI Used to match all packets that have the same QCI + * @member dSCP Used to match all IPv4 packets that have the same DSCP + * @member tC Used to match all IPv6 packets that have the same TC + * @see ETSI GS MEC 010-2 Clause 6.2.1.10 Type: TrafficFilter + */ + type record TrafficFilter { + JSON.String srcAddress optional, + JSON.String dstAddress optional, + JSON.String srcPort optional, + JSON.String dstPort optional, + JSON.String protocol optional, + JSON.String tag optional, + JSON.String uri optional, + JSON.String packetLabel optional, + JSON.String srcTunnelAddress optional, + JSON.String tgtTunnelAddress optional, + JSON.String srcTunnelPort optional, + JSON.String dstTunnelPort optional, + integer qCI optional, + integer dSCP optional, + integer tC optional + } + + /** + * @desc The InterfaceDescriptor data type describes an interface of a MEC application + * @member interfaceType Type of interface + * @member tunnelInfo Included only if the destination address type is tunnel + * @member srcMACAddress The source address identifies the MAC address of the interface + * @member dstMACAddress The destination address identifies the MAC address of the destination + * @see ETSI GS MEC 010-2 Clause 6.2.1.11 Type: InterfaceDescriptor + */ + type record InterfaceDescriptor { + InterfaceType interfaceType, + TunnelInfo tunnelInfo optional, + JSON.String srcMACAddress optional, + JSON.String dstMACAddress optional + } + + type enumerated InterfaceType { + TUNNEL, + MAC, + IP + } with { + variant "JSON: as number" + } + + /** + * @desc The TunnelInfo data type supports the specification of MEC application requirements related to traffic rules + * @member tunnelType Type of tunnel + * @member tunnelDstAddress Destination address of the tunnel + * @member tunnelSrcAddress Source address of the tunnel + * @member tunnelSpecificData Parameters specific to the tunnel + * @see ETSI GS MEC 010-2 Clause 6.2.1.12 Type: TunnelInfo + */ + type record TunnelInfo { + TunnelType tunnelType, + JSON.String tunnelDstAddress, + JSON.String tunnelSrcAddress, + JSON.String tunnelSpecificData optional + } + + type enumerated TunnelType { + GTP_U, + GRE + } with { + variant "JSON: as number" + } + + /** + * @desc The DNSRuleDescriptor data type describes DNS rules associated with a MEC application + * @member dnsRuleId Identifies the DNS Rule + * @member domainName FQDN of the DNS rule + * @member ipAddressType Specifies the IP address type + * @member ttl Time-to-live value + * @see ETSI GS MEC 010-2 Clause 6.2.1.13 Type: DNSRuleDescriptor + */ + type record DNSRuleDescriptor { + JSON.String dnsRuleId, + JSON.String domainName, + JSON.String ipAddressType, + IpAddress ipAddress, + integer ttl optional + } + + /** + * @desc The LatencyDescriptor data type describes latency requirements for a MEC application + * @member maxLatency The value of the maximum latency in nano seconds tolerated by the MEC application + * @see ETSI GS MEC 010-2 Clause 6.2.1.14 Type: LatencyDescriptor + */ + type record LatencyDescriptor { + UInt32 maxLatency + } + + /** + * @desc The TerminateAppInstanceOpConfig data type supports the specification of MEC application requirements related to terminate application instance operation configuration + * @member + * @see ETSI GS MEC 010-2 Clause 6.2.1.15 Type: TerminateAppInstanceOpConfig + */ + type record TerminateAppInstanceOpConfig { + // FIXME shall follow the definition in clause 7.1.5.7 of ETSI GS NFV‑IFA 011 [0]. + } + + /** + * @desc The ChangeAppInstanceStateOpConfig data type supports the specification of MEC application requirements related to change application instance state operation configuration + * @member + * @see ETSI GS MEC 010-2 Clause 6.2.1.16 Type: ChangeAppInstanceStateOpConfig + */ + type record ChangeAppInstanceStateOpConfig { + // FIXME shall follow the definition in clause 7.1.5.8 of ETSI GS NFV‑IFA 011 [0]. + } + + /** + * @desc The ServiceDependency data type supports the specification of requirements of a service-consuming MEC application related to a MEC service + * @member serName The name of the service + * @member serCategory A Category reference of the service + * @member version The version of the service + * @member serTransportDependencies Indicates transport and serialization format dependencies of consuming the service + * @member requestedPermissions + * @see ETSI GS MEC 010-2 Clause 6.2.1.17 Type: ServiceDependency + */ + type record ServiceDependency { + JSON.String serName, + CategoryRef serCategory optional, + JSON.String version, + TransportDependency serTransportDependencies optional, + JSON.String requestedPermissions optional + } + + /** + * @desc The TransportDependency data type supports the specification of requirements of a MEC application related to supported transport bindings (each being a combination of a transport with one or more serializers) + * @member transport Information about the transport in this transport binding + * @member serializers Information about the serializers in this transport binding, as defined in the SerializerType type in ETSI GS MEC 011 [17]i.0 + * @member labels Set of labels that allow to define groups of transport bindings + * @see ETSI GS MEC 010-2 Clause 6.2.1.18 Type: TransportDependency + */ + type record TransportDependency { + TransportDescriptor transport, + SerializerType serializers, + Labels labels + } + + type record length(1..infinity) of JSON.String Labels; + + /** + * @desc The TransportDescriptor data type describes a transport + * @member name The name of this transport + * @member description Human-readable description of this transport + * @member type_ Type of the transport, as defined in the TransportTypes type in ETSI GS MEC 011 [17]i.0 + * @member protocol The name of the protocol used. Shall be set to "HTTP" for a REST API + * @member version The version of the protocol used + * @member security Information about the security used by the transport in ETSI GS MEC 011 [17]i.0 + * @member implSpecificInfo Additional implementation specific details of the transport + * @see ETSI GS MEC 010-2 Clause 6.2.1.19 Type: TransportDescriptor + */ + type record TransportDescriptor { + JSON.String name, + JSON.String description optional, + TransportTypes type_, + JSON.String protocol, + JSON.String version, + SecurityInfo security, + JSON.String implSpecificInfo optional + } + + /** + * @desc This data type represents the information of user context transfer capability of application + * @member statefulApplication If the application is stateful, this attribute shall be set to true + * @member userContextTransferSupport This attribute shall be present if the application is stateful and shall be absent otherwise + * @see ETSI GS MEC 010-2 Clause 6.2.1.20 Type: UserContextTransferCapability + */ + type record UserContextTransferCapability { + JSON.Bool statefulApplication, + JSON.Bool userContextTransferSupport optional + } + + /** + * @desc This data type represents the network policy in the application instantiation and operation + * @member steeredNetwork This attribute provides an option for the application to specify a type of network to carry the application traffic + * @member steeredNetwork Provides an option for the application to specify a type of network to carry the application traffic + * @see ETSI GS MEC 010-2 Clause 6.2.1.21 Type: AppNetworkPolicy + */ + type record AppNetworkPolicy { + SteeredNetwork steeredNetwork + } + + /** + * @desc Provides an option for the application to specify a type of network to carry the application traffic + * @member cellularNetwork The application prefers to a cellular network to carry its traffic + * @member wi_fiNetwork The application prefers to a Wi-Fi network to carry its traffic + * @member fixedAccessNetwork The application prefers to a fixed access network to carry its traffic + * @see ETSI GS MEC 010-2 Clause 6.2.1.21 Type: AppNetworkPolicy + */ + type record SteeredNetwork { + JSON.Bool cellularNetwork optional, + JSON.Bool wi_fiNetwork optional, + JSON.Bool fixedAccessNetwork optional + } with { + variant (wi_fiNetwork) "name as 'wi-fiNetwork'"; + } + + } // End of group application_descriptor_information_model + + group application_lifecycle_management_information_model { + + /** + * @desc The LocationConstraints data type supports the specification of MEC application requirements related to MEC application deployment location constraints + * @member countryCode The two-letter ISO 3166 [0] country code in capital letters + * @member civicAddressElement Zero or more elements comprising the civic address + * @member area Geographic area + * @see ETSI GS MEC 010-2 Clause 6.2.2.2 Type: LocationConstraints + */ + type record LocationConstraints { + JSON.String countryCode optional, + CivicAddressElement civicAddressElement optional, + Polygon area optional + } + + type record CivicAddressElement { + integer caType, + JSON.String caValue + } + + type record Geometry { + JSON.String type_, + Coordinates coordinates + } with { + variant (type_) "name as 'type'"; + } + type record of JSON.Number Coordinate; + type record of Coordinate Coordinates; + type record Property { + JSON.String key, + JSON.String value_ + } with { + variant (value_) "name as 'value'"; + } + type record of Property Properties; + type record Polygon { + JSON.String type_, + Geometry geometry, + Properties properties, + JSON.String this_ + } with { + variant (type_) "name as 'type'"; + variant (this_) "name as 'this'"; + } + + /** + * @desc The data type of CreateAppInstanceRequest represents the parameters for creating a new application instance resource + * @member appDId The application descriptor identifier + * @member appInstanceName Human-readable name of the application instance to be created + * @member appInstanceDescription Human-readable description of the application instance to be created + * @member appPlacementInfo Describes the information of selected MEC platform for the application instance to associate + * @see ETSI GS MEC 010-2 Clause 6.2.2.3 Type: CreateAppInstanceRequest + */ + type record CreateAppInstanceRequest { + JSON.String appDId, + JSON.String appInstanceName optional, + JSON.String appInstanceDescription optional, + MepInformation appPlacementInfo optional + } + + /** + * @desc The data type of AppInstanceInfo represents the parameters of instantiated application instance resources + * @member id Identifier of the application instance represented by this data type + * @member appInstanceName Name of the application instance + * @member appInstanceDescription Human-readable description of the application instance to be created + * @member appDId The application descriptor identifier is managed by the application provider to identify the application descriptor in a globally unique way + * @member appProvider The onboarded application package provider name + * @member appName The onboarded application name + * @member appSoftVersion The application software version + * @member appDVersion Version of the application descriptor + * @member appPkgId Identifier of the onboarded application package + * @member vimConnectionInfo Information about VIM connections to be used for managing the resources for the application instance + * @member nsInstanceId Identifier of the NS instance created by NFVO in which the MEC application has been instantiated as a VNF instance + * @member vnfInstanceId Identifier of the VNF instance created by VNFM that the MEC application has been instantiated as + * @member instantiationState Instantiation state of the application instance + * @member instantiatedAppState Information specific to an instantiated application. This attribute shall be present if the instantiationState attribute value is INSTANTIATED + * @member instantiatedAppState Operational state is applicable in the instantiation state INSTANTIATED + * @member _links Links to resources related to this resource + * @see ETSI GS MEC 010-2 Clause 6.2.2.4 Type: AppInstanceInfo + */ + type record AppInstanceInfo { + JSON.String id, + JSON.String appInstanceName optional, + JSON.String appInstanceDescription optional, + JSON.String appDId, + JSON.String appProvider, + JSON.String appName, + JSON.String appSoftVersion, + JSON.String appDVersion, + JSON.String appPkgId, + VimConnectionInfo vimConnectionInfo optional, + JSON.String nsInstanceId optional, + JSON.String vnfInstanceId optional, + InstantiationState instantiationState, + InstantiatedAppState instantiatedAppState optional, + CommunicationInterface communicationInterface optional, + Link links + } with { + variant (links) "name as '_links'"; + } + type record of AppInstanceInfo AppInstanceInfoList; + + type record Link { + LinkType self_, + LinkType instantiate optional, + LinkType terminate optional, + LinkType operate optional, + LinkType configure_platform_for_app optional + } with { + variant (self_) "name as 'self'"; + } + + type record InstantiatedAppState { + OperationalState operationalState optional, + LocationInformation appInstLocation optional + } + + type enumerated InstantiationState { + INSTANTIATED, + NOT_INSTANTIATED + } + + type enumerated OperationalState { + STARTED, + STOPPED + } + + /** + * @desc The data type of AppInstanceInfo represents the parameters of instantiated application instance resources + * @member appInstSelectorType + * @member appInstances + * @member appsFromProviders Match existing application instances, or those created in the future whilst the subscription is active, that belong to applications from certain providers + * @see ETSI GS MEC 010-2 Clause 6.2.2.5 Type: AppInstanceSubscriptionFilter + */ + type record AppInstanceSubscriptionFilter { + AppInstSelectorType appInstSelectorType, + AppInstances appInstances optional, + appsFromProviders appsFromProviders optional + } + + type enumerated AppInstSelectorType { + VOID (0), + APP_IDENTITY (1), + APP_NAME (2), + APP_D_ID (3), + APP_FROM_PROVIDER (4) + } with { + variant "JSON: as number" + } + + type record length(1..infinity) of JSON.String AppInstances; + + /** + * @desc Match existing application instances, or those created in the future whilst the subscription is active, that belong to applications from certain providers + * @member appProvider Name of the application provider to match + * @member appProducts Match application instances that belong to application products with certain product names, from one particular provider + * @see ETSI GS MEC 010-2 Clause 6.2.2.5 Type: AppInstanceSubscriptionFilter + */ + type record AppsFromProvider { + JSON.String appProvider, + AppProducts appProducts optional + } + + type record length(1..infinity) of AppsFromProvider appsFromProviders; + + type record AppProduct { + JSON.String appName, + Versions versions optional + } + + type record length(1..infinity) of AppProduct AppProducts; + + type record Version { + JSON.String appSoftVersion, + JSON.String appDVersion optional + } + + type record length(1..infinity) of Version Versions; + + /** + * @desc This data type represents a subscription filter criteria to match an application LCM operation occurrence + * @member appInstanceSubscriptionFilter this attribute contains filter criteria that selects one or more application instances on which to receive "LCM operation occurrence" notifications + * @member notificationTypes Match particular notification types + * @member operationTypes Type of the LCM operation represented by this application instance LCM operation occurrence + * @member operationStates Type of the LCM operation state represented by this application instance LCM operation occurrence + * @see ETSI GS MEC 010-2 Clause 6.2.2.6 Type: AppLcmOpOccSubscriptionFilter + */ + type record AppLcmOpOccSubscriptionFilter { + AppInstanceSubscriptionFilter appInstanceSubscriptionFilter optional, + JSON.String notificationTypes optional, + OperationTypes operationTypes optional, + OperationStates operationStates optional + } + + type enumerated OperationType { + INSTANTIATE, + OPERATE, + TERMINATE, + INVALID_OPERATE // For BI purpose only + } + + type record length(1..infinity) of OperationType OperationTypes; + + type enumerated OperationState { + STARTING, + PROCESSING, + COMPLETED, + FAILED, + FAILED_TEMP + } + + type record length(1..infinity) of OperationState OperationStates; + + /** + * @desc This data type represents request parameters of the "Instantiate Application" operation + * @member virtualComputeDescriptor Describes CPU and memory requirements, as well as optional additional requirements, such as disk and acceleration related capabilities, of the virtualisatio n container used to realize the application instance to be created + * @member virtualStorageDescriptor Defines descriptors of virtual storage resources to be used by the application instance to be created + * @member selectedMECHostInfo Describes the information of selected host for the application instance + * @member locationConstraints Defines the location constraints for the application instance to be created + * @member vimConnectionInfo Information about VIM connections to be used for managing the resources for the application instance, or refer to external/externally-managed virtual links + * @member appTermCandsForCoord Provides sets of applications as termination candidate alternatives that the MEO/MEAO shall select from when utilizing the coordinate LCM operation exchange + * @see ETSI GS MEC 010-2 Clause 6.2.2.7 Type: InstantiateAppRequest + */ + type record InstantiateAppRequest { + VirtualComputeDescriptor virtualComputeDescriptor optional, + VirtualStorageDescriptor virtualStorageDescriptor optional, + MECHostInformation selectedMECHostInfo, + LocationConstraints locationConstraints optional, + VimConnectionInfo vimConnectionInfo optional, + AppTermCandsForCoord appTermCandsForCoord optional + } + + /** + * @desc This data type represents request parameters of the "Operate Application" operation + * @member changeStateTo The desired operational state + * @member stopType The stop type + * @member gracefulStopTimeout The time interval (in seconds) to wait for the application instance to be taken out of service during graceful stop, before stopping the application + * @see ETSI GS MEC 010-2 Clause 6.2.2.8 Type: OperateAppRequest + */ + type record OperateAppRequest { + OperationalState changeStateTo, + StopType stopType optional, + UInt32 gracefulStopTimeout optional + } + + type enumerated StopType { + FORCEFUL, + GRACEFUL + } + + /** + * @desc This data type represents request parameters of the "Terminate Application Request" operation + * @member terminationType Indicates whether forceful or graceful termination is requested + * @member gracefulTerminationTimeout This attribute is only applicable in case of graceful termination + * @see ETSI GS MEC 010-2 Clause 6.2.2.9 Type: TerminateAppRequest + */ + type record TerminateAppRequest { + TerminationType terminationType, + UInt32 gracefulTerminationTimeout optional + } + + type StopType TerminationType; + + /** + * @desc The data type represents a subscription to notification of application instance operational state change + * @member id Identifier of the subscription to application instance operational state change notification + * @member subscriptionType Shall be set to "AppInstanceStateChangeSubscription" + * @member appInstanceState Application instance state subscribed to + * @member appInstanceSubscriptionFilter Criteria used to select application instances on which to send notifications related to this subscription + * @member callbackUri The URI of the endpoint for the subscription related notification to be sent to + * @member links Links to resources related to this resource + * @see ETSI GS MEC 010-2 Clause 6.2.2.10 Type: AppInstSubscriptionInfo + */ + type record AppInstSubscriptionInfo { + JSON.String id, + JSON.String subscriptionType, + AppInstanceState appInstanceState optional, + AppInstanceSubscriptionFilter appInstanceSubscriptionFilter optional, + JSON.AnyURI callbackUri, + AppInstSubscriptionInfo_Link links + } with { + variant (links) "name as '_links'"; + } + + type enumerated AppInstanceState { + NOT_INSTANTIATED, + STARTED, + STOPPED + } + + type record AppInstSubscriptionInfo_Link { + LinkType self_ + } with { + variant (self_) "name as 'self'"; + } + + /** + * @desc This data type represents an application instance notification for informing the subscribers about operational state of application instance resources + * @member id Identifier of this notification + * @member notificationType Discriminator for the different notification types + * @member appInstanceState Application instance state + * @member subscriptionId Identifier of the subscription related to this notification + * @member timeStamp Date and time of the notification generation + * @member appInstanceId Identifier of application instance + * @member appPkgId Identifier of the onboarded application package + * @member appDId The application descriptor identifier identifies the application package and the application descriptor in a globally unique way + * @member appInstLocation Location of the MEC application instance + * @member links A link to the related subscription + * @see ETSI GS MEC 010-2 Clause 6.2.2.11 Type: AppInstNotification + */ + type record AppInstNotification { + JSON.String id, + NotificationType notificationType, + AppInstanceState appInstanceState optional, + JSON.String subscriptionId, + TimeStamp timeStamp, + JSON.String appInstanceId, + JSON.String appPkgId, + JSON.String appDId, + LocationInformation appInstLocation optional, + AppInstNotification_Links links + } with { + variant (links) "name as '_links'"; + } + + type record AppInstNotification_Links { + LinkType subscription + } + + /** + * @desc The data type represents the input parameters of "subscription operation" to notification of application lifecycle management for the operational state change of application instance + * @member subscriptionType Shall be set to "AppInstanceStateChangeSubscription" + * @member callbackUri The URI of the endpoint for the subscription related notification to be sent to + * @member appInstanceState Only send notifications for application instances that are in one of the states listed in this attribute + * @member appInstanceSubscriptionFilter Criteria used to filter application instances for which to send notifications related to this subscription + * @see ETSI GS MEC 010-2 Clause 6.2.2.12 Type: AppInstSubscriptionRequest + */ + type record AppInstSubscriptionRequest { + JSON.String subscriptionType, + JSON.AnyURI callbackUri, + AppInstanceState appInstanceState optional, + AppInstanceSubscriptionFilter appInstanceSubscriptionFilter optional + } + + /** + * @desc This data type represents an application lifecycle management operation occurrence + * @member id Identifier of the subscription to application LCM operation occurrence notification + * @member operationState Operation state + * @member stateEnteredTime Date and time when the current state was entered + * @member startTime Date and time of the start of the operation + * @member lcmOperationType of the actual LCM operation represented by this application instance LCM operation occurrence + * @member operationParams Input parameters of the LCM operation + * @member isCancelPending If the application LCM operation occurrence operationState is in "PROCESSING" state and the operation is being cancelled, this attribute shall be set to true + * @member cancelMode The mode of an cancellation + * @member links Link to the application instance that the operation applies to + * @see ETSI GS MEC 010-2 Clause 6.2.2.13 Type: AppLcmOpOcc + */ + type record AppLcmOpOcc { + JSON.String id, + OperationState operationState, + TimeStamp stateEnteredTime, + TimeStamp startTime, + LcmOperation lcmOperation, + OperationParams operationParams optional, + JSON.Bool isCancelPending optional, + CancelMode cancelMode optional, + AppLcmOpOcc_Link links + } with { + variant (links) "name as '_links'"; + } + + type OperationType LcmOperation; + + type union OperationParams { + InstantiateAppRequest instantiateAppRequest, + OperateAppRequest operateAppRequest, + TerminateAppRequest terminateAppRequest + } + + type record AppLcmOpOcc_Link { + LinkType self_, + LinkType appInstance + } with { + variant (self_) "name as 'self'"; + } + + /** + * @desc This data type represents a subscription request to notification of application life cycle management operation occurrence + * @member subscriptionType Shall be set to "AppLcmOpOccStateChangeSubscription" + * @member callbackUri The URI of the endpoint for the subscription related notification to be sent to + * @member appLcmOpOccSubscriptionFilter Subscription filter criteria to match specific application LCM operation occurrences + * @see ETSI GS MEC 010-2 Clause 6.2.2.14 Type: AppLcmOpOccSubscriptionRequest + */ + type record AppLcmOpOccSubscriptionRequest { + JSON.String subscriptionType, + JSON.AnyURI callbackUri, + AppLcmOpOccSubscriptionFilter appLcmOpOccSubscriptionFilter optional + } + + /** + * @desc This data type represents a subscription to notifications of application life cycle management operation occurrence + * @member id Identifier of this subscription resource + * @member subscriptionType Shall be set to "AppLcmOpOccStateChangeSubscription" + * @member appLcmOpOccSubscriptionFilter Criteria used to select application LCM operation occurrences on which to send notifications related to this subscription + * @member callbackUri The URI of the endpoint for the subscription related notification to be sent to + * @member links Links to resources related to this resource + * @see ETSI GS MEC 010-2 Clause 6.2.2.15 Type: AppLcmOpOccSubscriptionInfo + */ + type record AppLcmOpOccSubscriptionInfo { + JSON.String id, + JSON.String subscriptionType, + JSON.AnyURI callbackUri, + AppLcmOpOccSubscriptionFilter appLcmOpOccSubscriptionFilter optional, + AppLcmOpOccSubscriptionInfo_Link links + } with { + variant (links) "name as '_links'"; + } + + type record AppLcmOpOccSubscriptionInfo_Link { + LinkType self_ + } with { + variant (self_) "name as 'self'"; + } + + /** + * @desc This data type represents a notification related to state changes of an application LCM operation occurrence which informs the subscribers + * @member id Identifier of this notification + * @member notificationType Discriminator for the different notification types + * @member operationType Discriminator for the different notification types + * @member operationState Operation state + * @member subscriptionId Identifier of the subscription to this notification + * @member timeStamp Date and time of the notification generation + * @member appLcmOpOccId Identifier of application lifecycle management operation occurrence + * @member appInstanceId Identifier of application instance + * @member links Links to resources related to this notification + * @member links Links to resources related to this resource + * @see ETSI GS MEC 010-2 Clause 6.2.2.16 Type: AppLcmOpOccNotification + */ + type record AppLcmOpOccNotification { + JSON.String id, + NotificationType notificationType, + OperationType operationType, + OperationState operationState, + JSON.String subscriptionId, + TimeStamp timeStamp, + JSON.String appInstanceId, + AppLcmOpOccNotification_Link links + } with { + variant (links) "name as '_links'"; + } + + type record AppLcmOpOccNotification_Link { + LinkType appInstance, + LinkType subscription, + LinkType appLcmOpOcc + } + + /** + * @desc The data type represents the parameters of MEC host information + * @member hostName Human-readable name of MEC host + * @member hostId KeyValuePairs + * @see ETSI GS MEC 010-2 Clause 6.2.2.17 Type: MECHostInformation + */ + type record MECHostInformation { + JSON.String hostName optional, + KeyValuePairs hostId + } + + /** + * @desc The VimConnectionInfo data type specifies the connection information of VIM for managing the resources of the application instance + * @member id The identifier of the VIM Connection + * @member vimId The identifier of the VIM instance + * @member vimType Discriminator for the different types of the VIM information + * @member interfaceInfo Information about the interface or interfaces to the VIM, if applicable, such as the URI of an interface endpoint to communicate with the VIM + * @member accessInfo Authentication credentials for accessing the VIM, and other access-related information such as tenants or infrastructure resource groups + * @member extra VIM type specific additional information + * @see ETSI GS MEC 010-2 Clause 6.2.2.18 Type: VimConnectionInfo + */ + type record VimConnectionInfo { + JSON.String id, + JSON.String vimId optional, + JSON.String vimType, + KeyValuePairs interfaceInfo optional, + KeyValuePairs accessInfo optional, + KeyValuePairs extra optional + } + + /** + * @desc The data type represents a subscription link list of notification on application lifecycle management + * @member links List of hyperlinks related to the resource + * @see ETSI GS MEC 010-2 Clause 6.2.2.19 Type: AppInstanceSubscriptionLinkList + */ + type record SubscriptionLinkList { + SubscriptionLinkList_Link links + } with { + variant (links) "name as '_links'"; + } + + type record SubscriptionLinkList_Link { + LinkType self_, + SubscriptionLinkList_Link_Subscriptions subscriptions optional + } with { + variant (self_) "name as 'self'"; + } + + type record SubscriptionLinkList_Link_Subscription { + JSON.AnyURI href, + AppInstanceSubscriptionType subscriptionType + } + + type record length(1..infinity) of SubscriptionLinkList_Link_Subscription SubscriptionLinkList_Link_Subscriptions; + + /** + * @desc String representing the type of a subscription + * @see ETSI GS MEC 010-2 Clause 6.2.2.20.2 Simple data types + */ + type JSON.String AppInstanceSubscriptionType; + + /** + * @desc This data type represents the parameters for configuring the MEP to run an application instance + * @member appServiceRequired Describes services a MEC application requires to run + * @member appServiceOptional Describes services a MEC application may use if available + * @member appServiceProduced Describes services a MEC application is able to produce to the platform or other MEC applications + * @member appFeatureRequired Describes features a MEC application requires to run + * @member transportDependencies Transports, if any, that this application requires to be provided by the platform + * @member appTrafficRule Describes traffic rules the MEC application requires + * @member appDNSRule Describes DNS rules the MEC application requires + * @member appLatency Describes the maximum latency tolerated by the MEC application + * @member userContextTransferCapability If the application supports the user context transfer capability, this attribute shall be included + * @member appNetworkPolicy If present, it represents the application network policy of carrying the application traffic + * @see ETSI GS MEC 010-2 Clause 6.2.2.21 Type: ConfigPlatformForAppRequest + */ + type record ConfigPlatformForAppRequest { + ServiceDependency appServiceRequired optional, + ServiceDependency appServiceOptional optional, + ServiceDependency appServiceProduced optional, + FeatureDependency appFeatureRequired optional, + FeatureDependency appFeatureOptional optional, + TransportDependency transportDependencies optional, + TrafficRuleDescriptor appTrafficRule optional, + DNSRuleDescriptor appDNSRule optional, + LatencyDescriptor appLatency optional, + UserContextTransferCapability userContextTransferCapability optional, + AppNetworkPolicy appNetworkPolicy optional + } + + /** + * @desc The data type represents the parameters of MEC platform information + * @member mepName Human-readable name of MEC platform + * @member mepId Deployment-specific identifier of MEC platform + * @see ETSI GS MEC 010-2 Clause 6.2.2.22 Type: MepInformation + */ + type record MepInformation { + JSON.String mepName optional, + JSON.String mepId optional + } + + /** + * @desc The AppTermCandsForCoord data type represents the parameters to provide candidates of applications to terminate in pre-emption situations for LCM coordination exchanges + * @member terminationOptions Sets of application options for the MEO/MEAO to select from as candidates for termination + * @see ETSI GS MEC 010-2 Clause 6.2.2.23 Type: AppTermCandsForCoord + */ + type record AppTermCandsForCoord { + TerminationOptions terminationOptions + } + + type record TerminationOption { + AppInstIdTerminationCands appInstIdTerminationCands + } + + type record length(1..infinity) of JSON.String AppInstIdTerminationCands; + + type record length(1..infinity) of TerminationOption TerminationOptions; + + /** + * @desc The data type represents the input parameters of "subscription operation" to notification of application instance identifier creation + * @member subscriptionType Shall be set to "AppIdentifierCreationSubscription" + * @member callbackUri The URI of the endpoint for the subscription related notification to be sent to + * @member appInstanceSubscriptionFilter Criteria used to filter application instances for which to send notifications related to this subscription + * @see ETSI GS MEC 010-2 Clause 6.2.2.25 Type: AppInstIdCreationSubscriptionRequest + */ + type record AppInstIdCreationSubscriptionRequest { + JSON.String subscriptionType, + JSON.AnyURI callbackUri, + AppInstanceSubscriptionFilter appInstanceSubscriptionFilter optional + } + + /** + * @desc The data type represents a subscription to notification of application instance identifier creation + * @member id Identifier of the subscription to application instance operational state change notification + * @member subscriptionType Shall be set to "AppIdentifierCreationSubscription" + * @member callbackUri The URI of the endpoint for the subscription related notification to be sent to + * @member appInstanceSubscriptionFilter Criteria used to select application instances on which to send notifications related to this subscription + * @member links Links to resources related to this resource + * @see ETSI GS MEC 010-2 Clause 6.2.2.26 Type: AppInstIdCreationSubscriptionInfo + */ + type record AppInstIdCreationSubscriptionInfo { + JSON.String id, + JSON.String subscriptionType, + JSON.AnyURI callbackUri, + AppInstanceSubscriptionFilter appInstanceSubscriptionFilter optional, + AppInstIdCreationSubscriptionInfo_Link links + } with { + variant (links) "name as '_links'"; + } + + type record AppInstIdCreationSubscriptionInfo_Link { + LinkType self_ + } with { + variant (self_) "name as 'self'"; + } + + /** + * @desc This data type represents a notification for informing the subscribers about the creation of a new "individual application instance" resource and the associated application instance identifier + * @member id Identifier of this notification + * @member notificationType Discriminator for the different notification types + * @member subscriptionId Identifier of the subscription related to this notification + * @member timeStamp Date and time of the notification generation + * @member appInstanceId The created application instance Identifier + * @member links Links to resources related to this notification + * @see ETSI GS MEC 010-2 Clause 6.2.2.27 Type: AppInstanceIdentifierCreationNotification + */ + type record AppInstanceIdentifierCreationNotification { + JSON.String id, + NotificationType notificationType, + TimeStamp timeStamp, + JSON.String appInstanceId, + AppInstanceIdentifierCreationNotification_Link links + } with { + variant (links) "name as '_links'"; + } + + type record AppInstanceIdentifierCreationNotification_Link { + LinkType subscription, + LinkType appInstance + } + + /** + * @desc The data type represents the input parameters of "subscription operation" to notification of application instance identifier deletion + * @member subscriptionType Shall be set to "AppIdentifierDeletionSubscription" + * @member callbackUri The URI of the endpoint for the subscription related notification to be sent to + * @member appInstanceSubscriptionFilter Criteria used to filter application instances for which to send notifications related to this subscription + * @see ETSI GS MEC 010-2 Clause 6.2.2.28 Type: AppInstIdDeletionSubscriptionRequest + */ + type record AppInstIdDeletionSubscriptionRequest { + JSON.String subscriptionType, + JSON.AnyURI callbackUri, + AppInstanceSubscriptionFilter appInstanceSubscriptionFilter optional + } + + /** + * @desc The data type represents a subscription to notification of application instance identifier deletion + * @member id Identifier of the subscription to application instance operational state change notification + * @member subscriptionType Shall be set to "AppIdentifierDeletionSubscription" + * @member callbackUri The URI of the endpoint for the subscription related notification to be sent to + * @member appInstanceSubscriptionFilter Criteria used to select application instances on which to send notifications related to this subscription + * @member links Links to resources related to this resource + * @see ETSI GS MEC 010-2 Clause 6.2.2.29 Type: AppInstIdDeletionSubscriptionInfo + */ + type record AppInstIdDeletionSubscriptionInfo { + JSON.String id, + JSON.String subscriptionType, + JSON.AnyURI callbackUri, + AppInstanceSubscriptionFilter appInstanceSubscriptionFilter optional, + AppInstIdDeletionSubscriptionInfo_Link links + } with { + variant (links) "name as '_links'"; + } + + type record AppInstIdDeletionSubscriptionInfo_Link { + LinkType self_ + } with { + variant (self_) "name as 'self'"; + } + + /** + * @desc This data type represents a notification for informing the subscribers about the deletion of an "individual application instance" resource and the associated application instance identifier + * @member id Identifier of this notification + * @member notificationType Discriminator for the different notification types + * @member subscriptionId Identifier of the subscription related to this notification + * @member timeStamp Date and time of the notification generation + * @member appInstanceId The deleted application instance Identifier + * @member links Links to resources related to this notification + * @see ETSI GS MEC 010-2 Clause 6.2.2.30 Type: AppInstanceIdentifierDeletionNotification + */ + type record AppInstanceIdentifierDeletionNotification { + JSON.String id, + NotificationType notificationType, + JSON.String subscriptionId, + TimeStamp timeStamp, + JSON.String appInstanceId, + AppInstanceIdentifierDeletionNotification_Link links + } with { + variant (links) "name as '_links'"; + } + + type record AppInstanceIdentifierDeletionNotification_Link { + LinkType subscription, + LinkType appInstance + } + + /** + * @desc The LocationInformation data type represents the location information of the site hosting the MEC application instance + * @member countryCode The two-letter ISO 3166 [3] country code in capital letters where an instance is deployed + * @member civicAddress Provides the civic address of the site hosting the MEC application instance + * @member Geographical position (i.e. latitude and longitude) where an instance is deployed + * @see ETSI GS MEC 010-2 Clause 6.2.2.31 Type: LocationInformation + */ + type record LocationInformation { + JSON.String countryCode, + CivicAddressElement civicAddress optional, + JSON.String geographicalPosition optional + } + + /** + * @desc This data type represents the valid modes of cancelling an application LCM operation + * @see ETSI GS MEC 010-2 Clause 6.2.2.32 Type: CancelMode + */ + type StopType CancelMode; + + } // End of group application_lifecycle_management_information_model + + group application_package_information_model { + + /** + * @desc The data type CreateAppPkg represents the parameters for creating a new application package resource + * @member appPkgName Name of the application package to be onboarded + * @member appPkgVersion Version of the application package to be onboarded + * @member appProvider The provider's name of the application package to be onboarded + * @member checksum Checksum of the onboarded application package + * @member userDefinedData User defined data for the application package + * @member appPkgPath Address information of the application package + * @see ETSI GS MEC 010-2 Clause 6.2.3.2 Type: CreateAppPkg + */ + type record CreateAppPkg { + JSON.String appPkgName, + JSON.String appPkgVersion, + JSON.String appProvider optional, + Checksum checksum, + KeyValuePairs userDefinedData optional, + JSON.AnyURI appPkgPath + } + + /** + * @desc The data type AppPkgInfo represents the parameters for an application package resource + * @member id Identifier of the application package resource + * @member appDId The application descriptor identifier + * @member appProvider The provider's name of the onboarded application package + * @member appName Name of the onboarded application + * @member appSoftwareVersion Software version of the application. This is updated when there is any change to the software in the onboarded application package + * @member appDVersion Version of the application descriptor + * @member checksum Checksum of the onboarded application package + * @member signingCertificate The singleton signing certificate if it is included as a file in the AppD archive + * @member softwareImages Information of application software image in application package + * @member additionalArtifacts Additional information of application package artifacts that are not application software images + * @member onboardingState Onboarding state of application package + * @member operationalState Operational state of the onboarded application package + * @member usageState Usage state of the onboarded instance of the application package + * @member mecInfo The MEC version that compatible with this application + * @member userDefinedData User defined data for the application package + * @member onboardingFailureDetails Failure details of current onboarding procedure + * @member links Links to resources related to this resource + * @see ETSI GS MEC 010-2 Clause 6.2.3.3 Type: AppPkgInfo + */ + type record AppPkgInfo { + JSON.String id, + JSON.String appDId, + JSON.String appProvider optional, + JSON.String appName, + JSON.String appSoftwareVersion, + JSON.String appDVersion, + Checksum checksum, + JSON.String signingCertificate optional, + AppPkgSWImageInfo softwareImages, + AppPkgArtifactInfo additionalArtifacts optional, + OnboardingState onboardingState, + AppPkgInfo_OperationalState operationalState, + UsageState usageState, + AppPkgInfo_MecInfo mecInfo, + KeyValuePairs userDefinedData optional, + ProblemDetails onboardingFailureDetails optional, + AppPkgInfo_Links links + } with { + variant (links) "name as '_links'"; + } + type record of AppPkgInfo AppPkgInfoList; + + type record AppPkgSWImageInfo_ { + // FIXME The data type of application software image information data model is related to virtualisation method and needs for further study + } + type record length(1..infinity) of AppPkgSWImageInfo_ AppPkgSWImageInfo; + type record AppPkgArtifactInfo { + // FIXME The data type of additional information of application package artifacts is not specified in the present document + } + + type enumerated OnboardingState { + CREATED, + UPLOADING, + PROCESSING, + ONBOARDED + } + + type enumerated AppPkgInfo_OperationalState { + ENABLED, + DISABLED, + UNKNOWN // Used for BI purpose only + } + + type enumerated UsageState { + IN_USE, + NOT_IN_USE + } + + type record length(1..infinity) of JSON.String AppPkgInfo_MecInfo; + + type record AppPkgInfo_Links { + LinkType self_, + LinkType appD, + LinkType appPkgContent, + LinkType vnfPkgInfo optional + } with { + variant (self_) "name as 'self'"; + } + + /** + * @desc The data type represents a subscription to notification of application package management for the onboarding, or operational state change of application package + * @member id Identifier of the subscription to application package notification + * @member subscriptionType Type of subscription + * @member callbackUri The URI of the endpoint for the subscription related notification to be sent to + * @member links Links to resources related to this resource + * @see ETSI GS MEC 010-2 Clause 6.2.3.4 Type: AppPkgSubscriptionInfo + */ + type record AppPkgSubscriptionInfo { + JSON.String id, + AppPkgSubscriptionType subscriptionType, + JSON.AnyURI callbackUri, + AppPkgSubscriptionInfo_Link links + } with { + variant (links) "name as '_links'"; + } + + type record AppPkgSubscriptionInfo_Link { + LinkType self_ + } with { + variant (self_) "name as 'self'" + } + + /** + * @desc The data type represents a subscription link list of notification on application package management + * @member links Links to resources related to this resource + * @see ETSI GS MEC 010-2 Clause 6.2.3.5 Type: AppPkgSubscriptionLinkList + */ + type record AppPkgSubscriptionLinkList { + AppPkgSubscriptionLinkList_Link links + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc Links to resources related to this resource + * @member self_ URI of this resource + * @member subscriptions A link list to the subscriptions to an application package + * @see ETSI GS MEC 010-2 Clause 6.2.3.5 Type: AppPkgSubscriptionLinkList + */ + type record AppPkgSubscriptionLinkList_Link { + LinkType self_, + AppPkgSubscriptionLinkList_Link_Subscriptions subscriptions optional + } with { + variant (self_) "name as 'self'"; + } + + type record AppPkgSubscriptionLinkList_Link_Subscription { + JSON.AnyURI href, + AppPkgSubscriptionType subscriptionType + } + + type record length(1..infinity) of AppPkgSubscriptionLinkList_Link_Subscription AppPkgSubscriptionLinkList_Link_Subscriptions; + + /** + * @desc This data type represents an application package management notification for informing the subscribers about onboarding application package resources + * @member id Identifier of this notification + * @member notificationType Discriminator for the different notification types + * @member subscriptionId Identifier of the subscription to this notification + * @member timeStamp Date and time of the notification generation + * @member appPkgId Identifier of the onboarded application package + * @member appDId The application descriptor identifier identifies the application package and the application descriptor in a globally unique way + * @member operationalState Operational state of the application package + * @member linksLinks to resources related to this notification + * @see ETSI GS MEC 010-2 Clause 6.2.3.6 Type: AppPkgNotification + */ + type record AppPkgNotification { + JSON.String id, + JSON.String notificationType, + JSON.String subscriptionId, + TimeStamp timeStamp, + JSON.String appPkgId, + JSON.String appDId, + AppPkgInfo_OperationalState operationalState, + AppPkgNotification_Link links + } with { + variant (links) "name as '_links'"; + } + + type record AppPkgNotification_Link { + LinkType subscription + } + + /** + * @desc The data type represents the input parameters of "subscription operation" to notification of application package management for the onboarding, or operational state change of application package + * @member callbackUri The URI of the endpoint for the subscription related notification to be sent to + * @member subscriptionType Type of the subscription + * @member appPkgFilter The attribute-based filter is to filter application packages on which the query applies + * @see ETSI GS MEC 010-2 Clause 6.2.3.7 Type: AppPkgSubscription + */ + type record AppPkgSubscription { + JSON.AnyURI callbackUri, + AppPkgSubscriptionType subscriptionType, + AppPkgFilter appPkgFilter optional + } + + /** + * @desc The data type represents modifications of the "AppPkgInfo" data type that can be requested to perform "application package operation" + * @member New value of the "operationalState" attribute of the "OnboardedAppPkgInfo" structure + * @see ETSI GS MEC 010-2 Clause 6.2.3.8 Type: AppPkgInfoModifications + */ + type record AppPkgInfoModifications { + AppPkgInfo_OperationalState operationalState + } + + /** + * @desc String representing the type of a subscription + * @see ETSI GS MEC 010-2 Clause 6.2.3.9.2 Simple data types + */ + type JSON.String AppPkgSubscriptionType; + + /** + * @desc This data type represents subscription filter criteria to match application package + * @member appPkgInfoId Match the application package identifier which is allocated by the MEO + * @member appDId Match the application descriptor identifier which is allocated by the application provider + * @member appProvider Match the provider's name of the onboarded application + * @member appName Match the name of the onboarded application + * @member appSoftwareVersion Match the software version of the application package + * @member appDVersion Match the version of the application descriptor + * @member operationalState Match particular operational state of the application package + * @member usageState Match particular usage state of the application package + * @see ETSI GS MEC 010-2 Clause 6.2.3.10 Type: AppPkgFilter + */ + type record AppPkgFilter { + JSON.String appPkgInfoId optional, + JSON.String appDId optional, + JSON.String appProvider optional, + JSON.String appName optional, + JSON.String appSoftwareVersion optional, + JSON.String appDVersion optional, + AppPkgInfo_OperationalState operationalState optional, + UsageState usageState optional + } + + } // End of group application_package_information_model + + group granting_information_model { + + /** + * @desc This type represents a grant request + * @member appInstanceId Identifier of the application instance which this grant request is related to + * @member appLcmOpOccId The identifier of the application lifecycle management operation occurrence associated to the GrantRequest + * @member appDId Identifier of the AppD that defines the application for which the LCM operation is to be granted + * @member operation The lifecycle management operation for which granting is requested + * @member addResources List of resource definitions in the AppD for resources to be added by the LCM operation which is related to this grant request, with one entry per resource + * @member tempResources List of resource definitions in the AppD for resources to be temporarily instantiated during the runtime of the LCM operation which is related to this grant request + * @member removeResources Removed by the LCM operation which is related to this grant request, with one entry per resource + * @member updateResources Provides the definitions of resources to be modified by the LCM operation which is related to this grant request, with one entry per resource + * @member additionalParams MEPM, specific to the application and the LCM operation + * @member links Links to resources related to this request + * @see ETSI GS MEC 010-2 Clause 6.2.4 Granting information model + */ + type record GrantRequest { + JSON.String appInstanceId, + JSON.String appLcmOpOccId, + JSON.String appDId, + OperationType operation, + ResourceDefinition addResources optional, + ResourceDefinition tempResources optional, + ResourceDefinition updateResources optional, + KeyValuePairs additionalParams optional, + GrantRequest_Link links + } with { + variant (links) "name as '_links'"; + } + + type record GrantRequest_Link { + LinkType appLcmOpOcc, + LinkType appInstance + } + + /** + * @desc This type provides information of an existing or proposed resource used by the application + * @member id Identifier of this "ResourceDefinition" structure, unique at least within the scope of the "GrantRequest" structure + * @member type_ Type of the resource definition referenced + * @member vduId Reference to the related VDU in the AppD applicable to this resource + * @member resourceTemplateId Reference to a resource template, i.e. VirtualComputeDescriptor, AppExtCpd, VirtualStorageDescriptor in the AppD + * @member resource Resource information for an existing resource + * @see ETSI GS MEC 010-2 Clause 6.2.4.3 Type: ResourceDefinition + */ + type record ResourceDefinition { + JSON.String id, + ResourceDefinition_Type type_, + JSON.String vduId optional, + JSON.String resourceTemplateId, + ResourceDefinition_Resource resource + } + + type enumerated ResourceDefinition_Type { + COMPUTE, + VL, + STORAGE, + LINKPORT + } + + type record ResourceDefinition_Resource { + VimConnectionInfo vimConnectionInfo, + JSON.String resourceId + } + + /** + * @desc This type represents a grant + * @member id Identifier of the Grant + * @member appInstanceId Identifier of the application instance which this Grant is related to + * @member appLcmOpOccId The identifier of the application lifecycle management operation occurrence associated to the Grant + * @member vimConnections Provides information regarding VIM connections that are approved to be used by the MEPM to allocate resources, and provides parameters of these VIM connections + * @member zones Identifies resource zones where the resources are approved to be allocated by the MEPM + * @member zoneGroups Information about groups of resource zones that are related and that the MEO has chosen to fulfil a zoneGroup constraint in the Grant request + * @member addResources List of resources that are approved to be added, with one entry per resource + * @member tempResources List of resources that are approved to be temporarily instantiated during the runtime of the lifecycle operation, with one entry per resource + * @member removeResources List of resources that are approved to be removed, with one entry per resource + * @member updateResources List of resources that are approved to be modified, with one entry per resource + * @member vimAssets Information about assets for the application that are managed by the MEO in the VIM, such as software images + * @member extVirtualLinks Information about external VLs to connect the application instance to + * @member MEPM, specific to the application and the LCM operation + * @member links Links to resources related to this request + * @see ETSI GS MEC 010-2 Clause 6.2.4.4 Type: Grant + */ + type record Grant { + JSON.String id, + JSON.String appInstanceId, + JSON.String appLcmOpOccId, + VimConnectionInfo vimConnections optional, + ZoneInfo zones optional, + ZoneGroupInfo zoneGroups optional, + GrantInfo addResources optional, + GrantInfo tempResources optional, + GrantInfo removeResources optional, + GrantInfo updateResources optional, + VimAssets vimAssets optional, + ExtVirtualLinkData extVirtualLinks optional, + KeyValuePairs additionalParams optional, + Grant_Link links + } with { + variant (links) "name as '_links'"; + } + + type record VimAssets { + VimSoftwareImage softwareImages optional + } + + type record Grant_Link { + LinkType appLcmOpOcc, + LinkType appInstance + } + + /** + * @desc This type contains information about a Compute, storage or network resource whose addition/update/deletion was granted + * @member resourceDefinitionId Identifier of the related "ResourceDefinition" structure from the related "GrantRequest" structure + * @member vimConnectionId Identifier of the VIM connection to be used to manage this resource + * @member zoneId Reference to the identifier of the "ZoneInfo" structure in the "Grant" structure defining the resource zone into which this resource is to be placed + * @member resourceGroupId Identifier of the "infrastructure resource group", logical grouping of virtual resources assigned to a tenant within an Infrastructure Domain, to be provided when allocating the resource + * @see ETSI GS MEC 010-2 Clause 6.2.4.5 Type: GrantInfo + */ + type record GrantInfo { + JSON.String resourceDefinitionId, + JSON.String vimConnectionId optional, + JSON.String zoneId optional, + JSON.String resourceGroupId optional + } + + /** + * @desc This type provides information regarding a resource zone + * @member id The identifier of this ZoneInfo instance, for the purpose of referencing it from other structures in the "Grant" structure + * @member zoneId The identifier of the resource zone, as managed by the resource management layer (typically, the VIM) + * @member vimConnectionId Identifier of the connection to the VIM that manages the resource zone + * @see ETSI GS MEC 010-2 Clause 6.2.4.6 Type: ZoneInfo + */ + type record ZoneInfo { + JSON.String id, + JSON.String zoneId, + JSON.String vimConnectionId optional + } + + /** + * @desc This type provides information regarding a resource zone group + * @member zoneId References of identifiers of "ZoneInfo" structures, each of which provides information about a resource zone that belongs to this group + * @see ETSI GS MEC 010-2 Clause 6.2.4.7 Type: ZoneGroupInfo + */ + type record ZoneGroupInfo { + ZoneIds zoneId + } + + type record length(1..infinity) of JSON.String ZoneIds; + + /** + * @desc This type represents an external VL + * @member id The identifier of the external VL instance + * @member vimConnectionId Identifier of the VIM connection to manage this resource + * @member resourceId The identifier of the resource in the scope of the VIM + * @member extCps External CPs of the application instance to be connected to this external VL + * @member extLinkPorts Externally provided link ports to be used to connect external connection points to this external VL + * @see ETSI GS MEC 010-2 Clause 6.2.4.8 Type: ExtVirtualLinkData + */ + type record ExtVirtualLinkData { + JSON.String id, + JSON.String vimConnectionId optional, + JSON.String resourceId, + AppExtCpData extCps, + ExtLinkPortData extLinkPorts optional + } + + /** + * @desc This type represents an externally provided link port to be used to connect an external connection point to an external VL + * @member id Identifier of this link port as provided by the entity that has created the link port + * @member resourceHandleReference to the virtualised resource realizing this link port + * @see ETSI GS MEC 010-2 Clause 6.2.4.9 Type: ExtLinkPortData + */ + type record ExtLinkPortData { + JSON.String id, + ResourceHandle resourceHandle + } + + /** + * @desc This type represents the information that allows addressing a virtualised resource that is used by an application instance + * @member vimConnectionId Identifier of the VIM connection to manage the resource + * @member resourceId Identifier of the resource in the scope of the VIM + * @member vimLevelResourceType Type of the resource in the scope of the VIM + * @see ETSI GS MEC 010-2 Clause 6.2.4.10 Type: ResourceHandle + */ + type record ResourceHandle { + JSON.String vimConnectionId optional, + JSON.String resourceId, + JSON.String vimLevelResourceType optional + } + + /** + * @desc This type contains a mapping between a software image definition in the AppD and the corresponding software image managed by the MEO in the VIM which is needed during compute resource instantiation + * @member vimConnectionId Identifier of the VIM connection to access the software image referenced in this structure + * @member appDSoftwareImageId Identifier which references the software image descriptor in the AppD + * @member vimSoftwareImageId Identifier of the software image in the resource management layer (i.e. VIM) + * @see ETSI GS MEC 010-2 Clause 6.2.4.11 Type: VimSoftwareImage + */ + type record VimSoftwareImage { + JSON.String vimConnectionId optional, + JSON.String appDSoftwareImageId, + JSON.String vimSoftwareImageId + } + + /** + * @desc This type represents configuration information for external CPs created from a CPD + * @member cpdId The identifier of the CPD in the AppD + * @member cpConfig List of instance data that need to be configured on the CP instances created from the respective CPD + * @see ETSI GS MEC 010-2 Clause 6.2.4.12 Type: AppExtCpData + */ + type record AppExtCpData_ { + JSON.String cpdId, + AppExtCpConfig cpConfig + } + + type record length(1..infinity) of AppExtCpData_ AppExtCpData; + + /** + * @desc This type represents an externally provided link port or network address information per instance of an external connection point + * @member cpInstanceId Identifier of the external CP instance to which this set of configuration parameters is requested to be applied + * @member linkPortId Identifier of a pre-configured link port to which the external CP will be associated + * @member cpProtocolData Parameters for configuring the network protocols on the link port that connects the CP to a VL + * @see ETSI GS MEC 010-2 Clause 6.2.4.13 Type: AppExtCpConfig + */ + type record AppExtCpConfig_ { + JSON.String cpInstanceId optional, + JSON.String linkPortId optional, + CpProtocolData cpProtocolData optional + } + + type record length(1..infinity) of AppExtCpConfig_ AppExtCpConfig; + + /** + * @desc This type represents network protocol data + * @member layerProtocol Identifier of layer(s) and protocol(s) + * @member ipOverEthernet Network address data for IP over Ethernet to assign to the extCP instance + * @see ETSI GS MEC 010-2 Clause 6.2.4.14 Type: CpProtocolData + */ + type record CpProtocolData_ { + LayerProtocol layerProtocol, + IpOverEthernetAddressData ipOverEthernet optional + } + + type record length(1..infinity) of CpProtocolData_ CpProtocolData; + + type enumerated LayerProtocol { + IP_OVER_ETHERNET + } + + /** + * @desc This type represents network address data for IP over Ethernet + * @member macAddress MAC address + * @member ipAddresses List of IP addresses to assign to the CP instance + * @see ETSI GS MEC 010-2 Clause 6.2.4.15 Type: IpOverEthernetAddressData + */ + type record IpOverEthernetAddressData { + JSON.String macAddress optional, + IpAddresses ipAddresses optional + } + + /** + * @desc IP addresses to assign to the CP instance + * @member type_ The type of the IP addresses + * @member fixedAddresses Fixed addresses to assign (from the subnet defined by "subnetId" if provided) + * @member numDynamicAddresses Number of dynamic addresses to assign (from the subnet defined by "subnetId" if provided) + * @member addressRange An IP address range to be used, e.g. in case of egress connections + * @see ETSI GS MEC 010-2 Clause 6.2.4.15 Type: IpOverEthernetAddressData + */ + type record IpAddress { + IpAddressType type_, + FixedAddresses fixedAddresses optional, + integer numDynamicAddresses optional, + AddressRange addressRange optional + } + + type record length(1..infinity) of IpAddress IpAddresses; + + type enumerated IpAddressType { + IPV4, + IPV6 + } + + type record length(1..infinity) of JSON.String FixedAddresses; + + type record AddressRange { + JSON.String minAddress, + JSON.String maxAddress, + JSON.String subnetId optional + } + + } // End of group granting_information_model + + group common_information_model { + + /** + * @desc This data type represents a type of link + * @member href URI referring to a resource + * @see ETSI GS MEC 010-2 Clause 6.2.5.2 Type: LinkType + */ + type record LinkType { + JSON.AnyURI href + } + /** + * @desc This data type represents a list of key-value pairs + * @member + * @member + * @see ETSI GS MEC 010-2 Clause 6.2.5.3 Type: KeyValuePairs + */ + type record KeyValuePairs { + JSON.String key_name, + anytype key_value // FIXME To be refined + } + + /** + * @desc This data type represents the time stamp as Unix-time since January 1, 1970, 00:00:00 UTC + * @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + * @member nanoSeconds The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + * @see ETSI GS MEC 010-2 Clause 6.2.5.4 Type: TimeStamp + */ + type record TimeStamp { + Seconds seconds, + NanoSeconds nanoSeconds + } + + /** + * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + */ + type UInt32 Seconds; + + /** + * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + */ + type UInt32 NanoSeconds; + + /** + * @desc This type represents the checksum of an application package + * @member algorithm Name of the algorithm used to generate the checksum, as defined in ETSI GS NFV-SOL 004 [18] + * @member hash The hexadecimal value of the checksum + * @see ETSI GS MEC 010-2 Clause 6.2.5.6 Type: Checksum + */ + type record Checksum { + JSON.String algorithm, + JSON.String hash + } + + } // End of group common_information_model + +} with { + extension "anytype integer, float, boolean, universal charstring"; + encode "JSON" +} diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn index e37a38a00dde07185b57d970fd854b61dcd655e1..c0345566f818c835947070cb59504afb570d9904 100644 --- a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn @@ -76,7 +76,7 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { JSON.String this_ } with { variant (type_) "name as 'type'"; - variant (type_) "name as 'this_'"; + variant (this_) "name as 'this'"; } /** diff --git a/ttcn/LibMec/AppEna/json/AppEnablementAPI.json b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/json/EdgePlatformApplicationEnablementAPI.json similarity index 100% rename from ttcn/LibMec/AppEna/json/AppEnablementAPI.json rename to ttcn/LibMec/EdgePlatformApplicationEnablementAPI/json/EdgePlatformApplicationEnablementAPI.json diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/module.mk b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..400e23381632b36bcd111dc5db7cd57656e7888d --- /dev/null +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/module.mk @@ -0,0 +1,7 @@ +sources := \ + ttcn/EdgePlatformApplicationEnablementAPI_Pics.ttcn \ + ttcn/EdgePlatformApplicationEnablementAPI_Pixits.ttcn \ + ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn \ + ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn \ + ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn + diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..e0dedcfaaea936cb0ffec000321a0eaa3cb02b94 --- /dev/null +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn @@ -0,0 +1,177 @@ +module EdgePlatformApplicationEnablementAPI_Functions { + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + 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/EdgePlatformApplicationEnablementAPI + import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; + import from EdgePlatformApplicationEnablementAPI_Templates all; + import from EdgePlatformApplicationEnablementAPI_Pixits all; + + // LibMec + import from LibMec_Templates all; + import from LibMec_Functions all; + import from LibMec_Pics all; + import from LibMec_Pixits all; + + function f_create_service_info( + out ServiceInfo p_service_info, + out Headers p_headers + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + var universal charstring v_service_name := oct2unichar(char2oct("service_" & int2str(f_get_current_timestamp_utc()))); + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services", + v_headers, + m_http_message_body_json( + m_body_json_service_info( + m_service_info( + v_service_name, + -, -, -, + m_service_info_link("m_service_info_link"), + -, -, //-, + m_transport_info( + "transportId1", + "ETSI MEC-011 Conformance test", + REST_HTTP, + "HTTP", + "2.0", + m_end_point_uris({"/meMp1/service/MyEntryPoint"}), + m_security_info + ))))))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_service_info( + mw_service_info( + v_service_name //serName + )))))) -> value v_response { + tc_ac.stop; + + p_service_info := v_response.response.body.json_body.serviceInfo; + p_headers := v_response.response.header; + log("f_create_service_info: INFO: IUT successfully responds to the subscription: ", p_service_info); + } + [] tc_ac.timeout { + log("f_create_service_info: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_create_service_info + + function f_delete_service_info( + in ServiceInfo p_service_info + ) runs on HttpComponent { + var Headers v_headers; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & oct2char(unichar2oct(p_service_info.serName)), + v_headers + ))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_service_info: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_delete_service_info + + function f_create_ser_availability_notification_subscription( + out SerAvailabilityNotificationSubscription p_ser_availability_notification_subscription + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", + v_headers, + m_http_message_body_json( + m_body_json_srv_avail_notif_subscription( + m_srv_avail_notif_subscription( + PX_SRV_AVAIL_NOTIF_CALLBACK_URI + )))))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_srv_avail_notif_subscription( + mw_srv_avail_notif_subscription( + PX_SRV_AVAIL_NOTIF_CALLBACK_URI + )))))) -> value v_response { + tc_ac.stop; + + p_ser_availability_notification_subscription := v_response.response.body.json_body.serAvailabilityNotificationSubscription + log("f_create_ser_availability_notification_subscription: INFO: IUT successfully responds to the subscription: ", p_ser_availability_notification_subscription); + } + [] tc_ac.timeout { + log("f_create_ser_availability_notification_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_create_ser_availability_notification_subscription + + function f_delete_ser_availability_notification_subscription( + in SerAvailabilityNotificationSubscription p_ser_availability_notification_subscription + ) runs on HttpComponent { + var Headers v_headers; + var charstring v_uri := regexp( + oct2char(unichar2oct(p_ser_availability_notification_subscription.links.self_.href)), + "?+(" & PX_MEC_SVC_MGMT_APPS_URI & "/?*)", + 0 + ); + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & v_uri, + v_headers + ))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_ser_availability_notification_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_delete_ser_availability_notification_subscription + +} // End of module EdgePlatformApplicationEnablementAPI_Functions diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pics.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pics.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..8cc97a6fe943c3032b63668ca17ba0f7e4b7779d --- /dev/null +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pics.ttcn @@ -0,0 +1,7 @@ +module EdgePlatformApplicationEnablementAPI_Pics { + + modulepar boolean PICS_APP_ENABLEMENT_API_SUPPORTED := true; + + modulepar boolean PICS_ME_APP_SUPPORT_TIMING_CAPS_URI := true; + +} // End of module EdgePlatformApplicationEnablementAPI_Pics diff --git a/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Pixits.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pixits.ttcn similarity index 79% rename from ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Pixits.ttcn rename to ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pixits.ttcn index e3253e2fe5df270ef8dff20bc65536b71e81969b..e36543de5dc9a81c6019fcc555378b7702fd9518 100644 --- a/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Pixits.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pixits.ttcn @@ -1,7 +1,7 @@ -module AppEnablementAPI_Pixits { +module EdgePlatformApplicationEnablementAPI_Pixits { - // LibMec/AppEnablementAPI - import from AppEnablementAPI_TypesAndValues all; + // LibMec/EdgePlatformApplicationEnablementAPI + import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; modulepar AppInstanceId PX_APP_INSTANCE_ID := "appInst01"; @@ -21,7 +21,7 @@ module AppEnablementAPI_Pixits { modulepar ServiceState PX_SERVICE_INFO_STATE := ACTIVE; - modulepar SerializerTypes PX_SERIALIZER := JSON; + modulepar SerializerType PX_SERIALIZER := JSON; modulepar ServiceInfo_Link PX_LINKS_SERVICE_INFO := { self_ := { href := "http://example.com/exampleAPI/location/v1/serviceinfo" }, liveness := omit }; @@ -31,9 +31,9 @@ module AppEnablementAPI_Pixits { modulepar Href PX_HREF := "http://www.etsi.org"; - modulepar Href PX_SUBSCRIPTION_ID := "subscription123"; + modulepar Href PX_SUBSCRIPTION_ID := "3"; - modulepar Href PX_NON_EXISTENT_SUBSCRIPTION_ID := "subscription666"; + modulepar Href PX_NON_EXISTENT_SUBSCRIPTION_ID := "666"; modulepar DnsRule_Id PX_DNS_RULE_ID := "route2home"; @@ -56,5 +56,7 @@ module AppEnablementAPI_Pixits { modulepar TrafficRule_Id PX_TRAFFIC_RULE_ID := "trafficRuleId01"; modulepar TrafficRule_Id PX_NON_EXISTENT_TRAFFIC_RULE_ID := "trafficRuleId99"; + + modulepar charstring PX_LINK_LIV := "link/to/individual/mecServiceLiveness"; -} // End of module AppEnablementAPI_Pixits +} // End of module EdgePlatformApplicationEnablementAPI_Pixits diff --git a/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Templates.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn similarity index 79% rename from ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Templates.ttcn rename to ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn index 608b8e9c55e741d2c43b4ad4e6bea21f1717b213..58ef2f6b495d37599da68b9e49a20a794c9024ba 100644 --- a/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Templates.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn @@ -2,7 +2,7 @@ * @desc The ETSI MEC ISG MEC011 Application Enablement API described using OpenAPI * @see http://www.etsi.org/deliver/etsi_gs/MEC/001_099/011/01.01.01_60/gs_mec011v010101p.pdf */ -module AppEnablementAPI_Templates { +module EdgePlatformApplicationEnablementAPI_Templates { // JSON import from JSON all; @@ -11,8 +11,24 @@ module AppEnablementAPI_Templates { import from LibCommon_BasicTypesAndValues all; // LibMec/AppEna - import from AppEnablementAPI_TypesAndValues all; - import from AppEnablementAPI_Pixits all; + import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; + import from EdgePlatformApplicationEnablementAPI_Pixits all; + + template (value) TimeStamp m_time_stamp( + in Seconds p_seconds, + in NanoSeconds p_nanoSeconds := 0 + ) := { + seconds := p_seconds, + nanoSeconds := p_nanoSeconds + } // End of template m_time_stamp + + template (present) TimeStamp mw_time_stamp( + template (present) Seconds p_seconds := ?, + template (present) NanoSeconds p_nanoSeconds := ? + ) := { + seconds := p_seconds, + nanoSeconds := p_nanoSeconds + } // End of template mw_time_stamp template (value) SecurityInfo m_security_info( in GrantTypesList p_grantTypes := { OAUTH2_CLIENT_CREDENTIALS }, @@ -21,7 +37,8 @@ module AppEnablementAPI_Templates { oAuth2Info := { grantTypes := p_grantTypes, tokenEndpoint := p_tokenEndpoint - } + }, + extentions := omit } // End of template m_security_info template (present) SecurityInfo mw_security_info( @@ -31,32 +48,51 @@ module AppEnablementAPI_Templates { oAuth2Info := { grantTypes := p_grantTypes, tokenEndpoint := p_tokenEndpoint - } + }, + extentions := * } // End of template mw_security_info template (value) TransportInfo_Endpoint m_end_point_uris( in template (value) EndPointInfo_UriList p_uris ) := { - uris := p_uris + uris := p_uris, + addresses := omit, + alternative := omit } // End of template m_end_point_uris template (present) TransportInfo_Endpoint mw_end_point_uris( template (present) EndPointInfo_UriList p_uris := ? ) := { - uris := p_uris + uris := p_uris, + addresses := *, + alternative := * } // End of template mw_end_point_uris + template (omit) ServiceInfo_Link m_service_info_link( + in template (value) Href p_href + ) := { + self_ := { href := p_href}, + liveness := omit + } // End of template m_service_info_link + + template (present) ServiceInfo_Link mw_service_info_link( + template (present) Href p_href := ? + ) := { + self_ := { href := p_href}, + liveness := * + } // End of template mw_service_info_link + template (omit) ServiceInfo m_service_info( in SerName p_serName, in ServiceInfo_Version p_version := PX_SERVICE_INFO_VERSION, in ServiceState p_state := PX_SERVICE_INFO_STATE, - in SerializerTypes p_serializer := PX_SERIALIZER, - //in ServiceInfo_Link p_links := PX_LINKS_SERVICE_INFO, + in SerializerType p_serializer := PX_SERIALIZER, + in template (value) ServiceInfo_Link p_links, in template (omit) SerInstanceId p_serInstanceId := omit, in template (omit) TransportId p_transportId := omit, in template (omit) TransportInfo p_transportInfo := omit, in template (omit) CategoryRef p_serCategory := omit - ) := { + ) := { serInstanceId := p_serInstanceId, serName := p_serName, serCategory := p_serCategory, @@ -67,22 +103,22 @@ module AppEnablementAPI_Templates { serializer := p_serializer, scopeOfLocality := omit, consumedLocalOnly := omit, - isLocal := omit/*, + isLocal := omit, livenessInterval := omit, - links := p_links*/ + links := p_links } // End of template m_service_info - template ServiceInfo mw_service_info( - template (present) SerName p_serName := ?, - template (present) ServiceInfo_Version p_version := ?, - template (present) ServiceState p_state := ?, - template (present) SerializerTypes p_serializer := ?, - //template (present) ServiceInfo_Link p_links := ?, - template SerInstanceId p_serInstanceId := *, - template TransportId p_transportId := *, - template TransportInfo p_transportInfo := *, - template CategoryRef p_serCategory := * - ) := { + template (present) ServiceInfo mw_service_info( + template (present) SerName p_serName := ?, + template (present) ServiceInfo_Version p_version := PX_SERVICE_INFO_VERSION, + template (present) ServiceState p_state := PX_SERVICE_INFO_STATE, + template (present) SerializerType p_serializer := PX_SERIALIZER, + template (present) ServiceInfo_Link p_links := ?, + template SerInstanceId p_serInstanceId := *, + template TransportId p_transportId := *, + template TransportInfo p_transportInfo := *, + template CategoryRef p_serCategory := * + ) := { serInstanceId := p_serInstanceId, serName := p_serName, serCategory := p_serCategory, @@ -93,9 +129,9 @@ module AppEnablementAPI_Templates { serializer := p_serializer, scopeOfLocality := *, consumedLocalOnly := *, - isLocal := */*, + isLocal := *, livenessInterval := *, - links := p_links*/ + links := p_links } // End of template mw_service_info template (value) SubscriptionLinkList m_subscription_link_list( @@ -146,6 +182,26 @@ module AppEnablementAPI_Templates { appInstanceId := p_appInstanceId } // End of template mw_app_termination_notif_subscription + template (value) ServiceLivenessInfo m_service_liveness_info( + in ServiceState p_state, + in template (value) TimeStamp p_timeStamp, + in integer p_interval + ) := { + state := p_state, + timeStamp := p_timeStamp, + interval := p_interval + } // End of template m_service_liveness_info + + template (present) ServiceLivenessInfo mw_service_liveness_info( + template (present) ServiceState p_state := ?, + template (present) TimeStamp p_timeStamp := ?, + template (present) integer p_interval := ? + ) := { + state := p_state, + timeStamp := p_timeStamp, + interval := p_interval + } // End of template mw_service_liveness_info + template (value) TransportInfo m_transport_info( in TransportInfo_Id p_id, in TransportInfo_Name p_name, @@ -293,7 +349,7 @@ module AppEnablementAPI_Templates { in TrafficRule_FilterType p_filterType := FLOW, in TrafficRule_Priority p_priority := 1, in TrafficFilterList p_trafficFilter := {}, - in TrafficRule_Action p_action_ := FORWARD_AS_IS, + in TrafficRule_Action p_action_ := FORWARD_ENCAPSULATED, in TrafficRule_State p_state := ACTIVE ) := { trafficRuleId := p_trafficRuleId, @@ -322,4 +378,4 @@ module AppEnablementAPI_Templates { state := p_state } // End of template mw_traffic_rule -} // End of module AppEnablementAPI_Templates +} // End of module EdgePlatformApplicationEnablementAPI_Templates diff --git a/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_TypesAndValues.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn similarity index 85% rename from ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_TypesAndValues.ttcn rename to ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn index fb181e170c528229f18bfd1b0d7ac1bf8aec05ce..8ba759b098908baf703a06a696c34ba6941d357c 100644 --- a/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn @@ -1,8 +1,8 @@ /** * @desc The ETSI MEC ISG MEC011 Application Enablement API described using OpenAPI - * @see http://www.etsi.org/deliver/etsi_gs/MEC/001_099/011/01.01.01_60/gs_mec011v010101p.pdf + * @see http://www.etsi.org/deliver/etsi_gs/MEC/001_099/011/01.01.01_60/gs_mec011v020201p.pdf */ -module AppEnablementAPI_TypesAndValues { +module EdgePlatformApplicationEnablementAPI_TypesAndValues { // JSON import from JSON all; @@ -20,17 +20,62 @@ module AppEnablementAPI_TypesAndValues { */ type JSON.String NotificationType; + /** + * @desc Operation that is being performed on the MEC + */ + type enumerated OperationAction { + STOPPING (0), + TERMINATING (1) + } + /** * @desc This type represents the information that the mobile edge platform notifies the subscribed application instance about the corresponding application instance termination/stop. */ type record AppTerminationNotification { NotificationType notificationType, + OperationAction operationAction, MaxGracefulTimeout maxGracefulTimeout, Subscription links } with { variant (links) "name as '_links'"; } + /** + * @desc This type represents the information that the MEC application instance provides to the MEC platform when informing it +that the application has completed its application level related terminate/stop actions, e.g. retention of application state +in the case of stop. + */ + type record AppTerminationConfirmation { + OperationAction operationAction + } + + /** + * @desc This type represents the information that the MEC application instance indicates to the MEC platform that it is up and +running + */ + type record AppReadyConfirmation { + JSON.String indication + } + + /** + * @desc Represents possible states of a MEC service instance + */ + type enumerated ServiceState { + ACTIVE (0), + INACTIVE (1), + SUSPENDED (2) + } + type record length(1..infinity) of ServiceState ServiceStateList; + + /** + * @desc This type represents the liveness information of a MEC service instance + */ + type record ServiceLivenessInfo { + ServiceState state, + TimeStamp timeStamp, + integer interval + } + /** * @desc It is used as the filtering criterion for the subscribed events. */ @@ -88,7 +133,7 @@ module AppEnablementAPI_TypesAndValues { Name name, CategoryRef_Version version } - type record length(0..infinity) of CategoryRef CategoryRefList; + type record length(1..infinity) of CategoryRef CategoryRefList; /** * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC. @@ -150,6 +195,7 @@ module AppEnablementAPI_TypesAndValues { DestinationInterface_MacAddress dstMacAddress optional, DestinationInterface_IpAddress dstIpAddress optional } + type record of DestinationInterface DestinationInterfaceList; /** * @desc FQDN resolved by the DNS rule. @@ -224,7 +270,7 @@ module AppEnablementAPI_TypesAndValues { /** * @desc Entry point information of the service as one or more pairs of IP address and port. */ - type record length(0..infinity) of Address EndPointInfo_AddressList; + type record length(1..infinity) of Address EndPointInfo_AddressList; /** * @desc Entry point information of the service in a format defined by an implementation, or in an external specification. @@ -241,7 +287,7 @@ module AppEnablementAPI_TypesAndValues { /** * @desc Entry point information of the service as string, formatted according to URI syntax. */ - type record length(0..infinity) of EndPointInfo_Uri EndPointInfo_UriList; + type record length(1..infinity) of EndPointInfo_Uri EndPointInfo_UriList; /** * @desc This type represents a type of link and may be referenced from data structures. @@ -280,7 +326,7 @@ module AppEnablementAPI_TypesAndValues { Href href, Rel rel } - type record length(0..infinity) of Mp1SubscriptionLinkList_Subscription Mp1SubscriptionLinkList_SubscriptionList; + type record length(1..infinity) of Mp1SubscriptionLinkList_Subscription Mp1SubscriptionLinkList_SubscriptionList; /** * @desc This type represents a list of links related to currently existing subscriptions for a mobile edge application instance. This information is returned when sending a request to receive current subscriptions. @@ -316,7 +362,7 @@ module AppEnablementAPI_TypesAndValues { JSON.AnyURI href, SubscriptionType subscriptionType } - type record length(0..infinity) of Subscription_ Subscriptions; + type record length(1..infinity) of Subscription_ Subscriptions; /** * @desc List of supported OAuth 2.0 grant types. @@ -346,7 +392,8 @@ module AppEnablementAPI_TypesAndValues { * @desc This type represents security information related to a transport. */ type record SecurityInfo { - OAuth2Info oAuth2Info + OAuth2Info oAuth2Info optional, + UInt8 extentions optional } /** @@ -387,7 +434,7 @@ module AppEnablementAPI_TypesAndValues { SerInstanceIdList serInstanceIds optional, SerNameList serNames optional, CategoryRefList serCategories optional, - ServiceStateList states, + ServiceStateList states optional, JSON.Bool isLocal optional } @@ -403,34 +450,26 @@ module AppEnablementAPI_TypesAndValues { /** * @desc The enumeration SerializerTypes represents types of serializers. */ - type enumerated SerializerTypes { + type enumerated SerializerType { JSON, XML, PROTOBUF3, RAW // Used for invalid behavior } + + type record length(1..infinity) of SerializerType SerializerTypes; /** * @desc Identifier of the service instance assigned by the MEPM / mobile edge platform. */ type JSON.String SerInstanceId; - type record length(0..infinity) of SerInstanceId SerInstanceIdList; + type record length(1..infinity) of SerInstanceId SerInstanceIdList; /** * @desc The name of the service. This is how the service producing mobile edge application identifies the service instance it produces. */ type JSON.String SerName; - type record length(0..infinity) of SerName SerNameList; - - /** - * @desc Contains the state. - */ - type enumerated ServiceState { - ACTIVE, - INACTIVE, - UNKNOWN // Used for invalid behavior tests - } - type record length(0..infinity) of ServiceState ServiceStateList; + type record length(1..infinity) of SerName SerNameList; /** * @desc Link to the "Individual mecServiceLiveness" resource where the MEC platform expects the service instance to send the liveness information. @@ -463,6 +502,15 @@ module AppEnablementAPI_TypesAndValues { * @desc Service version. */ type JSON.String ServiceInfo_Version; + /** + * @desc Type of the change + */ + type enumerated ChangeType { + ADDED (0), + REMOVED (1), + STATE_CHANGED (2), + ATTRIBUTES_CHANGED (3) + } /** * @desc This type represents the general information of a mobile edge service. @@ -475,14 +523,14 @@ module AppEnablementAPI_TypesAndValues { ServiceState state, TransportId transportId optional, TransportInfo transportInfo optional, - SerializerTypes serializer, + SerializerType serializer, LocalityType scopeOfLocality optional, JSON.Bool consumedLocalOnly optional, - JSON.Bool isLocal optional/*, + JSON.Bool isLocal optional, UInt32 livenessInterval optional, ServiceInfo_Link links } with { - variant (links) "name as '_links'";*/ + variant (links) "name as '_links'"; } type record of ServiceInfo ServiceInfoList; @@ -608,7 +656,7 @@ module AppEnablementAPI_TypesAndValues { * @desc Identify the traffic ip address. */ type JSON.String TrafficFilter_Port; - type record length(0..infinity) of TrafficFilter_Port TrafficFilter_PortList; + type record length(1..infinity) of TrafficFilter_Port TrafficFilter_PortList; /** * @desc Protocol of the traffic filter. @@ -627,10 +675,10 @@ module AppEnablementAPI_TypesAndValues { type UInt32 TrafficFilter_TC; /** - * @desc Used for token based traffic rule. + * @desc Used for tag based traffic rule. */ - type JSON.String TrafficFilter_Token; - type record of TrafficFilter_Token TrafficFilter_TokenList; + type JSON.String TrafficFilter_Tag; + type record of TrafficFilter_Tag TrafficFilter_TagList; /** * @desc Used for GTP tunnel based traffic rule. @@ -648,16 +696,16 @@ module AppEnablementAPI_TypesAndValues { * @desc This type represents the traffic filter. */ type record TrafficFilter { - TrafficFilter_AddressList srcAddress, - TrafficFilter_AddressList dstAddress, - TrafficFilter_PortList srcPort, - TrafficFilter_PortList dstPort, - TrafficFilter_ProtocolList protocol, - TrafficFilter_TokenList token, - TrafficFilter_TunnelAddressList srcTunnelAddress, - TrafficFilter_TunnelAddressList tgtTunnelAddress, - TrafficFilter_TunnelPortList srcTunnelPort, - TrafficFilter_TunnelPortList dstTunnelPort, + TrafficFilter_AddressList srcAddress optional, + TrafficFilter_AddressList dstAddress optional, + TrafficFilter_PortList srcPort optional, + TrafficFilter_PortList dstPort optional, + TrafficFilter_ProtocolList protocol optional, + TrafficFilter_TagList tag optional, + TrafficFilter_TunnelAddressList srcTunnelAddress optional, + TrafficFilter_TunnelAddressList tgtTunnelAddress optional, + TrafficFilter_TunnelPortList srcTunnelPort optional, + TrafficFilter_TunnelPortList dstTunnelPort optional, TrafficFilter_QCI qCI optional, TrafficFilter_DSCP dSCP optional, TrafficFilter_TC tC optional @@ -670,10 +718,10 @@ module AppEnablementAPI_TypesAndValues { type enumerated TrafficRule_Action { DROP, FORWARD_DECAPSULATED, - FORWARD_AS_IS, + FORWARD_ENCAPSULATED, PASSTHROUGH, DUPLICATE_DECAPSULATED, - DUPLICATE_AS_IS + DUPLICATE_ENCAPSULATED } /** @@ -711,7 +759,7 @@ module AppEnablementAPI_TypesAndValues { TrafficRule_Priority priority, TrafficFilterList trafficFilter, TrafficRule_Action action_, - DestinationInterface dstInterface optional, + DestinationInterfaceList dstInterface optional, TrafficRule_State state } with { variant (action_) "name as 'action'"; @@ -751,10 +799,10 @@ module AppEnablementAPI_TypesAndValues { /** * @desc This type represents information about a transport endpoint. */ - type union TransportInfo_Endpoint { - EndPointInfo_UriList uris, - EndPointInfo_AddressList addresses, - EndPointInfo_Alternative alternative + type record TransportInfo_Endpoint { + EndPointInfo_UriList uris optional, + EndPointInfo_AddressList addresses optional, + EndPointInfo_Alternative alternative optional } /** @@ -817,4 +865,4 @@ module AppEnablementAPI_TypesAndValues { } with { encode "JSON" -} // End of module AppEnablementAPI_TypesAndValues +} // End of module EdgePlatformApplicationEnablementAPI_TypesAndValues diff --git a/ttcn/LibMec/Grant/module.mk b/ttcn/LibMec/Grant/module.mk deleted file mode 100644 index a97e1899ea472c70fd709216a1c6fe59e8cc6fed..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/Grant/module.mk +++ /dev/null @@ -1,6 +0,0 @@ -sources := \ - ttcn/Grant_EncdecDeclarations.ttcn \ - ttcn/Grant_Pics.ttcn \ - ttcn/Grant_Pixits.ttcn \ - ttcn/Grant_Templates.ttcn \ - ttcn/Grant_TypesAndValues.ttcn diff --git a/ttcn/LibMec/Grant/ttcn/Grant_EncdecDeclarations.ttcn b/ttcn/LibMec/Grant/ttcn/Grant_EncdecDeclarations.ttcn deleted file mode 100644 index 0cf0ca86866b57ee40413e1aef1dcbbed60ce9bf..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/Grant/ttcn/Grant_EncdecDeclarations.ttcn +++ /dev/null @@ -1,35 +0,0 @@ -module Grant_EncdecDeclarations { - - import from Grant_TypesAndValues all; - - - -// external function enc_AppMobilityServiceInfo(in AppMobilityServiceInfo p_app_mobility_service_info) return octetstring -// with { extension "prototype (convert) encode(JSON)"; extension "printing(pretty)" }; -// external function dec_AppMobilityServiceInfo(in octetstring p_pdu) return AppMobilityServiceInfo -// with { extension "prototype (convert) decode(JSON)" }; -// -// external function enc_RegistrationRequest(in RegistrationRequest p_registration_request) return octetstring -// with { extension "prototype (convert) encode(JSON)"; extension "printing(pretty)" }; -// external function dec_RegistrationRequest(in octetstring p_pdu) return RegistrationRequest -// with { extension "prototype (convert) decode(JSON)" }; -// -// -// external function enc_RegistrationInfo(in RegistrationInfo p_registration_info) return octetstring -// with { extension "prototype (convert) encode(JSON)"; extension "printing(pretty)" }; -// external function dec_Registrationinfo(in octetstring p_pdu) return RegistrationInfo -// with { extension "prototype (convert) decode(JSON)" }; -// -// -// external function enc_SubscriptionLink(in SubscriptionLink p_subscription_link) return octetstring -// with { extension "prototype (convert) encode(JSON)"; extension "printing(pretty)" }; -// external function dec_SubscriptionLinks(in octetstring p_pdu) return SubscriptionLinks -// with { extension "prototype (convert) decode(JSON)" }; -// -// -// external function enc_NotificationSubscription(in NotificationSubscription p_notification_subscription) return octetstring -// with { extension "prototype (convert) encode(JSON)"; extension "printing(pretty)" }; -// external function dec_NotificationSubscription(in octetstring p_pdu) return NotificationSubscription -// with { extension "prototype (convert) decode(JSON)" }; - -} diff --git a/ttcn/LibMec/Grant/ttcn/Grant_Pics.ttcn b/ttcn/LibMec/Grant/ttcn/Grant_Pics.ttcn deleted file mode 100644 index 441a1803b31790adff8feb722f49e395065141e9..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/Grant/ttcn/Grant_Pics.ttcn +++ /dev/null @@ -1,8 +0,0 @@ -module Grant_Pics { - - /** - * @desc Does the IUT support GRANT? - */ - modulepar boolean PICS_GRANT_API_SUPPORTED := true; - -} \ No newline at end of file diff --git a/ttcn/LibMec/Grant/ttcn/Grant_Pixits.ttcn b/ttcn/LibMec/Grant/ttcn/Grant_Pixits.ttcn deleted file mode 100644 index 01533399791c9b43c3c064942f3fb76165bd4023..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/Grant/ttcn/Grant_Pixits.ttcn +++ /dev/null @@ -1,20 +0,0 @@ -module Grant_Pixits { - - // JSON - import from JSON all; - - // LibMec/LocationAPI - import from Grant_TypesAndValues all; - - modulepar JSON.String PX_APP_INSTANCE_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f" - - modulepar Operation_type PX_APP_OPERATION := INSTANTIATE - - modulepar Operation_type_error PX_APP_OPERATION_ERROR := INSTANTIATE - - modulepar JSON.String PX_GRANTING_ID := "e0deee2b-6e50-4f33-ab09-8bf0585025d3" - - modulepar JSON.String PX_NON_EXISTANT_GRANTING_ID := "PX_NON_EXISTANT_GRANTING_ID" - - -} diff --git a/ttcn/LibMec/Grant/ttcn/Grant_Templates.ttcn b/ttcn/LibMec/Grant/ttcn/Grant_Templates.ttcn deleted file mode 100644 index ef33e04246daa3c5a9a62aa42f924747ae3ebc9f..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/Grant/ttcn/Grant_Templates.ttcn +++ /dev/null @@ -1,209 +0,0 @@ -module Grant_Templates { - - // JSON - import from JSON all; - - // LibCommon - import from LibCommon_BasicTypesAndValues all; - - import from Grant_TypesAndValues all; - import from Grant_Pixits all; - - - template (value) GrantRequest m_grant_request ( - in String p_app_instance_id := PX_APP_INSTANCE_ID, - in Operation_type p_app_operation := PX_APP_OPERATION - ) := { - appInstanceId := p_app_instance_id, - operation := p_app_operation - } - - - template (present) Grant mw_grant_response ( - in String p_app_instance_id := PX_APP_INSTANCE_ID - ) := { - appInstanceId := p_app_instance_id - } - - template (value) GrantRequestWithError m_grant_request_with_error ( - in String p_app_instance_id := PX_APP_INSTANCE_ID, - in Operation_type_error p_app_operation := PX_APP_OPERATION_ERROR - ) := { - appInstanceId := p_app_instance_id, - operation := p_app_operation - } - -// template (omit) AppMobilityServiceInfo m_app_mobility_service_info( -// in String p_app_mobility_service_id := PX_APP_MOBILITY_SERVICE_ID, -// in template (omit) RegistrationInfos p_registration_info := omit -// ) := { -// registeredAppMobilityService := p_registration_info, -// appMobilityServiceId := p_app_mobility_service_id -// } // End of template m_app_mobility_service_info -// -// -// template (present) AppMobilityServiceInfo mw_app_mobility_service_info( -// template (present) RegistrationInfos p_registration_info := ?, -// template (present) String p_app_mobility_service_id := ? -// ) := { -// registeredAppMobilityService := p_registration_info, -// appMobilityServiceId := p_app_mobility_service_id -// } -// -// template (omit) RegistrationInfo m_app_mobility_registration_info( -// in template (value) ServiceConsumerId p_serviceConsumerId, -// in template (omit) DeviceInformations p_deviceInformation := omit, -// in template (omit) UInt32 p_expiryTime := omit -// ) := { -// serviceConsumerId := p_serviceConsumerId, -// deviceInformation := p_deviceInformation, -// expiryTime := p_expiryTime -// } -// -// template RegistrationInfo mw_app_mobility_registration_info( -// template (present) ServiceConsumerId p_serviceConsumerId := ?, -// template DeviceInformations p_deviceInformation := *, -// template UInt32 p_expiryTime := * -// ) := { -// serviceConsumerId := p_serviceConsumerId, -// deviceInformation := p_deviceInformation, -// expiryTime := p_expiryTime -// } -// -// template (omit) ServiceConsumerId m_service_consumer_id( -// in template (omit) String p_appInstanceId := omit, -// in template (omit) String p_mepId := omit -// ) := { -// appInstanceId := p_appInstanceId, -// mepId := p_mepId -// } -// -// template ServiceConsumerId mw_service_consumer_id( -// template String p_appInstanceId := *, -// template String p_mepId := * -// ) := { -// appInstanceId := p_appInstanceId, -// mepId := p_mepId -// } -// -// template (omit) RegistrationRequest m_registration_request ( -// in template (omit) ServiceConsumerId p_service_consumer_id := omit, -// in template (omit) DeviceInformations p_device_info := omit, -// in UInt32 p_expire_time -// ) := { -// serviceConsumerId := p_service_consumer_id, -// deviceInformation := p_device_info, -// expiryTime := p_expire_time -// } -// -// template RegistrationRequest mw_registration_request( -// template ServiceConsumerId p_service_consumer_id := ?, -// template DeviceInformations p_device_info := omit, -// template UInt32 p_expire_time := omit -// ) := { -// serviceConsumerId := p_service_consumer_id, -// deviceInformation := p_device_info, -// expiryTime := p_expire_time -// } -// -// -// template (value) RegistrationInfo m_registration_info ( -// in template (omit) ServiceConsumerId p_service_consumer_id := omit, -// in template (omit) DeviceInformations p_device_info := omit, -// in UInt32 p_expire_time -// ) := { -// serviceConsumerId := p_service_consumer_id, -// deviceInformation := p_device_info, -// expiryTime := p_expire_time -// } -// -// template (present) RegistrationInfo mw_registration_info( -// template (present) ServiceConsumerId p_service_consumer_id := ?, -// template (present) DeviceInformations p_device_info := ?, -// template (present) UInt32 p_expire_time -// ) := { -// serviceConsumerId := p_service_consumer_id, -// deviceInformation := p_device_info, -// expiryTime := p_expire_time -// } -// -// -// template (value) ServiceConsumer m_service_consumer ( -// in String p_app_instance, -// in String p_mep_id -// ) := { -// appInstance := p_app_instance, -// mepId := p_mep_id -// } -// -// template (value) DeviceInformation m_device_info ( -// in String p_associate_id -// ) := { -// associateId := p_associate_id -// } -// -// template (omit) DeviceInformation mw_device_info ( -// in String p_associate_id -// ) := { -// associateId := p_associate_id -// } -// type record AmsSubscriptionLinkList { -// JSON.AnyURI links, -// Subscription subscription -// } -// -// -// -// template (value) MobilityProcedureSubscription m_ams_subscription ( -// in SubscriptionType p_subscriptionType, -// in JSON.AnyURI p_callbackReference, -// in JSON.AnyURI p_links, -// in FilterCriteria p_filterCriteria, -// in TimeStamp p_expiryDeadline -// -// ) := { -// subscriptionType := p_subscriptionType , -// callbackReference := p_callbackReference, -// links := p_links, -// filterCriteria := p_filterCriteria, -// expiryDeadline := p_expiryDeadline -// } -// -// -// template (value) MobilityProcedureSubscriptionError m_ams_subscription_error ( -// in SubscriptionType p_subscriptionType, -// in JSON.AnyURI p_callbackReference, -// in JSON.AnyURI p_links, -// in FilterCriteria p_filterCriteria, -// in TimeStamp p_expiryDeadline -// -// ) := { -// subscriptionType := p_subscriptionType, -// callbackReference := p_callbackReference, -// links := p_links, -// filterCriteria := p_filterCriteria, -// expiryDeadline := p_expiryDeadline -// } -// -// template (present) MobilityProcedureSubscription mw_ams_subscription ( -// in SubscriptionType p_subscriptionType, -// in JSON.AnyURI p_callbackReference, -// in JSON.AnyURI p_links, -// in FilterCriteria p_filterCriteria, -// in TimeStamp p_expiryDeadline -// ) := { -// subscriptionType := p_subscriptionType , -// callbackReference := p_callbackReference, -// links := p_links, -// filterCriteria := p_filterCriteria, -// expiryDeadline := p_expiryDeadline -// } -// -// -// - - - - - -} // End of module LocationAPI_Templates diff --git a/ttcn/LibMec/Grant/ttcn/Grant_TypesAndValues.ttcn b/ttcn/LibMec/Grant/ttcn/Grant_TypesAndValues.ttcn deleted file mode 100644 index 6a97e4cdda4a3561898b4deb7e0a78069b7289de..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/Grant/ttcn/Grant_TypesAndValues.ttcn +++ /dev/null @@ -1,62 +0,0 @@ -module Grant_TypesAndValues { - -// JSON -import from JSON all; - -// LibCommon -import from LibCommon_BasicTypesAndValues all; - - - type enumerated Operation_type { - INSTANTIATE (0), - OPERATE (1), - TERMINATE (2) - } - - - - type record GrantRequest { - JSON.String appInstanceId, - Operation_type operation - } - - - type record GrantRequestWithError { - JSON.String appInstanceId, - Operation_type_error operation - } - - type enumerated Operation_type_error { - INSTANTIATE (0), - OPERATE (1), - TERMINATE (2) - } - - type record Grant { - JSON.String appInstanceId - } - - /** - * @desc - * @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - * @member nanoSeconds The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type record TimeStamp { - Seconds seconds, - NanoSeconds nanoSeconds - } - - - /** - * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type UInt32 Seconds; - - /** - * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type UInt32 NanoSeconds; - -} with { -encode "JSON" -} diff --git a/ttcn/LibMec/LocationAPI/module.mk b/ttcn/LibMec/LocationAPI/module.mk index 420e9390872441518710e151bd62d467beead6c6..f0a2cf5b114e6fee5b67ecf4fa1a90f7f820f8b9 100644 --- a/ttcn/LibMec/LocationAPI/module.mk +++ b/ttcn/LibMec/LocationAPI/module.mk @@ -1,5 +1,6 @@ sources := \ ttcn/LocationAPI_EncdecDeclarations.ttcn \ + ttcn/LocationAPI_Functions.ttcn \ ttcn/LocationAPI_Pics.ttcn \ ttcn/LocationAPI_Pixits.ttcn \ ttcn/LocationAPI_Templates.ttcn \ diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..523d7a9c41015514355f5d63850edefffc085414 --- /dev/null +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn @@ -0,0 +1,433 @@ +/** + * @author ETSI / TTF T012 + * @version $URL$ + * $ID:$ + * @desc This module provides the custom templates for ITS HTTP based protocols. + * @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. + */ +module LocationAPI_Functions { + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + 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/LocationAPI + import from LocationAPI_TypesAndValues all; + import from LocationAPI_Templates all; + import from LocationAPI_Pixits all; + + // LibMec + import from LibMec_Templates all; + import from LibMec_Functions all; + import from LibMec_Pics all; + import from LibMec_Pixits all; + + function f_create_user_tracking_subscription( + out UserTrackingSubscription p_user_tracking_subscription + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_APP_Q_USERS_LOC_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_user_tracking_subscription( + m_user_tracking_subscription( + PX_CLIENT_ID, + PX_CALLBACK_REF_URL, + PX_USER + )))))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_user_tracking_subscription( + mw_user_tracking_subscription( + PX_CLIENT_ID, + PX_CALLBACK_REF_URL, + PX_USER + )))))) -> value v_response { + tc_ac.stop; + + p_user_tracking_subscription := v_response.response.body.json_body.userTrackingSubscription; + log("f_create_user_tracking_subscription: INFO: IUT successfully responds to the subscription: ", p_user_tracking_subscription); + } + [] tc_ac.timeout { + log("f_create_user_tracking_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_user_tracking_subscription + + function f_delete_user_tracking_subscription( + in UserTrackingSubscription p_user_tracking_subscription + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + var charstring v_uri :=regexp( + oct2char(unichar2oct(p_user_tracking_subscription.resourceURL)), + "?+" & PX_ME_APP_Q_USERS_LOC_SUB_URI & "/(?*)", + 0 + ); + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_APP_Q_USERS_LOC_SUB_URI & "/" & v_uri, + v_headers + ))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_user_tracking_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_user_tracking_subscription + + function f_create_periodic_notification_subscription( + out PeriodicNotificationSubscription p_periodic_notification_subscription + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_APP_Q_USERS_TRACK_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_periodic_notification_subscription( + m_periodic_notification_subscription( + { PX_IP_ADDRESS }, + PX_CALLBACK_REF_URL, + -, -, + PX_USER + )))))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_periodic_notification_subscription( + mw_periodic_notification_subscription( + { PX_IP_ADDRESS }, + PX_CALLBACK_REF_URL, + -, -, + PX_USER, + ? + )))))) -> value v_response { + tc_ac.stop; + + p_periodic_notification_subscription := v_response.response.body.json_body.periodicNotificationSubscription; + log("f_create_periodic_notification_subscription: INFO: IUT successfully responds to the subscription: ", p_periodic_notification_subscription); + } + [] tc_ac.timeout { + log("f_create_periodic_notification_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_periodic_notification_subscription + + function f_delete_periodic_notification_subscription( + in PeriodicNotificationSubscription p_position_notification_subscription + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + var charstring v_uri := regexp( + oct2char(unichar2oct(p_position_notification_subscription.resourceURL)), + "?+" & PX_ME_APP_Q_USERS_TRACK_SUB_URI & "/(?*)", + 0 + ); + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_APP_Q_USERS_TRACK_SUB_URI & "/" & v_uri, + v_headers + ))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_periodic_notification_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_delete_periodic_notification_subscription + + function f_create_zonal_traffic_subscription( + out ZonalTrafficSubscription p_zonal_traffic_subscription + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_APP_Q_USERS_INF_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_zonal_traffic_subscription( + m_zonal_traffic_subscription( + PX_CLIENT_ID, + PX_CALLBACK_REF_URL, + PX_ZONE_ID + )))))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_zonal_traffic_subscription( + mw_zonal_traffic_subscription( + PX_CLIENT_ID, + PX_CALLBACK_REF_URL, + PX_ZONE_ID + )))))) -> value v_response { + tc_ac.stop; + + p_zonal_traffic_subscription := v_response.response.body.json_body.zonalTrafficSubscription; + log("f_create_zonal_traffic_subscription: INFO: IUT successfully responds to the subscription: ", p_zonal_traffic_subscription); + } + [] tc_ac.timeout { + log("f_create_zonal_traffic_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_zonal_traffic_subscription + + function f_delete_zonal_traffic_subscription( + in ZonalTrafficSubscription p_zonal_traffic_subscription + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + var charstring v_uri := regexp( + oct2char(unichar2oct(p_zonal_traffic_subscription.resourceURL)), + "?+" & PX_ME_APP_Q_USERS_INF_SUB_URI & "/(?*)", + 0 + ); + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_APP_Q_USERS_INF_SUB_URI & "/" & v_uri, + v_headers + ))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_zonal_traffic_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_delete_zonal_traffic_subscription + + function f_create_circle_notification_subscription( + out CircleNotificationSubscription p_circle_notification_subscription + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_circle_notification_subscription( + m_circle_notification_subscription( + PX_CLIENT_ID, //clientCorrelator + PX_AREA_SUB_CALLBACK_URI, // callbackReference + { PX_IP_ADDRESS } // address + )))))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_circle_notification_subscription( + mw_circle_notification_subscription( + PX_CLIENT_ID + )))))) -> value v_response { + tc_ac.stop; + + p_circle_notification_subscription := v_response.response.body.json_body.circleNotificationSubscription; + log("f_create_circle_notification_subscription: INFO: IUT successfully responds to the subscription: ", p_circle_notification_subscription); + } + [] tc_ac.timeout { + log("f_create_circle_notification_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_circle_notification_subscription + + function f_delete_circle_notification_subscription( + in CircleNotificationSubscription p_circle_notification_subscription + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + var charstring v_uri := regexp( + oct2char(unichar2oct(p_circle_notification_subscription.resourceURL)), + "?+" & PX_ME_APP_Q_AREA_SUB_URI & "/(?*)", + 0 + ); + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI & "/" & v_uri, + v_headers + ))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_circle_notification_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_delete_circle_notification_subscription + + + + + + + + + + + + function f_create_distance_notification_subscription( + out DistanceNotificationSubscription p_distance_notification_subscription + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_APP_Q_DIST_URI, + v_headers, + m_http_message_body_json( + m_body_json_distance_notification_subscription( + m_distance_notification_subscription( + PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference + -, // checkImmediate + PX_CLIENT_ID, //clientCorrelator + -, // criteria + 10.0, // distance + -, + { PX_UE_MONITORED_IP_ADDRESS } // monitoredAddress + )))))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_distance_notification_subscription( + mw_distance_notification_subscription( + PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference + -, + PX_CLIENT_ID, //clientCorrelator + -, -, -, + { PX_UE_MONITORED_IP_ADDRESS } // monitoredAddress + )))))) -> value v_response { + tc_ac.stop; + + p_distance_notification_subscription := v_response.response.body.json_body.distanceNotificationSubscription; + log("f_create_distance_notification_subscription: INFO: IUT successfully responds to the subscription: ", p_distance_notification_subscription); + } + [] tc_ac.timeout { + log("f_create_distance_notification_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_distance_notification_subscription + + function f_delete_distance_notification_subscription( + in DistanceNotificationSubscription p_distance_notification_subscription + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + var charstring v_uri := regexp( + oct2char(unichar2oct(p_distance_notification_subscription.resourceURL)), + "?+" & PX_ME_APP_Q_DIST_URI & "/(?*)", + 0 + ); + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_APP_Q_DIST_URI & "/" & v_uri, + v_headers + ))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_distance_notification_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_delete_distance_notification_subscription + +} // End of module LocationAPI_Functions diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn index 9b3c7169a0ffa335f06ca53ac7292bd9cf6a231f..cc0d20c43deb410931c7e3df23b187300a9c7af0 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn @@ -35,15 +35,15 @@ module LocationAPI_Pixits { modulepar UInt32 PX_NB_USERS := 10; - modulepar CallbackReference PX_CALLBACK_REF_URL := { "http://clientApp.example.com/location_notifications/123456" }; + modulepar CallbackReference PX_CALLBACK_REF_URL := { notifyURL := "http://clientApp.example.com/location_notifications/123456", callbackData := omit, notificationFormat := omit }; - modulepar CallbackReference PX_UE_PERIODIC_SUB_CALLBACK_URI := { "http://clientApp.example.com/location_notifications/123456" }; + modulepar CallbackReference PX_UE_PERIODIC_SUB_CALLBACK_URI := { notifyURL := "http://clientApp.example.com/location_notifications/123456", callbackData := omit, notificationFormat := omit }; modulepar Address PX_IP_ADDRESS := "acr:10.0.0.3"; - modulepar CallbackReference PX_AREA_SUB_CALLBACK_URI := { "http://clientApp.example.com/location_notifications/123456" }; + modulepar CallbackReference PX_AREA_SUB_CALLBACK_URI := { notifyURL := "http://clientApp.example.com/location_notifications/123456", callbackData := omit, notificationFormat := omit }; - modulepar CallbackReference PX_UE_DIST_SUB_CALLBACK_URI := { "http://clientApp.example.com/location_notifications/123456" }; + modulepar CallbackReference PX_UE_DIST_SUB_CALLBACK_URI := { notifyURL := "http://clientApp.example.com/location_notifications/123456", callbackData := omit, notificationFormat := omit }; modulepar Address PX_UE_MONITORED_IP_ADDRESS := "acr:10.0.0.1"; @@ -51,7 +51,7 @@ module LocationAPI_Pixits { modulepar Address PX_UE_ZONAL_TRAF_SUB_URI := ""; - modulepar JSON.AnyURI PX_UE_LOC_QRY_URI := "/location/v2/queries"; + modulepar JSON.AnyURI PX_UE_LOC_QRY_URI := "/location/v2/queries/distance"; modulepar JSON.Number PX_UE_COORD_LAT := -80.86302; diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn index 955ed4687e036e375b467e22c34292e140a3fffd..124656102989996e82021003b9657d7b8d0a3d4f 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn @@ -157,7 +157,7 @@ module LocationAPI_Templates { in ClientCorrelator p_clientCorrelator, in CallbackReference p_callbackReference, in Address p_address := PX_USER, - in UserEventCriteria p_userEventCriteria := { Transferring } + in UserEventCriteria p_userEventCriteria := { Entering } ) := { clientCorrelator := p_clientCorrelator, callbackReference := p_callbackReference, @@ -170,7 +170,7 @@ module LocationAPI_Templates { template (present) ClientCorrelator p_clientCorrelator := ?, template (present) CallbackReference p_callbackReference := ?, template (present) Address p_address := PX_USER, - template (present) UserEventCriteria p_userEventCriteria := { Transferring }, + template (present) UserEventCriteria p_userEventCriteria := { Entering }, template (present) ResourceURL p_resourceURL := ? ) := { clientCorrelator := p_clientCorrelator, @@ -213,13 +213,14 @@ module LocationAPI_Templates { template (value) ZonalTrafficSubscription m_zonal_traffic_subscription( in ClientCorrelator p_client_correlator, in CallbackReference p_callback_reference, - in ZoneId p_zone_id + in ZoneId p_zone_id, + in UserEventCriteria p_user_event_criteria := { Entering } ) := { clientCorrelator := p_client_correlator, callbackReference := p_callback_reference, zoneId := p_zone_id, interestRealm := omit, - userEventCriteria := omit, + userEventCriteria := p_user_event_criteria, duration := omit, resourceURL := omit } // End of template m_zonal_traffic_subscription @@ -244,11 +245,11 @@ module LocationAPI_Templates { in template (value) Addresses p_address, in template (value) JSON.Number p_latitude := PX_UE_COORD_LAT, in template (value) JSON.Number p_longitude := PX_UE_COORD_LONG, - in template (value) JSON.Number p_radius := 10.0, + in template (value) JSON.Number p_radius := 200.0, in template (value) JSON.Number p_trackingAccuracy := 10.0, in template (value) EnteringLeavingCriteria p_enteringLeavingCriteria := Entering, in template (value) JSON.Bool p_checkImmediate := true, - in template (value) JSON.Number p_frequency := 10.0, + in template (value) UInt32 p_frequency := 10, in template (omit) ResourceURL p_resourceURL := omit ) := { address_ := p_address, @@ -278,7 +279,7 @@ module LocationAPI_Templates { template (present) JSON.Number p_trackingAccuracy := ?, template (present) EnteringLeavingCriteria p_enteringLeavingCriteria := ?, template (present) JSON.Bool p_checkImmediate := ?, - template (present) JSON.Number p_frequency := ?, + template (present) UInt32 p_frequency := ?, template ResourceURL p_resourceURL := * ) := { address_ := p_address, @@ -316,8 +317,8 @@ module LocationAPI_Templates { in template (omit) ClientCorrelator p_clientCorrelator := omit, in template (value) DistanceCriteria p_criteria := AllWithinDistance, in template (value) JSON.Number p_distance, - in template (value) JSON.Number p_frequency := 10.0, - in template (value) JSON.AnyURI p_monitoredAddress, + in template (value) UInt32 p_frequency := 10, + in template (value) Addresses p_monitoredAddress, in template (omit) Addresses p_referenceAddress := omit, in template (value) JSON.Number p_trackingAccuracy := 10.0, in template (omit) ResourceURL p_resourceURL := omit @@ -344,8 +345,8 @@ module LocationAPI_Templates { template ClientCorrelator p_clientCorrelator := *, template (present) DistanceCriteria p_criteria := ?, template (present) JSON.Number p_distance := ?, - template (present) JSON.Number p_frequency := ?, - template (present) JSON.AnyURI p_monitoredAddress := ?, + template (present) UInt32 p_frequency := ?, + template (present) Addresses p_monitoredAddress := ?, template Addresses p_referenceAddress := *, template (present) JSON.Number p_trackingAccuracy := ?, template ResourceURL p_resourceURL := * @@ -367,10 +368,10 @@ module LocationAPI_Templates { } // End of template mw_distance_notification_subscription template (omit) PeriodicNotificationSubscription m_periodic_notification_subscription( - in template (value) Address p_address, + in template (value) Addresses p_address, in template (value) CallbackReference p_callbackReference, - in template (value) JSON.Number p_frequency := 10.0, - in template (value) JSON.Number p_requestedAccuracy := 0.1, + in template (value) UInt32 p_frequency := 10, + in template (value) UInt32 p_requestedAccuracy := 1, in template (omit) ClientCorrelator p_clientCorrelator := omit, in template (omit) ResourceURL p_resourceURL := omit ) := { @@ -386,10 +387,10 @@ module LocationAPI_Templates { } // End of template m_periodic_notification_subscription template PeriodicNotificationSubscription mw_periodic_notification_subscription( - template (present) Address p_address := ?, + template (present) Addresses p_address := ?, template (present) CallbackReference p_callbackReference := ?, - template (present) JSON.Number p_frequency := ?, - template (present) JSON.Number p_requestedAccuracy := ?, + template (present) UInt32 p_frequency := ?, + template (present) UInt32 p_requestedAccuracy := ?, template ClientCorrelator p_clientCorrelator := *, template ResourceURL p_resourceURL := * ) := { diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn index 85ff63d91440dfe598329a491d2e733ab9bf4275..69321a2e2e48f8c71c161a8d8284d6210e7cdda5 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn @@ -41,7 +41,7 @@ module LocationAPI_TypesAndValues { * @desc A type containing list of users. * @member user Collection of the zone information list. * @member resourceURL Self referring URL. - * @see ETSI GS MEC 013 V2.1.1 (2019-09) Clause + * @see ETSI GS MEC 013 V2.1.1 (2019-09) Clause 6.2.2 Type: UserInfo */ type record of UserInfo UserInfos; type record UserList { @@ -230,9 +230,9 @@ REST_NetAPI_Common]. * @member notifyURL Notify Callback URL */ type record CallbackReference { + NotifyURL notifyURL, CallbackData callbackData optional, - NotificationFormat notificationFormat optional, - NotifyURL notifyURL + NotificationFormat notificationFormat optional } /** @@ -551,10 +551,10 @@ REST_NetAPI_Common]. CallbackReference callbackReference, JSON.Bool checkImmediate, ClientCorrelator clientCorrelator optional, - JSON.Number count optional, - JSON.Number duration optional, + UInt32 count optional, + UInt32 duration optional, EnteringLeavingCriteria enteringLeavingCriteria, - JSON.Number frequency, + UInt32 frequency, JSON.Number latitude, Link link optional, JSON.Number longitude, @@ -575,12 +575,12 @@ REST_NetAPI_Common]. * @desc A type containing information about the distance from a terminal to a location or between two terminals, in addition the accuracy and a timestamp of the information are provided * @member distance Distance from terminal to a location or between two terminals specified in meters * @member accuracy Accuracy of the provided distance in meters - * @member timestamp + * @member timestamp Date and time that location from which distance is calculated was collected */ type record TerminalDistance { JSON.Number distance, JSON.Number accuracy optional, - JSON.DateTime timestamp_ optional + TimeStamp timestamp_ optional } with { variant (timestamp_) "name as 'timestamp'"; } @@ -616,13 +616,13 @@ REST_NetAPI_Common]. CallbackReference callbackReference, JSON.Bool checkImmediate, ClientCorrelator clientCorrelator optional, - JSON.Number count optional, + UInt32 count optional, DistanceCriteria criteria, JSON.Number distance, - JSON.Number duration optional, - JSON.Number frequency, + UInt32 duration optional, + UInt32 frequency, Link link optional, - JSON.AnyURI monitoredAddress, + Addresses monitoredAddress, Addresses referenceAddress optional, JSON.AnyURI requester optional, ResourceURL resourceURL optional, @@ -643,13 +643,13 @@ REST_NetAPI_Common]. * @member resourceURL Self referring URL */ type record PeriodicNotificationSubscription { - Address address_, + Addresses address_, CallbackReference callbackReference, ClientCorrelator clientCorrelator optional, - JSON.Number duration optional, - JSON.Number frequency, + UInt32 duration optional, + UInt32 frequency, Link link optional, - JSON.Number requestedAccuracy, + UInt32 requestedAccuracy, JSON.AnyURI requester optional, ResourceURL resourceURL optional } with { diff --git a/ttcn/LibMec/MeoPkgm/module.mk b/ttcn/LibMec/MeoPkgm/module.mk deleted file mode 100644 index 45f37a2333797160e9690b0245868173fc2d4263..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/MeoPkgm/module.mk +++ /dev/null @@ -1,5 +0,0 @@ -sources := \ - ttcn/MeoPkgm_Pics.ttcn \ - ttcn/MeoPkgm_Pixits.ttcn \ - ttcn/MeoPkgm_Templates.ttcn \ - ttcn/MeoPkgm_TypesAndValues.ttcn diff --git a/ttcn/LibMec/MeoPkgm/ttcn/MeoPkgm_Pics.ttcn b/ttcn/LibMec/MeoPkgm/ttcn/MeoPkgm_Pics.ttcn deleted file mode 100644 index 79f155d72605383665d7225959c9f5a510631c64..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/MeoPkgm/ttcn/MeoPkgm_Pics.ttcn +++ /dev/null @@ -1,8 +0,0 @@ -module MeoPkgm_Pics { - - /** - * @desc Does the IUT support LocationAPI? - */ - modulepar boolean PICS_PKGMGMT_API_SUPPORTED := true; - -} // End of module LocationAPI_Pics diff --git a/ttcn/LibMec/MeoPkgm/ttcn/MeoPkgm_Pixits.ttcn b/ttcn/LibMec/MeoPkgm/ttcn/MeoPkgm_Pixits.ttcn deleted file mode 100644 index 55ed740aa749cd81922399b1b674fe7fb3bee6e8..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/MeoPkgm/ttcn/MeoPkgm_Pixits.ttcn +++ /dev/null @@ -1,50 +0,0 @@ -module MeoPkgm_Pixits { - - // JSON - import from JSON all; - - // LibMec/LocationAPI - import from MeoPkgm_TypesAndValues all; - - modulepar JSON.String PX_APP_PKG_NAME := "APP_PKG_NAME" - - modulepar JSON.String PX_APP_PKG_VERSION := "APP_PKG_VERSION" - - modulepar JSON.String PX_CHECKSUM := "CHECKSUM" - - modulepar JSON.String PX_APP_PKG_PATH := "APP_PKG_PATH" - - modulepar OperationalState PX_OPERATIONAL_STATE := ENABLED - - modulepar UsageState PX_USAGE_STATE := NOT_IN_USE - - modulepar JSON.String PX_ON_BOARDED_APP_PKG_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f" - - modulepar JSON.String PX_NON_EXISTENT_APP_PKG_ID := "NON_EXISTENT_APP_PKG_ID" - - modulepar JSON.AnyURI PX_CALLBACK_URI := "http://127.0.0.1/callback" - - modulepar SubscriptionType PX_SUBSCRIPTION_TYPE := ON_BOARDING - - modulepar SubscriptionTypeWithError PX_SUBSCRIPTION_TYPE_WITH_ERROR := ONBOARDING - - modulepar JSON.String PX_SUBSCRIPTION_ID := "e0deee2b-6e50-4f33-ab09-8bf0585025d3" - - modulepar JSON.String PX_NON_EXISTENT_SUBSCRIPTION_ID := "NON_EXISTENT_SUBSCRIPTION_ID" - - modulepar NotificationType PX_NOTIFICATION_TYPE := ON_BOARDING - -// modulepar JSON.String PX_APP_MOBILITY_SERVICE_ID := "KtRGymNQ84dG3mQfRepa" -// -// modulepar JSON.String PX_APP_INS_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f" -// -// modulepar SubscriptionType PX_SUBSCRIPTION_TYPE := MobilityProcedureSubscription -// -// -// -// modulepar JSON.String PX_CALLBACK_REFERENCE := "http://127.0.0.1/callback" -// -// -// modulepar JSON.String PX_MEP_ID := ""; - -} // End of module LocationAPI_Pixits diff --git a/ttcn/LibMec/MeoPkgm/ttcn/MeoPkgm_Templates.ttcn b/ttcn/LibMec/MeoPkgm/ttcn/MeoPkgm_Templates.ttcn deleted file mode 100644 index cbb1ef0370882f6ee9ef75d412b5c9cbca400bcb..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/MeoPkgm/ttcn/MeoPkgm_Templates.ttcn +++ /dev/null @@ -1,322 +0,0 @@ -module MeoPkgm_Templates { - - // JSON - import from JSON all; - - // LibCommon - import from LibCommon_BasicTypesAndValues all; - - import from MeoPkgm_TypesAndValues all; - import from MeoPkgm_Pixits all; - - template AppPkg m_package_management ( - in String p_appPkgName, - in String p_appPkgVersion, - in String p_checksum, - in String p_appPkgPath - ) := { - appPkgName := p_appPkgName, - appPkgVersion := p_appPkgVersion, - checksum := p_checksum, - appPkgPath := p_appPkgPath - } - - - template AppPkgWithError m_package_management_with_error ( - in String p_appPkgVersion, - in String p_checksum, - in String p_appPkgPath - ) := { - appPkgVersion := p_appPkgVersion, - checksum := p_checksum, - appPkgPath := p_appPkgPath - } - - template (omit) OnboardedAppPkgInfoList mw_package_management_list ( - in template (omit) String p_appPkgId := omit, - in String p_appName, - in String p_appDVersion, - in String p_checksum, - in OperationalState p_operationalState, - in UsageState p_usageState - ) := { - - } - - - template (omit) AppPkgSubscription m_app_package_subscription ( - in template (omit) AnyURI p_callbackUri := omit, - in template(omit) SubscriptionType p_subscription_type := omit - ) := { - callbackUri := p_callbackUri, - subscriptionType := p_subscription_type - } - - template (omit) AppPkgSubscriptionWithError m_app_package_subscription_with_error ( - in template (omit) AnyURI p_callbackUri := omit, - in template(omit) SubscriptionTypeWithError p_subscription_type := omit - ) := { - callbackUri := p_callbackUri, - subscriptionType := p_subscription_type - } - - - template (present) AppPkgSubscriptionInfo mw_app_package_subscription_info ( - in template (present) String p_subscriptionId := ?, - in template (present) SubscriptionType p_subscription_type := ?, - in template (present) AnyURI p_callbackUri := ? - ) := { - subscriptionId := p_subscriptionId /* FIXME Error??? ifpresent*/, - subscriptionType := p_subscription_type, - callbackUri := p_callbackUri - } - - template (present) AppPkgNotification mw_app_package_notification ( - in template (present) String p_notificationId := ?, - in template (present) NotificationType p_notificationType := ?, - in template (present) String p_subscriptionId := ?, - in template (present) AnyURI p_links := ? - ) := { - notificationType := p_notificationType, - subscriptionId := p_subscriptionId, - links := p_links - } - - - -// template (omit) AppMobilityServiceInfo m_app_mobility_service_info( -// in String p_app_mobility_service_id := PX_APP_MOBILITY_SERVICE_ID, -// in template (omit) RegistrationInfos p_registration_info := omit -// ) := { -// registeredAppMobilityService := p_registration_info, -// appMobilityServiceId := p_app_mobility_service_id -// } // End of template m_app_mobility_service_info -// -// -// template (present) AppMobilityServiceInfo mw_app_mobility_service_info( -// template (present) RegistrationInfos p_registration_info := ?, -// template (present) String p_app_mobility_service_id := ? -// ) := { -// registeredAppMobilityService := p_registration_info, -// appMobilityServiceId := p_app_mobility_service_id -// } -// -// template (omit) RegistrationInfo m_app_mobility_registration_info( -// in template (value) ServiceConsumerId p_serviceConsumerId, -// in template (omit) DeviceInformations p_deviceInformation := omit, -// in template (omit) UInt32 p_expiryTime := omit -// ) := { -// serviceConsumerId := p_serviceConsumerId, -// deviceInformation := p_deviceInformation, -// expiryTime := p_expiryTime -// } -// -// template RegistrationInfo mw_app_mobility_registration_info( -// template (present) ServiceConsumerId p_serviceConsumerId := ?, -// template DeviceInformations p_deviceInformation := *, -// template UInt32 p_expiryTime := * -// ) := { -// serviceConsumerId := p_serviceConsumerId, -// deviceInformation := p_deviceInformation, -// expiryTime := p_expiryTime -// } -// -// template (omit) ServiceConsumerId m_service_consumer_id( -// in template (omit) String p_appInstanceId := omit, -// in template (omit) String p_mepId := omit -// ) := { -// appInstanceId := p_appInstanceId, -// mepId := p_mepId -// } -// -// template (omit) ServiceConsumer m_service_consumer_error( -// in template (omit) String p_appInstance := omit, -// in template (omit) String p_mepId := omit -// ) := { -// appInstance := p_appInstance, -// mepId := p_mepId -// } -// -// template ServiceConsumerId mw_service_consumer_id( -// template String p_appInstanceId := *, -// template String p_mepId := * -// ) := { -// appInstanceId := p_appInstanceId, -// mepId := p_mepId -// } -// -// template (omit) RegistrationRequest m_registration_request ( -// in template (omit) ServiceConsumerId p_service_consumer_id := omit, -// in template (omit) DeviceInformations p_device_info := omit, -// in template (omit) UInt32 p_expire_time := omit -// ) := { -// serviceConsumerId := p_service_consumer_id, -// deviceInformation := p_device_info, -// expiryTime := p_expire_time -// } -// -// -// template (omit) RegistrationRequest m_registration_request_error ( -// in template (omit) ServiceConsumer p_service_consumer := omit, -// in template (omit) DeviceInformations p_device_info := omit, -// in template (omit) UInt32 p_expire_time := omit -// ) := { -// serviceConsumerId := p_service_consumer, -// deviceInformation := p_device_info, -// expiryTime := p_expire_time -// } -// -// -// template RegistrationRequest mw_registration_request( -// template ServiceConsumerId p_service_consumer_id := ?, -// template DeviceInformations p_device_info := omit, -// template UInt32 p_expire_time := omit -// ) := { -// serviceConsumerId := p_service_consumer_id, -// deviceInformation := p_device_info, -// expiryTime := p_expire_time -// } -// -// -// template (value) RegistrationInfo m_registration_info ( -// in template (omit) ServiceConsumerId p_service_consumer_id := omit, -// in template (omit) DeviceInformations p_device_info := omit, -// in UInt32 p_expire_time -// ) := { -// serviceConsumerId := p_service_consumer_id, -// deviceInformation := p_device_info, -// expiryTime := p_expire_time -// } -// -// template (present) RegistrationInfos mw_registration_info( -// template (present) ServiceConsumerId p_service_consumer_id := ?, -// template (present) DeviceInformations p_device_info := ?, -// template (present) UInt32 p_expire_time := ? -// ) := { -// -// } -// -// -// template (value) ServiceConsumer m_service_consumer ( -// in String p_app_instance, -// in String p_mep_id -// ) := { -// appInstance := p_app_instance, -// mepId := p_mep_id -// } -// -// template (omit) ServiceConsumer mw_service_consumer ( -// in String p_app_instance, -// in template (omit) String p_mep_id := omit -// ) := { -// appInstance := p_app_instance, -// mepId := p_mep_id -// } -// -// template (value) DeviceInformation m_device_info ( -// in String p_associate_id -// ) := { -// associateId := p_associate_id -// } -// -// template (omit) DeviceInformation mw_device_info ( -// in String p_associate_id -// ) := { -// associateId := p_associate_id -// } -// type record AmsSubscriptionLinkList { -// JSON.AnyURI links, -// Subscription subscription -// } -// -// template (value) AdjacentAppInfoSubscription mw_adjacent_application_info_notification ( -// in template (omit) SubscriptionType p_subscriptionType := omit, -// in JSON.AnyURI p_callbackReference, -// in template (omit) JSON.AnyURI p_links := omit, -// in template (omit) AdjacentFilterCriteria p_filterCriteria := omit, -// in template (omit) TimeStamp p_expiryDeadline := omit -// -// ) := { -// subscriptionType := p_subscriptionType , -// callbackReference := p_callbackReference, -// links := p_links, -// filterCriteria := p_filterCriteria, -// expiryDeadline := p_expiryDeadline -// } -// -// -// template (value) MobilityProcedureSubscription m_ams_subscription ( -// in SubscriptionType p_subscriptionType := PX_SUBSCRIPTION_TYPE, -// in JSON.AnyURI p_callbackReference, -// in template (omit) JSON.AnyURI p_links := omit, -// in template (omit) FilterCriteria p_filterCriteria := omit, -// in template (omit) TimeStamp p_expiryDeadline := omit -// -// ) := { -// subscriptionType := p_subscriptionType , -// callbackReference := p_callbackReference, -// links := p_links, -// filterCriteria := p_filterCriteria, -// expiryDeadline := p_expiryDeadline -// } -// -// -// -// template (value) MobilityProcedureSubscription mw_mobility_procedure_notification ( -// in template (omit) SubscriptionType p_subscriptionType := omit, -// in JSON.AnyURI p_callbackReference, -// in template (omit) JSON.AnyURI p_links := omit, -// in template (omit) FilterCriteria p_filterCriteria := omit, -// in template (omit) TimeStamp p_expiryDeadline := omit -// -// ) := { -// subscriptionType := p_subscriptionType , -// callbackReference := p_callbackReference, -// links := p_links, -// filterCriteria := p_filterCriteria, -// expiryDeadline := p_expiryDeadline -// } -// -// template (value) MobilityProcedureSubscriptionError m_ams_subscription_error ( -// in SubscriptionType p_subscriptionType, -// in JSON.AnyURI p_callbackReference, -// in template (omit) JSON.AnyURI p_links := omit, -// in template (omit) FilterCriteria p_filterCriteria := omit, -// in template (omit) TimeStamp p_expiryDeadline := omit -// -// ) := { -// subscriptionType := p_subscriptionType, -// callbackReference := p_callbackReference, -// links := p_links, -// filterCriteria := p_filterCriteria, -// expiryDeadline := p_expiryDeadline -// } -// -// template (present) MobilityProcedureSubscription mw_ams_subscription ( -// in SubscriptionType p_subscriptionType, -// in template (omit) JSON.AnyURI p_callbackReference := omit, -// in template (omit) JSON.AnyURI p_links := omit, -// in template (omit) FilterCriteria p_filterCriteria := omit, -// in template (omit) TimeStamp p_expiryDeadline := omit -// ) := { -// subscriptionType := p_subscriptionType , -// callbackReference := p_callbackReference, -// links := p_links, -// filterCriteria := p_filterCriteria, -// expiryDeadline := p_expiryDeadline -// } -// -// template (present) ExpiryNotification mw_expire_notification ( -// in template (omit) TimeStamp p_timestamp := omit, -// in template (omit) JSON.AnyURI p_links := omit, -// in TimeStamp p_expiryDeadline -// ) := { -// timeStamp := p_timestamp, -// links := p_links, -// expiryDeadline := p_expiryDeadline -// } -// -// -// - -} // End of module LocationAPI_Templates diff --git a/ttcn/LibMec/MeoPkgm/ttcn/MeoPkgm_TypesAndValues.ttcn b/ttcn/LibMec/MeoPkgm/ttcn/MeoPkgm_TypesAndValues.ttcn deleted file mode 100644 index d9f72fc2aae371362d0b1f7328a8c6fcec69c3f5..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/MeoPkgm/ttcn/MeoPkgm_TypesAndValues.ttcn +++ /dev/null @@ -1,238 +0,0 @@ -module MeoPkgm_TypesAndValues { - -// JSON -import from JSON all; - -// LibCommon -import from LibCommon_BasicTypesAndValues all; - - -type record AppPkg { - JSON.String appPkgName, - JSON.String appPkgVersion, - JSON.String checksum, - JSON.String appPkgPath -} - -type record AppPkgWithError { - JSON.String appPkgVersion, - JSON.String checksum, - JSON.String appPkgPath -} - -type record of OnboardedAppPkgInfo OnboardedAppPkgInfoList; -type record OnboardedAppPkgInfo { - JSON.String appPkgId, - JSON.String appName, - JSON.String appDVersion, - JSON.String checksum, - OperationalState operationalState, - UsageState usageState -} - -type enumerated AppPkgOperation { - DISABLE, - ENABLE, - ABORT -} - -type enumerated OperationalState { - ENABLED, - DISABLED, - DELETION_PENDING -} - -type enumerated UsageState { - IN_USE, - NOT_IN_USE -} - - -type enumerated SubscriptionType { - ON_BOARDING, - OP_CHANGE -} - -type enumerated SubscriptionTypeWithError { - ONBOARDING, - OP_CHANGE -} - - -type record of AppPkgSubscriptionInfo AppPkgSubscriptionInfoList; -type record AppPkgSubscriptionInfo { - JSON.String subscriptionId, - SubscriptionType subscriptionType, - JSON.AnyURI callbackUri -} - -type record AppPkgSubscription { - JSON.AnyURI callbackUri, - SubscriptionType subscriptionType -} - -type record AppPkgSubscriptionWithError { - JSON.AnyURI callbackUri, - SubscriptionTypeWithError subscriptionType -} - - -type enumerated NotificationType { - ON_BOARDING, - OP_CHANGE -} - - -type record AppPkgNotification { - NotificationType notificationType, - JSON.String subscriptionId, - //@TODO: links should be named _links but getting error. - //@TODO: links shuld be a record, but cannot contain self cause self is a key for ttnc - JSON.AnyURI links -} - - -// -// -//type record of AppMobilityServiceInfo AppMobilityServiceInfos; -//type record AppMobilityServiceInfo { -// RegistrationInfos registeredAppMobilityService , -// String appMobilityServiceId -//} -// -//type record of RegistrationInfo RegistrationInfos; -//type record RegistrationInfo { -// ServiceConsumerId serviceConsumerId, -// DeviceInformations deviceInformation optional, -// UInt32 expiryTime optional -//} -// -// -// -// -// -//type record of ServiceConsumerId ServiceConsumerIds; -//type record ServiceConsumerId { -// String appInstanceId optional, -// String mepId optional -//} -// -//// Erroneous parameter: appInstance should be appInstanceId -//type record of ServiceConsumer ServiceConsumers; -//type record ServiceConsumer { -// String appInstance optional, -// String mepId optional -//} -// -//type record of DeviceInformation DeviceInformations; -//type record DeviceInformation { -// String associateId -//} -// -// -//type JSON.AnyURI links; -// -//type enumerated SubscriptionType { -// MobilityProcedureSubscription, -// AdjacentAppInfoSubscription -//} -// -//type record Subscription { -// JSON.AnyURI href, -// SubscriptionType subscriptionType -//} -// -// -//type record of AmsSubscriptionLinkList AmsSubscriptionLinkLists; -//type record AmsSubscriptionLinkList { -// JSON.AnyURI links, -// Subscription subscription -//} -// -// -//type record MobilityProcedureSubscriptionError { -// SubscriptionType subscriptionType, -// JSON.AnyURI callbackReference, -// JSON.AnyURI links optional, -// FilterCriteria filterCriteria, -// TimeStamp expiryDeadline optional -//} -// -// -// -// -//type record of MobilityProcedureSubscription MobilityProcedureSubscriptions; -//type record MobilityProcedureSubscription { -// SubscriptionType subscriptionType, -// JSON.AnyURI callbackReference, -// JSON.AnyURI links optional, -// FilterCriteria filterCriteria, -// TimeStamp expiryDeadline optional -//} -// -//type enumerated MobilityStatusType { -// INTERHOST_MOVEOUT_TRIGGERED, -// TARGET_APPINST_CONFIRMED, -// TARGET_TRAFFIC_RULE_ACTIVATED, -// INTERHOST_MOVEOUT_COMPLETED, -// INTERHOST_MOVEOUT_FAILED -//} -// -//type record AssociateIdList { -// String associateId -//} -// -//type record of FilterCriteria FilterCriterias; -//type record FilterCriteria { -// String appInstanceId optional, -// AssociateIdList associateId optional, -// MobilityStatusType mobilityStatus -//} -// -// -// -//type record AdjacentFilterCriteria { -// String appInstanceId optional -//} -// -// -//type record of ExpiryNotification ExpiryNotifications; -//type record ExpiryNotification { -// TimeStamp timeStamp, -// JSON.AnyURI links optional, -// TimeStamp expiryDeadline -//} -// -//type record of AdjacentAppInfoSubscription AdjacentAppInfoSubscriptions; -//type record AdjacentAppInfoSubscription { -// SubscriptionType subscriptionType, -// JSON.AnyURI callbackReference, -// JSON.AnyURI links optional, -// AdjacentFilterCriteria filterCriteria, -// TimeStamp expiryDeadline optional -//} - - /** - * @desc - * @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - * @member nanoSeconds The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type record TimeStamp { - Seconds seconds, - NanoSeconds nanoSeconds - } - - - /** - * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type UInt32 Seconds; - - /** - * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type UInt32 NanoSeconds; - -} with { -encode "JSON" -} diff --git a/ttcn/LibMec/MepmPkgm/module.mk b/ttcn/LibMec/MepmPkgm/module.mk deleted file mode 100644 index aa44ff9ac64624040c88ca53b8c4baba6750f18f..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/MepmPkgm/module.mk +++ /dev/null @@ -1,5 +0,0 @@ -sources := \ - ttcn/MepmPkgm_Pics.ttcn \ - ttcn/MepmPkgm_Pixits.ttcn \ - ttcn/MepmPkgm_Templates.ttcn \ - ttcn/MepmPkgm_TypesAndValues.ttcn diff --git a/ttcn/LibMec/MepmPkgm/ttcn/MepmPkgm_Pics.ttcn b/ttcn/LibMec/MepmPkgm/ttcn/MepmPkgm_Pics.ttcn deleted file mode 100644 index 0bd4a56eb1a299bf88eab13853d499c5b1cf688d..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/MepmPkgm/ttcn/MepmPkgm_Pics.ttcn +++ /dev/null @@ -1,8 +0,0 @@ -module MepmPkgm_Pics { - - /** - * @desc Does the IUT support LocationAPI? - */ - modulepar boolean PICS_PKGMGMT_API_SUPPORTED := true; - -} // End of module LocationAPI_Pics diff --git a/ttcn/LibMec/MepmPkgm/ttcn/MepmPkgm_Pixits.ttcn b/ttcn/LibMec/MepmPkgm/ttcn/MepmPkgm_Pixits.ttcn deleted file mode 100644 index 34dcc5a59881a4cc967cb96909429faedfc77926..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/MepmPkgm/ttcn/MepmPkgm_Pixits.ttcn +++ /dev/null @@ -1,52 +0,0 @@ -module MepmPkgm_Pixits { - - // JSON - import from JSON all; - - // LibMec/LocationAPI - import from MepmPkgm_TypesAndValues all; - - modulepar JSON.String PX_APP_PKG_NAME := "APP_PKG_NAME" - - modulepar JSON.String PX_APP_PKG_VERSION := "APP_PKG_VERSION" - - modulepar JSON.String PX_CHECKSUM := "CHECKSUM" - - modulepar JSON.String PX_APP_PKG_PATH := "APP_PKG_PATH" - - modulepar OperationalState PX_OPERATIONAL_STATE := ENABLED - - modulepar UsageState PX_USAGE_STATE := NOT_IN_USE - - modulepar JSON.String PX_ON_BOARDED_APP_PKG_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f" - - modulepar JSON.String PX_NON_EXISTENT_APP_PKG_ID := "NON_EXISTENT_APP_PKG_ID" - - modulepar JSON.AnyURI PX_CALLBACK_URI := "http://127.0.0.1/callback" - - modulepar SubscriptionType PX_SUBSCRIPTION_TYPE := ON_BOARDING - - modulepar SubscriptionTypeWithError PX_SUBSCRIPTION_TYPE_WITH_ERROR := ONBOARDING - - modulepar JSON.String PX_SUBSCRIPTION_ID := "e0deee2b-6e50-4f33-ab09-8bf0585025d3" - - modulepar JSON.String PX_NON_EXISTENT_SUBSCRIPTION_ID := "NON_EXISTENT_SUBSCRIPTION_ID" - - modulepar NotificationType PX_NOTIFICATION_TYPE := ON_BOARDING - - modulepar JSON.String PX_APP_D_ID := "5lkj4782-2c70-4e47-9a4e-0ee3a1a0fd1f" - - -// modulepar JSON.String PX_APP_MOBILITY_SERVICE_ID := "KtRGymNQ84dG3mQfRepa" -// -// -// modulepar SubscriptionType PX_SUBSCRIPTION_TYPE := MobilityProcedureSubscription -// -// -// -// modulepar JSON.String PX_CALLBACK_REFERENCE := "http://127.0.0.1/callback" -// -// -// modulepar JSON.String PX_MEP_ID := ""; - -} // End of module LocationAPI_Pixits diff --git a/ttcn/LibMec/MepmPkgm/ttcn/MepmPkgm_Templates.ttcn b/ttcn/LibMec/MepmPkgm/ttcn/MepmPkgm_Templates.ttcn deleted file mode 100644 index bcc016ffae990c0330e2b5738673412e0cf5c775..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/MepmPkgm/ttcn/MepmPkgm_Templates.ttcn +++ /dev/null @@ -1,94 +0,0 @@ -module MepmPkgm_Templates { - - // JSON - import from JSON all; - - // LibCommon - import from LibCommon_BasicTypesAndValues all; - - import from MepmPkgm_TypesAndValues all; - import from MepmPkgm_Pixits all; - - template AppPkg m_package_management ( - in String p_appPkgName, - in String p_appPkgVersion, - in String p_checksum, - in String p_appPkgPath - ) := { - appPkgName := p_appPkgName, - appPkgVersion := p_appPkgVersion, - checksum := p_checksum, - appPkgPath := p_appPkgPath - } - - - template AppPkgWithError m_package_management_with_error ( - in String p_appPkgVersion, - in String p_checksum, - in String p_appPkgPath - ) := { - appPkgVersion := p_appPkgVersion, - checksum := p_checksum, - appPkgPath := p_appPkgPath - } - - template (present) OnboardedAppPkgInfo mw_package_management ( - in template (present) String p_appPkgId := ?, - in template (present) String p_appName := ?, - in template (present) String p_appDId := ?, - in template (present) String p_appDVersion := ?, - in template (present) String p_checksum := ?, - in template (present) OperationalState p_operationalState := ?, - in template (present) UsageState p_usageState := ? - ) := { - appPkgId := p_appPkgId , - appDId := p_appDId , - appName := p_appName, - appDVersion := p_appDVersion, - checksum := p_checksum , - operationalState := p_operationalState, - usageState := p_usageState - } - - - template (omit) AppPkgSubscription m_app_package_subscription ( - in template (omit) AnyURI p_callbackUri := omit, - in template(omit) SubscriptionType p_subscription_type := omit - ) := { - callbackUri := p_callbackUri, - subscriptionType := p_subscription_type - } - - template (omit) AppPkgSubscriptionWithError m_app_package_subscription_with_error ( - in template (omit) AnyURI p_callbackUri := omit, - in template(omit) SubscriptionTypeWithError p_subscription_type := omit - ) := { - callbackUri := p_callbackUri, - subscriptionType := p_subscription_type - } - - - template (present) AppPkgSubscriptionInfo mw_app_package_subscription_info ( - in template (present) String p_subscriptionId := ?, - in template (present) SubscriptionType p_subscription_type := ?, - in template (present) AnyURI p_callbackUri := ? - ) := { - subscriptionId := p_subscriptionId /*FIXME Error???ifpresent*/, - subscriptionType := p_subscription_type, - callbackUri := p_callbackUri - } - - template (present) AppPkgNotification mw_app_package_notification ( - in template (present) String p_notificationId := ?, - in template (present) NotificationType p_notificationType := ?, - in template (present) String p_subscriptionId := ?, - in template (present) AnyURI p_links := ? - ) := { - notificationType := p_notificationType, - subscriptionId := p_subscriptionId, - links := p_links - } - - - -} // End of module LocationAPI_Templates diff --git a/ttcn/LibMec/MepmPkgm/ttcn/MepmPkgm_TypesAndValues.ttcn b/ttcn/LibMec/MepmPkgm/ttcn/MepmPkgm_TypesAndValues.ttcn deleted file mode 100644 index 4df06a8ac1b5a18ea4930906e66b941c7e4654ea..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/MepmPkgm/ttcn/MepmPkgm_TypesAndValues.ttcn +++ /dev/null @@ -1,239 +0,0 @@ -module MepmPkgm_TypesAndValues { - -// JSON -import from JSON all; - -// LibCommon -import from LibCommon_BasicTypesAndValues all; - - -type record AppPkg { - JSON.String appPkgName, - JSON.String appPkgVersion, - JSON.String checksum, - JSON.String appPkgPath -} - -type record AppPkgWithError { - JSON.String appPkgVersion, - JSON.String checksum, - JSON.String appPkgPath -} - -type record of OnboardedAppPkgInfo OnboardedAppPkgInfoList; -type record OnboardedAppPkgInfo { - JSON.String appPkgId, - JSON.String appDId, - JSON.String appName, - JSON.String appDVersion, - JSON.String checksum, - OperationalState operationalState, - UsageState usageState -} - -type enumerated AppPkgOperation { - DISABLE, - ENABLE, - ABORT -} - -type enumerated OperationalState { - ENABLED, - DISABLED, - DELETION_PENDING -} - -type enumerated UsageState { - IN_USE, - NOT_IN_USE -} - - -type enumerated SubscriptionType { - ON_BOARDING, - OP_CHANGE -} - -type enumerated SubscriptionTypeWithError { - ONBOARDING, - OP_CHANGE -} - - -type record of AppPkgSubscriptionInfo AppPkgSubscriptionInfoList; -type record AppPkgSubscriptionInfo { - JSON.String subscriptionId, - SubscriptionType subscriptionType, - JSON.AnyURI callbackUri -} - -type record AppPkgSubscription { - JSON.AnyURI callbackUri, - SubscriptionType subscriptionType -} - -type record AppPkgSubscriptionWithError { - JSON.AnyURI callbackUri, - SubscriptionTypeWithError subscriptionType -} - - -type enumerated NotificationType { - ON_BOARDING, - OP_CHANGE -} - - -type record AppPkgNotification { - NotificationType notificationType, - JSON.String subscriptionId, - //@TODO: links should be named _links but getting error. - //@TODO: links shuld be a record, but cannot contain self cause self is a key for ttnc - JSON.AnyURI links -} - - -// -// -//type record of AppMobilityServiceInfo AppMobilityServiceInfos; -//type record AppMobilityServiceInfo { -// RegistrationInfos registeredAppMobilityService , -// String appMobilityServiceId -//} -// -//type record of RegistrationInfo RegistrationInfos; -//type record RegistrationInfo { -// ServiceConsumerId serviceConsumerId, -// DeviceInformations deviceInformation optional, -// UInt32 expiryTime optional -//} -// -// -// -// -// -//type record of ServiceConsumerId ServiceConsumerIds; -//type record ServiceConsumerId { -// String appInstanceId optional, -// String mepId optional -//} -// -//// Erroneous parameter: appInstance should be appInstanceId -//type record of ServiceConsumer ServiceConsumers; -//type record ServiceConsumer { -// String appInstance optional, -// String mepId optional -//} -// -//type record of DeviceInformation DeviceInformations; -//type record DeviceInformation { -// String associateId -//} -// -// -//type JSON.AnyURI links; -// -//type enumerated SubscriptionType { -// MobilityProcedureSubscription, -// AdjacentAppInfoSubscription -//} -// -//type record Subscription { -// JSON.AnyURI href, -// SubscriptionType subscriptionType -//} -// -// -//type record of AmsSubscriptionLinkList AmsSubscriptionLinkLists; -//type record AmsSubscriptionLinkList { -// JSON.AnyURI links, -// Subscription subscription -//} -// -// -//type record MobilityProcedureSubscriptionError { -// SubscriptionType subscriptionType, -// JSON.AnyURI callbackReference, -// JSON.AnyURI links optional, -// FilterCriteria filterCriteria, -// TimeStamp expiryDeadline optional -//} -// -// -// -// -//type record of MobilityProcedureSubscription MobilityProcedureSubscriptions; -//type record MobilityProcedureSubscription { -// SubscriptionType subscriptionType, -// JSON.AnyURI callbackReference, -// JSON.AnyURI links optional, -// FilterCriteria filterCriteria, -// TimeStamp expiryDeadline optional -//} -// -//type enumerated MobilityStatusType { -// INTERHOST_MOVEOUT_TRIGGERED, -// TARGET_APPINST_CONFIRMED, -// TARGET_TRAFFIC_RULE_ACTIVATED, -// INTERHOST_MOVEOUT_COMPLETED, -// INTERHOST_MOVEOUT_FAILED -//} -// -//type record AssociateIdList { -// String associateId -//} -// -//type record of FilterCriteria FilterCriterias; -//type record FilterCriteria { -// String appInstanceId optional, -// AssociateIdList associateId optional, -// MobilityStatusType mobilityStatus -//} -// -// -// -//type record AdjacentFilterCriteria { -// String appInstanceId optional -//} -// -// -//type record of ExpiryNotification ExpiryNotifications; -//type record ExpiryNotification { -// TimeStamp timeStamp, -// JSON.AnyURI links optional, -// TimeStamp expiryDeadline -//} -// -//type record of AdjacentAppInfoSubscription AdjacentAppInfoSubscriptions; -//type record AdjacentAppInfoSubscription { -// SubscriptionType subscriptionType, -// JSON.AnyURI callbackReference, -// JSON.AnyURI links optional, -// AdjacentFilterCriteria filterCriteria, -// TimeStamp expiryDeadline optional -//} - - /** - * @desc - * @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - * @member nanoSeconds The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type record TimeStamp { - Seconds seconds, - NanoSeconds nanoSeconds - } - - - /** - * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type UInt32 Seconds; - - /** - * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type UInt32 NanoSeconds; - -} with { -encode "JSON" -} diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn index 30e9da68e1fa14968281a588841a034359d67a55..dc220989fe36811bdd3e4f1ed4b77cd26ab387b7 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn @@ -3,15 +3,17 @@ module RnisAPI_Pixits { // JSON import from JSON all; + // LibCommon + import from LibCommon_BasicTypesAndValues all; + // LibMec/Rnis import from RnisAPI_TypesAndValues all; modulepar JSON.String PX_SUBSCRIPTION_HREF_VALUE := "cell_change"; - modulepar SubscriptionType PX_SUBSCRIPTION_TYPE := CELL_CHANGE; - modulepar JSON.String PX_SUBSCRIPTION_ID := "7777"; + modulepar JSON.String PX_UNKNOWN_SUBSCRIPTION_ID := "0666"; - modulepar Link PX_LINKS_SELF := { self_ := "http://example.com/exampleAPI/rni/v2/subscriptions" }; + modulepar Link PX_LINKS_SELF := { self_ := { href := "http://example.com/exampleAPI/rni/v2/subscriptions" } }; modulepar charstring PX_CALLBACK_URI := "/"; @@ -20,20 +22,21 @@ module RnisAPI_Pixits { modulepar JSON.String PX_ASSOCIATE_ID_VALUE := "192.0.0.2"; modulepar CellId PX_CELL_ID := "0x0800000A"; + + modulepar CellId PX_UNKNOWN_CELL_ID := "0x0800000A"; modulepar CellId PX_C_ID := "0xFFFFFFFF"; modulepar CellId PX_NOT_EXISTENT_CELL_ID := "0x8000099"; - modulepar AppInsId PX_APP_INS_ID := "01"; + modulepar AppInstanceId PX_APP_INS_ID := "01"; - modulepar AppInsId PX_APP_ID := "19"; + modulepar AppInstanceId PX_APP_ID := "19"; - modulepar AppInsId PX_NOT_EXISTENT_APP_INS_ID := "99"; + modulepar AppInstanceId PX_NOT_EXISTENT_APP_INS_ID := "99"; - modulepar ErabId PX_E_RAB_ID := 0; + modulepar UInt32 PX_E_RAB_ID := 0; modulepar Qci PX_QCI := 0; - } // End of module RnisAPI_Pixits diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn index 03423308f36c7e1b0ff6891f4a5933a6fb1d2ec1..153650521da03d5a315e73774f232123b930c183 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn @@ -11,26 +11,38 @@ module RnisAPI_Templates { group subscriptions { - template (omit) SubscriptionLinkList m_subscriptions_list( - in Link p_links, - in template (omit) Subscription p_subscription := omit - ) := { - links := p_links, - subscription := p_subscription + template (value) SubscriptionLinkList m_subscriptions_list( + in SubscriptionLinkList_Link p_links + ) := { + links := p_links } // End of template m_subscriptions_list - template SubscriptionLinkList mw_subscriptions_list( - template (present) Link p_links := ?, - template Subscription p_subscription := * - ) := { - links := p_links, + template (present) SubscriptionLinkList mw_subscriptions_list( + template (present) SubscriptionLinkList_Link p_links := ? + ) := { + links := p_links + } // End of template mw_subscriptions_list + + template (omit) SubscriptionLinkList_Link m_subscription_link_list_Link( + in LinkType p_self_, + in template (omit) Subscription p_subscription := omit + ) := { + self_ := p_self_, subscription := p_subscription - } // End of template mw_subscriptions_list + } // End of template m_subscription_link_list_Link + + template SubscriptionLinkList_Link mw_subscription_link_list_Link( + template (present) LinkType p_self_ := ?, + template Subscription p_subscription := * + ) := { + self_ := p_self_, + subscription := p_subscription + } // End of template mw_subscription_link_list_Link template (value) Subscription_ m_subscription( in LinkType p_href, - in SubscriptionType p_subscriptionType + in JSON.String p_subscriptionType ) := { href := p_href, subscriptionType := p_subscriptionType @@ -38,7 +50,7 @@ module RnisAPI_Templates { template (present) Subscription_ mw_subscription( template (present) LinkType p_href := ?, - template (present) SubscriptionType p_subscriptionType := ? + template (present) JSON.String p_subscriptionType := ? ) := { href := p_href, subscriptionType := p_subscriptionType @@ -46,256 +58,317 @@ module RnisAPI_Templates { template (omit) CellChangeSubscription m_cell_change_subscription( in template (value) CallbackReference p_callbackReference, - in template (value) Link p_links, - in template (value) FilterCriteriaAssocHo p_filterCriteria, + in template (value) FilterCriteriaAssocHo p_filterCriteriaAssocHo, + in template (omit) Link p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { - subscriptionType := CELL_CHANGE, - callbackReference := p_callbackReference, - links := p_links, - filterCriteria := p_filterCriteria, - expiryDeadline := p_expiryDeadline + subscriptionType := "CellChangeSubscription", + callbackReference := p_callbackReference, + links := p_links, + filterCriteriaAssocHo := p_filterCriteriaAssocHo, + expiryDeadline := p_expiryDeadline } // End of template m_cell_change_subscription template (omit) CellChangeSubscription m_cell_change_subscription_wrong_subscription_type( in template (value) CallbackReference p_callbackReference, - in template (value) Link p_links, - in template (value) FilterCriteriaAssocHo p_filterCriteria, + in template (value) FilterCriteriaAssocHo p_filterCriteriaAssocHo, + in template (omit) Link p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) modifies m_cell_change_subscription := { - subscriptionType := WRONG_PARAMETER + subscriptionType := "CellChangeSubscription_invalid" } // End of template m_cell_change_subscription_wrong_subscription_type template CellChangeSubscription mw_cell_change_subscription( template (present) CallbackReference p_callbackReference := ?, template (present) Link p_links := ?, - template (present) FilterCriteriaAssocHo p_filterCriteria := ?, + template (present) FilterCriteriaAssocHo p_filterCriteriaAssocHo := ?, template TimeStamp p_expiryDeadline := * ) := { - subscriptionType := CELL_CHANGE, - callbackReference := p_callbackReference, - links := p_links, - filterCriteria := p_filterCriteria, - expiryDeadline := p_expiryDeadline + subscriptionType := "CellChangeSubscription", + callbackReference := p_callbackReference, + links := p_links, + filterCriteriaAssocHo := p_filterCriteriaAssocHo, + expiryDeadline := p_expiryDeadline } // End of template mw_cell_change_subscription } // End of group subscriptions group notifications { - template (value) RabEstSubscription m_rab_est_subscription( - in template (value) CallbackReference p_callbackReference, - in template (value) Link p_links, - in template (value) FilterCriteriaAssocQci p_filterCriteria, - in template (value)TimeStamp p_expiryDeadline + template (omit) RabEstSubscription m_rab_est_subscription( + in template (value) CallbackReference p_callbackReference, + in template (value) RabEstSubscription_FilterCriteriaQci p_filterCriteriaQci, + in template (omit) Link p_links := omit, + in template (omit) TimeStamp p_expiryDeadline := omit ) := { - subscriptionType := RAB_ESTABLISHMENT, + subscriptionType := "RabEstSubscription", callbackReference := p_callbackReference, links := p_links, - filterCriteria := p_filterCriteria, + filterCriteriaQci := p_filterCriteriaQci, expiryDeadline := p_expiryDeadline } // End of template m_rab_est_subscription template (present) RabEstSubscription mw_rab_est_subscription( template (present) CallbackReference p_callbackReference := ?, template (present) Link p_links := ?, - template (present) FilterCriteriaAssocQci p_filterCriteria := ?, - template (present)TimeStamp p_expiryDeadline := ? + template (present) RabEstSubscription_FilterCriteriaQci p_filterCriteriaQci := ?, + template TimeStamp p_expiryDeadline := * ) := { - subscriptionType := RAB_ESTABLISHMENT, + subscriptionType := "RabEstSubscription", callbackReference := p_callbackReference, links := p_links, - filterCriteria := p_filterCriteria, + filterCriteriaQci := p_filterCriteriaQci, expiryDeadline := p_expiryDeadline } // End of template mw_rab_est_subscription - template (value) RabModSubscription m_rab_mod_subscription( - in template (value) CallbackReference p_callbackReference, - in template (value) Link p_links, - in template (value) FilterCriteriaAssocQci p_filterCriteria, - in template (value)TimeStamp p_expiryDeadline + template (omit) RabModSubscription m_rab_mod_subscription( + in template (value) CallbackReference p_callbackReference, + in template (value) RabModSubscription_FilterCriteriaQci p_filterCriteriaQci, + in template (omit) Link p_links := omit, + in template (omit) TimeStamp p_expiryDeadline := omit ) := { - subscriptionType := RAB_MODIFICATION, + subscriptionType := "RabModSubscription", callbackReference := p_callbackReference, links := p_links, - filterCriteria := p_filterCriteria, + filterCriteriaQci := p_filterCriteriaQci, expiryDeadline := p_expiryDeadline } // End of template m_rab_mod_subscription template (present) RabModSubscription mw_rab_mod_subscription( template (present) CallbackReference p_callbackReference := ?, template (present) Link p_links := ?, - template (present) FilterCriteriaAssocQci p_filterCriteria := ?, - template (present)TimeStamp p_expiryDeadline := ? + template (present) RabModSubscription_FilterCriteriaQci p_filterCriteriaQci := ?, + template TimeStamp p_expiryDeadline := * ) := { - subscriptionType := RAB_MODIFICATION, + subscriptionType := "RabModSubscription", callbackReference := p_callbackReference, links := p_links, - filterCriteria := p_filterCriteria, + filterCriteriaQci := p_filterCriteriaQci, expiryDeadline := p_expiryDeadline } // End of template mw_rab_mod_subscription - template (value) RabRelSubscription m_rab_rel_subscription( - in template (value) CallbackReference p_callbackReference, - in template (value) Link p_links, - in template (value) FilterCriteriaAssocQci p_filterCriteria, - in template (value)TimeStamp p_expiryDeadline + template (omit) RabRelSubscription m_rab_rel_subscription( + in template (value) CallbackReference p_callbackReference, + in template (value) RabModSubscription_FilterCriteriaQci p_filterCriteriaQci, + in template (omit) Link p_links := omit, + in template (omit) TimeStamp p_expiryDeadline := omit ) := { - subscriptionType := RAB_RELEASE, + subscriptionType := "RabRelSubscription", callbackReference := p_callbackReference, links := p_links, - filterCriteria := p_filterCriteria, + filterCriteriaQci := p_filterCriteriaQci, expiryDeadline := p_expiryDeadline } // End of template m_rab_rel_subscription template (present) RabRelSubscription mw_rab_rel_subscription( template (present) CallbackReference p_callbackReference := ?, template (present) Link p_links := ?, - template (present) FilterCriteriaAssocQci p_filterCriteria := ?, - template (present)TimeStamp p_expiryDeadline := ? + template (present) RabModSubscription_FilterCriteriaQci p_filterCriteriaQci := ?, + template TimeStamp p_expiryDeadline := * ) := { - subscriptionType := RAB_RELEASE, + subscriptionType := "RabRelSubscription", callbackReference := p_callbackReference, links := p_links, - filterCriteria := p_filterCriteria, + filterCriteriaQci := p_filterCriteriaQci, expiryDeadline := p_expiryDeadline } // End of template mw_rab_rel_subscription template (present) MeasRepUeSubscription mw_meas_rep_ue_subscription( template (present) CallbackReference p_callbackReference := ?, template (present) Link p_links := ?, - template (present) FilterCriteriaAssocTri p_filterCriteria := ?, - template (present)TimeStamp p_expiryDeadline := ? - ) := { - subscriptionType := MEAS_REPORT_UE, - callbackReference := p_callbackReference, - links := p_links, - filterCriteria := p_filterCriteria, - expiryDeadline := p_expiryDeadline + template (present) FilterCriteriaAssocTri p_filterCriteriaAssocTri := ?, + template TimeStamp p_expiryDeadline := * + ) := { + subscriptionType := "MeasRepUeSubscription", + callbackReference := p_callbackReference, + links := p_links, + filterCriteriaAssocTri := p_filterCriteriaAssocTri, + expiryDeadline := p_expiryDeadline } // End of template mw_meas_rep_ue_subscription template (present) MeasTaSubscription mw_meas_ta_subscription( template (present) CallbackReference p_callbackReference := ?, template (present) Link p_links := ?, - template (present) FilterCriteriaAssocHo p_filterCriteria := ?, - template (present)TimeStamp p_expiryDeadline := ? - ) := { - subscriptionType := MEAS_TIMING_ADVANCE, - callbackReference := p_callbackReference, - links := p_links, - filterCriteria := p_filterCriteria, - expiryDeadline := p_expiryDeadline + template (present) FilterCriteriaAssocHo p_filterCriteriaAssocHo := ?, + template TimeStamp p_expiryDeadline := * + ) := { + subscriptionType := "MeasTaSubscription", + callbackReference := p_callbackReference, + links := p_links, + filterCriteriaAssocHo := p_filterCriteriaAssocHo, + expiryDeadline := p_expiryDeadline } // End of template mw_meas_ta_subscription template (present) CaReConfSubscription mw_ca_reconfig_subscription( template (present) CallbackReference p_callbackReference := ?, template (present) Link p_links := ?, - template (present) FilterCriteriaAssoc p_filterCriteria := ?, - template (present)TimeStamp p_expiryDeadline := ? - ) := { - subscriptionType := CA_RECONF, - callbackReference := p_callbackReference, - links := p_links, - filterCriteria := p_filterCriteria, - expiryDeadline := p_expiryDeadline + template (present) FilterCriteriaAssoc p_filterCriteriaAssoc := ?, + template TimeStamp p_expiryDeadline := * + ) := { + subscriptionType := "CaReConfSubscription", + callbackReference := p_callbackReference, + links := p_links, + filterCriteriaAssoc := p_filterCriteriaAssoc, + expiryDeadline := p_expiryDeadline } // End of template mw_ca_reconfig_subscription template (present) S1BearerSubscription mw_s1_bearer_subscription( template (present) CallbackReference p_callbackReference := ?, template (present) Link p_links := ?, + template (present) EventType p_eventType := ?, template (present) S1BearerSubscriptionCriteria p_s1BearerSubscriptionCriteria := ?, - template (present)TimeStamp p_expiryDeadline := ? + template TimeStamp p_expiryDeadline := * ) := { - subscriptionType := S1_BEARER, - callbackReference := p_callbackReference, - links := p_links, + subscriptionType := "S1BearerSubscription", + callbackReference := p_callbackReference, + links := p_links, + eventType := p_eventType, s1BearerSubscriptionCriteria := p_s1BearerSubscriptionCriteria, - expiryDeadline := p_expiryDeadline + expiryDeadline := p_expiryDeadline } // End of template mw_s1_bearer_subscription } // End of group notifications group info_request { - template (value) RabInfo m_rab_info( - in template (value) TimeStamp p_timeStamp, - in AppInsId p_appInsId, - in RequestId p_requestId, - in template (value) CellUserInfo p_cellUserInfo + template (omit) RabInfo m_rab_info( + in AppInstanceId p_appInstanceId, + in RequestId p_requestId, + in template (omit) TimeStamp p_timeStamp := omit, + in template (omit) RabInfo_CellUserInfo p_cellUserInfo := omit ) := { - timeStamp := p_timeStamp, - appInsId := p_appInsId, - requestId := p_requestId, - cellUserInfo := p_cellUserInfo + timeStamp := p_timeStamp, + appInstanceId := p_appInstanceId, + requestId := p_requestId, + cellUserInfo := p_cellUserInfo } // End of temlate m_rab_info template (present) RabInfo mw_rab_info( - template (present) TimeStamp p_timeStamp := ?, - template (present) AppInsId p_appInsId := ?, + template (present) AppInstanceId p_appInstanceId := ?, template (present) RequestId p_requestId := ?, - template (present) CellUserInfo p_cellUserInfo := ? + template (present) RabInfo_CellUserInfo p_cellUserInfo := ?, + template TimeStamp p_timeStamp := * + ) := { + timeStamp := p_timeStamp, + appInstanceId := p_appInstanceId, + requestId := p_requestId, + cellUserInfo := p_cellUserInfo + } // End of temlate mw_rab_info + + template (present) RabInfo mw_rab_info_no_info( + template (present) AppInstanceId p_appInstanceId := ?, + template (present) RequestId p_requestId := ?, + template RabInfo_CellUserInfo p_cellUserInfo := omit, + template TimeStamp p_timeStamp := * ) := { - timeStamp := p_timeStamp, - appInsId := p_appInsId, - requestId := p_requestId, - cellUserInfo := p_cellUserInfo + timeStamp := p_timeStamp, + appInstanceId := p_appInstanceId, + requestId := p_requestId, + cellUserInfo := p_cellUserInfo } // End of temlate mw_rab_info - template (value) PlmnInfo m_plmn_info( - in template (value) TimeStamp p_timeStamp, - in AppInsId p_appInsId, - in template (value) Plmns p_plmn + template (omit) PlmnInfo m_plmn_info( + in AppInstanceId p_appInstanceId, + in template (value) Plmns p_plmn, + in template (omit) TimeStamp p_timeStamp := omit ) := { timeStamp := p_timeStamp, - appInsId := p_appInsId, + appInstanceId := p_appInstanceId, plmn := p_plmn } // End of temlate m_plmn_info template (present) PlmnInfo mw_plmn_info( - template (present) TimeStamp p_timeStamp := ?, - template (present) AppInsId p_appInsId := ?, - template (present) Plmns p_plmn := ? + template (present) AppInstanceId p_appInstanceId := ?, + template (present) Plmns p_plmn := ?, + template TimeStamp p_timeStamp := * ) := { timeStamp := p_timeStamp, - appInsId := p_appInsId, + appInstanceId := p_appInstanceId, plmn := p_plmn } // End of temlate mw_plmn_info - template (value) S1BearerInfo m_s1_bearer_info( - in template (value) TimeStamp p_timeStamp, - in template (value) S1UeInfo p_s1UeInfo + template (omit) S1BearerInfo m_s1_bearer_info( + in template (value) S1UeInfo p_s1UeInfo, + in template (omit) TimeStamp p_timeStamp := omit ) := { timeStamp := p_timeStamp, s1UeInfo := p_s1UeInfo } // End of temlate m_s1_bearer_info template (present) S1BearerInfo mw_s1_bearer_info( - template (present) TimeStamp p_timeStamp := ?, - template (present) S1UeInfo p_s1UeInfo := ? + template (present) S1UeInfo p_s1UeInfo := ?, + template TimeStamp p_timeStamp := * ) := { timeStamp := p_timeStamp, s1UeInfo := p_s1UeInfo } // End of temlate mw_s1_bearer_info - template (omit) L2Meas m_l2_measa( - in template (omit )TimeStamp p_timestamp := omit, - in template (value) CellInfo p_cellInfo, - in template (value) CellUEInfo p_cellUEInfo - ) := { - timestamp_ := p_timestamp, + template (omit) L2Meas m_l2_meas( + in template (value) L2Meas_CellInfo p_cellInfo, + in template (value) L2Meas_CellUEInfo p_cellUEInfo, + in template (omit) TimeStamp p_timeStamp := omit + ) := { + timeStamp := p_timeStamp, cellInfo := p_cellInfo, cellUEInfo := p_cellUEInfo - } // End of template m_l2_measa - - template L2Meas mw_l2_measa( - template TimeStamp p_timestamp := *, - template CellInfo p_cellInfo := *, - template CellUEInfo p_cellUEInfo := * - ) := { - timestamp_ := p_timestamp, + } // End of template m_l2_meas + + template L2Meas mw_l2_meas( + template L2Meas_CellInfo p_cellInfo := *, + template L2Meas_CellUEInfo p_cellUEInfo := *, + template TimeStamp p_timeStamp := * + ) := { + timeStamp := p_timeStamp, cellInfo := p_cellInfo, cellUEInfo := p_cellUEInfo - } // End of template mw_l2_measa + } // End of template mw_l2_meas + + template L2Meas_CellInfo_ mw_l2_meas_cell_info( + template Ecgi p_ecgi := * + ) := { + ecgi := p_ecgi, + dl_gbr_prb_usage_cell := *, + ul_gbr_prb_usage_cell := *, + dl_nongbr_prb_usage_cell := *, + ul_nongbr_prb_usage_cell := *, + dl_total_prb_usage_cell := *, + ul_total_prb_usage_cell := *, + received_dedicated_preambles_cell := *, + received_randomly_selected_preambles_low_range_cell := *, + received_randomly_selected_preambles_high_range_cell := *, + number_of_active_ue_dl_gbr_cell := *, + number_of_active_ue_ul_gbr_cell := *, + number_of_active_ue_dl_nongbr_cell := *, + number_of_active_ue_ul_nongbr_cell := *, + dl_gbr_pdr_cell := *, + ul_gbr_pdr_cell := *, + dl_nongbr_pdr_cell := *, + ul_nongbr_pdr_cell := * + } // End of template mw_l2_meas_cell_info + + template (present) L2Meas_CellUEInfo_ mw_l2_meas_cell_ue_info( + template (present) Ecgi p_ecgi := ?, + template (present) AssociateId_ p_associateId := ? + ) := { + ecgi := p_ecgi, + associateId := p_associateId, + dl_gbr_delay_ue := *, + ul_gbr_delay_ue := *, + dl_nongbr_delay_ue := *, + ul_nongbr_delay_ue := *, + dl_gbr_pdr_ue := *, + ul_gbr_pdr_ue := *, + dl_nongbr_pdr_ue := *, + ul_nongbr_pdr_ue := *, + dl_gbr_throughput_ue := *, + ul_gbr_throughput_ue := *, + dl_nongbr_throughput_ue := *, + ul_nongbr_throughput_ue := *, + dl_gbr_data_volume_ue := *, + ul_gbr_data_volume_ue := *, + dl_nongbr_data_volume_ue := *, + ul_nongbr_data_volume_ue := * + } // End of template mw_l2_meas_cell_ue_info } // End of group info_request @@ -342,117 +415,129 @@ module RnisAPI_Templates { } // End of temlate mw_time_stamp template (value) FilterCriteriaAssoc m_filter_criteria( - in AppInsId p_appInsId, + in AppInstanceId p_appInstanceId, in template (value) AssociateId p_associateId, - in template (value) Plmn p_plmn, - in template (value) CellId p_cellId + in template (value) Ecgi_list p_ecgi ) := { - appInsId := p_appInsId, - associateId := p_associateId, - plmn := p_plmn, - cellId := p_cellId + appInstanceId := p_appInstanceId, + associateId := p_associateId, + ecgi := p_ecgi } // End of template m_filter_criteria template (present) FilterCriteriaAssoc mw_filter_criteria( - template (present) AppInsId p_appInsId := ?, + template (present) AppInstanceId p_appInstanceId := ?, template (present) AssociateId p_associateId := ?, - template (present) Plmn p_plmn := ?, - template (present) CellId p_cellId := ? + template (present) Ecgi_list p_ecgi := ? ) := { - appInsId := p_appInsId, - associateId := p_associateId, - plmn := p_plmn, - cellId := p_cellId + appInstanceId := p_appInstanceId, + associateId := p_associateId, + ecgi := p_ecgi } // End of template mw_filter_criteria - template (value) FilterCriteriaAssocHo m_filter_criteria_ho( - in AppInsId p_appInsId, - in template (value) AssociateId p_associateId, - in template (value) Plmn p_plmn, - in template (value) CellId p_cellId, - in HoStatus p_hoStatus + template (omit) FilterCriteriaAssocHo m_filter_criteria_ho( + in AppInstanceId p_appInstanceId, + in template (value) AssociateId p_associateId, + in template (value) Ecgi_list p_ecgi, + in template (omit) HoStatus_list p_hoStatus := omit ) := { - appInsId := p_appInsId, - associateId := p_associateId, - plmn := p_plmn, - cellId := p_cellId, - hoStatus := p_hoStatus + appInstanceId := p_appInstanceId, + associateId := p_associateId, + ecgi := p_ecgi, + hoStatus := p_hoStatus } // End of template m_filter_criteria_ho template (present) FilterCriteriaAssocHo mw_filter_criteria_ho( - template (present) AppInsId p_appInsId := ?, + template (present) AppInstanceId p_appInstanceId := ?, template (present) AssociateId p_associateId := ?, - template (present) Plmn p_plmn := ?, - template (present) CellId p_cellId := ?, - template (present) HoStatus p_hoStatus := ? + template (present) Ecgi_list p_ecgi := ?, + template (present) HoStatus_list p_hoStatus := ? ) := { - appInsId := p_appInsId, - associateId := p_associateId, - plmn := p_plmn, - cellId := p_cellId, - hoStatus := p_hoStatus + appInstanceId := p_appInstanceId, + associateId := p_associateId, + ecgi := p_ecgi, + hoStatus := p_hoStatus } // End of template mw_filter_criteria_ho - - template (value) FilterCriteriaAssocQci m_filter_criteria_qci( - in AppInsId p_appInsId, - in template (value) ErabId p_erabId, - in template (value) Ecgi p_ecgi, - in template (value) Qci p_qci - ) := { - appInsId := p_appInsId, - erabId := p_erabId, + + template (value) RabEstSubscription_FilterCriteriaQci m_rab_est_filter_criteria_qci( + in AppInstanceId p_appInstanceId, + in template (value) Ecgi_list p_ecgi, + in template (value) Qci p_qci + ) := { + appInstanceId := p_appInstanceId, + ecgi := p_ecgi, + qci := p_qci + } // End of template m_rab_est_filter_criteria_qci + + template (present) RabEstSubscription_FilterCriteriaQci mw_rab_est_filter_criteria_qci( + template (present) AppInstanceId p_appInstanceId := ?, + template (present) Ecgi_list p_ecgi := ?, + template (present) Qci p_qci := ? + ) := { + appInstanceId := p_appInstanceId, ecgi := p_ecgi, qci := p_qci + } // End of template mw_rab_est_filter_criteria_qci + + template (value) RabModSubscription_FilterCriteriaQci m_filter_criteria_qci( + in AppInstanceId p_appInstanceId, + in template (value) UInt32 p_erabId, + in template (value) Ecgi_list p_ecgi, + in template (value) Qci p_qci + ) := { + appInstanceId := p_appInstanceId, + erabId := p_erabId, + ecgi := p_ecgi, + qci := p_qci } // End of template m_filter_criteria_qci - template (present) FilterCriteriaAssocQci mw_filter_criteria_qci( - template (present) AppInsId p_appInsId := ?, - template (present) ErabId p_erabId := ?, - template (present) Ecgi p_ecgi := ?, - template (present) Qci p_qci := ? - ) := { - appInsId := p_appInsId, - erabId := p_erabId, - ecgi := p_ecgi, - qci := p_qci + template (present) RabModSubscription_FilterCriteriaQci mw_filter_criteria_qci( + template (present) AppInstanceId p_appInstanceId := ?, + template (present) UInt32 p_erabId := ?, + template (present) Ecgi_list p_ecgi := ?, + template (present) Qci p_qci := ? + ) := { + appInstanceId := p_appInstanceId, + erabId := p_erabId, + ecgi := p_ecgi, + qci := p_qci } // End of template mw_filter_criteria_qci template (value) FilterCriteriaAssocTri m_filter_criteria_tri( - in AppInsId p_appInsId, - in template (value) Plmn p_plmn, - in template (value) CellId p_cellId, + in AppInstanceId p_appInstanceId, + in template (value) AssociateId p_associateId, + in template (value) Ecgi_list p_ecgi, in template (value) Trigger p_trigger ) := { - appInsId := p_appInsId, - plmn := p_plmn, - cellId := p_cellId, - trigger_ := p_trigger + appInstanceId := p_appInstanceId, + associateId := p_associateId, + ecgi := p_ecgi, + trigger_ := p_trigger } // End of template m_filter_criteria_tri template (present) FilterCriteriaAssocTri mw_filter_criteria_tri( - template (present) AppInsId p_appInsId := ?, - template (present) Plmn p_plmn := ?, - template (present) CellId p_cellId := ?, + template (present) AppInstanceId p_appInstanceId := ?, + template (present) AssociateId p_associateId := ?, + template (present) Ecgi_list p_ecgi := ?, template (present) Trigger p_trigger := ? ) := { - appInsId := p_appInsId, - plmn := p_plmn, - cellId := p_cellId, - trigger_ := p_trigger + appInstanceId := p_appInstanceId, + associateId := p_associateId, + ecgi := p_ecgi, + trigger_ := p_trigger } // End of template mw_filter_criteria_tri - template (value) CellUserInfo_ m_cell_user_info( - in template (value) Ecgi p_ecgi, - in template (value) UeInfo p_ueInfo - ) := { + template (value) RabInfo_CellUserInfo_ m_cell_user_info( + in template (value) Ecgi p_ecgi, + in template (value) UeInfo p_ueInfo + ) := { ecgi := p_ecgi, ueInfo := p_ueInfo } // End of template m_cell_user_info - template (present) CellUserInfo_ mw_cell_user_info( - template (present) Ecgi p_ecgi := ?, - template (present) UeInfo p_ueInfo := ? - ) := { + template (present) RabInfo_CellUserInfo_ mw_cell_user_info( + template (present) Ecgi p_ecgi := ?, + template (present) UeInfo p_ueInfo := ? + ) := { ecgi := p_ecgi, ueInfo := p_ueInfo } // End of template mw_cell_user_info @@ -473,17 +558,17 @@ module RnisAPI_Templates { value_ := p_value_ } // End of template mw_associate_id - template (value) Ecgi_ m_ecgi( - in template (value) Plmn p_plmn, - in template (value) CellId p_cellId + template (value) Ecgi m_ecgi( + in template (value) Plmn p_plmn, + in template (value) CellId p_cellId ) := { plmn := p_plmn, cellId := p_cellId } // End of template m_ecgi - template (present) Ecgi_ mw_ecgi( - template (present) Plmn p_plmn := ?, - template (present) CellId p_cellId := ? + template (present) Ecgi mw_ecgi( + template (present) Plmn p_plmn := ?, + template (present) CellId p_cellId := ? ) := { plmn := p_plmn, cellId := p_cellId @@ -522,7 +607,7 @@ module RnisAPI_Templates { } // End of template mw_temp_ue_id template (value) S1BearerInfoDetailed_ m_s1_bearer_info_detailed( - in ErabId p_erabId, + in UInt32 p_erabId, in template (value) S1EnbInfo p_s1EnbInfo, in template (value) SGwInfo p_sGwInfo ) := { @@ -532,7 +617,7 @@ module RnisAPI_Templates { } // End of template m_s1_bearer_info_detailed template (present) S1BearerInfoDetailed_ mw_s1_bearer_info_detailed( - template (present) ErabId p_erabId := ?, + template (present) UInt32 p_erabId := ?, template (present) S1EnbInfo p_s1EnbInfo := ?, template (present) SGwInfo p_sGwInfo := ? ) := { diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn index fa70cf7be9bb0a86ed3dc9ef42eb9a5f6479d0d2..4687000a6b82149e52e4f4809bcaff74959758f0 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn @@ -10,89 +10,106 @@ module RnisAPI_TypesAndValues { // LibCommon import from LibCommon_BasicTypesAndValues all; + /** + * @desc Represents a time stamp + * @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + * @member nanoSeconds The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + * ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.5.3-1: Attributes of the TimeStamp + */ + type record TimeStamp { + UInt32 seconds, + UInt32 nanoSeconds + } + /** * @desc This type represents the information on Mobile Network(s), which a MEC application instance is associated to. - * @member timeStamp - * @member appInsId - * @member ecgi + * @member timeStamp Time stamp + * @member appInsId Unique identifier for the MEC application instance + * @member plmn Public Land Mobile Network Identity + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.2.2-1: Attributes of the PlmnInfo */ type record PlmnInfo { - TimeStamp timeStamp optional, - AppInsId appInsId, - Plmns plmn + TimeStamp timeStamp optional, + AppInstanceId appInstanceId, + Plmns plmn } + type record of PlmnInfo PlmnInfos; /** * @desc This type represents the information on existing E-RABs that are associated with a specific MEC application instance. - * @member timeStamp - * @member appInsId - * @member requestId - * @member cellUserInfo + * @member timeStamp Time stamp + * @member appInstanceId Unique identifier for the MEC application instance + * @member requestId Unique identifier allocated by the service consumer for the RAB Information request + * @member cellUserInfo The information on users per cell as defined below + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.2.3-1: Attributes of the RabInfo */ type record RabInfo { - TimeStamp timeStamp optional, - AppInsId appInsId, - RequestId requestId, - CellUserInfo cellUserInfo optional + TimeStamp timeStamp optional, + AppInstanceId appInstanceId, + RequestId requestId, + RabInfo_CellUserInfo cellUserInfo optional } + /** + * @desc The information on users per cell + * @member ecgi E-UTRAN CelI Global Identifier + * @member ueInfo Information on UEs in the specific cell + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.2.3-1: Attributes of the RabInfo + */ + type record RabInfo_CellUserInfo_ { + Ecgi ecgi, + UeInfo ueInfo + } + type record of RabInfo_CellUserInfo_ RabInfo_CellUserInfo; + /** * @desc This type represents the information on S1-U bearer. - * @member timeStamp - * @member appInsId - * @member ecgi + * @member timeStamp Time stamp + * @member S1UeInfo Information on a specific UE + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.2.4-1 Attributes of the S1BearerInfo */ type record S1BearerInfo { TimeStamp timeStamp optional, S1UeInfo s1UeInfo } - - /** - * @desc This type represents the information on the Layer 2 measurements information from one or more eNBs that are associated with the requested MEC application instance. - * @member timestamp Time stamp - * @member cellInfo The per cell measurement information - * @member cellUEInfo The per cell per UE layer 2 measurements information - */ - type record L2Meas { - TimeStamp timestamp_ optional, - CellInfo cellInfo optional, - CellUEInfo cellUEInfo optional - } - + /** - * @desc The information on users per cell - * @member tempUeId - * @member associateId - * @member ecgi - * @member s1BearerInfoDetailed + * @desc Information on a specific UE + * @member tempUeId The temporary identifier allocated for the specific UE + * @member associateId 1 to N identifiers to associate the information for a specific UE or flow + * @member ecgi E-UTRAN CelI Global Identifier + * @member s1BearerInfoDetailed S1 bearer information + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.2.4-1 Attributes of the S1BearerInfo */ type record S1UeInfo_ { - TempUeId tempUeId optional, - AssociateId associateId optional, - Ecgi ecgi, + TempUeId tempUeId optional, + AssociateId associateId, + Ecgi ecgi, S1BearerInfoDetailed s1BearerInfoDetailed } type record of S1UeInfo_ S1UeInfo; - + /** * @desc Information on UEs in the specific cell * @member erabId The element that uniquely identifies a S1 bearer for a specific UE, as defined in ETSI TS 136 413 * @member enbInfo S1 bearer information on eNB side * @member sGwInfo S1 bearer information on GW side + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.2.4-1 Attributes of the S1BearerInfo */ type record S1BearerInfoDetailed_ { - ErabId erabId, + UInt32 erabId, S1EnbInfo s1EnbInfo, - SGwInfo sGwInfo + SGwInfo sGwInfo } type record of S1BearerInfoDetailed_ S1BearerInfoDetailed; - type UInt32 ErabId; + type record of UInt32 ErabId; /** - * @desc + * @desc The temporary identifier allocated for the specific UE * @member mmec MMEC as defined in ETSI TS 136 413 * @member mtmsi M-TMSI as defined in ETSI TS 136 413 + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.2.4-1 Attributes of the S1BearerInfo */ type record TempUeId_ { Mmec mmec, @@ -105,9 +122,10 @@ module RnisAPI_TypesAndValues { type JSON.String Mtmsi; /** - * @desc + * @desc S1 bearer information on eNB side * @member ipAddress eNB transport layer address of this S1 bearer * @member tunnelId eNB GTP-U TEID of this S1 bearer + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.2.4-1 Attributes of the S1BearerInfo */ type record S1EnbInfo { JSON.String ipAddress, @@ -115,9 +133,10 @@ module RnisAPI_TypesAndValues { } /** - * @desc + * @desc S1 bearer information on GW side * @member ipAddress SGW transport layer address of this S1 bearer * @member tunnelId SGW GTP-U TEID of this S1 bearer + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.2.4-1 Attributes of the S1BearerInfo */ type record SGwInfo { JSON.String ipAddress, @@ -125,19 +144,22 @@ module RnisAPI_TypesAndValues { } /** - * @desc - * @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - * @member nanoSeconds The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + * @desc This type represents the information on the Layer 2 measurements information from one or more eNBs that are associated with the requested MEC application instance. + * @member timestamp Time stamp + * @member cellInfo The per cell measurement information + * @member cellUEInfo The per cell per UE layer 2 measurements information + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.2.4a-1: Attributes of the L2Meas */ - type record TimeStamp { - UInt32 seconds, - UInt32 nanoSeconds + type record L2Meas { + TimeStamp timeStamp optional, + L2Meas_CellInfo cellInfo optional, + L2Meas_CellUEInfo cellUEInfo optional } - + /** * @desc Unique identifier for the mobile edge application instance", */ - type JSON.String AppInsId; + type JSON.String AppInstanceId; /** * @desc Unique identifier allocated by the Mobile Edge application for the Information request @@ -145,31 +167,82 @@ module RnisAPI_TypesAndValues { type JSON.String RequestId; /** - * @desc The information on users per cell - * @member ecgi - * @member ueInfo + * @desc E-UTRAN CelI Global Identifier as defined in 3GPP TS 36.413 + * @member ecgi Public Land Mobile Network Identity + * @member cellId E-UTRAN CelI Global Identifier + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.5.6-1: Attributes of the Ecgi */ - type record CellUserInfo_ { - Ecgi ecgi, - UeInfo ueInfo + type record Ecgi { + Plmn plmn, + CellId cellId } - type record of CellUserInfo_ CellUserInfo; + type record of Ecgi Ecgi_list; /** - * @desc E-UTRAN CelI Global Identifier as defined in 3GPP TS 36.413 - * @member ecgi - * @member cellId + * @desc New Radio CelI Global Identifier as defined in ETSI TS 138 423 + * @member ecgi Public Land Mobile Network Identity + * @member NrCellId NR CelI Global Identifier + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.5.6-1: Attributes of the Ecgi */ - type record Ecgi_ { - Plmn plmn, - CellId cellId + type record NRcgi { + Plmn plmn, + NrCellId nrcellId + } + type record of NRcgi NRcgi_list; + + /** + * @desc Beam level measurement results for a NR cell as defined in ETSI TS 138 331 + * @member resultsSsbIndexes Beam level measurement results based on SS/PBCH related measurements + * @member resultsCsiRsIndexes Beam level measurement results based on CSI-RS related measurements + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.5.8-1: Attributes of the RsIndexResults + */ + type record RsIndexResults { + ResultsPerSsbIndexList resultsSsbIndexes, + ResultsPerCsiRsIndexList resultsCsiRsIndexes + } + + /** + * @desc Beam level measurement results for a NR cell as defined in ETSI TS 138 331 + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.5.9-1: Attributes of the ResultsPerSsbIndexList + */ + type record ResultsPerSsbIndexList { + ResultsPerSsbIndex resultsPerSsbIndex optional + } + type record ResultsPerSsbIndex { + UInt8 ssbIndex, + MeasQuantityResultsNr ssbResults optional + } + + /** + * @desc Beam level measurement results for a NR cell as defined in ETSI TS 138 331 + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.5.10-1: Attributes of the ResultsPerCsiRsIndexList + */ + type record ResultsPerCsiRsIndexList { + ResultsPerCsiRsIndex resultsPerCsiRsIndex optional + } + type record ResultsPerCsiRsIndex { + UInt8 csiRsIndex, + MeasQuantityResultsNr csiRsResults optional } - type record of Ecgi_ Ecgi; + /** + * @desc Collection of UE reported NR measurement quantity results as defined in ETSI TS 138 331 + @member rsrp Reference Signal Received Power as defined in ETSI TS 138 331 + @member rsrq Reference Signal Received Quality as defined in ETSI TS 138 331 + @member sinr Reference Signal to Interference & Noise Ratio as defined in ETSI TS 138 331 + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.5.11-1: Attributes of the MeasQuantityResultsNr + */ + type record MeasQuantityResultsNr { + UInt8 rsrp optional, + UInt8 rsrq optional, + UInt8 sinr optional + } + /** * @desc E-UTRAN CelI Global Identifier as defined in 3GPP TS 36.413 * @member mcc The Mobile Country Code part of PLMN Identity as defined in 3GPP TS 36.413 * @member mnc The Mobile Network Code part of PLMN Identity as defined in 3GPP TS 36.413 + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.5.5-1: Attributes of the Plmn */ type record Plmn { JSON.String mcc, @@ -179,17 +252,25 @@ module RnisAPI_TypesAndValues { /** * @desc The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413 + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.6.2-1: CellId */ type JSON.String CellId; + /** + * @desc the NR Cell Identity. Encoded as a bit string (size (36)) as defined in ETSI TS 138 423 + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.6.2-1: CellId + */ + type JSON.String NrCellId; + /** * @desc Information on UEs in the specific cell - * @member associateId - * @member erabInfo + * @member associateId 0 to N identifiers to associate the event for a specific UE or flow. + * @member erabInfo Information on E-RAB as defined below + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.2.3-1: Attributes of the RabInfo */ type record UeInfo_ { AssociateId associateId optional, - ErabInfo erabInfo + ErabInfo erabInfo } type record of UeInfo_ UeInfo; @@ -197,6 +278,7 @@ module RnisAPI_TypesAndValues { * @desc Information on UEs in the specific cell * @member type Numeric value (0-255) corresponding to specified type of identifier * @member value Value for the identifier + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.5.4-1: Attributes of the AssociateId */ type record AssociateId_ { AssociateId_type type_, @@ -209,6 +291,7 @@ module RnisAPI_TypesAndValues { /** * @desc Numeric value (0-255) corresponding to specified type of identifier + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.5.4-1: Attributes of the AssociateId */ type enumerated AssociateId_type { RESERVED (0), @@ -216,24 +299,32 @@ module RnisAPI_TypesAndValues { UE_IPV6_ADDRESS (2), NATED_IP_ADDRESS (3), GTP_TEID (4) + } with { + variant "JSON: as number" } - + + /** + * @desc Information on E-RAB + * @member erabId The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 + * @member erabQosParameters QoS parameters for the E-RAB + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.2.3-1: Attributes of the RabInfo + */ type record ErabInfo_ { - ErabId erabId, - ErabQosParameters erabQosParameters + UInt32 erabId, + ErabQosParameters erabQosParameters optional } type record of ErabInfo_ ErabInfo; /** - * @desc + * @desc QoS parameters for the E-RAB * @member qci QoS Class Identifier as defined in TS 23.401 - * @member qci_information + * @member qci_information The QoS information for the E-RAB + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.2.3-1: Attributes of the RabInfo */ - type record ErabQosParameter { + type record ErabQosParameters { Qci qci, QosInformation qosInformation optional } - type record of ErabQosParameter ErabQosParameters; /** * @desc QoS Class Identifier as defined in TS 23.401 @@ -246,6 +337,7 @@ module RnisAPI_TypesAndValues { * @member erabGbrUl This IE indicates the maximum uplink E-RAB Bit Rate as defined in TS 23.401 for this bearer * @member erabGbrDl This IE indicates the guaranteed downlink E-RAB Bit Rate as defined in TS 23.401 for this bearer * @member erabMbrUl This IE indicates the guaranteed uplink E-RAB Bit Rate as defined in TS 23.401 for this bearer + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.2.3-1: Attributes of the RabInfo */ type record QosInformation_ { UInt32 erabMbrDl, @@ -260,25 +352,26 @@ module RnisAPI_TypesAndValues { /** * @desc The per cell measurement information * @member ecgi E-UTRAN CelI Global Identifier - * @member dl_gbr_prb_usage_cell indicates the PRB usage for downlink GBR traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. - * @member ul_gbr_prb_usage_cell indicates (in percentage) the PRB usage for uplink GBR traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. - * @member dl_nongbr_prb_usage_cell indicates (in percentage) the PRB usage for downlink non-GBR traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. - * @member ul_nongbr_prb_usage_cell indicates (in percentage) the PRB usage for uplink non-GBR traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. - * @member dl_total_prb_usage_cell indicates (in percentage) the PRB usage for total downlink traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. - * @member ul_total_prb_usage_cell indicates (in percentage) the PRB usage for total uplink traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. - * @member received_dedicated_preambles_cell indicates (in percentage) the received dedicated preamples, as defined in ETSI TS 136 314 [i.11]. - * @member received_randomly_selected_preambles_low_range_cellIt indicates (in percentage) the received randomly selected preambles in the low range, as defined in ETSI TS 136 314 [i.11]. - * @member received_randomly_selected_preambles_high_range_cell It indicates (in percentage) the received randomly selected preambles in the high range, as defined in ETSI TS 136 314 [i.11]. - * @member number_of_active_ue_dl_gbr_cell It indicates the number of active UEs with downlink GBR traffic, as defined in ETSI TS 136 314 [i.11]. - * @member number_of_active_ue_ul_gbr_cell It indicates the number of active UEs with uplink GBR traffic, as defined in ETSI TS 136 314 [i.x]. - * @member number_of_active_ue_dl_nongbr_cell It indicates the number of active UEs with downlink non-GBR traffic, as defined in ETSI TS 136 314 [i.11]. - * @member number_of_active_ue_ul_nongbr_cell It indicates the number of active UEs with uplink non-GBR traffic, as defined in ETSI TS 136 314 [i.11]. - * @member dl_gbr_pdr_cell It indicates the packet discard rate in percentage of the downlink GBR traffic in a cell, as defined in ETSI TS 136 314 [i.x]. - * @member ul_gbr_pdr_cell It indicates the packet discard rate in percentage of the uplink GBR traffic in a cell, as defined in ETSI TS 136 314 [i.11]. - * @member dl_nongbr_pdr_cell It indicates the packet discard rate in percentage of the downlink non-GBR traffic in a cell, as defined in ETSI TS 136 314 [i.x]. - * @member ul_nongbr_pdr_cell It indicates the packet discard rate in percentage of the uplink non-GBR traffic in a cell, as defined in ETSI TS 136 314 [i.11]. - */ - type record CellInfo_ { + * @member dl_gbr_prb_usage_cell indicates the PRB usage for downlink GBR traffic, as defined in ETSI TS 136 314 and ETSI TS 136 423 + * @member ul_gbr_prb_usage_cell indicates (in percentage) the PRB usage for uplink GBR traffic, as defined in ETSI TS 136 314 and ETSI TS 136 423 + * @member dl_nongbr_prb_usage_cell indicates (in percentage) the PRB usage for downlink non-GBR traffic, as defined in ETSI TS 136 314 and ETSI TS 136 423 + * @member ul_nongbr_prb_usage_cell indicates (in percentage) the PRB usage for uplink non-GBR traffic, as defined in ETSI TS 136 314 and ETSI TS 136 423 + * @member dl_total_prb_usage_cell indicates (in percentage) the PRB usage for total downlink traffic, as defined in ETSI TS 136 314 and ETSI TS 136 423 + * @member ul_total_prb_usage_cell indicates (in percentage) the PRB usage for total uplink traffic, as defined in ETSI TS 136 314 and ETSI TS 136 423 + * @member received_dedicated_preambles_cell indicates (in percentage) the received dedicated preamples, as defined in ETSI TS 136 314. + * @member received_randomly_selected_preambles_low_range_cellIt indicates (in percentage) the received randomly selected preambles in the low range, as defined in ETSI TS 136 314 + * @member received_randomly_selected_preambles_high_range_cell It indicates (in percentage) the received randomly selected preambles in the high range, as defined in ETSI TS 136 314 + * @member number_of_active_ue_dl_gbr_cell It indicates the number of active UEs with downlink GBR traffic, as defined in ETSI TS 136 314 + * @member number_of_active_ue_ul_gbr_cell It indicates the number of active UEs with uplink GBR traffic, as defined in ETSI TS 136 314 + * @member number_of_active_ue_dl_nongbr_cell It indicates the number of active UEs with downlink non-GBR traffic, as defined in ETSI TS 136 314 + * @member number_of_active_ue_ul_nongbr_cell It indicates the number of active UEs with uplink non-GBR traffic, as defined in ETSI TS 136 314 + * @member dl_gbr_pdr_cell It indicates the packet discard rate in percentage of the downlink GBR traffic in a cell, as defined in ETSI TS 136 314 + * @member ul_gbr_pdr_cell It indicates the packet discard rate in percentage of the uplink GBR traffic in a cell, as defined in ETSI TS 136 314 + * @member dl_nongbr_pdr_cell It indicates the packet discard rate in percentage of the downlink non-GBR traffic in a cell, as defined in ETSI TS 136 314 + * @member ul_nongbr_pdr_cell It indicates the packet discard rate in percentage of the uplink non-GBR traffic in a cell, as defined in ETSI TS 136 314 + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.2.4a-1: Attributes of the L2Meas + */ + type record L2Meas_CellInfo_ { Ecgi ecgi optional, UInt100 dl_gbr_prb_usage_cell optional, UInt100 ul_gbr_prb_usage_cell optional, @@ -298,32 +391,33 @@ module RnisAPI_TypesAndValues { UInt100 dl_nongbr_pdr_cell optional, UInt100 ul_nongbr_pdr_cell optional } - type record of CellInfo_ CellInfo; + type record of L2Meas_CellInfo_ L2Meas_CellInfo; /** * @desc The per cell measurement information * @member ecgi E-UTRAN CelI Global Identifier * @member associateId Identifier to associate the information for a specific UE or flow. - * @member dl_gbr_delay_ue It indicates the packet delay of the downlink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. - * @member ul_gbr_delay_ue It indicates the packet delay of the uplink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. - * @member dl_nongbr_delay_ue It indicates the packet delay of the downlink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. - * @member ul_nongbr_delay_ue It indicates the packet delay of the uplink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. - * @member dl_gbr_pdr_ue It indicates the packet discard rate in percentage of the downlink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. - * @member ul_gbr_pdr_ue It indicates the packet discard rate in percentage of the uplink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. - * @member dl_nongbr_pdr_ue It indicates the packet discard rate in percentage of the downlink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. - * @member ul_nongbr_pdr_ue It indicates the packet discard rate in percentage of the uplink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. - * @member dl_gbr_throughput_ue It indicates the scheduled throughput of the downlink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. - * @member ul_gbr_throughput_ue It indicates the scheduled throughput of the uplink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. - * @member dl_nongbr_throughput_ue It indicates the scheduled throughput of the downlink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. - * @member ul_nongbr_throughput_ue It indicates the scheduled throughput of the uplink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. - * @member dl_gbr_data_volume_ue It indicates the data volume of the downlink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. - * @member ul_gbr_data_volume_ue It indicates the data volume of the uplink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. - * @member dl_nongbr_data_volume_ue It indicates the data volume of the downlink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. - * @member ul_nongbr_data_volume_ue It indicates the data volume of the uplink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. - */ - type record CellUEInfo_ { - Ecgi ecgi optional, - AssociateId associateId, + * @member dl_gbr_delay_ue It indicates the packet delay of the downlink GBR traffic of a UE, as defined in ETSI TS 136 314 + * @member ul_gbr_delay_ue It indicates the packet delay of the uplink GBR traffic of a UE, as defined in ETSI TS 136 314 + * @member dl_nongbr_delay_ue It indicates the packet delay of the downlink non-GBR traffic of a UE, as defined in ETSI TS 136 314 + * @member ul_nongbr_delay_ue It indicates the packet delay of the uplink non-GBR traffic of a UE, as defined in ETSI TS 136 314 + * @member dl_gbr_pdr_ue It indicates the packet discard rate in percentage of the downlink GBR traffic of a UE, as defined in ETSI TS 136 314 + * @member ul_gbr_pdr_ue It indicates the packet discard rate in percentage of the uplink GBR traffic of a UE, as defined in ETSI TS 136 314 + * @member dl_nongbr_pdr_ue It indicates the packet discard rate in percentage of the downlink non-GBR traffic of a UE, as defined in ETSI TS 136 314 + * @member ul_nongbr_pdr_ue It indicates the packet discard rate in percentage of the uplink non-GBR traffic of a UE, as defined in ETSI TS 136 314 + * @member dl_gbr_throughput_ue It indicates the scheduled throughput of the downlink GBR traffic of a UE, as defined in ETSI TS 136 314 + * @member ul_gbr_throughput_ue It indicates the scheduled throughput of the uplink GBR traffic of a UE, as defined in ETSI TS 136 314 + * @member dl_nongbr_throughput_ue It indicates the scheduled throughput of the downlink non-GBR traffic of a UE, as defined in ETSI TS 136 314 + * @member ul_nongbr_throughput_ue It indicates the scheduled throughput of the uplink non-GBR traffic of a UE, as defined in ETSI TS 136 314 + * @member dl_gbr_data_volume_ue It indicates the data volume of the downlink GBR traffic of a UE, as defined in ETSI TS 136 314 + * @member ul_gbr_data_volume_ue It indicates the data volume of the uplink GBR traffic of a UE, as defined in ETSI TS 136 314 + * @member dl_nongbr_data_volume_ue It indicates the data volume of the downlink non-GBR traffic of a UE, as defined in ETSI TS 136 314 + * @member ul_nongbr_data_volume_ue It indicates the data volume of the uplink non-GBR traffic of a UE, as defined in ETSI TS 136 314 + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.2.4a-1: Attributes of the L2Meas + */ + type record L2Meas_CellUEInfo_ { + Ecgi ecgi, + AssociateId_ associateId, integer dl_gbr_delay_ue optional, integer ul_gbr_delay_ue optional, integer dl_nongbr_delay_ue optional, @@ -341,134 +435,194 @@ module RnisAPI_TypesAndValues { integer dl_nongbr_data_volume_ue optional, integer ul_nongbr_data_volume_ue optional } - type record of CellUEInfo_ CellUEInfo; + type record of L2Meas_CellUEInfo_ L2Meas_CellUEInfo; /** - * @desc - * @member links - * @member subscription + * @desc subscription to 5G UE measurement report notifications from Radio Network Information Service for UEs served by NR Cells + * @member subscriptionType Shall be set to "NrMeasRepUeSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed RNIS information + * @member links Hyperlink related to the resource + * @member filterCriteriaAssocTri List of filtering criteria for the subscription + * @member expiryDeadline Time stamp + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.11-1: Attributes of the NrMeasRepUeSubscription + */ + type record NrMeasRepUeSubscription { + JSON.String subscriptionType, + CallbackReference callbackReference, + Link links optional, + FilterCriteriaNrMrs filterCriteriaNrMrs, + TimeStamp expiryDeadline optional + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc List of links related to currently existing subscriptions for the service consumer + * @member links List of hyperlinks related to the resource + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.10-1: Attributes of the SubscriptionLinkList */ type record SubscriptionLinkList { - Link links, - Subscription subscription optional + SubscriptionLinkList_Link links } with { variant (links) "name as '_links'"; } /** - * @desc - * @member callbackReference - * @member links - * @member filterCriteria - * @member expiryDeadline + * @desc List of hyperlinks related to the resource + * @member self_ + * @member subscription A link to a subscription + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.10-1: Attributes of the SubscriptionLinkList + */ + type record SubscriptionLinkList_Link { + LinkType self_, + Subscription subscription optional + } with { + variant (self_) "name as 'self'"; + } + + /** + * @desc A link to a subscription + * @member The URI referring to the subscription + * @member Type of the subscription + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.10-1: Attributes of the SubscriptionLinkList + */ + type record Subscription_ { + LinkType href, + JSON.String subscriptionType + } + type record of Subscription_ Subscription; + + /** + * @desc Subscription to UE measurement report notifications from Radio Network Information Service for UEs served by E-UTRA Cells + * @member subscriptionType Shall be set to "MeasRepUeSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed RNIS information + * @member links Hyperlink related to the resource + * @member filterCriteriaAssocTri List of filtering criteria for the subscription + * @member expiryDeadline Time stamp + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.6-1: Attributes of the MeasRepUeSubscription */ type record MeasRepUeSubscription { - SubscriptionType subscriptionType, + JSON.String subscriptionType, CallbackReference callbackReference, - Link links, - FilterCriteriaAssocTri filterCriteria, + Link links optional, + FilterCriteriaAssocTri filterCriteriaAssocTri, TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; } /** - * @desc - * @member callbackReference - * @member links - * @member s1BearerSubscriptionCriteria - * @member expiryDeadline + * @desc Subscription to S1-U bearer information notification from Radio Network Information Service + * @member subscriptionType Shall be set to "S1BearerSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed RNIS information + * @member links Hyperlink related to the resource + * @member eventType Description of the subscribed event + * @member s1BearerSubscriptionCriteria List of filtering criteria for the subscription + * @member expiryDeadline Time stamp + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.9-1: Attributes of the S1BearerSubscription */ type record S1BearerSubscription { - SubscriptionType subscriptionType, - CallbackReference callbackReference, - Link links, + JSON.String subscriptionType, + CallbackReference callbackReference, + Link links optional, + EventType eventType, S1BearerSubscriptionCriteria s1BearerSubscriptionCriteria, - TimeStamp expiryDeadline optional + TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; } /** - * @desc - * @member callbackReference - * @member links - * @member filterCriteria + * @desc Subscription to RAB establishment notifications from Radio Network Information Service + * @member subscriptionType Shall be set to "RabEstSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed RNIS information + * @member links Hyperlink related to the resource + * @member filterCriteriaQci List of filtering criteria for the subscription + * @member expiryDeadline Time stamp + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.3-1: Attributes of the RabEstSubscription */ type record RabEstSubscription { - SubscriptionType subscriptionType, - CallbackReference callbackReference, - Link links, - FilterCriteriaAssocQci filterCriteria, - TimeStamp expiryDeadline optional + JSON.String subscriptionType, + CallbackReference callbackReference, + Link links optional, + RabEstSubscription_FilterCriteriaQci filterCriteriaQci, + TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; } /** - * @desc - * @member callbackReference - * @member links - * @member filterCriteria - * @member expiryDeadline + * @desc Subscription to RAB modification notifications from Radio Network Information Service + * @member subscriptionType Shall be set to "RabModSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed RNIS information + * @member links Hyperlink related to the resource + * @member filterCriteriaQci List of filtering criteria for the subscription + * @member expiryDeadline Time stamp + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.4-1: Attributes of the RabModSubscription */ type record RabModSubscription { - SubscriptionType subscriptionType, - CallbackReference callbackReference, - Link links, - FilterCriteriaAssocQci filterCriteria, - TimeStamp expiryDeadline optional + JSON.String subscriptionType, + CallbackReference callbackReference, + Link links optional, + RabModSubscription_FilterCriteriaQci filterCriteriaQci, + TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; } /** - * @desc - * @member callbackReference - * @member links - * @member filterCriteria - * @member expiryDeadline + * @desc Subscription to RAB release notifications from Radio Network Information Service + * @member subscriptionType Shall be set to "RabRelSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed RNIS information + * @member links Hyperlink related to the resource + * @member filterCriteriaQci List of filtering criteria for the subscription + * @member expiryDeadline Time stamp + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.5-1: Attributes of the RabRelSubscription */ type record RabRelSubscription { - SubscriptionType subscriptionType, - CallbackReference callbackReference, - Link links, - FilterCriteriaAssocQci filterCriteria, - TimeStamp expiryDeadline optional + JSON.String subscriptionType, + CallbackReference callbackReference, + Link links optional, + RabModSubscription_FilterCriteriaQci filterCriteriaQci, + TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; } /** - * @desc - * @member callbackReference - * @member links - * @member filterCriteria - * @member expiryDeadline + * @desc Subscription to UE carrier aggregation reconfiguration notifications from Radio Network Information Service + * @member subscriptionType Shall be set to "CaReConfSubscription" + * @member callbackReference URI selected by the service consumerto receive notifications on the subscribed RNIS information + * @member links Hyperlink related to the resource + * @member filterCriteriaAssoc List of filtering criteria for the subscription + * @member expiryDeadline Time stamp + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.8-1: Attributes of the CaReconfSubscription */ type record CaReConfSubscription { - SubscriptionType subscriptionType, - CallbackReference callbackReference, - Link links, - FilterCriteriaAssoc filterCriteria, - TimeStamp expiryDeadline optional + JSON.String subscriptionType, + CallbackReference callbackReference, + Link links optional, + FilterCriteriaAssoc filterCriteriaAssoc, + TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; } /** - * @desc - * @member callbackReference - * @member links - * @member filterCriteria - * @member expiryDeadline + * @desc Subscription to cell change notifications from Radio Network Information Service + * @member subscriptionType Shall be set to "CellChangeSubscription" + * @member callbackReference URI selected by the service consumerto receive notifications on the subscribed RNIS information + * @member links Hyperlink related to the resource + * @member filterCriteriaAssocHo List of filtering criteria for the subscription + * @member expiryDeadline Time stamp + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.2-1: Attributes of the CellChangeSubscription */ type record CellChangeSubscription { - SubscriptionType subscriptionType, - CallbackReference callbackReference, - Link links, - FilterCriteriaAssocHo filterCriteria, - TimeStamp expiryDeadline optional + JSON.String subscriptionType, + CallbackReference callbackReference, + Link links optional, + FilterCriteriaAssocHo filterCriteriaAssocHo, + TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; } @@ -481,10 +635,10 @@ module RnisAPI_TypesAndValues { * @member expiryDeadline */ type record MeasTaSubscription { - SubscriptionType subscriptionType, + JSON.String subscriptionType, CallbackReference callbackReference, Link links, - FilterCriteriaAssocHo filterCriteria, + FilterCriteriaAssocHo filterCriteriaAssocHo, TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; @@ -493,7 +647,7 @@ module RnisAPI_TypesAndValues { /** * @desc URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information */ - type JSON.String CallbackReference; + type JSON.AnyURI CallbackReference; /** * @desc List of hyperlinks related to the resource @@ -507,163 +661,195 @@ module RnisAPI_TypesAndValues { /** * @desc URI referring to a resource + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.5.2-1: Attributes of the LinkType */ - type JSON.AnyURI LinkType; - - /** - * @desc A link to a subscription - * @member - * @member - */ - type record Subscription_ { - LinkType href, - SubscriptionType subscriptionType + type record LinkType { + JSON.AnyURI href } - type record of Subscription_ Subscription; /** - * @desc Numeric value corresponding to specified type of subscription - * @member - * @member - * @member - * @member - * @member - * @member + * @desc List of filtering criteria for the subscription + * @member appInstanceId Unique identifier for the MEC application instance + * @member associateId 0 to N identifiers to associate the information for a specific UE or flow + * @member ecgi E-UTRAN CelI Global Identifier + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.8-1: Attributes of the CaReconfSubscription */ - type enumerated SubscriptionType { - RESERVED, - CELL_CHANGE, - RAB_ESTABLISHMENT, - RAB_MODIFICATION, - RAB_RELEASE, - MEAS_REPORT_UE, - MEAS_TIMING_ADVANCE, - CA_RECONF, - S1_BEARER, - WRONG_PARAMETER + type record FilterCriteriaAssoc { + AppInstanceId appInstanceId, + AssociateId associateId optional, + Ecgi_list ecgi optional } /** * @desc List of filtering criteria for the subscription - * @member appInsId - * @member associateId - * @member plmn - * @member cellId + * @member appInstanceId Unique identifier for the MEC application instance + * @member ecgi E-UTRAN CelI Global Identifier + * @member qci QoS Class Identifier as defined in ETSI TS 123 401 + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.3-1: Attributes of the RabEstSubscription */ - type record FilterCriteriaAssoc { - AppInsId appInsId, - AssociateId associateId, - Plmn plmn, - CellId cellId + type record RabEstSubscription_FilterCriteriaQci { + AppInstanceId appInstanceId optional, + Ecgi_list ecgi optional, + Qci qci } - + /** * @desc List of filtering criteria for the subscription - * @member appInsId - * @member associateId - * @member plmn - * @member cellId - * @member qci - */ - type record FilterCriteriaAssocQci { - AppInsId appInsId, - ErabId erabId, - Ecgi ecgi, - Qci qci + * @member appInstanceId Unique identifier for the MEC application instance + * @member erabId The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 + * @member ecgi E-UTRAN CelI Global Identifier + * @member qci QoS Class Identifier as defined in ETSI TS 123 401 + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.4-1: Attributes of the RabModSubscription + */ + type record RabModSubscription_FilterCriteriaQci { + AppInstanceId appInstanceId optional, + UInt32 erabId, + Ecgi_list ecgi optional, + Qci qci } /** * @desc List of filtering criteria for the subscription - * @member appInsId - * @member associateId - * @member plmn - * @member cellId - * @member hoStatus + * @member appInstanceId Unique identifier for the MEC application instance + * @member associateId 0 to N identifiers to associate the information for a specific UE or flow + * @member ecgi E-UTRAN CelI Global Identifier + * @member hoStatus + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.2-1: Attributes of the CellChangeSubscription */ type record FilterCriteriaAssocHo { - AppInsId appInsId, - AssociateId associateId, - Plmn plmn, - CellId cellId, - HoStatus hoStatus + AppInstanceId appInstanceId optional, + AssociateId associateId optional, + Ecgi_list ecgi optional, + HoStatus_list hoStatus optional } /** * @desc List of filtering criteria for the subscription - * @member appInsId - * @member associateId - * @member plmn - * @member cellId - * @member trigger + * @member appInstanceId Unique identifier for the MEC application instance + * @member associateId 0 to N identifiers to associate the information for a specific UE or flow + * @member ecgi E-UTRAN CelI Global Identifier + * @member trigger_ Corresponds to a specific E-UTRAN UE Measurement Report trigger + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.6-1: Attributes of the MeasRepUeSubscription */ type record FilterCriteriaAssocTri { - AppInsId appInsId, - AssociateId associateId, - Plmn plmn, - CellId cellId, - Trigger trigger_ + AppInstanceId appInstanceId optional, + AssociateId associateId optional, + Ecgi_list ecgi optional, + Trigger trigger_ optional } with { variant (trigger_) "name as 'trigger'"; } /** * @desc List of filtering criteria for the subscription - * @member appInsId - * @member associateId - * @member plmn - * @member cellId - * @member trigger + * @member appInstanceId Unique identifier for the MEC application instance + * @member associateId 0 to N identifiers to associate the information for a specific UE or flow + * @member nrcgi NR Cell Global Identier + * @member triggerNr Corresponds to a specific 5G UE Measurement Report trigger + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.11-1: Attributes of the NrMeasRepUeSubscription + */ + type record FilterCriteriaNrMrs { + AppInstanceId appInstanceId optional, + AssociateId associateId optional, + NRcgi_list nrcgi optional, + TriggerNr triggerNr optional + } + + /** + * @desc List of filtering criteria for the subscription + * @member associateId 0 to N identifiers to associate the events for a specific UE or a flow + * @member ecgi E-UTRAN CelI Global Identifier + * @member erabId The attribute that uniquely identifies a S1 bearer for a specific UE, as defined in ETSI TS 136 413 + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.9-1: Attributes of the S1BearerSubscription */ type record S1BearerSubscriptionCriteria { - AssociateId associateId, - Plmn plmn, - CellId cellId, - ErabId erabId + AssociateId associateId optional, + Ecgi ecgi optional, + ErabId erabId optional } /** * @desc Description of the subscribed to event + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.2-1: Attributes of the CellChangeSubscription */ type enumerated HoStatus { - RESERVED, - IN_PREPARATION, - IN_EXECUTION, - COMPLETED, - REJECTED, - CANCELLED + IN_PREPARATION (1), + IN_EXECUTION (2), + COMPLETED (3), + REJECTED (4), + CANCELLED (5) + } with { + variant "JSON: as number" } + type record of HoStatus HoStatus_list; /** * @desc Description of the subscribed event + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.9-1: Attributes of the S1BearerSubscription */ type enumerated EventType { - RESERVED, - S1_BEARER_ESTABLISH, - S1_BEARER_MODIFY, - S1_BEARER_RELEASE + RESERVED (0), + S1_BEARER_ESTABLISH (1), + S1_BEARER_MODIFY (2), + S1_BEARER_RELEASE (3) + } with { + variant "JSON: as number" } /** * @desc Unique identifier for the mobile edge application instance + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.6.3-1: Enumeration Trigger */ type enumerated Trigger { - NOT_AVAILABLE, - PERIODICAL_REPORT_STRONGEST_CELLS, - PERIODICAL_REPORT_STRONGEST_CELLS_FOR_SON, - PERIODICAL_REPORT_CGI, - EVENT_A1, - EVENT_A2, - EVENT_A3, - EVENT_A4, - EVENT_A5, - EVENT_A6, - EVENT_B1, - EVENT_B2, - EVENT_C1, - EVENT_C2, - EVENT_W1, - EVENT_W2, - EVENT_W3 + NOT_AVAILABLE (0), + PERIODICAL_REPORT_STRONGEST_CELLS (1), + PERIODICAL_REPORT_STRONGEST_CELLS_FOR_SON (2), + PERIODICAL_REPORT_CGI (3), + INTRA_PERIODICAL_REPORT_STRONGEST_CELLS (4), + INTRA_PERIODICAL_REPORT_CGI (5), + EVENT_A1 (10), + EVENT_A2 (11), + EVENT_A3 (12), + EVENT_A4 (13), + EVENT_A5 (14), + EVENT_A6 (15), + EVENT_B1 (20), + EVENT_B2 (21), + EVENT_B1_NR (22), + EVENT_B2_NR (23), + EVENT_C1 (30), + EVENT_C2 (31), + EVENT_W1 (40), + EVENT_W2 (41), + EVENT_W3 (42), + EVENT_V1 (50), + EVENT_V2 (51), + EVENT_H1 (60), + EVENT_H2 (61) + } with { + variant "JSON: as number" + } + + /** + * @desc specified triggers for a 5G UE Measurement Report. Full details can be found in ETSI TS 138 331 + * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.6.4-1: Enumeration TriggerNr + */ + type enumerated TriggerNr { + NOT_AVAILABLE (0), + NR_PERIODICAL (1), + NR_CGI (2), + EVENT_A1 (10), + EVENT_A2 (11), + EVENT_A3 (12), + EVENT_A4 (13), + EVENT_A5 (14), + EVENT_A6 (15), + INTER_RAT_PERIODICAL (20), + INTER_RAT_CGI (21), + EVENT_B1 (30), + EVENT_B2 (31) + } with { + variant "JSON: as number" } } with { diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn index a291fe71f1c1e180dbf35aad598383bf5c315b3d..edc53f6d96722b8b92d71b35bb72ad2d3067961c 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn @@ -55,7 +55,13 @@ module WlanInformationAPI_Functions { PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, m_ap_identity( PX_MAC_ID - ))))))); + ), + -, -, -, + 10, // notificationPeriod - Table 6.3.2-1: Attributes of the AssocStaSubscription Note 2 + -, + m_time_stamp( + f_get_current_timestamp_utc() / 1000 + 30 // Expiry time: T + 30 seconds + ))))))); tc_ac.start; alt { @@ -67,6 +73,7 @@ module WlanInformationAPI_Functions { mw_assoc_sta_subscription( PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, -, + -, -, ? )))))) -> value v_response { tc_ac.stop; @@ -90,7 +97,6 @@ module WlanInformationAPI_Functions { "?+(" & PX_ME_WLAN_URI & "?*)", 0 ); - log("====> v_uri: ", v_uri); f_init_default_headers_list(-, -, v_headers); httpPort.send( @@ -115,4 +121,88 @@ module WlanInformationAPI_Functions { } // End of function f_delete_assoc_sta_subscription + function f_create_measurement_config( + out MeasurementConfig p_measurement_config + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_WLAN_URI & "/measurements", + v_headers, + m_http_message_body_json( + m_body_json_wlan_measurement_config( + m_measurement_config( + -, + { + m_sta_identity( + PX_MAC_ID, + PX_SSID, + -, + PX_IP_ADDRESS + ) + }, + PX_MEASUREMENT_ID, + m_measurement_info(1000, 10) + )))))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_wlan_measurement_config( + mw_measurement_config( + ? + )))))) -> value v_response { + tc_ac.stop; + + p_measurement_config := v_response.response.body.json_body.measurementConfig; + log("f_create_measurement_config: INFO: IUT successfully responds to the subscription: ", p_measurement_config); + } + [] tc_ac.timeout { + log("f_create_measurement_config: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function "f_create_measurement_config + + function f_delete_measurement_config( + in MeasurementConfig p_measurement_config + ) runs on HttpComponent { + var Headers v_headers; + var charstring v_uri := regexp( + oct2char(unichar2oct(p_measurement_config.links.self_.href)), + "?+(" & PX_ME_WLAN_URI & "?*)", + 0 + ); + log("====> v_uri: ", v_uri); + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & v_uri, + v_headers + ))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_measurement_config: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_measurement_config + } // End of module WlanInformationAPI_Functions diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pixits.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pixits.ttcn index 30e11cfe064a7d40535fedfe91cb114b044c660b..7f6d43adceef5dd71526c2ab75fd00b660e1e0a3 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pixits.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pixits.ttcn @@ -15,4 +15,6 @@ module WlanInformationAPI_Pixits { modulepar JSON.String PX_IP_ADDRESS := "10.10.10.10"; + modulepar JSON.String PX_MEASUREMENT_ID := "1"; + } // End of module WlanInformationAPI_Pixits diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn index bbb8620837824d77a68df73253176692f0a7656d..feea0687a4fefc338b8f31a7ea9f96ae5128206c 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn @@ -10,198 +10,386 @@ module WlanInformationAPI_Templates { import from WlanInformationAPI_TypesAndValues all; import from WlanInformationAPI_Pixits all; + template (value) TimeStamp m_time_stamp( + in Seconds p_seconds, + in NanoSeconds p_nanoSeconds := 0 + ) := { + seconds := p_seconds, + nanoSeconds := p_nanoSeconds + } // End of template m_time_stamp + + template (present) TimeStamp mw_time_stamp( + template (present) Seconds p_seconds := ?, + template (present) NanoSeconds p_nanoSeconds := ? + ) := { + seconds := p_seconds, + nanoSeconds := p_nanoSeconds + } // End of template mw_time_stamp + template (omit) ApInfo m_ap_info( in template (value) ApIdentity p_apId, in template (omit) UInt32 p_channel := omit, + in template (omit) WlanCapabilities p_wlanCap := omit, + in template (omit) WanMetrics p_wanMetrics := omit, in template (omit) BssLoad p_bssLoad := omit, in template (omit) ExtBssLoad p_extBssLoad := omit, + in template (omit) OBssLoad p_oBssLoad := omit, in template (omit) ApLocation p_apLocation := omit, - in template (omit) NeighborReport p_apNeighbor := omit, in template (omit) TimeStamp p_timeStamp := omit ) := { timeStamp := p_timeStamp, apId := p_apId, channel := p_channel, + wlanCap := p_wlanCap, + wanMetrics := p_wanMetrics, bssLoad := p_bssLoad, extBssLoad := p_extBssLoad, - apLocation := p_apLocation, - apNeighbor := p_apNeighbor + oBssLoad := p_oBssLoad, + apLocation := p_apLocation } // End of template m_ap_info template (present) ApInfo mw_ap_info( template (present) ApIdentity p_apId := ?, template UInt32 p_channel := *, + template WlanCapabilities p_wlanCap := *, + template WanMetrics p_wanMetrics := *, template BssLoad p_bssLoad := *, template ExtBssLoad p_extBssLoad := *, + template OBssLoad p_oBssLoad := *, template ApLocation p_apLocation := *, - template NeighborReport p_apNeighbor := *, template TimeStamp p_timeStamp := * ) := { timeStamp := p_timeStamp, apId := p_apId, channel := p_channel, + wlanCap := p_wlanCap, + wanMetrics := p_wanMetrics, bssLoad := p_bssLoad, extBssLoad := p_extBssLoad, - apLocation := p_apLocation, - apNeighbor := p_apNeighbor + oBssLoad := p_oBssLoad, + apLocation := p_apLocation } // End of template mw_ap_info template (omit) StaInfo m_sta_info( - in template (value) ApIdentity p_apId, + in template (value) StaIdentity p_staId, in template (omit) UInt32 p_channel := omit, in template (omit) ApAssociated p_apAssociated := omit, in template (omit) Rssi p_rssi := omit, in template (omit) StaDataRate p_staDataRate := omit, in template (omit) StaStatistics p_staStatistics := omit, in template (omit) BeaconReport p_beaconReport := omit, + in template (omit) NeighborReport p_neighborReport := omit, + in template (omit) ChannelLoad p_channelLoad := omit, in template (omit) TimeStamp p_timeStamp := omit ) := { - timeStamp := p_timeStamp, - apId := p_apId, - channel := p_channel, - apAssociated := p_apAssociated, - rssi := p_rssi, - staDataRate := p_staDataRate, - staStatistics := p_staStatistics, - beaconReport := p_beaconReport + timeStamp := p_timeStamp, + staId := p_staId, + channel := p_channel, + apAssociated := p_apAssociated, + rssi := p_rssi, + staDataRate := p_staDataRate, + staStatistics := p_staStatistics, + beaconReport := p_beaconReport, + neighborReport := p_neighborReport, + channelLoad := p_channelLoad } // End of template m_sta_info template (present) StaInfo mw_sta_info( - template (present) ApIdentity p_apId := ?, - template UInt32 p_channel := ?, - template ApAssociated p_apAssociated := ?, - template Rssi p_rssi := ?, - template StaDataRate p_staDataRate := ?, - template StaStatistics p_staStatistics := ?, - template BeaconReport p_beaconReport := ?, - template TimeStamp p_timeStamp := ? + template (present) StaIdentity p_staId := ?, + template UInt32 p_channel := *, + template ApAssociated p_apAssociated := *, + template Rssi p_rssi := *, + template StaDataRate p_staDataRate := *, + template StaStatistics p_staStatistics := *, + template BeaconReport p_beaconReport := *, + template NeighborReport p_neighborReport := *, + template ChannelLoad p_channelLoad := *, + template TimeStamp p_timeStamp := * ) := { - timeStamp := p_timeStamp, - apId := p_apId, - channel := p_channel, - apAssociated := p_apAssociated, - rssi := p_rssi, - staDataRate := p_staDataRate, - staStatistics := p_staStatistics, - beaconReport := p_beaconReport + timeStamp := p_timeStamp, + staId := p_staId, + channel := p_channel, + apAssociated := p_apAssociated, + rssi := p_rssi, + staDataRate := p_staDataRate, + staStatistics := p_staStatistics, + beaconReport := p_beaconReport, + neighborReport := p_neighborReport, + channelLoad := p_channelLoad } // End of template mw_sta_info template (omit) AssocStaSubscription m_assoc_sta_subscription( in template (value) JSON.AnyURI p_callbackReference, in template (value) ApIdentity p_apId, + in template (omit) JSON.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, in template (omit) LinkTypes p_links := omit, + in template (omit) UInt8 p_notificationPeriod := omit, + in template (omit) NotificationEvent p_notificationEvent := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { - subscriptionType := "AssocStaSubscription", - callbackReference := p_callbackReference, - links := p_links, - apId := p_apId, - expiryDeadline := p_expiryDeadline + subscriptionType := "AssocStaSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + apId := p_apId, + notificationPeriod := p_notificationPeriod, + notificationEvent := p_notificationEvent, + expiryDeadline := p_expiryDeadline } // End of template m_assoc_sta_subscription template (omit) AssocStaSubscription m_assoc_sta_subscription_invalid( in template (value) JSON.AnyURI p_callbackReference, in template (value) ApIdentity p_apId, + in template (omit) JSON.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, in template (omit) LinkTypes p_links := omit, + in template (omit) UInt8 p_notificationPeriod := omit, + in template (omit) NotificationEvent p_notificationEvent := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { - subscriptionType := "InvalidAssocStaSubscription", - callbackReference := p_callbackReference, - links := p_links, - apId := p_apId, - expiryDeadline := p_expiryDeadline + subscriptionType := "InvalidAssocStaSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + apId := p_apId, + notificationPeriod := p_notificationPeriod, + notificationEvent := p_notificationEvent, + expiryDeadline := p_expiryDeadline } // End of template m_assoc_sta_subscription_invalid template (present) AssocStaSubscription mw_assoc_sta_subscription( template (present) JSON.AnyURI p_callbackReference := ?, template (present) ApIdentity p_apId := ?, + template JSON.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, template LinkTypes p_links := *, + template UInt8 p_notificationPeriod := *, + template NotificationEvent p_notificationEvent := *, template TimeStamp p_expiryDeadline := * ) := { - subscriptionType := "AssocStaSubscription", - callbackReference := p_callbackReference, - links := p_links, - apId := p_apId, - expiryDeadline := p_expiryDeadline + subscriptionType := "AssocStaSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + apId := p_apId, + notificationPeriod := p_notificationPeriod, + notificationEvent := p_notificationEvent, + expiryDeadline := p_expiryDeadline } // End of template mw_assoc_sta_subscription template (omit) StaDataRateSubscription m_sta_data_rate_subscription( in template (value) JSON.AnyURI p_callbackReference, in template (value) StaIdentities p_staId, + in template (omit) JSON.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, in template (omit) LinkTypes p_links := omit, + in template (omit) UInt8 p_notificationPeriod := omit, + in template (omit) NotificationEvent p_notificationEvent := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { - subscriptionType := "StaDataRateSubscription", - callbackReference := p_callbackReference, - links := p_links, - staId := p_staId, - expiryDeadline := p_expiryDeadline + subscriptionType := "StaDataRateSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + staId := p_staId, + notificationPeriod := p_notificationPeriod, + notificationEvent := p_notificationEvent, + expiryDeadline := p_expiryDeadline } // End of template m_sta_data_rate_subscription template (omit) StaDataRateSubscription m_sta_data_rate_subscription_invalid( in template (value) JSON.AnyURI p_callbackReference, in template (value) StaIdentities p_staId, + in template (omit) JSON.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, in template (omit) LinkTypes p_links := omit, + in template (omit) UInt8 p_notificationPeriod := omit, + in template (omit) NotificationEvent p_notificationEvent := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { - subscriptionType := "InvalidStaDataRateSubscription", - callbackReference := p_callbackReference, - links := p_links, - staId := p_staId, - expiryDeadline := p_expiryDeadline + subscriptionType := "InvalidStaDataRateSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + staId := p_staId, + notificationPeriod := p_notificationPeriod, + notificationEvent := p_notificationEvent, + expiryDeadline := p_expiryDeadline } // End of template m_sta_data_rate_subscription_invalid template (present) StaDataRateSubscription mw_sta_data_rate_subscription( template (present) JSON.AnyURI p_callbackReference := ?, template (present) StaIdentities p_staId := ?, + template JSON.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, template LinkTypes p_links := *, - template TimeStamp p_expiryDeadline := * + template UInt8 p_notificationPeriod := *, + template NotificationEvent p_notificationEvent := *, + template TimeStamp p_expiryDeadline := * ) := { - subscriptionType := "StaDataRateSubscription", - callbackReference := p_callbackReference, - links := p_links, - staId := p_staId, - expiryDeadline := p_expiryDeadline + subscriptionType := "StaDataRateSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + staId := p_staId, + notificationPeriod := p_notificationPeriod, + notificationEvent := p_notificationEvent, + expiryDeadline := p_expiryDeadline } // End of template mw_sta_data_rate_subscription + template (omit) StaIdentity m_sta_identity( + in JSON.String p_macId, + in template (omit) JSON.String p_ssid := omit, + in template (omit) JSON.String p_aid := omit, + in template (omit) JSON.String p_ipAddress := omit + ) := { + macId := p_macId, + ssid := p_ssid, + aid := p_aid, + ipAddress := p_ipAddress + } // End of template m_sta_identity + + template (present) StaIdentity mw_sta_identity( + template (present) JSON.String p_macId := ?, + template JSON.String p_ssid := *, + template JSON.String p_aid := *, + template JSON.String p_ipAddress := * + ) := { + macId := p_macId, + ssid := p_ssid, + aid := p_aid, + ipAddress := p_ipAddress + } // End of template mw_sta_identity + template (omit) SubscriptionLinkList m_subscription_link_list( in template (value) LinkTypes p_links, - in template (omit) AssocStaSubscriptionList p_assocStaSubscription := omit, - in template (omit) StaDataRateSubscriptionList p_staDataRateSubscription := omit + in template (omit) Subscription p_subscription := omit ) := { - links := p_links, - assocStaSubscription := p_assocStaSubscription, - staDataRateSubscription := p_staDataRateSubscription + links := p_links, + subscription := p_subscription } // End of template m_subscription_link_list template (present) SubscriptionLinkList mw_subscription_link_list( template (present) LinkTypes p_links := ?, - template AssocStaSubscriptionList p_assocStaSubscription := *, - template StaDataRateSubscriptionList p_staDataRateSubscription := * + template Subscription p_subscription := * ) := { - links := p_links, - assocStaSubscription := p_assocStaSubscription, - staDataRateSubscription := p_staDataRateSubscription + links := p_links, + subscription := p_subscription } // End of template mw_subscription_link_list template (omit) ApIdentity m_ap_identity( - in JSON.String p_macId, + in JSON.String p_bssid, in template (omit) SsidList p_ssid := omit, in template (omit) IpAddressList p_ipAddress := omit ) := { - macId := p_macId, + bssid := p_bssid, ssid := p_ssid, ipAddress := p_ipAddress } // End of template m_ap_identity template (present) ApIdentity mw_ap_identity( - template (present) JSON.String p_macId := ?, + template (present) JSON.String p_bssid := ?, template SsidList p_ssid := *, template IpAddressList p_ipAddress := * ) := { - macId := p_macId, + bssid := p_bssid, ssid := p_ssid, ipAddress := p_ipAddress } // End of template mw_ap_identity + template (omit) MeasurementConfigLinkList m_measurement_config_list( + in template (omit) LinkTypes p_links := omit, + in template (value) MeasurementConfig_MeasurementConfigLinkList p_measurementConfig + ) := { + links := p_links, + measurementConfig := p_measurementConfig + } // End of template m_measurement_config_list + + template (present) MeasurementConfigLinkList mw_measurement_config_list( + template LinkTypes p_links := *, + template (present) MeasurementConfig_MeasurementConfigLinkList p_measurementConfig := ? + ) := { + links := p_links, + measurementConfig := p_measurementConfig + } // End of template mw_measurement_config_list + + template (value) MeasurementConfig_MeasurementConfigLinkList m_measurement_config_link_list( + in JSON.AnyURI p_href, + in JSON.String p_measurementId + ) := { + href := p_href, + measurementId := p_measurementId + } // End of template m_measurement_config_link_list + + template (present) MeasurementConfig_MeasurementConfigLinkList mw_measurement_config_link_list( + template (present) JSON.AnyURI p_href := ?, + template (present) JSON.String p_measurementId := ? + ) := { + href := p_href, + measurementId := p_measurementId + } // End of template mw_measurement_config_link_list + + template (omit) MeasurementConfig m_measurement_config( + in template (omit) LinkTypes p_links := omit, + in template (value) StaIdentities p_staId, + in JSON.String p_measurementId, + in template (value) MeasurementInfo p_measurementInfo + ) := { + links := p_links, + staId := p_staId, + measurementId := p_measurementId, + measurementInfo := p_measurementInfo + } // End of template m_measurement_config + + template (present) MeasurementConfig mw_measurement_config( + template LinkTypes p_links := *, + template (present) StaIdentities p_staId := ?, + template (present) JSON.String p_measurementId := ?, + template (present) MeasurementInfo p_measurementInfo := ? + ) := { + links := p_links, + staId := p_staId, + measurementId := p_measurementId, + measurementInfo := p_measurementInfo + } // End of template mw_measurement_config + + template (omit) MeasurementInfo m_measurement_info( + in template (omit) UInt16 p_measurementDuration := omit, + in template (omit) UInt16 p_randomInterval:= omit, + in template (omit) ChannelLoadConfig p_channelLoadConf := omit, + in template (omit) BeaconRequestConfig p_beaconRequestConf := omit, + in template (omit) StaStatisticsConfig p_staStatisticsConf := omit, + in template (omit) NeighborReportConfig p_neighborReportConf := omit + ) := { + measurementDuration := p_measurementDuration, + randomInterval := p_randomInterval, + channelLoadConf := p_channelLoadConf, + beaconRequestConf := p_beaconRequestConf, + staStatisticsConf := p_staStatisticsConf, + neighborReportConf := p_neighborReportConf + } // End of template m_measurement_info + + template MeasurementInfo mw_measurement_info( + template UInt16 p_measurementDuration := *, + template UInt16 p_randomInterval:= *, + template ChannelLoadConfig p_channelLoadConf := *, + template BeaconRequestConfig p_beaconRequestConf := *, + template StaStatisticsConfig p_staStatisticsConf := *, + template NeighborReportConfig p_neighborReportConf := * + ) := { + measurementDuration := p_measurementDuration, + randomInterval := p_randomInterval, + channelLoadConf := p_channelLoadConf, + beaconRequestConf := p_beaconRequestConf, + staStatisticsConf := p_staStatisticsConf, + neighborReportConf := p_neighborReportConf + } // End of template mw_measurement_info + } // End of module WlanInformationAPI_Templates diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn index 3f9fdf7fb0d49eade6e5c74a8599ce7be72f26d0..4ca5adbec19fa2651b81b74144e9287306acd89b 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn @@ -37,18 +37,17 @@ module WlanInformationAPI_TypesAndValues { NanoSeconds nanoSeconds } - type record of JSON.String SsidList; type record of JSON.String IpAddressList; /** * @desc Identifiers determining a specific Access Point - * @member macId Unique Identifier assigned to an Access Point + * @member bssid Basic Service Set Identifier (BSSID) is a unique Identifier assigned to an Access Point (as network interface controller) for communications at the data link layer of a network segment * @member ssid Service Set Identifier to identify logical networks including Basic Service Set and Extended Service Set * @member ipAddress IPv4 or IPv6 address allocated for the Access Point * @see ETSI GS MEC 028 Clause 6.5.3 Type: ApIdentity */ type record ApIdentity { - JSON.String macId, + JSON.String bssid, SsidList ssid optional, IpAddressList ipAddress optional } @@ -89,16 +88,13 @@ module WlanInformationAPI_TypesAndValues { * @member heMacCapInfo MAC capabilities of an Access Point * @member hePhyCapinfo PHY capabilities of an Access Point * @member supportedHeMcsNssSet Supported MCS and NSS Set - * @member PPE Threshold determines the nominal packet padding value for a HE PPDU * @see ETSI GS MEC 028 Clause 6.5.16 Type: HeCapabilities */ type record HeCapabilities { UInt8 heMacCapInfo, UInt8 hePhyCapinfo, - UInt8 supportedHeMcsNssSet, - PpeThresholds ppeThresholds optional + UInt8 supportedHeMcsNssSet } - type UInt8 PpeThresholds; // Type not defined, to be reviewed. See ETSI GS MEC 028 Clause 6.5.16 Type: HeCapabilities /** * @desc Information on DMG Capabilities of an Access Point @@ -108,8 +104,6 @@ module WlanInformationAPI_TypesAndValues { * @member extScMcsCap Extended SC MCS capabilities * @member maxNrBasicAmsduSubframes Number of basic A-MSDU subframes in A-MSDU * @member maxNrShortAmsduSubframes Number of short A-MSDU subframes in A-MSDU - * @member tddCap TDD capabilities - * @member sarCap SAR capabilities * @see ETSI GS MEC 028 Clause 6.5.17 Type: DmgCapabilities */ type record DmgCapabilities { @@ -118,9 +112,7 @@ module WlanInformationAPI_TypesAndValues { UInt16 dmgStaBeamTrackTimeLimit, UInt8 extScMcsCap, UInt8 maxNrBasicAmsduSubframes, - UInt8 maxNrShortAmsduSubframes, - UInt16 tddCap, - UInt8 sarCap + UInt8 maxNrShortAmsduSubframes } /** @@ -134,8 +126,7 @@ module WlanInformationAPI_TypesAndValues { type record EdmgCapabilities { UInt8 ampduParameters, UInt16 trnParameters, - UInt32 supportedMcs, - UInt8 reserved optional + UInt32 supportedMcs } /** @@ -155,19 +146,6 @@ module WlanInformationAPI_TypesAndValues { EdmgCapabilities edmg optional } - /** - * @desc Stations that are associated with the Access Point - * @member macId Unique identifier assigned to a station (as network interface controller) for communications at the data link layer of a network segment - * @member assocId Unique number which identifies a particular association between an Access Point and a station - * @member ipAddress IPv4 or IPv6 address allocated for the station associated with the Access - * @see ETSI GS MEC 028 Clause 6.5.5 Type: AssociatedStations - */ - type record AssociatedStations { - JSON.String macId, - JSON.String assocId optional, - JSON.String ipAddress optional - } - /** * @desc Metrics related to the backhaul characteristics of an Access Point as defined for WAN metrics * @member wanInfo Info about WAN link status, link symmetricity and capacity currently used @@ -325,26 +303,6 @@ module WlanInformationAPI_TypesAndValues { CivicLocation civicLocation optional } - /** - * @desc Information about neighbor Access Points - * @member bssid BSS Id of the Access Point that is being reported - * @member bssidInfo Additional information related to Access Point that is being reported - * @member operatingClass The channel set of the AP indicated by this BSSID - * @member channel The channel currently used by this Access Point - * @member phyType PHY type of the AP indicated by this BSSID. It is an integer value coded according to the value of the dot11PHYType - * @member optionalSubelements Optional subelements - * @see ETSI GS MEC 028 Clause 6.5.10 Type: NeighborReport - */ - type record NeighborReport { - JSON.String bssid, - UInt32 bssidInfo, - UInt8 operatingClass, - UInt8 channel, - UInt8 phyType, - OptionalSubelements optionalSubelements optional - } - type record of UInt8 OptionalSubelements; // Not defined, see ETSI GS MEC 028 Clause 6.5.10 Type: NeighborReport, to be reviewed - /** * @desc Identifiers determining a specific client station * @member macId Unique identifier assigned to station (as network interface controller) for communications at the data link layer of a network segment @@ -361,34 +319,253 @@ module WlanInformationAPI_TypesAndValues { } type record of StaIdentity StaIdentities; + /** + * @desc Information about neighbor Access Points + * @member staId Identifier to uniquely specify the station whose information is exposed within this report + * @member measurementId Measurement ID of the Measurement configuration applied to this Neighbor Report + * @member bssid BSS Id of the Access Point that is being reported + * @member bssidInfo Additional information related to Access Point that is being reported + * @member operatingClass The channel set of the AP indicated by this BSSID + * @member channel The channel currently used by this Access Point + * @member phyType PHY type of the AP indicated by this BSSID. It is an integer value coded according to the value of the dot11PHYType + * @member bssTransitionCandidatePreference Relative value indicating the preferred ordering for this BSS as a transition candidate for roaming + * @see ETSI GS MEC 028 Clause 6.5.10 Type: NeighborReport + */ + type record NeighborReportItem { + StaIdentity staId, + JSON.String measurementId, + JSON.String bssid, + UInt32 bssidInfo, + UInt8 operatingClass, + UInt8 channel, + UInt8 phyType, + UInt8 bssTransitionCandidatePreference optional + } + type record of NeighborReportItem NeighborReport; + /** * @desc Information for the Access Point that the client station is associated to - * @member macId Unique identifier assigned to the Access Point (as network interface controller) for communications at the data link layer of a network segment + * @member bssid Basic Service Set Identifier (BSSID) is a unique identifier assigned to the Access Point (as network interface controller) for communications at the data link layer of a network segment. * @member ssid Service Set Identifier to identify logical networks * @member assocId Unique number which identifies a particular association between the station and Access Point * @member ipAddress IPv4 or IPv6 address allocated for the Access Point * @see ETSI GS MEC 028 Clause 6.5.12 Type: ApAssociated */ type record ApAssociated { - JSON.String macId, + JSON.String bssid, JSON.String ssid optional, JSON.String assocId optional, JSON.String ipAddress optional } + /** + * @desc Optionally reported reason for STA Statistics Group Identities 0 or 1 (STA Counters) in the STA Statistics Optional subelements + * @member failed dot11Failed + * @member fcsError dot11FCSError + * @member multipleRetry dot11MultipleRetry + * @member frameDuplicate dot11FrameDuplicate + * @member rtsFailure dot11RTSFailure + * @member ackFailure dot11AckFailure + * @member retry dot11Retry + * @see ETSI GS MEC 028 Clause 6.5.37 Type: ReportingReasonStaCounters + */ + type record ReportingReasonStaCounters { + JSON.Bool failed, + JSON.Bool fcsError, + JSON.Bool multipleRetry, + JSON.Bool frameDuplicate, + JSON.Bool rtsFailure, + JSON.Bool ackFailure, + JSON.Bool retry + } + + /** + * @desc Optionally reported reason for STA Statistics Group Identities 2 to 9 (QoS STA Counters) in the STA Statistics + * @member qosFailed dot11QoSFailed + * @member qosRetry dot11QoSRetry + * @member qosMultipleRetry dot11QoSMultipleRetry + * @member qosFrameDuplicate dot11QoSFrameDuplicate + * @member qosRtsFailure dot11QoSRTSFailure + * @member qosAckFailure dot11QoSAckFailure + * @member qosDiscarded dot11QoSDiscarded + * @see ETSI GS MEC 028 Clause 6.5.38 Type: ReportingReasonQoSCounters + */ + type record ReportingReasonQoSCounters { + JSON.Bool qosFailed, + JSON.Bool qosRetry, + JSON.Bool qosMultipleRetry, + JSON.Bool qosFrameDuplicate, + JSON.Bool qosRtsFailure, + JSON.Bool qosAckFailure, + JSON.Bool qosDiscarded + } + + /** + * @desc Channel Load report from a station + * @member staId Identifier to uniquely specify the station whose information is exposed within this report + * @member measurementId Measurement ID of the Measurement configuration applied to this Channel Load Report + * @member operatingClass Operating Class field indicates an operating class value + * @member channel Channel number indicates the channel number for which the measurement report applies + * @member measurementDuration Duration over which the Channel Load report was measured, in units of TUs of 1024 µs + * @member channelLoad Proportion of measurement duration for which the measuring STA determined the channel to be busy, as a percentage of time, linearl scaled with 255 representing 100% + * @see ETSI GS MEC 028 Clause 6.5.39 Type: ChannelLoad + */ + type record ChannelLoadItem { + StaIdentity staId optional, + JSON.String measurementId, + UInt8 operatingClass, + UInt8 channel, + UInt8 measurementDuration, + UInt8 channelLoad + } + type record of ChannelLoadItem ChannelLoad; + + /** + * @desc The load of a Overlapping BSS + * @member allocatedTrafficSelfMean Mean of allocated traffic from this AP (BSS) in units of 32 µs per second + * @member allocatedTrafficSelfStdDev Standard deviation from the mean of allocation traffic from this BSS in units of 32 µs per second + * @member Mean of the sum of allocated traffic from other APs on the overlapping channel in unit of 32 µs per second + * @member Standard deviation from the mean of the sum of allocated traffic from other APs on the overlapping channel in unit of 32 µs per second + * @member overlap Indicates the number of other APs that are sharing the same channel as the reporting AP + * @see ETSI GS MEC 028 Clause 6.5.40 Type: OBssLoad + */ + type record OBssLoad { + UInt16 allocatedTrafficSelfMean, + UInt16 allocatedTrafficSelfStdDev optional, + UInt16 allocatedTrafficShareMean, + UInt16 allocatedTrafficShareStdDev optional, + UInt8 overlap optional + } + + /** + * @desc + * @member ssid Contains an SSID element + * @member bssid BSSID of the neighbor AP which information is intended to obtain + * @see ETSI GS MEC 028 Clause 6.5.32 Type: NeighborReportConfig + */ + type record NeighborReportConfig { + JSON.String ssid optional, + JSON.String bssid optional + } + + /** + * @desc The information required to define client station measurements available from the WLAN Access Information Service + * @member measurementDuration Duration of the measurement in time units (TUs) of 1024 µs + * @member randomInterval Random interval to be used for starting the measurement in TUs of 1024 µs + * @member channelLoadConf Configuration related to the Channel Load + * @member beaconRequestConf Configuration related to Beacon Request + * @member staStatisticsConf Configuration related to the statistics provided by STAs + * @member neighborReportConf Configuration related to Neighbor Reports + * @see ETSI GS MEC 028 Clause 6.5.41 Type: MeasurementInfo + */ + type record MeasurementInfo { + UInt16 measurementDuration optional, + UInt16 randomInterval optional, + ChannelLoadConfig channelLoadConf optional, + BeaconRequestConfig beaconRequestConf optional, + StaStatisticsConfig staStatisticsConf optional, + NeighborReportConfig neighborReportConf optional + } + + /** + * @desc STA Statistics Group Data for Group Identity = 0 + * @member transmittedFragmentCount dot11TransmittedFragmentCount counter + * @member groupTransmittedFrameCount dot11GroupTransmittedFrameCount counter + * @member failedCount dot11FailedCount counter + * @member receivedFragmentCountdot11ReceivedFragmentCount counter + * @member groupReceivedFrameCountdot11GroupReceivedFrameCount counter + * @member fcsErrorCount dot11FCSErrorCount counter + * @member transmittedFrameCount dot11TransmittedFrameCount counter + * @member reportingReasonStaCounters Optionally reported reason for STA Statistics Group 0 + * @see ETSI GS MEC 028 Clause 6.5.34 Type: StaStatisticsGroupZeroData + */ + type record StaStatisticsGroupZeroData { + UInt32 transmittedFragmentCount, + UInt32 groupTransmittedFrameCount, + UInt32 failedCount, + UInt32 receivedFragmentCount, + UInt32 groupReceivedFrameCount, + UInt32 fcsErrorCount, + UInt32 transmittedFrameCount, + ReportingReasonStaCounters reportingReasonStaCounters optional + } + + /** + * @desc STA Statistics Group Data for Group Identity = 1 + * @member retryCount dot11RetryCount counter + * @member multipleRetryCount dot11MultipleRetryCount counter + * @member frameDuplicateCount dot11FrameDuplicateCount counter + * @member rtsSuccessCount dot11RTSSuccessCount counter + * @member rtsFailureCount dot11RTSFailureCount counter + * @member ackFailureCount dot11AckFailureCount counter + * @member reportingReasonStaCounters Optionally reported reason for STA Statistics Group 1 + * @see ETSI GS MEC 028 Clause 6.5.35-1: Attributes of the StaStatisticsGroupOneData + */ + type record StaStatisticsGroupOneData { + UInt32 retryCount, + UInt32 multipleRetryCount, + UInt32 frameDuplicateCount, + UInt32 rtsSuccessCount, + UInt32 rtsFailureCount, + UInt32 ackFailureCount, + ReportingReasonStaCounters reportingReasonStaCounters optional + } + + + /** + * @desc STA Statistics Group Data for Group Identity = 2 through 9 + * @member qosTransmittedFragmentCount dot11QosTransmittedFragmentCount counter + * @member qosFailedCount dot11QosFailedCount counter + * @member qosRetryCount dot11QosRetryCount counter + * @member qosMultipleRetryCount dot11QosMultipleRetryCount counter + * @member qosFrameDuplicateCount dot11QosFrameDuplicateCount counter + * @member qosRTSSuccessCount dot11QosRTSSuccessCount counter + * @member qosRTSFailureCount dot11QosRTSFailureCount counter + * @member qosAckFailureCount dot11QosAckFailureCount counter + * @member qosReceivedFragmentCount dot11QosReceivedFragmentCount counter + * @member qosTransmittedFrameCount dot11QosTransmittedFrameCount counter + * @member qosDiscardedFrameCount dot11QosDiscardedFrameCount counter + * @member qosMPDUsReceivedCount dot11QosMPDUsReceivedCount counter + * @member qosRetriesReceivedCount dot11QosRetriesReceivedCount counter + * @member reportingReasonQoSCounters Optionally reported reason for STA Statistics Groups 2 to 9 + * @see ETSI GS MEC 028 Clause 6.5.36-1: Attributes of the StaStatisticsGroup2to9Data + */ + type record StaStatisticsGroup2to9Data { + UInt32 qosTransmittedFragmentCount, + UInt32 qosFailedCount, + UInt32 qosRetryCount, + UInt32 qosMultipleRetryCount, + UInt32 qosFrameDuplicateCount, + UInt32 qosRTSSuccessCount, + UInt32 qosRTSFailureCount, + UInt32 qosAckFailureCount, + UInt32 qosReceivedFragmentCount, + UInt32 qosTransmittedFrameCount, + UInt32 qosDiscardedFrameCount, + UInt32 qosMPDUsReceivedCount, + UInt32 qosRetriesReceivedCount, + ReportingReasonQoSCounters reportingReasonQoSCounters optional + } + /** * @desc Information statistics of the client station - * @member md Measurement Duration + * @member staId Identifier to uniquely specify the station whose information is exposed within this report + * @member measurementId Measurement ID of the Measurement configuration applied to this STA Statistics Report + * @member measurementDuration Duration over which the Statistics Group Data was measured in time units of 1024 µs * @member groupIdentity Indicates the requested statistics group describing the Statistics Group Data - * @member statisticsGroupData Statistics Group Data - * @member optionalSubelements Optional subelements + * @member groupZeroData STA Statistics Data for Group Identity = 0 + * @member groupOneData STA Statistics Data for Group Identity = 1 + * @member group2to9Data STA Statistics Data for Group Identity = 2 through 9 * @see ETSI GS MEC 028 Clause 6.5.13 Type: StaStatistics */ type record StaStatistics { - UInt16 md, + StaIdentity staId optional, + JSON.String measurementId, + JSON.String measurementDuration, UInt8 groupIdentity, - StatisticsGroupData statisticsGroupData, - OptionalSubelements optionalSubelements optional + StaStatisticsGroupZeroData groupZeroData optional, + StaStatisticsGroupOneData groupOneData optional, + StaStatisticsGroup2to9Data group2to9Data optional } type UInt8 StatisticsGroupData; // Note defined, see ETSI GS MEC 028 Clause 6.5.13 Type: StaStatistics @@ -489,13 +666,14 @@ module WlanInformationAPI_TypesAndValues { * @member ssId The SSID subelement indicates the ESS(s) or IBSS(s) for which a beacon report is received * @see ETSI GS MEC 028 Clause 6.5.27 Type: BeaconReport */ - type record BeaconReport { + type record BeaconReportItem { StaIdentity staId, JSON.String measurementId, UInt32 channelId, BssIds bssId, SsIds ssId optional } + type record of BeaconReportItem BeaconReport; /** * @desc Information on Access Points available from the WLAN Access Information Service @@ -507,77 +685,120 @@ module WlanInformationAPI_TypesAndValues { * @member bssLoad BSS Load attribute contains information on the current STA population and traffic levels in the BSS * @member extBssLoad Extended BSS Load attribute contains more detailed information on the current STA population and traffic levels in the BSS * @member apLocation The location on the Access Point - * @member apNeighbor Information about neighbor Access Points * @see ETSI GS MEC 028 Clause 6.2.2 Type: ApInfo */ type record ApInfo { TimeStamp timeStamp optional, ApIdentity apId, UInt32 channel optional, + WlanCapabilities wlanCap optional, + WanMetrics wanMetrics optional, BssLoad bssLoad optional, ExtBssLoad extBssLoad optional, - ApLocation apLocation optional, - NeighborReport apNeighbor optional + OBssLoad oBssLoad optional, + ApLocation apLocation optional } type record of ApInfo ApInfoList; /** * @desc Information on wireless stations available from the WLAN Access Information Service * @member timeStamp TimeStamp - * @member apId Identifier(s) to uniquely specify the Access Point whose information is exposed within this data type + * @member staId Identifier(s) to uniquely specify station whose information is exposed within this data type * @member channel Channel configured for the Access Point * @member apAssociated Information about the Access Point that this Client Station is associated to * @member rssi Receive Signal Strength Indicator * @member staDataRate Station Data Rate * @member staStatistics Statistics as defined in IEEE 802.11-2016 for the client station collected over measurement duration - * @member beaconReport Beacon Report as defined in Wi-Fi Agile Multiband Specification + * @member beaconReport Beacon Report as defined in Wi-Fi Agile Multiband Specification + * @member neighborReport Information about neighbor Access Points seen by the station + * @member channelLoad Channel Load reports as seen by the station * @see ETSI GS MEC 028 Clause 6.2.3 Type: StaInfo */ type record StaInfo { TimeStamp timeStamp optional, - ApIdentity apId, + StaIdentity staId, UInt32 channel optional, ApAssociated apAssociated optional, Rssi rssi optional, StaDataRate staDataRate optional, StaStatistics staStatistics optional, - BeaconReport beaconReport optional + BeaconReport beaconReport optional, + NeighborReport neighborReport optional, + ChannelLoad channelLoad optional + } type record of StaInfo StaInfoList; /** * @desc Different measurements configuration available from the WLAN Access Information Service + * @member _links Hyperlink related to the resource + * @member staId Identifier(s) to uniquely specify the target client station(s) for the measurement configuration * @member measurementId Identifier of this measurement configuration - * @member measurementDuration Duration of the measurement - * @member randomnInterval Random interval to be used for starting the measurement - * @member channelLoad Configuration related to the Channel Load - * @member beaconRequest Configuration related to Beacon Request - * @member staStatistics Configuration related to the statistics provided by STAs + * @member measurementInfo Information used to configure this measurement * @see ETSI GS MEC 028 Clause 6.2.4 Type: MeasurementConfig */ type record MeasurementConfig { + LinkTypes links optional, + StaIdentities staId, JSON.String measurementId, - UInt32 measurementDuration, - UInt32 randomnInterval, - ChannelLoadConfig channelLoad optional, - BeaconRequestConfig beaconRequest optional, - StaStatisticsConfig staStatistics optional + MeasurementInfo measurementInfo + } with { + variant (links) "name as '_links'"; + } + + type record MeasurementConfig_MeasurementConfigLinkList { + JSON.AnyURI href, + JSON.String measurementId + } + + /** + * @desc The different measurement configurations available from the WLAN Access Information Service + * @member _links Hyperlink related to the resource + * @member measurementConfig + * @see ETSI GS MEC 028 Clause 6.2.5 Type: MeasurementConfigLinkList + */ + type record MeasurementConfigLinkList { + LinkTypes links optional, + MeasurementConfig_MeasurementConfigLinkList measurementConfig + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc Set for trigger-based event notification reporting + * @member trigger_ Trigger for the notification + * @member threshold Number of connected stations threshold for trigger-based event reporting + * @see ETSI GS MEC 028 Clause 6.3.3 Type: StaDataRateSubscription + */ + type record NotificationEvent { + UInt8 trigger_, + UInt8 threshold + } with { + variant (trigger_) "name as 'trigger'"; } /** * @desc Subscription to get updates on client stations that are associated to an Access Point * @member subscriptionType Shall be set to "AssocStaSubscription" * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed WLAN information + * @member requestTestNotification Set to TRUE by the service consumer to request a test notification on the callbackReference URI to determine if it is reachable by the WAIS for notifications + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the WAIS and the service consumer for notifications, either in place of the callbackReference URI or if it is not reachable via the test notification * @member _links Hyperlink related to the resource * @member apId Identifier(s) to uniquely specify the target Access Point for the subscription + * @member notificationPeriod Set for periodic notification reporting + * @member notificationEvent Set for trigger-based event notification reporting * @member expiryDeadline The expiration time of the subscription determined by the WLAN Access Information Service * @see ETSI GS MEC 028 Clause 6.3.2 Type: AssocStaSubscription */ type record AssocStaSubscription { JSON.String subscriptionType, - JSON.AnyURI callbackReference, + JSON.AnyURI callbackReference optional, + JSON.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, LinkTypes links optional, ApIdentity apId, + UInt8 notificationPeriod optional, + NotificationEvent notificationEvent optional, TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; @@ -588,16 +809,24 @@ module WlanInformationAPI_TypesAndValues { * @desc Subscription to get updates on the Data Rate of targeted client station(s) * @member subscriptionType Shall be set to "AssocStaSubscription" * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed WLAN information + * @member requestTestNotification Set to TRUE by the service consumer to request a test notification on the callbackReference URI to determine if it is reachable by the WAIS for notifications + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the WAIS and the service consumer for notifications, either in place of the callbackReference URI or if it is not reachable via the test notification * @member _links Hyperlink related to the resource * @member staId Identifier(s) to uniquely specify the target client station(s) for the subscription + * @member notificationPeriod Set for periodic notification reporting + * @member notificationEvent Set for trigger-based event notification reporting * @member expiryDeadline The expiration time of the subscription determined by the WLAN Access Information Service * @see ETSI GS MEC 028 Clause 6.3.3 Type: StaDataRateSubscription */ type record StaDataRateSubscription { JSON.String subscriptionType, JSON.AnyURI callbackReference, + JSON.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, LinkTypes links optional, StaIdentities staId, + UInt8 notificationPeriod optional, + NotificationEvent notificationEvent optional, TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; @@ -605,19 +834,41 @@ module WlanInformationAPI_TypesAndValues { type record of StaDataRateSubscription StaDataRateSubscriptionList; /** - * @desc list of links to requestors subscriptions - * @member links Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests + * @desc + * @member href The URI referring to the subscription + * @member subscriptionType Type of the subscription + * @see ETSI GS MEC 028 Clause 6.3.4 Type: SubscriptionLinkList + */ + type record SubscriptionItem { + JSON.AnyURI href, + JSON.String subscriptionType + } + type record of SubscriptionItem Subscription; + + /** + * @desc List of links related to currently existing subscriptions for the service consumer + * @member links List of hyperlinks related to the resource * @member assocStaSubscription - * @member staDataRateSubscription + * @see ETSI GS MEC 028 Clause 6.3.4 Type: SubscriptionLinkList */ type record SubscriptionLinkList { LinkTypes links, - AssocStaSubscriptionList assocStaSubscription optional, - StaDataRateSubscriptionList staDataRateSubscription optional + Subscription subscription optional } with { variant (links) "name as '_links'"; } + /** + * @desc Configuration for the delivery of subscription notifications over Websockets + * @member websocketUri Set by WAIS to indicate to the service consumer the Websocket URI to be used for delivering notifications + * @member requestWebsocketUri Set to true by the service consumer to indicate that Websocket delivery is requested + * @see ETSI GS MEC 028 Clause 6.3.6 Type: WebsockNotifConfig + */ + type record WebsockNotifConfig { + JSON.AnyURI websocketUri optional, + JSON.Bool requestWebsocketUri optional + } + /** * @desc Notification from WLAN Access Information Service with regards to client stations associated to the targeted Access Point * @member notificationType Shall be set to "AssocStaNotification" @@ -635,7 +886,7 @@ module WlanInformationAPI_TypesAndValues { /** * @desc Notification from WLAN Information service with regards to Data Rates of the subscribed client stations - * @member notificationType + * @member notificationType Shall be set to "StaDataRateNotification" * @member timeStamp Time stamp * @member staDataRate Data rates of a client station * @see ETSI GS MEC 028 Clause 6.4.3 Type: StaDataRateNotification @@ -646,6 +897,22 @@ module WlanInformationAPI_TypesAndValues { StaDataRates staDataRate optional } -} with { + /** + * @desc Notification from WLAN Access Information service with regards to expiry of an existing subscription + * @member notificationType Shall be set to "ExpiryNotification" + * @member links Hyperlink related to the resource + * @member expiryDeadlineTime stamp + * @see ETSI GS MEC 028 Clause 6.4.4 Type: ExpiryNotification + */ + type record ExpiryNotification { + JSON.String notificationType, + LinkTypes links, + TimeStamp expiryDeadline + } with { + variant (links) "name as '_links'"; + } + + } + with { encode "JSON" } // End of module WlanInformationAPI_TypesAndValues diff --git a/ttcn/LibMec/ttcn/LibMec_Functions.ttcn b/ttcn/LibMec/ttcn/LibMec_Functions.ttcn index 19e8fbe1c91b247d7e22d9fe65966da41d46c111..638dbbf8ed01127339814b5592e0c548ba2facbb 100644 --- a/ttcn/LibMec/ttcn/LibMec_Functions.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Functions.ttcn @@ -236,10 +236,10 @@ module LibMec_Functions { // Send the request httpPort.send( m_http_request( - m_http_request_get( - p_uri, - p_headers, - m_http_message_body_json(p_json_body) + m_http_request_post( + p_uri, + p_headers, + m_http_message_body_json(p_json_body) ))); // Await for the response tc_ac.start; @@ -283,7 +283,7 @@ module LibMec_Functions { alt { [] httpPort.receive( mw_http_response( - mw_http_response_ok + mw_http_response_204_no_content )) -> value v_response { tc_ac.stop; diff --git a/ttcn/LibMec/ttcn/LibMec_Pics.ttcn b/ttcn/LibMec/ttcn/LibMec_Pics.ttcn index ee43e75920a6fb05ff4f2526722fb04b6c656724..18ace6f78d0e651f4e1116ac151db1c905fe735e 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pics.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pics.ttcn @@ -18,10 +18,6 @@ module LibMec_Pics { modulepar boolean PICS_APP_PACKAGE := true; - modulepar boolean PICS_APP_PACKAGE_MANAGEMENT := true; - - modulepar boolean PICS_APP_PACKAGE_NOTIFICATIONS := true; - modulepar boolean PICS_RNIS_QUERY := true; modulepar boolean PICS_RNIS_ALL_SUBSCRIPTIONS := true; @@ -34,16 +30,14 @@ module LibMec_Pics { modulepar boolean PICS_AMS_NOTIFICATIONS := true; - modulepar boolean PIC_GRANTS_MANAGEMENT := true; + modulepar boolean PICS_GRANTS_MANAGEMENT := true; - modulepar boolean PIC_APP_PACKAGE_MANAGEMENT := true; + modulepar boolean PICS_APP_PACKAGE_MANAGEMENT := true; - modulepar boolean PIC_APP_PACKAGE_NOTIFICATIONS := true; + modulepar boolean PICS_APP_PACKAGE_NOTIFICATIONS := true; modulepar charstring PICS_ROOT_API := "exampleAPI"; - modulepar boolean PIC_APP_LCM_MANAGEMENT := true; - modulepar boolean PIC_APP_LCM_NOTIFICATIONS := true; } // End of module LibMec_Pics diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index 8e0ad2089d58d40767893fb4981dad1c74a79316..422cb506a329fd21e41113c85619178959eb5603 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -1,8 +1,8 @@ module LibMec_Pixits { - modulepar charstring PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/zones"; + modulepar charstring PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/queries/zones"; - modulepar charstring PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/users"; + modulepar charstring PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/queries/users"; modulepar charstring PX_ME_APP_Q_DIST_URI := "/location/v2/subscriptions/distance"; @@ -20,9 +20,9 @@ module LibMec_Pixits { modulepar charstring PX_SVC_MGMT_APP_URI := "/mec_service_mgmt/v1/application"; - modulepar charstring PX_RNIS_SUBSCRITIONS_URI := "/rni/v1/subscriptions"; + modulepar charstring PX_RNIS_SUBSCRITIONS_URI := "/rni/v2/subscriptions"; - modulepar charstring PX_RNIS_QUERIES_URI := "/rni/v1/queries"; + modulepar charstring PX_RNIS_QUERIES_URI := "/rni/v2/queries"; modulepar charstring PX_ME_BWM_URI := "/bwm/v1/bw_allocations"; @@ -30,9 +30,9 @@ module LibMec_Pixits { modulepar charstring PX_ME_MTS_SESSIONS_URI := "/mts/v1/mts_sessions"; - modulepar charstring PX_ME_WLAN_QUERIES_URI := "/wai/v1/queries"; + modulepar charstring PX_ME_WLAN_QUERIES_URI := "/wai/v2/queries"; - modulepar charstring PX_ME_WLAN_URI := "/wai/v1"; + modulepar charstring PX_ME_WLAN_URI := "/wai/v2"; modulepar charstring PX_ME_V2X_URI := "/vis/v1"; @@ -46,15 +46,17 @@ module LibMec_Pixits { modulepar charstring PX_MEO_GRANT_URI := "/granting/v1/grants" - modulepar charstring PX_MEO_PKGM_URI := "/apmi/v1/app_packages" + modulepar charstring PX_MEO_PKGM_URI := "/app_pkgm/v1/app_packages" - modulepar charstring PX_MEO_PKGM_SUBS := "/apmi/v1/subscriptions" + modulepar charstring PX_MEO_PKGM_URI_ONBOARDED := "/app_pkgm/v1/onboarded_app_packages" + + modulepar charstring PX_MEO_PKGM_SUBS := "/app_pkgm/v1/subscriptions" - modulepar charstring PX_MEPM_PKGM_URI := "/apmi/v1/app_packages" + modulepar charstring PX_MEPM_PKGM_URI := "/app_pkgm/v1/app_packages" - modulepar charstring PX_MEPM_PKGM_SUBS := "/apmi/v1/subscriptions" + modulepar charstring PX_MEPM_PKGM_SUBS := "/app_pkgm/v1/subscriptions" - modulepar charstring PX_MEX_LCM_URI := "/alcmi/v1/app_instances" + modulepar charstring PX_APP_LCM_URI := "/app_lcm/v1/app_instances" modulepar charstring PX_MEX_LCM_SUBS := "/alcmi/v1/subscriptions" diff --git a/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn index fc1f256717977d987360f4623892191742c015d8..0a6ffd45d065d15b4c729262215df4dca9006499 100644 --- a/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn @@ -10,18 +10,10 @@ module LibItsHttp_JsonMessageBodyTypes { import from RnisAPI_TypesAndValues all; // LibMec/TrafficManagementApi import from TrafficManagementAPI_TypesAndValues all; - // LibMec/Ams - import from Ams_TypesAndValues all; - // LibMec/AppEnablementAPI - import from AppEnablementAPI_TypesAndValues all; - // LibMec/GrantAPI - import from Grant_TypesAndValues all; - // LibMec/AppPkgAPI - import from MeoPkgm_TypesAndValues all; - // LibMec/AppEnablementAPI - import from MepmPkgm_TypesAndValues all; - // LibMec/AppLCMAPI - import from AppLCM_TypesAndValues all; + // LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI + import from ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues all; + // LibMec/EdgePlatformApplicationEnablementAPI + import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; // LibMec/UEAppInterfaceAPI import from UEAppInterfaceAPI_TypesAndValues all; // LibMec/DeviceApplicationInterfaceAPI @@ -40,7 +32,7 @@ module LibItsHttp_JsonMessageBodyTypes { type union JsonBody { UserInfo userInfo, UserList userList, - ZoneInfo zoneInfo, + LocationAPI_TypesAndValues.ZoneInfo zoneInfo, AccessPointList accessPointList, UserTrackingSubscription userTrackingSubscription, PeriodicTrackingSubscription periodicTrackingSubscription, @@ -54,7 +46,7 @@ module LibItsHttp_JsonMessageBodyTypes { RnisAPI_TypesAndValues.SubscriptionLinkList subscriptionLinkList, CellChangeSubscription cellChangeSubscription, RabInfo rabInfo, - PlmnInfo plmnInfo, + PlmnInfos plmnInfos, S1BearerInfo s1BearerInfo, RabEstSubscription rabEstSubscription, RabModSubscription rabModSubscription, @@ -73,57 +65,59 @@ module LibItsHttp_JsonMessageBodyTypes { TransportInfoList transportInfoList, TrafficRuleList trafficRuleList, TrafficRule trafficRule, - AppMobilityServiceInfo appMobilityServiceInfo, - Ams_TypesAndValues.RegistrationRequest registrationRequest_ams, - Ams_TypesAndValues.MobilityProcedureSubscription subscriptionLinkList_ams, - Ams_TypesAndValues.AdjacentAppInfoSubscription adjacentAppInfoSubscription_ams, - Ams_TypesAndValues.ExpiryNotification expireNotification_ams, - Grant_TypesAndValues.GrantRequest grantRequest, - Grant_TypesAndValues.Grant grantResponse, - Grant_TypesAndValues.GrantRequestWithError grantRequestWithError, - MeoPkgm_TypesAndValues.AppPkg appPackageManagement, - MeoPkgm_TypesAndValues.OnboardedAppPkgInfo onboardedAppPkgInfo, - MeoPkgm_TypesAndValues.OnboardedAppPkgInfoList appOnboardPackageInfoList, - MeoPkgm_TypesAndValues.AppPkgWithError appPackageManagementWithError, - MeoPkgm_TypesAndValues.AppPkgSubscription appPkgSubscription, - MeoPkgm_TypesAndValues.AppPkgSubscriptionInfo appPkgSubscriptionInfo, - MeoPkgm_TypesAndValues.AppPkgSubscriptionInfoList appPkgSubscriptionInfoList, - MeoPkgm_TypesAndValues.AppPkgSubscriptionWithError appPkgSubscriptionWithError, - MeoPkgm_TypesAndValues.AppPkgNotification appPkgNotification, - MepmPkgm_TypesAndValues.AppPkg appMepmPackageManagement, - MepmPkgm_TypesAndValues.OnboardedAppPkgInfo onboardedMepmAppPkgInfo, - MepmPkgm_TypesAndValues.OnboardedAppPkgInfoList appOnboardMepmPackageInfoList, - MepmPkgm_TypesAndValues.AppPkgWithError appMepmPackageManagementWithError, - MepmPkgm_TypesAndValues.AppPkgSubscription appMepmPkgSubscription, - MepmPkgm_TypesAndValues.AppPkgSubscriptionInfo appMepmPkgSubscriptionInfo, - MepmPkgm_TypesAndValues.AppPkgSubscriptionInfoList appMepmPkgSubscriptionInfoList, - MepmPkgm_TypesAndValues.AppPkgSubscriptionWithError appMepmPkgSubscriptionWithError, - MepmPkgm_TypesAndValues.AppPkgNotification appMepmPkgNotification, - MepmPkgm_TypesAndValues.OnboardedAppPkgInfo appOnboardMepmPackageInfo, - AppLCM_TypesAndValues.CreateAppInstanceRequest createAppInstanceRequest, - AppLCM_TypesAndValues.AppInstanceInfo appInstanceInfo, - AppLCM_TypesAndValues.CreateAppInstanceRequestWithError createAppInstanceRequestWithError, - AppLCM_TypesAndValues.AppInstanceInfoList appInstanceInfoList, - AppLCM_TypesAndValues.InstantiateAppRequest appInstanceInstantiate, - AppLCM_TypesAndValues.InstantiateAppRequestWithError appInstanceInstantiateWithError, - AppLCM_TypesAndValues.TerminateAppRequest terminateType, - AppLCM_TypesAndValues.TerminateAppRequestWithError terminateTypeWithError, - AppLCM_TypesAndValues.OperateAppRequest changeStateTo, - AppLCM_TypesAndValues.OperateAppRequestWithError changeStateToWithError, - AppLCM_TypesAndValues.AppInstanceLcmOpOcc appInstanceLcmOpOcc, - AppLCM_TypesAndValues.AppInstanceLcmOpOccList appInstanceLcmOpOccList, - AppLCM_TypesAndValues.SubscriptionRequest subscriptionRequest, - AppLCM_TypesAndValues.SubscriptionRequestWithError subscriptionRequestWithError, - AppLCM_TypesAndValues.SubscriptionInfoList subscriptionInfoList, - AppLCM_TypesAndValues.SubscriptionInfo subscriptionInfo, - AppLCM_TypesAndValues.Notification lcmNotification, + /*AppMobilityServiceInfo appMobilityServiceInfo,*/ + /* Ams_TypesAndValues.RegistrationRequest registrationRequest_ams, */ + /* Ams_TypesAndValues.MobilityProcedureSubscription subscriptionLinkList_ams, */ + /* Ams_TypesAndValues.AdjacentAppInfoSubscription adjacentAppInfoSubscription_ams, */ + /* Ams_TypesAndValues.ExpiryNotification expireNotification_ams, */ + /* Ams_TypesAndValues.RegistrationRequestWithError registrationRequestWithError_ams, */ + GrantRequest grantRequest, + Grant grantResponse, + CreateAppPkg createAppPkg, + AppPkgInfo appPkgInfo, + AppPkgInfoList appPkgInfoList, + AppPkgInfoModifications appPkgInfoModifications, + AppPkgSubscription appPkgSubscription, + AppPkgSubscriptionInfo appPkgSubscriptionInfo, + AppPkgSubscriptionLinkList appPkgSubscriptionLinkList, + AppPkgNotification appPkgNotification, + ConfigPlatformForAppRequest configPlatformForAppRequest, + /* MepmPkgm_TypesAndValues.AppPkg appMepmPackageManagement, */ + /* MepmPkgm_TypesAndValues.OnboardedAppPkgInfo onboardedMepmAppPkgInfo, */ + /* MepmPkgm_TypesAndValues.OnboardedAppPkgInfoList appOnboardMepmPackageInfoList, */ + /* MepmPkgm_TypesAndValues.AppPkgWithError appMepmPackageManagementWithError, */ + /* MepmPkgm_TypesAndValues.AppPkgSubscription appMepmPkgSubscription, */ + /* MepmPkgm_TypesAndValues.AppPkgSubscriptionInfo appMepmPkgSubscriptionInfo, */ + /* MepmPkgm_TypesAndValues.AppPkgSubscriptionInfoList appMepmPkgSubscriptionInfoList, */ + /* MepmPkgm_TypesAndValues.AppPkgSubscriptionWithError appMepmPkgSubscriptionWithError, */ + /* MepmPkgm_TypesAndValues.AppPkgNotification appMepmPkgNotification, */ + /* MepmPkgm_TypesAndValues.OnboardedAppPkgInfo appOnboardMepmPackageInfo, */ + CreateAppInstanceRequest createAppInstanceRequest, + AppInstanceInfo appInstanceInfo, + AppInstanceInfoList appInstanceInfoList, + /* AppLCM_TypesAndValues.CreateAppInstanceRequestWithError createAppInstanceRequestWithError, */ + /* AppLCM_TypesAndValues.InstantiateAppRequest appInstanceInstantiate, */ + /* AppLCM_TypesAndValues.InstantiateAppRequestWithError appInstanceInstantiateWithError, */ + /* AppLCM_TypesAndValues.TerminateAppRequest terminateType, */ + /* AppLCM_TypesAndValues.TerminateAppRequestWithError terminateTypeWithError, */ + /* AppLCM_TypesAndValues.OperateAppRequest changeStateTo, */ + /* AppLCM_TypesAndValues.OperateAppRequestWithError changeStateToWithError, */ + /* AppLCM_TypesAndValues.AppInstanceLcmOpOcc appInstanceLcmOpOcc, */ + /* AppLCM_TypesAndValues.AppInstanceLcmOpOccList appInstanceLcmOpOccList, */ + /* AppLCM_TypesAndValues.SubscriptionRequest subscriptionRequest, */ + /* AppLCM_TypesAndValues.SubscriptionRequestWithError subscriptionRequestWithError, */ + /* AppLCM_TypesAndValues.SubscriptionInfoList subscriptionInfoList, */ + /* AppLCM_TypesAndValues.SubscriptionInfo subscriptionInfo, */ + /* AppLCM_TypesAndValues.Notification lcmNotification, */ UEAppInterfaceAPI_TypesAndValues.AppContext appContext, AppInfo appInfo, - Ams_TypesAndValues.RegistrationRequestWithError registrationRequestWithError_ams, ServiceInfoList serviceInfoList, ServiceInfo serviceInfo, - AppEnablementAPI_TypesAndValues.SubscriptionLinkList subscriptionLinkList_app_ens, + EdgePlatformApplicationEnablementAPI_TypesAndValues.SubscriptionLinkList subscriptionLinkList_app_ens, AppTerminationNotificationSubscription appTerminationNotificationSubscription, + AppTerminationConfirmation appTerminationConfirmation, + AppReadyConfirmation appReadyConfirmation, + ServiceLivenessInfo serviceLivenessInfo, DnsRuleList dnsRuleList, DnsRule dnsRule, SerAvailabilityNotificationSubscription serAvailabilityNotificationSubscription, @@ -136,7 +130,10 @@ module LibItsHttp_JsonMessageBodyTypes { StaInfoList staInfoList, AssocStaSubscription assocStaSubscription, StaDataRateSubscription staDataRateSubscription, + AssocStaNotification assocStaNotification, WlanInformationAPI_TypesAndValues.SubscriptionLinkList subscriptionLinkList_wlan, + MeasurementConfigLinkList measurementConfigLinkList, + MeasurementConfig measurementConfig, UuUnicastProvisioningInfo uuUnicastProvisioningInfo, UuMbmsProvisioningInfo uuMbmsProvisioningInfo, Pc5ProvisioningInfo pc5ProvisioningInfo, diff --git a/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn index c12ca444bd0692ef26c1f9a01983366ae372ed54..43f08bdac4623a0b6c06f6751d2eb08c371acda9 100644 --- a/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn @@ -13,36 +13,30 @@ module LibItsHttp_JsonTemplates { // LibMec import from LibMec_TypesAndValues all; import from LibMec_Templates all; + // LibMec/LocationAPI import from LocationAPI_TypesAndValues all; import from LocationAPI_Templates all; + // LibMec/UEidentityAPI import from UEidentityAPI_TypesAndValues all; import from UEidentityAPI_Templates all; + // LibMec/RnisAPI import from RnisAPI_TypesAndValues all; import from RnisAPI_Templates all; + // LibMec/TrafficManagementAPI import from TrafficManagementAPI_TypesAndValues all; import from TrafficManagementAPI_Templates all; - // LibMec/AppEnablementAPI - import from AppEnablementAPI_TypesAndValues all; - import from AppEnablementAPI_Templates all; - // LibMec/Ams - import from Ams_TypesAndValues all; - import from Ams_Templates all; - //LibMec/Grant - import from Grant_TypesAndValues all; - import from Grant_Templates all; - //LibMec/MeoPkg - import from MeoPkgm_TypesAndValues all; - import from MeoPkgm_Templates all; - //LibMec/MepmPkg - import from MepmPkgm_TypesAndValues all; - import from MepmPkgm_Templates all; - - import from AppLCM_TypesAndValues all; - import from AppLCM_Templates all; + + // LibMec/EdgePlatformApplicationEnablementAPI + import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; + import from EdgePlatformApplicationEnablementAPI_Templates all; + + // LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI + import from ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues all; + import from ApplicationPackageLifecycleAndOperationGrantingAPI_Templates all; // LibMec/UEAppInterfaceAPI import from UEAppInterfaceAPI_TypesAndValues all; @@ -75,164 +69,135 @@ module LibItsHttp_JsonTemplates { raw := p_raw } // End of template mw_json_body_raw - -group grant_api{ - - template (value) JsonBody m_body_json_grant_request( - in template (value) GrantRequest p_grant_request - ) := { - grantRequest := p_grant_request - } - - template (present) JsonBody mw_body_json_grant_response ( - in template (value) Grant p_grant_response + template (present) JsonBody mw_body_json_problem_details( + template (present) LibMec_TypesAndValues.ProblemDetails p_problemDetails := ? ) := { - grantResponse := p_grant_response - } - + problemDetails := p_problemDetails + } // End of template mw_body_json_problem_details + + group granting_api { + + template (value) JsonBody m_body_json_grant_request( + in template (value) GrantRequest p_grant_request + ) := { + grantRequest := p_grant_request + } // End of template m_body_json_grant_request - template (value) JsonBody m_body_json_grant_request_with_error ( - in template (value) GrantRequestWithError p_grant_request + template (present) JsonBody mw_body_json_grant_response( + template (present) Grant p_grant_response := ? ) := { - grantRequestWithError := p_grant_request - } + grantResponse := p_grant_response + } // End of template m_wbody_json_grant_request -} + } // End of group granting_api -group meo_pkg_mgmt_api { - template (value) JsonBody m_body_json_package_management( - in template (value) MeoPkgm_TypesAndValues.AppPkg p_app_package_management - ) := { - appPackageManagement := p_app_package_management - } - - template (value) JsonBody m_body_json_package_management_with_error( - in template (value) MeoPkgm_TypesAndValues.AppPkgWithError p_app_package_management_with_error - ) := { - appPackageManagementWithError := p_app_package_management_with_error - } - - template (present) JsonBody mw_body_json_pkg_mgmt_response( - in template (present) MeoPkgm_TypesAndValues.OnboardedAppPkgInfoList p_onboarded_app_pkg_mgmt_list - ) := { - appOnboardPackageInfoList := p_onboarded_app_pkg_mgmt_list - } + group meo_pkg_mgmt_api { + + template (value) JsonBody m_body_json_create_package_management( + in template (value) CreateAppPkg p_create_pkg + ) := { + createAppPkg := p_create_pkg + } // End of template m_body_json_create_package_management + + template (present) JsonBody mw_body_json_create_package_management( + template (present) CreateAppPkg p_create_pkg := ? + ) := { + createAppPkg := p_create_pkg + } // End of template mw_body_json_create_package_management + + template (present) JsonBody mw_body_json_app_pkg_info( + in template (present) AppPkgInfo p_app_pkg_info := ? + ) := { + appPkgInfo := p_app_pkg_info + } // End of template mw_body_json_app_pkg_info - template (value) JsonBody m_body_json_pkgm_subscription( - in template (value) MeoPkgm_TypesAndValues.AppPkgSubscription p_app_pkg_subscription - ) := { - appPkgSubscription := p_app_pkg_subscription - } + template (present) JsonBody mw_body_json_app_pkg_info_list( + in template (present) AppPkgInfoList p_app_pkg_info_list := ? + ) := { + appPkgInfoList := p_app_pkg_info_list + } // End of template mw_body_json_app_pkg_info_list - template (present) JsonBody mw_body_json_pkgm_subscription_info ( - in template (present) MeoPkgm_TypesAndValues.AppPkgSubscriptionInfo p_app_pkg_subscription_info - ) := { - appPkgSubscriptionInfo := p_app_pkg_subscription_info - } + template (value) JsonBody m_body_json_app_pkg_info_modification( + in template (value) AppPkgInfoModifications p_app_pkg_info_modification + ) := { + appPkgInfoModifications := p_app_pkg_info_modification + } // End of template m_body_json_app_pkg_info_modification + + template (present) JsonBody mw_body_json_app_pkg_info_modification( + template (present) AppPkgInfoModifications p_app_pkg_info_modification := ? + ) := { + appPkgInfoModifications := p_app_pkg_info_modification + } // End of template mw_body_json_app_pkg_info_modification + + template (value) JsonBody m_body_json_pkgm_subscription( + in template (value) AppPkgSubscription p_app_pkg_subscription + ) := { + appPkgSubscription := p_app_pkg_subscription + } // End of template m_body_json_pkgm_subscription - template (value) JsonBody m_body_json_pkgm_subscription_with_error( - in template (value) MeoPkgm_TypesAndValues.AppPkgSubscriptionWithError p_app_pkg_subscription_with_error - ) := { - appPkgSubscriptionWithError := p_app_pkg_subscription_with_error - } - - template (present) JsonBody mw_body_json_pkgm_subscription_info_list ( - in template (present) MeoPkgm_TypesAndValues.AppPkgSubscriptionInfoList p_app_pkg_subscription_info_list - ) := { - appPkgSubscriptionInfoList := p_app_pkg_subscription_info_list - } - - - template (present) JsonBody mw_body_json_app_package_notification ( - in template (present) MeoPkgm_TypesAndValues.AppPkgNotification p_app_pkg_notification - ) := { - appPkgNotification := p_app_pkg_notification - } - -} + template (present) JsonBody mw_body_json_pkgm_subscription_info( + template (present) AppPkgSubscriptionInfo p_app_pkg_subscription_info := ? + ) := { + appPkgSubscriptionInfo := p_app_pkg_subscription_info + } // End of template mw_body_json_pkgm_subscription_info -group mepm_pkg_mgmt_api { - template (value) JsonBody m_body_json_mepm_package_management( - in template (value) MepmPkgm_TypesAndValues.AppPkg p_app_package_management - ) := { - appMepmPackageManagement := p_app_package_management - } - - template (value) JsonBody m_body_json_mepm_package_management_with_error( - in template (value) MepmPkgm_TypesAndValues.AppPkgWithError p_app_mepm_package_management_with_error - ) := { - appMepmPackageManagementWithError := p_app_mepm_package_management_with_error - } + template (present) JsonBody mw_body_json_pkgm_subscription_link_list( + template (present) AppPkgSubscriptionLinkList p_app_pkg_subscription_link_list := ? + ) := { + appPkgSubscriptionLinkList := p_app_pkg_subscription_link_list + } // End of template mw_body_json_pkgm_subscription_link_list - template (present) JsonBody mw_body_json_mepm_pkg_mgmt_response_list( - in template (present) MepmPkgm_TypesAndValues.OnboardedAppPkgInfoList p_onboarded_app_mepm_pkg_mgmt_list - ) := { - appOnboardMepmPackageInfoList := p_onboarded_app_mepm_pkg_mgmt_list - } - - template (present) JsonBody mw_body_json_mepm_pkg_mgmt_response( - in template (present) MepmPkgm_TypesAndValues.OnboardedAppPkgInfo p_onboarded_app_mepm_pkg_mgmt - ) := { - appOnboardMepmPackageInfo := p_onboarded_app_mepm_pkg_mgmt - } - - - template (value) JsonBody m_body_json_mepm_pkgm_subscription( - in template (value) MepmPkgm_TypesAndValues.AppPkgSubscription p_app_mepm_pkg_subscription - ) := { - appMepmPkgSubscription := p_app_mepm_pkg_subscription - } - - template (present) JsonBody mw_body_json_mepm_pkgm_subscription_info ( - in template (present) MepmPkgm_TypesAndValues.AppPkgSubscriptionInfo p_app_mepm_pkg_subscription_info - ) := { - appMepmPkgSubscriptionInfo := p_app_mepm_pkg_subscription_info - } + template (present) JsonBody mw_body_json_app_package_notification ( + template (present) AppPkgNotification p_app_pkg_notification := ? + ) := { + appPkgNotification := p_app_pkg_notification + } // End of template mw_body_json_app_package_notification + + } // End of group meo_pkg_mgmt_api - template (value) JsonBody m_body_json_mepm_pkgm_subscription_with_error( - in template (value) MepmPkgm_TypesAndValues.AppPkgSubscriptionWithError p_app_mepm_pkg_subscription_with_error - ) := { - appMepmPkgSubscriptionWithError := p_app_mepm_pkg_subscription_with_error - } + group mepm_lifcyclemgt { - template (present) JsonBody mw_body_json_mepm_pkgm_subscription_info_list ( - in template (present) MepmPkgm_TypesAndValues.AppPkgSubscriptionInfoList p_app_mepm_pkg_subscription_info_list - ) := { - appMepmPkgSubscriptionInfoList := p_app_mepm_pkg_subscription_info_list - } - - - template (present) JsonBody mw_body_json_mepm_app_package_notification ( - in template (present) MepmPkgm_TypesAndValues.AppPkgNotification p_app_mepm_pkg_notification - ) := { - appMepmPkgNotification := p_app_mepm_pkg_notification - } + template (value) JsonBody m_body_json_config_platform_for_app_request( + in template (value) ConfigPlatformForAppRequest p_config_platform_for_app_request + ) := { + configPlatformForAppRequest := p_config_platform_for_app_request + } // End of template m_body_json_config_platform_for_app_request -} + template (present) JsonBody mw_body_json_config_platform_for_app_request( + template (present) ConfigPlatformForAppRequest p_config_platform_for_app_request := ? + ) := { + configPlatformForAppRequest := p_config_platform_for_app_request + } // End of template mw_body_json_config_platform_for_app_request -group lcm_api { + } // End of mepm_lifcyclemgt + group mex_lifcyclemgt { - template (present) JsonBody m_body_json_lifecycle_management ( - in template (present) CreateAppInstanceRequest p_create_app_instance_request - ) := { - createAppInstanceRequest := p_create_app_instance_request - } - - template (present) JsonBody m_body_json_lifecycle_management_with_error ( - in template (present) CreateAppInstanceRequestWithError p_create_app_instance_request_with_error - ) := { - createAppInstanceRequestWithError := p_create_app_instance_request_with_error - } - - - template (present) JsonBody mw_body_json_mex_lcm_instance_info ( - in template (present) AppInstanceInfo p_app_instance_info - ) := { - appInstanceInfo := p_app_instance_info - } - - template (present) JsonBody mw_body_json_mex_lcm_instance_info_list ( + template (value) JsonBody m_body_json_create_app_instance_request ( + in template (value) CreateAppInstanceRequest p_create_app_instance_request + ) := { + createAppInstanceRequest := p_create_app_instance_request + } // End of template m_body_json_create_app_instance_request + + template (value) JsonBody m_body_json_app_instance_info ( + in template (value) AppInstanceInfo p_app_instance_info + ) := { + appInstanceInfo := p_app_instance_info + } // End of template m_body_json_app_instance_info + + template (present) JsonBody mw_body_json_app_instance_info ( + template (present) AppInstanceInfo p_app_instance_info := ? + ) := { + appInstanceInfo := p_app_instance_info + } // End of template mw_body_json_app_instance_info + + template (present) JsonBody mw_body_json_app_instance_info_list ( + template (present) AppInstanceInfoList p_app_instance_info_list := ? + ) := { + appInstanceInfoList := p_app_instance_info_list + } // End of template mw_body_json_app_instance_info_list + + /*template (present) JsonBody mw_body_json_mex_lcm_instance_info_list ( in template (present) AppInstanceInfoList p_app_instance_info_list ) := { appInstanceInfoList := p_app_instance_info_list @@ -323,11 +288,11 @@ group lcm_api { ) := { lcmNotification := p_lcm_notification } - -} + */ + } // End of group mex_lifcyclemgt group ams_api { - + /* template (value) JsonBody m_body_json_app_mobility_service_info( in template (value) AppMobilityServiceInfo p_app_mobility_service_info ) := { @@ -347,11 +312,6 @@ group ams_api { problemDetails := p_problemDetails } // End of template m_body_json_problem_details - template (present) JsonBody mw_body_json_problem_details( - template (present) LibMec_TypesAndValues.ProblemDetails p_problemDetails := ? - ) := { - problemDetails := p_problemDetails - } // End of template mw_body_json_problem_details template (present) JsonBody mw_body_json_ams_registration_request( @@ -403,7 +363,7 @@ group ams_api { ) := { expireNotification_ams := p_expire_notification } // End of template mw_body_json_mobility_procedure_notification - + */ } // end of group ams api group location_api { @@ -433,13 +393,13 @@ group ams_api { } // End of template mw_body_json_user_list template (value) JsonBody m_body_json_zone_info( - in template (value) ZoneInfo p_zone_info + in template (value) LocationAPI_TypesAndValues.ZoneInfo p_zone_info ) := { zoneInfo := p_zone_info } // End of template m_body_json_zone_info template (present) JsonBody mw_body_json_zone_info( - template (present) ZoneInfo p_zone_info := ? + template (present) LocationAPI_TypesAndValues.ZoneInfo p_zone_info := ? ) := { zoneInfo := p_zone_info } // End of template mw_body_json_zone_info @@ -596,17 +556,17 @@ group ams_api { rabInfo := p_rabInfo } // End of template mw_body_json_rab_info - template (value) JsonBody m_body_json_plmn_info( - in template (value) PlmnInfo p_plmnInfo - ) := { - plmnInfo := p_plmnInfo - } // End of template m_body_json_plmn_info + template (value) JsonBody m_body_json_plmn_infos( + in template (value) PlmnInfos p_plmnInfos + ) := { + plmnInfos := p_plmnInfos + } // End of template m_body_json_plmn_infos - template (present) JsonBody mw_body_json_plmn_info( - template (present) PlmnInfo p_plmnInfo := ? - ) := { - plmnInfo := p_plmnInfo - } // End of template mw_body_json_plmn_info + template (present) JsonBody mw_body_json_plmn_infos( + template (present) PlmnInfos p_plmnInfos := ? + ) := { + plmnInfos := p_plmnInfos + } // End of template mw_body_json_plmn_infos template (value) JsonBody m_body_json_s1_bearer_info( in template (value) S1BearerInfo p_s1BearerInfo @@ -705,14 +665,14 @@ group ams_api { } // End of template mw_body_json_s1_bearer_subscription template (value) JsonBody m_body_json_l2_meas_subscription( - in template (value) L2Meas p_l2Meas - ) := { + in template (value) L2Meas p_l2Meas + ) := { l2Meas := p_l2Meas } // End of template m_body_json_l2_meas_subscription template (present) JsonBody mw_body_json_l2_meas_subscription( - template (present) L2Meas p_l2Meas := ? - ) := { + template (present) L2Meas p_l2Meas := ? + ) := { l2Meas := p_l2Meas } // End of template mw_body_json_l2_meas_subscription @@ -813,13 +773,13 @@ group ams_api { } // End of template mw_body_json_service_info template (value) JsonBody m_body_json_subscription_link_list( - in template (value) AppEnablementAPI_TypesAndValues.SubscriptionLinkList p_subscription_link_list + in template (value) EdgePlatformApplicationEnablementAPI_TypesAndValues.SubscriptionLinkList p_subscription_link_list ) := { subscriptionLinkList_app_ens := p_subscription_link_list } // End of template m_body_json_subscription_link_list template (present) JsonBody mw_body_json_subscription_link_list( - template (present) AppEnablementAPI_TypesAndValues.SubscriptionLinkList p_subscription_link_list := ? + template (present) EdgePlatformApplicationEnablementAPI_TypesAndValues.SubscriptionLinkList p_subscription_link_list := ? ) := { subscriptionLinkList_app_ens := p_subscription_link_list } // End of template mw_body_json_subscription_link_list @@ -836,6 +796,42 @@ group ams_api { appTerminationNotificationSubscription := p_appTerminationNotificationSubscription } // End of template mw_body_json_app_termination_notif_subscription + template (value) JsonBody m_body_json_app_termination_confirmation( + in template (value) AppTerminationConfirmation p_appTerminationConfirmation + ) := { + appTerminationConfirmation := p_appTerminationConfirmation + } // End of template m_body_json_app_termination_confirmation + + template (present) JsonBody mw_body_json_app_termination_confirmation( + template (present) AppTerminationConfirmation p_appTerminationConfirmation := ? + ) := { + appTerminationConfirmation := p_appTerminationConfirmation + } // End of template mw_body_json_app_termination_confirmation + + template (value) JsonBody m_body_json_app_ready_confirmation( + in template (value) AppReadyConfirmation p_appReadyConfirmation + ) := { + appReadyConfirmation := p_appReadyConfirmation + } // End of template m_body_json_app_ready_confirmation + + template (present) JsonBody mw_body_json_app_ready_confirmation( + template (present) AppReadyConfirmation p_appReadyConfirmation := ? + ) := { + appReadyConfirmation := p_appReadyConfirmation + } // End of template mw_body_json_app_ready_confirmation + + template (value) JsonBody m_body_json_srv_liveness_info( + in template (value) ServiceLivenessInfo p_serviceLivenessInfo + ) := { + serviceLivenessInfo := p_serviceLivenessInfo + } // End of template m_body_json_srv_liveness_info + + template (present) JsonBody mw_body_json_srv_liveness_info( + template (present) ServiceLivenessInfo p_serviceLivenessInfo := ? + ) := { + serviceLivenessInfo := p_serviceLivenessInfo + } // End of template mw_body_json_srv_liveness_info + template (value) JsonBody m_body_json_transport_info_list( in template (value) TransportInfoList p_transportInfoList ) := { @@ -1064,6 +1060,30 @@ group ams_api { subscriptionLinkList_wlan := p_subscription_link_list } // End of template mw_body_json_wlan_subscription_link_list + template (value) JsonBody m_body_json_wlan_measurement_config_link_list( + in template (value) MeasurementConfigLinkList p_measurement_config_link_list + ) := { + measurementConfigLinkList := p_measurement_config_link_list + } // End of template m_body_json_wlan_measurement_config_link_list + + template (present) JsonBody mw_body_json_wlan_measurement_config_link_list( + template (present) MeasurementConfigLinkList p_measurement_config_link_list := ? + ) := { + measurementConfigLinkList := p_measurement_config_link_list + } // End of template mw_body_json_wlan_measurement_config_link_list + + template (value) JsonBody m_body_json_wlan_measurement_config( + in template (value) MeasurementConfig p_measurement_config + ) := { + measurementConfig := p_measurement_config + } // End of template m_body_json_wlan_measurement_config + + template (present) JsonBody mw_body_json_wlan_measurement_config( + template (present) MeasurementConfig p_measurement_config := ? + ) := { + measurementConfig := p_measurement_config + } // End of template mw_body_json_wlan_measurement_config + } // End of group wlan_information group v2x_information_service { diff --git a/vagrant/provisioner.bash b/vagrant/provisioner.bash deleted file mode 100755 index ac155d8347859eda50cd350cd1b768f5f09bd18c..0000000000000000000000000000000000000000 --- a/vagrant/provisioner.bash +++ /dev/null @@ -1,154 +0,0 @@ -#!/bin/bash -# Prepare environment for the build -#set -e # Exit with non 0 if any command fails -#set -vx - -# Update system -sudo DEBIAN_FRONTEND=noninteractive apt-get update -sudo DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y -sudo DEBIAN_FRONTEND=noninteractive apt-get install software-properties-common -y -sudo DEBIAN_FRONTEND=noninteractive add-apt-repository ppa:linuxuprising/java -y -sudo DEBIAN_FRONTEND=noninteractive apt-get update -sudo DEBIAN_FRONTEND=noninteractive apt-get --allow-unauthenticated install emacs openjdk-11-jre gcc-8 g++-8 git subversion lsof ntp gdb make cmake flex bison autoconf doxygen graphviz libtool libncurses5-dev expect libssl-dev libgcrypt-dev libxml2-dev xutils-dev tcpdump libpcap-dev libwireshark-dev wget tree unzip sshpass kubuntu-desktop valgrind qt5-default qttools5-dev qtmultimedia5-dev libqt5svg5-dev vim tzdata dos2unix xsltproc -y -# Install java -#sudo DEBIAN_FRONTEND=noninteractive apt-get install oracle-java9-installer oracle-java9-set-default -y -#sudo DEBIAN_FRONTEND=noninteractive apt-get --allow-unauthenticated install oracle-java10-installer oracle-java10-set-default -y -#sudo DEBIAN_FRONTEND=noninteractive apt --fix-broken install -y -sudo DEBIAN_FRONTEND=noninteractive apt-get autoremove --purge -y -sudo DEBIAN_FRONTEND=noninteractive apt-get clean - -gcc --version -g++ --version -valgrind --version -java -version - -export HOME=/home/vagrant - -export PATH_DEV=${HOME}/dev -export HOME_FRAMEWORKS=${HOME}/frameworks -export HOME_LIB=${HOME}/lib -export HOME_BIN=${HOME}/bin -export HOME_ETC=${HOME}/etc -export HOME_INC=${HOME}/include -export HOME_TMP=${HOME}/tmp -export HOME_DOCS=${HOME}/docs -export PATH=${HOME_BIN}:${PATH} -export LD_LIBRARY_PATH=${HOME_LIB}:/usr/local/lib:${LD_LIBRARY_PATH} - -OLD_PWD=`pwd` -# Create directories -mkdir -p ${HOME_LIB} -if [ ! -d ${HOME_LIB} ] -then - exit -1 -fi -mkdir -p ${HOME_INC} -if [ ! -d ${HOME_INC} ] -then - exit -1 -fi -mkdir -p ${HOME_BIN} -if [ ! -d ${HOME_BIN} ] -then - exit -1 -fi -mkdir -p ${HOME_TMP} -if [ ! -d ${HOME_TMP} ] -then - exit -1 -fi -mkdir -p ${HOME_DOCS} -if [ ! -d ${HOME_DOCS} ] -then - exit -1 -fi -mkdir -p ${HOME_FRAMEWORKS} -if [ ! -d ${HOME_FRAMEWORKS} ] -then - exit -1 -fi -mkdir -p ${PATH_DEV} -if [ ! -d ${PATH_DEV} ] -then - exit -1 -fi - -cd /home/vagrant/dev -git clone https://forge.etsi.org/gitlab/mec/gs032p3-ttcn-test-suite.git ./STF569_Mec -cd /home/vagrant/dev/STF569_Mec -cd /home/vagrant/dev/STF569_Mec/ttcn -git clone https://forge.etsi.org/gitlab/LIBS/LibSip.git ./LibSip -git clone https://forge.etsi.org/gitlab/LIBS/LibIms.git ./LibIms -git clone https://forge.etsi.org/gitlab/LIBS/LibCommon.git ./LibCommon -git clone -bSTF525 https://forge.etsi.org/gitlab/LIBS/LibIts ./LibIt -cd /home/etsi/dev/STF569_Mec/ttcn/LibIts -rm -fr asn1 t3q xsd -cd ttcn && rm -fr BTP CALM CAM Common DCC DENM GeoNetworking Ipv6OverGeoNetworking IVIM MapemSpatem Pki Security SremSsem V2G -cd /home/vagrant/dev/STF569_Mec/scripts -chmod 775 *.bash devenv.bash.* -cd /home/vagrant/dev/STF569_Mec/docker -chmod 775 *.sh -cd /home/vagrant/dev/STF569_Mec -chmod 775 ./.jenkins.sh -cd /home/vagrant -ln -sf /home/vagrant/dev/STF569_Mec/scripts/devenv.bash.ubuntu /home/vagrant/devenv.bash -. /home/vagrant/devenv.bash - -# Install all frameworks - -# Install osip -cd ${HOME_FRAMEWORKS} -git clone git://git.savannah.gnu.org/osip.git ./osip -cd ./osip -./autogen.sh -./configure --prefix=/home/vagrant -make && make install - -# Install GoogleTest -cd ${HOME_FRAMEWORKS} -git clone https://github.com/google/googletest.git googletest -cd ${HOME_FRAMEWORKS}/googletest/ -cmake . -make CXX=g++ -sudo make install - -# Install latest LCOV -cd ${HOME_FRAMEWORKS} -mkdir -p ${HOME_FRAMEWORKS}/lcov -cd ${HOME_FRAMEWORKS}/lcov -wget http://ftp.de.debian.org/debian/pool/main/l/lcov/lcov_1.13.orig.tar.gz -tar xf lcov_1.13.orig.tar.gz -sudo make -C lcov-1.13/ install - -# Install lcov to coveralls conversion -sudo gem install coveralls-lcov - -lcov --version -coveralls-lcov -h - -# Install eclipse -cd ${HOME_FRAMEWORKS} -wget 'http://ftp.halifax.rwth-aachen.de/eclipse/technology/epp/downloads/release/oxygen/2/eclipse-cpp-oxygen-2-linux-gtk-x86_64.tar.gz' -Oeclipse-cpp-oxygen-2-linux-gtk-x86_64.tar.gz -tar -zxvf ./eclipse-cpp-oxygen-2-linux-gtk-x86_64.tar.gz -rm -f ./eclipse-cpp-oxygen-2-linux-gtk-x86_64.tar.gz - -cd /home/vagrant -echo "" >> /home/vagrant/.bashrc -echo "export LD_LIBRARY_PATH=/home/vagrant/dev/etsi_mec/lib:$LD_LIBRARY_PATH" >> /home/vagrant/.bashrc -echo "export PATH=/home/vagrant/bin:$PATH" >> /home/vagrant/.bashrc -echo ". ~/devenv.bash" >> /home/vagrant/.bashrc - -. /home/vagrant/.bashrc -cd /home/vagrant/dev/STF569_Mec/scripts -./build_titan.bash -. /home/vagrant/devenv.bash -./update_its_project.bash -cd /home/vagrant/dev/etsi_emco/src/TestCodec/objs -../bin/testcodec_generate_makefile.bash -../bin/run_all.bash - -cd ${OLD_PWD} - -sudo init 6 - -exit 0 diff --git a/docker/Dockerfile b/virtualization/docker/Dockerfile similarity index 100% rename from docker/Dockerfile rename to virtualization/docker/Dockerfile diff --git a/docker/Dockerfile.stfubuntu b/virtualization/docker/Dockerfile.stfubuntu similarity index 91% rename from docker/Dockerfile.stfubuntu rename to virtualization/docker/Dockerfile.stfubuntu index 991110f6ffdf5910899493d7df5517df1902bbb4..094b5c22dd64f7b5f029b61bcfbedb6339fc9593 100644 --- a/docker/Dockerfile.stfubuntu +++ b/virtualization/docker/Dockerfile.stfubuntu @@ -13,7 +13,7 @@ RUN echo "docker-STF-dev" > /etc/hostname \ && DEBIAN_FRONTEND=noninteractive apt-get install software-properties-common -y \ && DEBIAN_FRONTEND=noninteractive add-apt-repository ppa:linuxuprising/java -y \ && DEBIAN_FRONTEND=noninteractive apt-get update \ - && ( echo "oracle-java15-installer shared/accepted-oracle-license-v1-2 boolean true" | debconf-set-selections -v ) \ + && ( echo "oracle-java17-installer shared/accepted-oracle-license-v1-3 boolean true" | debconf-set-selections -v ) \ && DEBIAN_FRONTEND=noninteractive apt-get --allow-unauthenticated install -y \ autoconf \ bison \ @@ -51,8 +51,8 @@ RUN echo "docker-STF-dev" > /etc/hostname \ lsof \ net-tools \ ntp \ - oracle-java15-installer \ - oracle-java15-set-default \ + oracle-java17-installer \ + oracle-java17-set-default \ openssh-server \ pkg-config \ python3-dev \ @@ -65,6 +65,8 @@ RUN echo "docker-STF-dev" > /etc/hostname \ sshpass \ tcpdump \ texlive-font-utils \ + texlive-latex-base \ + texlive-latex-extra \ tshark \ tzdata \ valgrind \ diff --git a/docker/README.md b/virtualization/docker/README.md similarity index 100% rename from docker/README.md rename to virtualization/docker/README.md diff --git a/docker/build.sh b/virtualization/docker/build.sh similarity index 50% rename from docker/build.sh rename to virtualization/docker/build.sh index 84135a0190f86366e84bb76706ef697b6f6bab81..be9f6abadae4639f16c3dc2066a5435be0aa2b8f 100755 --- a/docker/build.sh +++ b/virtualization/docker/build.sh @@ -1,13 +1,19 @@ #!/bin/bash -# Copyright ETSI 2018-2020 +# Copyright ETSI 2018-2021 # See: https://forge.etsi.org/etsi-forge-copyright-statement.txt set -e set -vx -#check and build stfubuntu image +# Force removing stfubuntu docker image +if [ "$1" == "--force-stfubuntu" ]; then + if [ -n `docker images -q stfubuntu` ]; then + docker rmi --force `docker images -q stfubuntu` || exit 1 + fi +fi +# Check and build stfubuntu image if [ -z `docker images -q stfubuntu` ]; then - docker build --no-cache --tag stfubuntu:18.04 -f Dockerfile.stfubuntu --force-rm . || exit 1 + docker build --no-cache --tag stfubuntu:18.04 -f Dockerfile.stfubuntu --force-rm . || exit 1 fi docker build --no-cache --tag ttf_t012_mec --force-rm . || ( echo "Docker build failed: $?"; exit 1 ) diff --git a/docker/home/etc/init.d/10-titan.sh b/virtualization/docker/home/etc/init.d/10-titan.sh similarity index 98% rename from docker/home/etc/init.d/10-titan.sh rename to virtualization/docker/home/etc/init.d/10-titan.sh index 75625d2bdbfc4965c792a40189bd64421c0dbbf9..840bf28c32e8bfb6e741c223399f6584912b822c 100755 --- a/docker/home/etc/init.d/10-titan.sh +++ b/virtualization/docker/home/etc/init.d/10-titan.sh @@ -20,8 +20,8 @@ git clone --progress "$TITAN_REPO" || exit 1 cd titan.core || exit 1 cat >Makefile.personal <> /home/vagrant/.bashrc +echo "export LD_LIBRARY_PATH=/home/vagrant/lib:$LD_LIBRARY_PATH" >> /home/vagrant/.bashrc +echo "export PATH=/home/vagrant/bin:$PATH" >> /home/vagrant/.bashrc +echo ". ~/devenv.bash" >> /home/vagrant/.bashrc + +# Clone project +cd /home/vagrant/dev +git clone --recurse-submodules -b v2.2.1-dev --single-branch https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git ./TTF_T012_Mec +cd /home/vagrant/dev/TTF_T012_Mec/ttcn +git clone https://forge.etsi.org/gitlab/LIBS/LibCommon.git ./LibCommon +git clone -bTTF011 https://forge.etsi.org/gitlab/LIBS/LibIts ./LibIts +cd /home/vagrant/dev/TTF_T012_Mec/ttcn/LibIts +rm -fr t3q +cd ttcn && rm -fr Common +cd /home/vagrant/dev/TTF_T012_Mec/scripts +chmod 775 *.bash devenv.bash.* +cd /home/vagrant/dev/TTF_T012_Mec/virtualization/docker +chmod 775 *.sh +cd /home/vagrant/dev/TTF_T012_Mec +chmod 775 ./.jenkins.sh +cd /home/vagrant +ln -sf /home/vagrant/dev/TTF_T012_Mec/scripts/devenv.bash.ubuntu /home/vagrant/devenv.bash +. /home/vagrant/devenv.bash + +# Apply patch +cd /home/vagrant/dev/TTF_T012_Mec +cp ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ +cp ./ttcn/patch_lib_common_titan/*.ttcn ./ttcn/LibCommon/ttcn +cp ./ttcn/patch_lib_http/*.ttcn ./ttcn/LibIts/ttcn/Http/ +cp ./ttcn/patch_lib_its/module.mk ./ttcn/LibIts/ + +# Change user in cfg files +cd ${HOME}/dev/TTF_T012_Mec/scripts || exit 1 +./update_user_name.sh || exit 1 + +# Install all frameworks + +# Install osip +cd ${HOME_FRAMEWORKS} +git clone git://git.savannah.gnu.org/osip.git ./osip +cd ./osip +./autogen.sh +./configure --prefix=/home/vagrant +make && make install + +# Install GoogleTest +cd ${HOME_FRAMEWORKS} +git clone https://github.com/google/googletest.git googletest +cd ${HOME_FRAMEWORKS}/googletest/ +cmake . +make CXX=g++ +sudo make install + +# Install latest LCOV +cd ${HOME_FRAMEWORKS} +mkdir -p ${HOME_FRAMEWORKS}/lcov +cd ${HOME_FRAMEWORKS}/lcov +wget http://ftp.de.debian.org/debian/pool/main/l/lcov/lcov_1.13.orig.tar.gz +tar xf lcov_1.13.orig.tar.gz +sudo make -C lcov-1.13/ install + +# Install lcov to coveralls conversion +sudo gem install coveralls-lcov + +lcov --version +#coveralls-lcov -h + +# Install eclipse +cd ${HOME}/frameworks +ECLIPSE_URL='http://www.mirrorservice.org/sites/download.eclipse.org/eclipseMirror/technology/epp/downloads/release/2021-12/R/eclipse-cpp-2021-12-R-linux-gtk-x86_64.tar.gz' +TITAN_URL='https://www.eclipse.org/downloads/download.php?file=/titan/TITAN_Designer_and_Executor_plugin-8.1.0.zip' +wget --progress=dot:mega $ECLIPSE_URL -Oeclipse-cpp-2021-12-R-linux-gtk-x86_64.tar.gz || exit 1 +tar -zxvf ./eclipse-cpp-2021-12-R-linux-gtk-x86_64.tar.gz || exit 1 +ln -sf ${HOME}/frameworks/eclipse/eclipse ${HOME}/bin/eclipse +rm -f ./eclipse-cpp-2021-12-R-linux-gtk-x86_64.tar.gz + +#if wget --progress=dot:mega $TITAN_URL -OTITAN_Designer_and_Executor_plugin.zip; then +# eclipse/eclipse -noSplash -application org.eclipse.equinox.p2.director \ +# -destination /home/vagrant/frameworks/eclipse \ +# -repository 'jar:file:///home/vagrant/frameworks/TITAN_Designer_and_Executor_plugin.zip' \ +# -installIU TITAN_Designer.feature.group,TITAN_Executor.feature.group,TITAN_Log_Viewer.feature.group,Titan_external_dependencies.feature.group,Titanium.feature.group,Titanium_external_dependencies.feature.group +# rm -f TITAN_Designer_and_Executor_plugin.zip +#fi + +# Build Titan +cd /home/vagrant/dev/TTF_T012_Mec/scripts +./build_titan.bash +. /home/vagrant/devenv.bash + +# Build ATSs +cd /home/vagrant/dev/TTF_T012_Mec +export ATS=AtsMec +make + +# Change user in cfg files +cd /home/vagrant/dev/TTF_T012_Mec/scripts +./update_user_name.sh TTF_T012_Mec + +# Update configuration file +cd /home/vagrant/dev/TTF_T012_Mec/etc/AtsMec +ln -sf AtsMec_Sandbox.cf_ AtsMec.cfg +cd - + +# Change sudo in command line +cd /home/vagrant/dev/TTF_T012_Mec/scripts +#sed --in-place 's/sudo/echo "etsi" \| sudo -S/' ./run_mtc.bash +#sed --in-place 's/sudo/echo "etsi" \| sudo -S/' ./run_ptcs.bash + +cd ${OLD_PWD} + +sudo init 6 + +exit 0